From 00e77d19e2dafcb009e25316c667f63a7727ba89 Mon Sep 17 00:00:00 2001 From: Unique Divine Date: Mon, 14 Apr 2025 10:45:15 -0500 Subject: [PATCH 01/11] feat(evm)!: squashed commit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit aaf6431f16d379ad69bb2bc5c88fb668cf70b9c2 Author: Unique-Divine Date: Mon Apr 14 10:25:36 2025 -0500 refactor: linter and formatter commit f36399cb5e46fbbe3b5757d05226383dea343e5b Author: Unique-Divine Date: Mon Apr 14 10:07:42 2025 -0500 chore: changelog commit f6bb649c21b2e55e3c5f629f4dcff9e03a18fcfe Author: Unique-Divine Date: Mon Apr 14 10:07:42 2025 -0500 chore: changelog commit a6877eeda5746c122651cba866d810666847b8f1 Author: Unique-Divine Date: Mon Apr 14 10:06:45 2025 -0500 chore: move Go to v1.22 because it's required for geth commit a1e74e9d3db9102d6b2dc680505457cf8bd843f1 Author: Unique-Divine Date: Mon Apr 14 10:06:45 2025 -0500 chore: move Go to v1.22 because it's required for geth commit b546151d13944bd0dfd3701e84a63da2423051b5 Author: Unique-Divine Date: Mon Apr 14 10:04:56 2025 -0500 feat(evm)!: update to geth v1.13 with EIP-1153, PRECOMPILE_ADDRS, and transient storage support This commit upgrades the Nibiru EVM module for compatibility with go-ethereum v1.13.14, introducing the following changes: - Updated all references from deprecated types in `rpc` to their new equivalents under `common/math`, such as replacing `rpc.DecimalOrHex` with `math.HexOrDecimal64`. - Removed deprecated EIP-155 seed hash API (`debug_seedHash`) and associated `ethash` import. - Aligned `vm.Config` and fee calculation logic with new EIP-based gas cost parameters (`isShanghai`, `isEIP3860`). - Introduced explicit `PRECOMPILE_ADDRS` constant to aggregate EVM precompiles with NibiruΓÇÖs extensions (FunToken, Wasm, Oracle). - Implemented support for **EIP-1153** (transient storage): - Added `transientStorage` map to `StateDB`, with getters/setters and journaling support. - Added `Prepare` method to reset access lists and transient storage for each tx. - Refactored `SelfDestruct` logic and exposed `HasSelfDestructed` (was `Suicide`) for better clarity and future EIP-6780 readiness. - Reworked balance mutation logic (`AddBalanceSigned`) to correctly handle signed values and prevent `uint256` overflow errors. - Minor typo corrections (e.g., "occured" ΓåÆ "occurred") in proto files and comments. This upgrade also adjusts `go.mod` to: - Replace `go-ethereum v1.10.x` with `v1.13.14` - Downgrade Go version to 1.21 for compatibility with `go-ethereum` and its Pebble dependency - Pin Pebble to a compatible commit required by geth's internal `ethdb` commit 803f9b4716b20b7d629b1d5fb393b9989fb411ea Author: Unique-Divine Date: Mon Apr 14 10:04:56 2025 -0500 feat(evm)!: update to geth v1.13 with EIP-1153, PRECOMPILE_ADDRS, and transient storage support This commit upgrades the Nibiru EVM module for compatibility with go-ethereum v1.13.14, introducing the following changes: - Updated all references from deprecated types in `rpc` to their new equivalents under `common/math`, such as replacing `rpc.DecimalOrHex` with `math.HexOrDecimal64`. - Removed deprecated EIP-155 seed hash API (`debug_seedHash`) and associated `ethash` import. - Aligned `vm.Config` and fee calculation logic with new EIP-based gas cost parameters (`isShanghai`, `isEIP3860`). - Introduced explicit `PRECOMPILE_ADDRS` constant to aggregate EVM precompiles with NibiruΓÇÖs extensions (FunToken, Wasm, Oracle). - Implemented support for **EIP-1153** (transient storage): - Added `transientStorage` map to `StateDB`, with getters/setters and journaling support. - Added `Prepare` method to reset access lists and transient storage for each tx. - Refactored `SelfDestruct` logic and exposed `HasSelfDestructed` (was `Suicide`) for better clarity and future EIP-6780 readiness. - Reworked balance mutation logic (`AddBalanceSigned`) to correctly handle signed values and prevent `uint256` overflow errors. - Minor typo corrections (e.g., "occured" ΓåÆ "occurred") in proto files and comments. This upgrade also adjusts `go.mod` to: - Replace `go-ethereum v1.10.x` with `v1.13.14` - Downgrade Go version to 1.21 for compatibility with `go-ethereum` and its Pebble dependency - Pin Pebble to a compatible commit required by geth's internal `ethdb` commit 1834a61454196f98d1541a13def90f0bcd873ae5 Author: Unique-Divine Date: Sat Apr 12 19:51:44 2025 -0500 feat(evm): Adapt module to Geth v1.13 core package changes This commit updates the Nibiru EVM module to align with significant breaking changes introduced in the upstream go-ethereum v1.13 `core/vm` and `core/types` packages. The goal is to leverage the updated Geth dependencies while ensuring compatibility with Nibiru's specific requirements, particularly its custom precompiles that interact with the Cosmos SDK. This addresses several LSP errors and runtime issues arising from removed or modified upstream functions and interfaces: 1. **Replace `core.NewMessage` Calls:** - The `core.NewMessage` factory function was removed upstream in favor of direct struct instantiation. - All instances have been replaced with `core.Message{...}` struct literals, correctly mapping arguments to fields like `From`, `To`, `Nonce`, `Value`, `GasLimit`, gas price fields (`GasPrice`, `GasFeeCap`, `GasTipCap`), `Data`, `AccessList`. - Monetary and gas values are initialized as `*big.Int` per the `core.Message` definition. - Newer fields relevant to Cancun/EIP-4844 (`BlobGasFeeCap`, `BlobHashes`) and Nibiru-specific fields (`SkipAccountChecks`) are now correctly initialized. 2. **Revert `vm.PrecompiledContract` Interface for Nibiru Precompiles:** - Geth v1.13 simplified the `PrecompiledContract.Run` signature to `Run(input []byte)`. - This change breaks Nibiru's custom precompiles (e.g., Wasm) which require the `*vm.EVM` pointer to access `StateDB` and derive the `sdk.Context` needed for Cosmos SDK keeper interactions. - This commit *reverts* the interface definition within Nibiru's fork back to `Run(evm *vm.EVM, contract *vm.Contract, readonly bool)`. - The `Address() common.Address` method is also restored to the interface and implementations for use by the execution logic. - Standard precompile implementations included in this module have been adapted to match this reverted interface signature. - The `vm.RunPrecompiledContract` helper function is updated to pass the necessary `*vm.EVM`, `*vm.Contract`, and `readonly` context. 3. **Adopt `uint256` for VM Value/Balance Interactions:** - While `core.Message` retains `*big.Int`, the internal VM logic and `StateDB` methods (e.g., `vm.Call`, `vm.Create`, `AddBalance`, `SubBalance`, `Contract.value`) were updated upstream to use `*uint256.Int` (from `holiman/uint256`). - Code passing values into these VM contexts has been updated to perform the necessary `*big.Int` -> `*uint256.Int` conversions. - Added `holiman/uint256` as a direct dependency in `go.mod`. 4. **Replace `StateDB.PrepareAccessList`:** - The `PrepareAccessList` method was removed from the `vm.StateDB` interface upstream. - Calls have been replaced with the new, more comprehensive `StateDB.Prepare(rules, sender, ...)` method. 5. **Replace `evm.ActivePrecompiles` Method:** - The `ActivePrecompiles` method on the `vm.EVM` struct was removed. - Calls have been replaced with the standalone package function `vm.ActivePrecompiles(rules)`, passing the appropriate chain rules. These changes resolve the identified compatibility errors and ensure the EVM module integrates correctly with both the updated Geth core components and Nibiru's specific architecture and custom precompiles. commit af71ded2a1dff4ccb716f14bdc9d2216df92dced Author: Unique-Divine Date: Sat Apr 12 19:51:44 2025 -0500 feat(evm): Adapt module to Geth v1.13 core package changes This commit updates the Nibiru EVM module to align with significant breaking changes introduced in the upstream go-ethereum v1.13 `core/vm` and `core/types` packages. The goal is to leverage the updated Geth dependencies while ensuring compatibility with Nibiru's specific requirements, particularly its custom precompiles that interact with the Cosmos SDK. This addresses several LSP errors and runtime issues arising from removed or modified upstream functions and interfaces: 1. **Replace `core.NewMessage` Calls:** - The `core.NewMessage` factory function was removed upstream in favor of direct struct instantiation. - All instances have been replaced with `core.Message{...}` struct literals, correctly mapping arguments to fields like `From`, `To`, `Nonce`, `Value`, `GasLimit`, gas price fields (`GasPrice`, `GasFeeCap`, `GasTipCap`), `Data`, `AccessList`. - Monetary and gas values are initialized as `*big.Int` per the `core.Message` definition. - Newer fields relevant to Cancun/EIP-4844 (`BlobGasFeeCap`, `BlobHashes`) and Nibiru-specific fields (`SkipAccountChecks`) are now correctly initialized. 2. **Revert `vm.PrecompiledContract` Interface for Nibiru Precompiles:** - Geth v1.13 simplified the `PrecompiledContract.Run` signature to `Run(input []byte)`. - This change breaks Nibiru's custom precompiles (e.g., Wasm) which require the `*vm.EVM` pointer to access `StateDB` and derive the `sdk.Context` needed for Cosmos SDK keeper interactions. - This commit *reverts* the interface definition within Nibiru's fork back to `Run(evm *vm.EVM, contract *vm.Contract, readonly bool)`. - The `Address() common.Address` method is also restored to the interface and implementations for use by the execution logic. - Standard precompile implementations included in this module have been adapted to match this reverted interface signature. - The `vm.RunPrecompiledContract` helper function is updated to pass the necessary `*vm.EVM`, `*vm.Contract`, and `readonly` context. 3. **Adopt `uint256` for VM Value/Balance Interactions:** - While `core.Message` retains `*big.Int`, the internal VM logic and `StateDB` methods (e.g., `vm.Call`, `vm.Create`, `AddBalance`, `SubBalance`, `Contract.value`) were updated upstream to use `*uint256.Int` (from `holiman/uint256`). - Code passing values into these VM contexts has been updated to perform the necessary `*big.Int` -> `*uint256.Int` conversions. - Added `holiman/uint256` as a direct dependency in `go.mod`. 4. **Replace `StateDB.PrepareAccessList`:** - The `PrepareAccessList` method was removed from the `vm.StateDB` interface upstream. - Calls have been replaced with the new, more comprehensive `StateDB.Prepare(rules, sender, ...)` method. 5. **Replace `evm.ActivePrecompiles` Method:** - The `ActivePrecompiles` method on the `vm.EVM` struct was removed. - Calls have been replaced with the standalone package function `vm.ActivePrecompiles(rules)`, passing the appropriate chain rules. These changes resolve the identified compatibility errors and ensure the EVM module integrates correctly with both the updated Geth core components and Nibiru's specific architecture and custom precompiles. commit 6370b960e6be36df78effecb7fe89d5faee9a1ac Author: Unique-Divine Date: Sat Apr 12 10:38:30 2025 -0500 fix(evm): Pass block timestamp to MakeSigner and refactor MsgEthereumTx field usage - Update all calls to `gethcore.MakeSigner` to include the block time as a Unix timestamp (seconds), using `evm.ParseBlockTimeUnixU64(ctx)`. - Add `ParseBlockTimeUnixU64` utility to extract block time from `sdk.Context` in a safe, reusable way. - Refactor usage of MsgEthereumTx field getters to use direct struct fields (`From`, `To`, `Value`, `GasFeeCap`, etc.), improving efficiency and clarity. - Enhance `ParseWeiAsMultipleOfMicronibi` to return `uint256.Int` and handle nil, zero, negative, and overflow edge cases with clear error messages. commit 0fad8429fdb3a7000b0a5951c8896fbb968eb9ce Author: Unique-Divine Date: Sat Apr 12 10:38:30 2025 -0500 fix(evm): Pass block timestamp to MakeSigner and refactor MsgEthereumTx field usage - Update all calls to `gethcore.MakeSigner` to include the block time as a Unix timestamp (seconds), using `evm.ParseBlockTimeUnixU64(ctx)`. - Add `ParseBlockTimeUnixU64` utility to extract block time from `sdk.Context` in a safe, reusable way. - Refactor usage of MsgEthereumTx field getters to use direct struct fields (`From`, `To`, `Value`, `GasFeeCap`, etc.), improving efficiency and clarity. - Enhance `ParseWeiAsMultipleOfMicronibi` to return `uint256.Int` and handle nil, zero, negative, and overflow edge cases with clear error messages. commit 10026346df4dd65e0b03ec15a326e18560d6fdf8 Author: Unique-Divine Date: Sat Apr 12 03:21:08 2025 -0500 refactor(evm): add more compatibility the new geth StateDB inteface, updating AddBalance and SubBalance to use uint256 commit d69a8c337f4ef3981fe2f953f9e7c42c09776dfb Author: Unique-Divine Date: Sat Apr 12 03:21:08 2025 -0500 refactor(evm): add more compatibility the new geth StateDB inteface, updating AddBalance and SubBalance to use uint256 commit d07093c2402707f8012f54b46ada2a4262186932 Author: Unique-Divine Date: Fri Apr 11 21:18:53 2025 -0500 feat: impl slog.Handler for geth v1.13. used in json-rpc These changes update Nibiru's integration with the `go-ethereum/log` package to align with its upstream migration to Go's standard structured logging library (`slog`). The previous logging setup in Nibiru, which relied on `go-ethereum/log`'s deprecated `FuncHandler` and `Record` types, was removed. 1. **Added `LogHandler`:** A new file `app/server/geth_log_handler.go` introduces the `LogHandler` type. This type implements the standard `slog.Handler` interface. Its primary role is to receive log records generated by Geth components (which now use `slog`) and translate them into corresponding calls on Nibiru's standard `cmtlog.Logger` (CometBFT logger). It correctly maps Geth/`slog` levels (including `Trace` and `Crit`) and formats log attributes for compatibility. 2. **Updated Initialization:** In `app/server/json_rpc.go`, the old `ethlog.Root().SetHandler(...)` block was replaced. The code now instantiates the new `LogHandler` (providing it the context logger `ctx.Logger.With("module", "geth")`), wraps it using `gethlog.NewLogger()`, and sets the result as the default logger for `go-ethereum` components via `gethlog.SetDefault()`. The primary reason for this refactor was the breaking change in the `go-ethereum/log` dependency, which deprecated its custom logging implementation in favor of Go's standard `slog`. These changes adapt Nibiru to the new `slog`-based API, ensuring that logs generated within embedded Geth components are correctly captured and processed by Nibiru's existing logging infrastructure (`cmtlog.Logger`). This maintains consistent logging behavior and compatibility with the updated dependency. commit 5937bbe1d78d324d7286100506705d96dc5df17c Author: Unique-Divine Date: Fri Apr 11 21:18:53 2025 -0500 feat: impl slog.Handler for geth v1.13. used in json-rpc These changes update Nibiru's integration with the `go-ethereum/log` package to align with its upstream migration to Go's standard structured logging library (`slog`). The previous logging setup in Nibiru, which relied on `go-ethereum/log`'s deprecated `FuncHandler` and `Record` types, was removed. 1. **Added `LogHandler`:** A new file `app/server/geth_log_handler.go` introduces the `LogHandler` type. This type implements the standard `slog.Handler` interface. Its primary role is to receive log records generated by Geth components (which now use `slog`) and translate them into corresponding calls on Nibiru's standard `cmtlog.Logger` (CometBFT logger). It correctly maps Geth/`slog` levels (including `Trace` and `Crit`) and formats log attributes for compatibility. 2. **Updated Initialization:** In `app/server/json_rpc.go`, the old `ethlog.Root().SetHandler(...)` block was replaced. The code now instantiates the new `LogHandler` (providing it the context logger `ctx.Logger.With("module", "geth")`), wraps it using `gethlog.NewLogger()`, and sets the result as the default logger for `go-ethereum` components via `gethlog.SetDefault()`. The primary reason for this refactor was the breaking change in the `go-ethereum/log` dependency, which deprecated its custom logging implementation in favor of Go's standard `slog`. These changes adapt Nibiru to the new `slog`-based API, ensuring that logs generated within embedded Geth components are correctly captured and processed by Nibiru's existing logging infrastructure (`cmtlog.Logger`). This maintains consistent logging behavior and compatibility with the updated dependency. commit ca3c821b3e8062e3c9ec57b579d69e12225239f7 Author: Unique-Divine Date: Fri Apr 11 19:03:04 2025 -0500 wip!: start with a local brute force jump to a geth v1.13.15 with no changes commit 10010d6f59259ae026d570592dac2c504efe7891 Author: Unique-Divine Date: Fri Apr 11 19:03:04 2025 -0500 wip!: start with a local brute force jump to a geth v1.13.15 with no changes --- .github/workflows/e2e-evm.yml | 2 +- .github/workflows/golangci-lint.yml | 2 +- .github/workflows/integration-tests.yml | 2 +- .github/workflows/simulation-tests.yml | 8 +- .github/workflows/unit-tests.yml | 4 +- CHANGELOG.md | 1 + Dockerfile | 4 +- api/nibiru/sudo/v1/event.pulsar.go | 2 +- app/evmante/evmante_can_transfer.go | 18 +- app/evmante/evmante_gas_consume_test.go | 4 +- app/evmante/evmante_handler_test.go | 2 +- .../evmante_increment_sender_seq_test.go | 4 +- app/evmante/evmante_sigverify.go | 6 +- app/evmante/evmante_verify_eth_acc_test.go | 2 +- app/keepers.go | 2 +- app/server/geth_log_handler.go | 110 ++++ app/server/json_rpc.go | 25 +- eth/rpc/backend/chain_info.go | 3 +- eth/rpc/backend/chain_info_test.go | 3 +- eth/rpc/backend/utils.go | 4 +- eth/rpc/rpcapi/debugapi/api.go | 12 - eth/rpc/rpcapi/eth_api.go | 7 +- go.mod | 70 ++- go.sum | 514 +++++++++++++----- proto/nibiru/sudo/v1/event.proto | 4 +- x/evm/chain_config.go | 49 +- x/evm/const.go | 28 + x/evm/evmtest/tx.go | 27 +- x/evm/json_tx_args.go | 22 +- x/evm/keeper/call_contract.go | 29 +- x/evm/keeper/funtoken_from_coin.go | 28 +- x/evm/keeper/funtoken_from_erc20.go | 28 +- x/evm/keeper/gas_fees.go | 22 +- x/evm/keeper/grpc_query.go | 96 ++-- x/evm/keeper/keeper.go | 7 - x/evm/keeper/msg_server.go | 199 ++++--- x/evm/keeper/precompiles.go | 27 - x/evm/keeper/vm_config.go | 6 - x/evm/msg.go | 7 +- x/evm/precompile/funtoken.go | 2 +- x/evm/precompile/oracle.go | 2 +- x/evm/precompile/precompile.go | 27 +- x/evm/precompile/wasm.go | 2 +- x/evm/statedb/interfaces.go | 2 - x/evm/statedb/journal.go | 20 + x/evm/statedb/journal_test.go | 11 +- x/evm/statedb/state_object.go | 34 +- x/evm/statedb/statedb.go | 173 +++++- x/evm/statedb/statedb_test.go | 124 +++-- x/evm/vmtracer.go | 12 +- x/sudo/types/event.pb.go | 2 +- 51 files changed, 1216 insertions(+), 585 deletions(-) create mode 100644 app/server/geth_log_handler.go delete mode 100644 x/evm/keeper/precompiles.go diff --git a/.github/workflows/e2e-evm.yml b/.github/workflows/e2e-evm.yml index 7e77e14c22..b7d52e495b 100644 --- a/.github/workflows/e2e-evm.yml +++ b/.github/workflows/e2e-evm.yml @@ -30,7 +30,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: 1.24 + go-version: 1.22 cache: true # Use GitHub actions output paramters to get go paths. For more info, see diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index a912a75918..54ccb873d4 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -40,7 +40,7 @@ jobs: - uses: actions/setup-go@v5 if: steps.check_nibiru_go.outputs.nibiru-go == 'true' with: - go-version: 1.24 + go-version: 1.22 cache: false # the golangci-lint action already caches for us (https://github.com/golangci/golangci-lint-action#performance) # Use GitHub actions output paramters to get go paths. For more info, see diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 8d918214cb..810678ee0f 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -41,7 +41,7 @@ jobs: if: steps.check_nibiru_go.outputs.nibiru-go == 'true' uses: actions/setup-go@v5 with: - go-version: 1.24 + go-version: 1.22 cache: true # Use GitHub actions output paramters to get go paths. For more info, see diff --git a/.github/workflows/simulation-tests.yml b/.github/workflows/simulation-tests.yml index 2df3db8e02..1fed208953 100644 --- a/.github/workflows/simulation-tests.yml +++ b/.github/workflows/simulation-tests.yml @@ -16,7 +16,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: 1.24 + go-version: 1.22 cache: true - name: TestAppStateDeterminism run: | @@ -28,7 +28,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: 1.24 + go-version: 1.22 cache: true - name: TestFullAppSimulation run: | @@ -40,7 +40,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: 1.24 + go-version: 1.22 cache: true - name: TestAppImportExport run: | @@ -52,7 +52,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: 1.24 + go-version: 1.22 cache: true - name: TestAppSimulationAfterImport run: | diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index 1cc5a83ab5..73edbd9262 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -39,7 +39,7 @@ jobs: if: steps.check_nibiru_go.outputs.nibiru-go == 'true' uses: actions/setup-go@v5 with: - go-version: 1.24 + go-version: 1.22 cache: true # Use GitHub actions output paramters to get go paths. For more info, see @@ -94,7 +94,7 @@ jobs: if: steps.check_nibiru_go.outputs.nibiru-go == 'true' uses: actions/setup-go@v5 with: - go-version: 1.24 + go-version: 1.22 - name: "Install just" if: steps.check_nibiru_go.outputs.nibiru-go == 'true' diff --git a/CHANGELOG.md b/CHANGELOG.md index 51fa317036..69a70f26e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased - [#2270](https://github.com/NibiruChain/nibiru/pull/2270) - refactor(app): remove private keeper struct and transient/mem keys from app +- [#2274](https://github.com/NibiruChain/nibiru/pull/2274) - feat(evm)!: update to geth v1.13 with EIP-1153, PRECOMPILE_ADDRS, and transient storage support ## v2.3.0 diff --git a/Dockerfile b/Dockerfile index b662df06e0..578712373d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG src=base # ---------- Build Stage ---------- -FROM golang:1.24 AS build-base +FROM golang:1.22 AS build-base WORKDIR /nibiru @@ -74,4 +74,4 @@ RUN apk --no-cache add ca-certificates COPY --from=build-source /root/nibid /usr/local/bin/nibid ENTRYPOINT ["nibid"] -CMD ["start"] \ No newline at end of file +CMD ["start"] diff --git a/api/nibiru/sudo/v1/event.pulsar.go b/api/nibiru/sudo/v1/event.pulsar.go index e43dcdadab..69a8874acc 100644 --- a/api/nibiru/sudo/v1/event.pulsar.go +++ b/api/nibiru/sudo/v1/event.pulsar.go @@ -533,7 +533,7 @@ type EventUpdateSudoers struct { unknownFields protoimpl.UnknownFields Sudoers *Sudoers `protobuf:"bytes,1,opt,name=sudoers,proto3" json:"sudoers,omitempty"` - // Action is the type of update that occured to the "sudoers" + // Action is the type of update that occurred to the "sudoers" Action string `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` } diff --git a/app/evmante/evmante_can_transfer.go b/app/evmante/evmante_can_transfer.go index f47e7f0b15..e117c2a893 100644 --- a/app/evmante/evmante_can_transfer.go +++ b/app/evmante/evmante_can_transfer.go @@ -25,7 +25,11 @@ func (ctd CanTransferDecorator) AnteHandle( ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler, ) (sdk.Context, error) { ethCfg := evm.EthereumConfig(ctd.EVMKeeper.EthChainID(ctx)) - signer := gethcore.MakeSigner(ethCfg, big.NewInt(ctx.BlockHeight())) + signer := gethcore.MakeSigner( + ethCfg, + big.NewInt(ctx.BlockHeight()), + evm.ParseBlockTimeUnixU64(ctx), + ) for _, msg := range tx.GetMsgs() { msgEthTx, ok := msg.(*evm.MsgEthereumTx) @@ -57,25 +61,25 @@ func (ctd CanTransferDecorator) AnteHandle( return ctx, errors.Wrapf( sdkerrors.ErrInsufficientFee, "gas fee cap (wei) less than block base fee (wei); (%s < %s)", - evmMsg.GasFeeCap(), baseFeeWeiPerGas, + evmMsg.GasFeeCap, baseFeeWeiPerGas, ) } // check that caller has enough balance to cover asset transfer for **topmost** call // NOTE: here the gas consumed is from the context with the infinite gas meter - if evmMsg.Value().Sign() > 0 { - nibiruAddr := eth.EthAddrToNibiruAddr(evmMsg.From()) + if evmMsg.Value.Sign() > 0 { + nibiruAddr := eth.EthAddrToNibiruAddr(evmMsg.From) balanceNative := ctd.Bank.GetBalance(ctx, nibiruAddr, evm.EVMBankDenom).Amount.BigInt() balanceWei := evm.NativeToWei(balanceNative) - if balanceWei.Cmp(evmMsg.Value()) < 0 { + if balanceWei.Cmp(evmMsg.Value) < 0 { return ctx, errors.Wrapf( sdkerrors.ErrInsufficientFunds, "failed to transfer %s wei ( balance=%s )from address %s using the EVM block context transfer function", - evmMsg.Value(), + evmMsg.Value, balanceWei, - evmMsg.From(), + evmMsg.From, ) } } diff --git a/app/evmante/evmante_gas_consume_test.go b/app/evmante/evmante_gas_consume_test.go index 3291c33490..dc36d7e657 100644 --- a/app/evmante/evmante_gas_consume_test.go +++ b/app/evmante/evmante_gas_consume_test.go @@ -26,7 +26,7 @@ func (s *TestSuite) TestAnteDecEthGasConsume() { beforeTxSetup: func(deps *evmtest.TestDeps, sdb *statedb.StateDB) { gasLimit := happyGasLimit() balance := evm.NativeToWei(new(big.Int).Add(gasLimit, big.NewInt(100))) - sdb.AddBalance(deps.Sender.EthAddr, balance) + sdb.AddBalanceSigned(deps.Sender.EthAddr, balance) }, txSetup: evmtest.HappyCreateContractTx, wantErr: "", @@ -47,7 +47,7 @@ func (s *TestSuite) TestAnteDecEthGasConsume() { beforeTxSetup: func(deps *evmtest.TestDeps, sdb *statedb.StateDB) { gasLimit := happyGasLimit() balance := evm.NativeToWei(new(big.Int).Add(gasLimit, big.NewInt(100))) - sdb.AddBalance(deps.Sender.EthAddr, balance) + sdb.AddBalanceSigned(deps.Sender.EthAddr, balance) }, txSetup: evmtest.HappyCreateContractTx, wantErr: "exceeds block gas limit (0)", diff --git a/app/evmante/evmante_handler_test.go b/app/evmante/evmante_handler_test.go index 166913caec..4b1591e0bf 100644 --- a/app/evmante/evmante_handler_test.go +++ b/app/evmante/evmante_handler_test.go @@ -29,7 +29,7 @@ func (s *TestSuite) TestAnteHandlerEVM() { name: "happy: signed tx, sufficient funds", beforeTxSetup: func(deps *evmtest.TestDeps, sdb *statedb.StateDB) { balanceMicronibi := new(big.Int).Add(evmtest.GasLimitCreateContract(), big.NewInt(100)) - sdb.AddBalance( + sdb.AddBalanceSigned( deps.Sender.EthAddr, evm.NativeToWei(balanceMicronibi), ) diff --git a/app/evmante/evmante_increment_sender_seq_test.go b/app/evmante/evmante_increment_sender_seq_test.go index 8f342a34cd..9d0e48cafa 100644 --- a/app/evmante/evmante_increment_sender_seq_test.go +++ b/app/evmante/evmante_increment_sender_seq_test.go @@ -22,7 +22,7 @@ func (s *TestSuite) TestAnteDecEthIncrementSenderSequence() { name: "happy: single message", beforeTxSetup: func(deps *evmtest.TestDeps, sdb *statedb.StateDB) { balance := big.NewInt(100) - sdb.AddBalance(deps.Sender.EthAddr, balance) + sdb.AddBalanceSigned(deps.Sender.EthAddr, balance) }, txSetup: func(deps *evmtest.TestDeps) sdk.Tx { return evmtest.HappyTransferTx(deps, 0) @@ -34,7 +34,7 @@ func (s *TestSuite) TestAnteDecEthIncrementSenderSequence() { name: "happy: two messages", beforeTxSetup: func(deps *evmtest.TestDeps, sdb *statedb.StateDB) { balance := big.NewInt(100) - sdb.AddBalance(deps.Sender.EthAddr, balance) + sdb.AddBalanceSigned(deps.Sender.EthAddr, balance) }, txSetup: func(deps *evmtest.TestDeps) sdk.Tx { txMsgOne := evmtest.HappyTransferTx(deps, 0) diff --git a/app/evmante/evmante_sigverify.go b/app/evmante/evmante_sigverify.go index 40e7a6d917..eb7553f6a0 100644 --- a/app/evmante/evmante_sigverify.go +++ b/app/evmante/evmante_sigverify.go @@ -36,7 +36,11 @@ func (esvd EthSigVerificationDecorator) AnteHandle( chainID := esvd.evmKeeper.EthChainID(ctx) ethCfg := evm.EthereumConfig(chainID) blockNum := big.NewInt(ctx.BlockHeight()) - signer := gethcore.MakeSigner(ethCfg, blockNum) + signer := gethcore.MakeSigner( + ethCfg, + blockNum, + evm.ParseBlockTimeUnixU64(ctx), + ) for _, msg := range tx.GetMsgs() { msgEthTx, ok := msg.(*evm.MsgEthereumTx) diff --git a/app/evmante/evmante_verify_eth_acc_test.go b/app/evmante/evmante_verify_eth_acc_test.go index 2af951aa52..a80b88c06b 100644 --- a/app/evmante/evmante_verify_eth_acc_test.go +++ b/app/evmante/evmante_verify_eth_acc_test.go @@ -21,7 +21,7 @@ func (s *TestSuite) TestAnteDecoratorVerifyEthAcc_CheckTx() { { name: "happy: sender with funds", beforeTxSetup: func(deps *evmtest.TestDeps, sdb *statedb.StateDB) { - sdb.AddBalance(deps.Sender.EthAddr, evm.NativeToWei(happyGasLimit())) + sdb.AddBalanceSigned(deps.Sender.EthAddr, evm.NativeToWei(happyGasLimit())) }, txSetup: evmtest.HappyCreateContractTx, wantErr: "", diff --git a/app/keepers.go b/app/keepers.go index d9d6923262..6aa4e8a558 100644 --- a/app/keepers.go +++ b/app/keepers.go @@ -359,7 +359,7 @@ func (app *NibiruApp) initNonDepinjectKeepers( app.GovKeeper.SetLegacyRouter(govRouter) - app.EvmKeeper.AddPrecompiles(precompile.InitPrecompiles(app.AppKeepers.PublicKeepers)) + precompile.InitPrecompiles(app.AppKeepers.PublicKeepers) return wasmConfig } diff --git a/app/server/geth_log_handler.go b/app/server/geth_log_handler.go new file mode 100644 index 0000000000..efdc34369e --- /dev/null +++ b/app/server/geth_log_handler.go @@ -0,0 +1,110 @@ +package server + +import ( + "context" + + cmtlog "github.com/cometbft/cometbft/libs/log" + gethlog "github.com/ethereum/go-ethereum/log" + + // Use "log/slog" from the Go std lib because Geth migrated to support + // slog and deprecated the original go-ethereum/log implementation. + // For more info on the migration, see https://github.com/ethereum/go-ethereum/pull/28187 + "golang.org/x/exp/slog" +) + +// Ensure LogHandler implements slog.Handler +var _ slog.Handler = (*LogHandler)(nil) + +// LogHandler implements slog.Handler, which is needed to construct the +// conventional go-ethereum.Logger, using a CometBFT logger +// ("github.com/cometbft/cometbft/libs/log".Logger). +type LogHandler struct { + CmtLogger cmtlog.Logger + attrs []slog.Attr // Attributes gathered via WithAttrs + group string // Group name gathered via WithGroup (simple implementation) +} + +// Enabled decides whether a log record should be processed. +// We let the underlying CometBFT logger handle filtering. +func (h *LogHandler) Enabled(_ context.Context, level slog.Level) bool { + // You could potentially check the CmtLogger's level here if needed, + // but returning true is usually sufficient. + return true +} + +// Handle processes the log record and sends it to the CometBFT logger. +func (h *LogHandler) Handle(_ context.Context, r slog.Record) error { + // 1. Determine the corresponding CometBFT log function + var logFunc func(msg string, keyvals ...interface{}) + switch r.Level { + // Check against Geth's custom levels first if they exist + // This handler covers all defined slog and go-ethereum log levels. + case gethlog.LevelTrace, slog.LevelDebug: // Handles -8, -4 + logFunc = h.CmtLogger.Debug + case slog.LevelInfo, slog.LevelWarn: // Handles 0, 4 + logFunc = h.CmtLogger.Info + case gethlog.LevelCrit, slog.LevelError: // Handles 12, 8 + // Map Geth Crit level along with standard Error + logFunc = h.CmtLogger.Error + default: // Handle any other levels (e.g., below Debug) + logFunc = h.CmtLogger.Debug // Default to Debug or Info as appropriate + } + + // 2. Collect attributes (key-value pairs) + // Preallocate assuming 2 slots per attribute plus handler attrs + keyvals := make([]interface{}, 0, (r.NumAttrs()+len(h.attrs))*2) + + // Add attributes stored in the handler first (from WithAttrs) + currentGroup := h.group + for _, attr := range h.attrs { + key := attr.Key + if currentGroup != "" { + key = currentGroup + "." + key // Basic grouping + } + keyvals = append(keyvals, key, attr.Value.Any()) + } + + // Add attributes from the specific log record + r.Attrs(func(attr slog.Attr) bool { + key := attr.Key + if currentGroup != "" { + key = currentGroup + "." + key // Basic grouping + } + keyvals = append(keyvals, key, attr.Value.Any()) + return true // Continue iterating + }) + + // 3. Call the CometBFT logger function + logFunc(r.Message, keyvals...) + + return nil // No error to return in this basic implementation +} + +// WithAttrs returns a new LogHandler with the provided attributes added. +func (h *LogHandler) WithAttrs(attrs []slog.Attr) slog.Handler { + // Create a new handler, cloning existing state and adding new attrs + newHandler := &LogHandler{ + CmtLogger: h.CmtLogger, // Keep the same underlying logger + // Important: Clone slices to avoid modifying the original handler's state + attrs: append(append([]slog.Attr{}, h.attrs...), attrs...), + group: h.group, + } + return newHandler +} + +// WithGroup returns a new LogHandler associated with the specified group. +func (h *LogHandler) WithGroup(name string) slog.Handler { + // Create a new handler, cloning attributes and setting/appending the group + newHandler := &LogHandler{ + CmtLogger: h.CmtLogger, + attrs: append([]slog.Attr{}, h.attrs...), // Clone attributes + // Basic implementation: Overwrites group. Could concatenate if nesting needed. + group: name, + } + // If nested groups are needed: + // if h.group != "" { + // name = h.group + "." + name + // } + // newHandler.group = name + return newHandler +} diff --git a/app/server/json_rpc.go b/app/server/json_rpc.go index 44b946719f..21bec288f7 100644 --- a/app/server/json_rpc.go +++ b/app/server/json_rpc.go @@ -14,8 +14,8 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/server" "github.com/cosmos/cosmos-sdk/server/types" - ethlog "github.com/ethereum/go-ethereum/log" - ethrpc "github.com/ethereum/go-ethereum/rpc" + gethlog "github.com/ethereum/go-ethereum/log" + gethrpc "github.com/ethereum/go-ethereum/rpc" srvconfig "github.com/NibiruChain/nibiru/v2/app/server/config" ) @@ -31,20 +31,13 @@ func StartJSONRPC( ) (*http.Server, chan struct{}, error) { tmWsClientForRPCApi := ConnectTmWS(tmRPCAddr, tmEndpoint, ctx.Logger) - logger := ctx.Logger.With("module", "geth") - ethlog.Root().SetHandler(ethlog.FuncHandler(func(r *ethlog.Record) error { - switch r.Lvl { - case ethlog.LvlTrace, ethlog.LvlDebug: - logger.Debug(r.Msg, r.Ctx...) - case ethlog.LvlInfo, ethlog.LvlWarn: - logger.Info(r.Msg, r.Ctx...) - case ethlog.LvlError, ethlog.LvlCrit: - logger.Error(r.Msg, r.Ctx...) - } - return nil - })) + // Configure the go-ethereum logger to sync with the ctx.Logger + gethLogger := gethlog.NewLogger(&LogHandler{ + CmtLogger: ctx.Logger.With("module", "geth"), + }) + gethlog.SetDefault(gethLogger) - rpcServer := ethrpc.NewServer() + rpcServer := gethrpc.NewServer() allowUnprotectedTxs := config.JSONRPC.AllowUnprotectedTxs rpcAPIArr := config.JSONRPC.API @@ -53,7 +46,7 @@ func StartJSONRPC( for _, api := range apis { if err := rpcServer.RegisterName(api.Namespace, api.Service); err != nil { - ctx.Logger.Error( + gethLogger.Error( "failed to register service in JSON RPC namespace", "namespace", api.Namespace, "service", api.Service, diff --git a/eth/rpc/backend/chain_info.go b/eth/rpc/backend/chain_info.go index b10eb695fc..a4bc6e08aa 100644 --- a/eth/rpc/backend/chain_info.go +++ b/eth/rpc/backend/chain_info.go @@ -9,6 +9,7 @@ import ( tmrpctypes "github.com/cometbft/cometbft/rpc/core/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/ethereum/go-ethereum/common/hexutil" + gethmath "github.com/ethereum/go-ethereum/common/math" gethcore "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/params" gethrpc "github.com/ethereum/go-ethereum/rpc" @@ -79,7 +80,7 @@ func (b *Backend) PendingTransactions() ([]*sdk.Tx, error) { // FeeHistory returns data relevant for fee estimation based on the specified range of blocks. func (b *Backend) FeeHistory( - userBlockCount gethrpc.DecimalOrHex, // number blocks to fetch, maximum is 100 + userBlockCount gethmath.HexOrDecimal64, // number blocks to fetch, maximum is 100 lastBlock gethrpc.BlockNumber, // the block to start search, to oldest rewardPercentiles []float64, // percentiles to fetch reward ) (*rpc.FeeHistoryResult, error) { diff --git a/eth/rpc/backend/chain_info_test.go b/eth/rpc/backend/chain_info_test.go index 5056b56379..d65bbd1ab9 100644 --- a/eth/rpc/backend/chain_info_test.go +++ b/eth/rpc/backend/chain_info_test.go @@ -3,6 +3,7 @@ package backend_test import ( "math/big" + gethmath "github.com/ethereum/go-ethereum/common/math" gethrpc "github.com/ethereum/go-ethereum/rpc" "github.com/NibiruChain/nibiru/v2/app/appconst" @@ -65,7 +66,7 @@ func (s *BackendSuite) TestFeeHistory() { percentiles := []float64{50, 100} res, err := s.backend.FeeHistory( - (gethrpc.DecimalOrHex)(blockCount), + (gethmath.HexOrDecimal64)(blockCount), gethrpc.BlockNumber(int64(currentBlock)), percentiles, ) diff --git a/eth/rpc/backend/utils.go b/eth/rpc/backend/utils.go index f4e49046d1..3f47b5754a 100644 --- a/eth/rpc/backend/utils.go +++ b/eth/rpc/backend/utils.go @@ -15,7 +15,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/consensus/misc" + "github.com/ethereum/go-ethereum/consensus/misc/eip1559" gethcore "github.com/ethereum/go-ethereum/core/types" abci "github.com/cometbft/cometbft/abci/types" @@ -125,7 +125,7 @@ func (b *Backend) retrieveEVMTxFeesFromBlock( if err != nil { return err } - targetOneFeeHistory.NextBaseFee = misc.CalcBaseFee(cfg, header) + targetOneFeeHistory.NextBaseFee = eip1559.CalcBaseFee(cfg, header) // set gas used ratio gasLimitUint64, ok := (*ethBlock)["gasLimit"].(hexutil.Uint64) diff --git a/eth/rpc/rpcapi/debugapi/api.go b/eth/rpc/rpcapi/debugapi/api.go index 7ce3fa345d..354096757f 100644 --- a/eth/rpc/rpcapi/debugapi/api.go +++ b/eth/rpc/rpcapi/debugapi/api.go @@ -4,7 +4,6 @@ package debugapi import ( "bytes" "errors" - "fmt" "io" "os" "runtime" // #nosec G702 @@ -24,7 +23,6 @@ import ( "github.com/cometbft/cometbft/libs/log" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/rlp" "github.com/NibiruChain/nibiru/v2/eth/rpc" @@ -341,16 +339,6 @@ func (a *DebugAPI) PrintBlock(number uint64) (string, error) { return spew.Sdump(block), nil } -// SeedHash retrieves the seed hash of a block. -func (a *DebugAPI) SeedHash(number uint64) (string, error) { - _, err := a.backend.HeaderByNumber(rpc.BlockNumber(number)) - if err != nil { - return "", err - } - - return fmt.Sprintf("0x%x", ethash.SeedHash(number)), nil -} - // IntermediateRoots executes a block, and returns a list // of intermediate roots: the stateroot after each transaction. func (a *DebugAPI) IntermediateRoots(hash common.Hash, _ *evm.TraceConfig) ([]common.Hash, error) { diff --git a/eth/rpc/rpcapi/eth_api.go b/eth/rpc/rpcapi/eth_api.go index 3ada303585..883dad86f1 100644 --- a/eth/rpc/rpcapi/eth_api.go +++ b/eth/rpc/rpcapi/eth_api.go @@ -4,6 +4,7 @@ package rpcapi import ( "context" + gethmath "github.com/ethereum/go-ethereum/common/math" gethrpc "github.com/ethereum/go-ethereum/rpc" "github.com/cometbft/cometbft/libs/log" @@ -86,7 +87,9 @@ type IEthAPI interface { args evm.JsonTxArgs, blockNrOptional *rpc.BlockNumber, ) (hexutil.Uint64, error) FeeHistory( - blockCount gethrpc.DecimalOrHex, lastBlock gethrpc.BlockNumber, rewardPercentiles []float64, + blockCount gethmath.HexOrDecimal64, + lastBlock gethrpc.BlockNumber, + rewardPercentiles []float64, ) (*rpc.FeeHistoryResult, error) MaxPriorityFeePerGas() (*hexutil.Big, error) ChainId() (*hexutil.Big, error) @@ -321,7 +324,7 @@ func (e *EthAPI) EstimateGas( return e.backend.EstimateGas(args, blockNrOptional) } -func (e *EthAPI) FeeHistory(blockCount gethrpc.DecimalOrHex, +func (e *EthAPI) FeeHistory(blockCount gethmath.HexOrDecimal64, lastBlock gethrpc.BlockNumber, rewardPercentiles []float64, ) (*rpc.FeeHistoryResult, error) { diff --git a/go.mod b/go.mod index 914f833531..e6671f6a83 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,10 @@ module github.com/NibiruChain/nibiru/v2 -go 1.24.0 +// go-ethereum is incompatible with Go 1.23 and causes issues +// See: +// - [go-ethereum#30100: Build fails with Go 1.23rc](https://github.com/ethereum/go-ethereum/issues/30100) +// - https://github.com/fjl/memsize/issues/4 +go 1.21 require ( github.com/CosmWasm/wasmd v0.44.0 @@ -15,7 +19,7 @@ require ( github.com/cosmos/cosmos-proto v1.0.0-beta.5 github.com/cosmos/cosmos-sdk v0.47.11 github.com/cosmos/ibc-go/v7 v7.4.0 - github.com/ethereum/go-ethereum v1.10.17 + github.com/ethereum/go-ethereum v1.13.14 ) require ( @@ -36,7 +40,7 @@ require ( github.com/gorilla/mux v1.8.1 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 - github.com/holiman/uint256 v1.2.4 // indirect + github.com/holiman/uint256 v1.2.4 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.18.0 github.com/rakyll/statik v0.1.7 @@ -64,11 +68,11 @@ require ( github.com/gorilla/websocket v1.5.0 github.com/rs/cors v1.8.3 github.com/rs/zerolog v1.32.0 - github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 - golang.org/x/crypto v0.36.0 - golang.org/x/exp v0.0.0-20231006140011-7918f672742d - golang.org/x/net v0.37.0 - golang.org/x/text v0.23.0 + github.com/status-im/keycard-go v0.2.0 + golang.org/x/crypto v0.21.0 + golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa + golang.org/x/net v0.23.0 + golang.org/x/text v0.14.0 ) require ( @@ -83,12 +87,14 @@ require ( github.com/99designs/keyring v1.2.1 // indirect github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect github.com/DataDog/zstd v1.5.5 // indirect - github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect - github.com/VictoriaMetrics/fastcache v1.6.0 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/StackExchange/wmi v1.2.1 // indirect + github.com/VictoriaMetrics/fastcache v1.12.1 // indirect github.com/aws/aws-sdk-go v1.44.203 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect + github.com/bits-and-blooms/bitset v1.10.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect @@ -103,6 +109,8 @@ require ( github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect github.com/coinbase/rosetta-sdk-go v0.7.9 // indirect github.com/confio/ics23/go v0.9.0 // indirect + github.com/consensys/bavard v0.1.13 // indirect + github.com/consensys/gnark-crypto v0.12.1 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect @@ -110,9 +118,11 @@ require ( github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/ledger-cosmos-go v0.12.4 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect + github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 // indirect + github.com/crate-crypto/go-kzg-4844 v0.7.0 // indirect github.com/creachadair/taskgroup v0.4.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect - github.com/deckarep/golang-set v1.8.0 // indirect + github.com/deckarep/golang-set/v2 v2.1.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect github.com/dgraph-io/badger/v2 v2.2007.4 // indirect @@ -121,10 +131,11 @@ require ( github.com/docker/distribution v2.8.2+incompatible // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.6.0 // indirect - github.com/edsrzf/mmap-go v1.0.0 // indirect + github.com/ethereum/c-kzg-4844 v0.4.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff // indirect + github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 // indirect github.com/getsentry/sentry-go v0.23.0 // indirect github.com/ghodss/yaml v1.0.0 // indirect github.com/gin-gonic/gin v1.9.1 // indirect @@ -133,13 +144,13 @@ require ( github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/go-logr/logr v1.3.0 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-ole/go-ole v1.2.1 // indirect - github.com/go-stack/stack v1.8.0 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect + github.com/gofrs/flock v0.8.1 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/golang/glog v1.2.4 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/snappy v0.0.4 // indirect + github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect github.com/google/btree v1.1.2 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/orderedcode v0.0.1 // indirect @@ -162,7 +173,7 @@ require ( github.com/hdevalence/ed25519consensus v0.1.0 // indirect github.com/holiman/bloomfilter/v2 v2.0.3 // indirect github.com/huandu/skiplist v1.2.0 // indirect - github.com/huin/goupnp v1.0.3 // indirect + github.com/huin/goupnp v1.3.0 // indirect github.com/improbable-eng/grpc-web v0.15.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect @@ -178,13 +189,14 @@ require ( github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.9 // indirect + github.com/mattn/go-runewidth v0.0.13 // indirect github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/mtibben/percent v0.2.1 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect @@ -194,9 +206,8 @@ require ( github.com/prometheus/client_model v0.5.0 // indirect github.com/prometheus/common v0.45.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect - github.com/prometheus/tsdb v0.7.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/rjeczalik/notify v0.9.1 // indirect + github.com/rivo/uniseg v0.2.0 // indirect github.com/rogpeppe/go-internal v1.11.0 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect @@ -206,13 +217,14 @@ require ( github.com/spf13/afero v1.11.0 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/subosito/gotenv v1.6.0 // indirect + github.com/supranational/blst v0.3.11 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.6.0 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect - github.com/tklauser/go-sysconf v0.3.5 // indirect - github.com/tklauser/numcpus v0.2.2 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect github.com/ulikunitz/xz v0.5.11 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect @@ -225,20 +237,22 @@ require ( go.opentelemetry.io/otel/trace v1.21.0 // indirect go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.9.0 // indirect + golang.org/x/mod v0.17.0 // indirect golang.org/x/oauth2 v0.16.0 // indirect - golang.org/x/sync v0.12.0 // indirect - golang.org/x/sys v0.31.0 // indirect - golang.org/x/term v0.30.0 // indirect + golang.org/x/sync v0.6.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/term v0.18.0 // indirect golang.org/x/time v0.5.0 // indirect + golang.org/x/tools v0.15.0 // indirect google.golang.org/api v0.155.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe // 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 nhooyr.io/websocket v1.8.6 // indirect pgregory.net/rapid v1.1.0 // indirect + rsc.io/tmplfunc v0.0.3 // indirect sigs.k8s.io/yaml v1.4.0 // indirect ) @@ -246,11 +260,15 @@ replace ( cosmossdk.io/api => cosmossdk.io/api v0.3.1 github.com/CosmWasm/wasmd => github.com/NibiruChain/wasmd v0.44.0-nibiru + // github.com/cockroachdb/pebble: Has to be pinned for compatibilit with + // go-ethereum/ethdb, which uses pebble imports + github.com/cockroachdb/pebble => github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 github.com/cosmos/cosmos-sdk => github.com/NibiruChain/cosmos-sdk v0.47.11-nibiru.3 github.com/cosmos/iavl => github.com/cosmos/iavl v0.20.0 - github.com/ethereum/go-ethereum => github.com/NibiruChain/go-ethereum v1.10.27-nibiru + github.com/ethereum/go-ethereum => github.com/NibiruChain/go-ethereum v1.13.15-nibiru + github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 github.com/linxGnu/grocksdb => github.com/linxGnu/grocksdb v1.8.12 diff --git a/go.sum b/go.sum index 1cceb231bc..d7242377b7 100644 --- a/go.sum +++ b/go.sum @@ -1,13 +1,12 @@ +cloud.google.com/go v0.0.0-20170206221025-ce650573d812/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= @@ -57,7 +56,6 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= -cloud.google.com/go/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/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= @@ -187,7 +185,6 @@ cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xX cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= @@ -209,25 +206,47 @@ cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8 filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= 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= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= +github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.0.0/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.0.0/go.mod h1:+6sju8gk8FRmSajX3Oz4G5Gm7P+mbqE9FVaXXFYTkCM= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0/go.mod h1:OQeznEEkTZ9OrhHJoDD8ZDq51FHgXjqtP9z6bEwBq9U= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal v1.0.0/go.mod h1:ceIuwmxDWptoW3eCqSXlnPsZFKh4X+R38dWPv7GS9Vs= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.0.0/go.mod h1:s1tW/At+xHqjNFvWU4G0c0Qv33KOhvbGNj0RCTQDV8s= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0/go.mod h1:c+Lifp3EDEamAkPVzMooRNOK6CZjNSdEnf1A7jsI9u4= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0/go.mod h1:+6KLcKIVgxoBDMqMO/Nvy7bZ9a0nbU3I1DtFQK3YvB4= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0/go.mod h1:Vt9sXTKwMyGcOxSmLDMnGPgqsUg7m8pe215qMLrDXw4= +github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= +github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a/go.mod h1:EFZQ978U7x8IRnstaskI3IysnWY5Ao3QgZUKOXlsAdw= +github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w= github.com/CosmWasm/wasmvm v1.5.8 h1:vrmAvDuXcNqw7XqDiVDIyopo9gNdkcvRLFTC8+wBb/A= github.com/CosmWasm/wasmvm v1.5.8/go.mod h1:2qaMB5ISmYXtpkJR2jy8xxx5Ti8sntOEf1cUgolb4QI= -github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.5.0/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20190129172621-c8b1d7a94ddf/go.mod h1:aJ4qN3TfrelA6NZ6AXsXRfmEVaYin3EDbSPJrKS8OXo= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= +github.com/Joker/jade v1.0.1-0.20190614124447-d475f43051e7/go.mod h1:6E6s8o2AE4KhCrqr6GRJjdC/gNfTdxkIXvuGZZda2VM= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/MakeNowJust/heredoc/v2 v2.0.1 h1:rlCHh70XXXv7toz95ajQWOWQnN4WNLt0TdpZYIR/J6A= github.com/MakeNowJust/heredoc/v2 v2.0.1/go.mod h1:6/2Abh5s+hc3g9nbWLe9ObDIOhaRrqsyY9MWy+4JdRM= @@ -237,28 +256,33 @@ github.com/NibiruChain/collections v0.5.0 h1:33pXpVTe1PK/tfdZlAJF1JF7AdzGNARG+iL github.com/NibiruChain/collections v0.5.0/go.mod h1:43L6yjuF0BMre/mw4gqn/kUOZz1c2Y3huZ/RQfBFrOQ= github.com/NibiruChain/cosmos-sdk v0.47.11-nibiru.3 h1:MI3c8dJjWDYvhGlgKYexu8Gg9vuaYXFG40ulirlYbx0= github.com/NibiruChain/cosmos-sdk v0.47.11-nibiru.3/go.mod h1:ADjORYzUQqQv/FxDi0H0K5gW/rAk1CiDR3ZKsExfJV0= -github.com/NibiruChain/go-ethereum v1.10.27-nibiru h1:o6lRFt57izoYwzN5cG8tnnBtJcaO3X7MjjN7PGGNCFg= -github.com/NibiruChain/go-ethereum v1.10.27-nibiru/go.mod h1:kvvL3nDceUcB+1qGUBAsVf5dW23RBR77fqxgx2PGNrQ= +github.com/NibiruChain/go-ethereum v1.13.15-nibiru h1:ZRtSXEoViqKkkqUO2XX9gllw1o+6WuIJiQP+RAzXgjM= +github.com/NibiruChain/go-ethereum v1.13.15-nibiru/go.mod h1:He1JcSQdNBjodHSb16fNibw2x72TRLsFjvs9H1ys4uY= github.com/NibiruChain/wasmd v0.44.0-nibiru h1:b+stNdbMFsl0+o4KedXyF83qRnEpB/jCiTGZZgv2h2U= github.com/NibiruChain/wasmd v0.44.0-nibiru/go.mod h1:inrbdsixQ0Kdu4mFUg1u7fn3XPOEkzqieGv0H/gR0ck= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= -github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= +github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= +github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= +github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= +github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= +github.com/aclements/go-gg v0.0.0-20170118225347-6dbb4e4fefb0/go.mod h1:55qNq4vcpkIuHowELi5C8e+1yUHtoLoOUR9QU5j7Tes= +github.com/aclements/go-moremath v0.0.0-20210112150236-f10218a38794/go.mod h1:7e+I0LQFUI9AXWxOfsQROs9xPhoJtbsyWcjJqDd4KPY= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/ajstarks/svgo v0.0.0-20210923152817-c3b6e2f0c527/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -266,9 +290,7 @@ github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRF github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= @@ -284,15 +306,20 @@ github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U= github.com/aws/aws-sdk-go v1.44.203/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= -github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= -github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= -github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= -github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= -github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= -github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= +github.com/aws/aws-sdk-go-v2 v1.21.2/go.mod h1:ErQhvNuEMhJjweavOYhxVkn2RUx7kQXVATHrjKtxIpM= +github.com/aws/aws-sdk-go-v2/config v1.18.45/go.mod h1:ZwDUgFnQgsazQTnWfeLWk5GjeqTQTL8lMkoE1UXzxdE= +github.com/aws/aws-sdk-go-v2/credentials v1.13.43/go.mod h1:zWJBz1Yf1ZtX5NGax9ZdNjhhI4rgjfgsyk6vTY1yfVg= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13/go.mod h1:f/Ib/qYjhV2/qdsf79H3QP/eRE4AkVyEf6sk7XfZ1tg= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43/go.mod h1:auo+PiyLl0n1l8A0e8RIeR8tOzYPfZZH/JNlrJ8igTQ= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37/go.mod h1:Qe+2KtKml+FEsQF/DHmDV+xjtche/hwoF75EG4UlHW8= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45/go.mod h1:lD5M20o09/LCuQ2mE62Mb/iSdSlCNuj6H5ci7tW7OsE= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37/go.mod h1:vBmDnwWXWxNPFRMmG2m/3MKOe+xEcMDo1tanpaWCcck= +github.com/aws/aws-sdk-go-v2/service/route53 v1.30.2/go.mod h1:TQZBt/WaQy+zTHoW++rnl8JBrmZ0VO6EUbVua1+foCA= +github.com/aws/aws-sdk-go-v2/service/sso v1.15.2/go.mod h1:gsL4keucRCgW+xA85ALBpRFfdSLH4kHOVSnLMSuBECo= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3/go.mod h1:a7bHA82fyUXOm+ZSWKU6PIoBxrjSprdLoM8xPYvzYVg= +github.com/aws/aws-sdk-go-v2/service/sts v1.23.2/go.mod h1:Eows6e1uQEsc4ZaHANmsPRzAKcVDrcmjjWiih2+HUUQ= +github.com/aws/smithy-go v1.15.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -302,8 +329,12 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/bits-and-blooms/bitset v1.5.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= +github.com/bits-and-blooms/bitset v1.7.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= +github.com/bits-and-blooms/bitset v1.10.0 h1:ePXTeiPEazB5+opbv5fr8umg2R/1NlzgDsyepwsSr88= +github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.21.0-beta.0.20201114000516-e9c7a5ac6401/go.mod h1:Sv4JPQ3/M+teHz9Bo5jBpkNcP0x6r7rdihlNL/7tTAs= @@ -342,7 +373,6 @@ github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= -github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -355,25 +385,29 @@ github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic= github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= +github.com/cloudflare/cloudflare-go v0.79.0/go.mod h1:gkHQf9xEubaQPEuerBuoinR9P8bf8a05Lq0X6WKy1Oc= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -388,19 +422,26 @@ github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/datadriven v1.0.0/go.mod h1:5Ib8Meh+jk1RlHIXej6Pzevx/NLlNvQB9pmSBZErGA4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/errors v1.6.1/go.mod h1:tm6FTP5G81vwJ5lC0SizQo374JNCOPrHyXGitRJoDqM= +github.com/cockroachdb/errors v1.8.1/go.mod h1:qGwQn6JmZ+oMjuLwjWzUNqblqk0xl4CVV3SQbGwK7Ac= github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= +github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v1.1.0 h1:pcFh8CdCIt2kmEpK0OIatq67Ln9uGDYY3d5XnE0LJG4= -github.com/cockroachdb/pebble v1.1.0/go.mod h1:sEHm5NOXxyiAoKWhoFxT8xMgd/f3RA6qUqQ1BXKrh2E= +github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 h1:aPEJyR4rPBvDmeyi+l/FS/VtA00IWvjeFvjen1m1l1A= +github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593/go.mod h1:6hk1eMY/u5t+Cf18q5lFMUA1Rc+Sm5I6Ra1QuPyxXCo= +github.com/cockroachdb/redact v1.0.8/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2/go.mod h1:8BT+cPK6xvFOcRlk0R8eg+OTkcqI6baNH4xAkpiYVvQ= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= github.com/coinbase/kryptology v1.8.0/go.mod h1:RYXOAPdzOGUe3qlSFkMGn58i3xUA8hmxYHksuq+8ciI= github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZr9ZvoCcA= github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M= @@ -410,18 +451,24 @@ github.com/cometbft/cometbft-db v0.11.0 h1:M3Lscmpogx5NTbb1EGyGDaFRdsoLWrUWimFEy github.com/cometbft/cometbft-db v0.11.0/go.mod h1:GDPJAC/iFHNjmZZPN8V8C1yr/eyityhi2W1hz2MGKSc= github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= -github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= -github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= +github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= +github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= github.com/consensys/gnark-crypto v0.5.3/go.mod h1:hOdPlWQV1gDLp7faZVeg8Y0iEPFaOUnCc4XeCCk96p0= +github.com/consensys/gnark-crypto v0.10.0/go.mod h1:Iq/P3HHl0ElSjsg2E1gsMwhAyxnxoKK5nVyZKd+/KhU= +github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= +github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAKs= @@ -451,9 +498,14 @@ github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFg github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 h1:d28BXYi+wUpz1KBmiF9bWrjEMacUEREV6MBi2ODnrfQ= +github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= +github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA= +github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= @@ -461,14 +513,13 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= -github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= -github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= +github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= +github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= @@ -476,9 +527,9 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= -github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= +github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= @@ -486,21 +537,24 @@ github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70d github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v1.6.2/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= +github.com/dop251/goja v0.0.0-20211022113120-dc8c55024d06/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= +github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127/go.mod h1:QMWlm50DNe14hD7t24KEqZuUdC9sOTy8W6XbCU1mlw4= github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= +github.com/dop251/goja_nodejs v0.0.0-20211022123610-8dd9abb0616d/go.mod h1:DngW8aVqWbuLRMHItjPUyqdj+HWPvnQe8V8y1nDpIbM= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -510,9 +564,8 @@ github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= -github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -526,14 +579,23 @@ github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go. github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= +github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= +github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY= +github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= -github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= +github.com/ferranbt/fastssz v0.1.2/go.mod h1:X5UPrE2u1UJjxHA8X54u04SBwdAQjG2sFtWs39YxyWs= +github.com/fjl/gencodec v0.0.0-20230517082657-f9840df7b83e/go.mod h1:AzA8Lj6YtixmJWL+wkKoBGsLWy9gFrAzi4g+5bCKwpY= +github.com/fjl/memsize v0.0.2 h1:27txuSD9or+NZlnOWdKUxeBzTAUkWCVh+4Gf2dWFOzA= +github.com/fjl/memsize v0.0.2/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= +github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= @@ -542,35 +604,50 @@ github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHk github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61/go.mod h1:Q0X6pkwTILDlzrGEckF6HKjXe48EgsY/l7K7vhY4MW8= +github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 h1:BAIP2GihuqhwdILrV+7GJel5lyPV3u1+PgzrWLc0TkE= +github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46/go.mod h1:QNpY22eby74jVhqH4WhDLDwxc/vqsern6pW+u2kbkpc= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE= github.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= -github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= -github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= +github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= +github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= +github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= +github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= @@ -581,10 +658,13 @@ github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= -github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= +github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= +github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= @@ -598,8 +678,8 @@ github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QX github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= @@ -611,19 +691,26 @@ github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MG github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= -github.com/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog= -github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= +github.com/golang-jwt/jwt v3.2.1+incompatible h1:73Z+4BJcrTC+KczS6WvTPvRGOp1WmfEP4Q1lOd9Z/+c= +github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.4.3/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= +github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/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.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc= github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -657,18 +744,25 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= +github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= +github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= +github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= +github.com/gonum/internal v0.0.0-20181124074243-f884aa714029/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= +github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A= +github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/flatbuffers v1.11.0/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= @@ -686,9 +780,10 @@ github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= @@ -714,13 +809,15 @@ github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20230207041349-798e818bf904/go.mod h1:uglQLonpP8qtYCYyzA+8c/9qtqgA3qsXGYqCPKARAFg= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/safehtml v0.0.2/go.mod h1:L4KWwDsUJdECRAEpZoBn3O64bQaywRscowZjJAzjHnU= +github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -729,6 +826,7 @@ github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/gax-go v0.0.0-20161107002406-da06d194a00e/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -751,16 +849,19 @@ github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB7 github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= @@ -773,6 +874,7 @@ github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= +github.com/guptarohit/asciigraph v0.5.5/go.mod h1:dYl5wwK4gNsnFf9Zp+l06rFiDZ5YtXM6x7SRWZ3KGag= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -784,12 +886,15 @@ github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9n github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-getter v1.7.5 h1:dT58k9hQ/vbxNMwoI5+xFYAJuv6152UNvdHokfI5wE4= github.com/hashicorp/go-getter v1.7.5/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-retryablehttp v0.7.4/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= @@ -814,9 +919,10 @@ github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= +github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 h1:X4egAf/gcS1zATw6wn4Ej8vjuVGxeHdan+bRb2ebyv4= +github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= -github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= @@ -825,31 +931,29 @@ github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0Jr github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= -github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= +github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= +github.com/hydrogen18/memlistener v0.0.0-20141126152155-54553eb933fb/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= +github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= -github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= -github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= +github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= -github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= -github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= -github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= +github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= +github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= +github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI= +github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= +github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267/go.mod h1:h1nSAbGFqGVzn6Jyl1R/iCcBUHN4g+gW1u9CoBTrb9E= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= @@ -869,52 +973,67 @@ github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= +github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= +github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/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= github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= +github.com/kataras/golog v0.0.9/go.mod h1:12HJgwBIZFNGL0EJnMRhmvGA0PQGx8VFwrZtM4CqbAk= +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/kilic/bls12-381 v0.1.0/go.mod h1:vDTTHJONJ6G+P2R74EhnyotQDTliQDnFEwhdmfzw1ig= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.9.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4= github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5 h1:2U0HzY8BJ8hVwDKIzp7y4voR9CX/nvcfymLmg2UiOio= -github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.2.1 h1:vJi+O/nMdFt0vqm8NZBI6wzALWdA2X+egi0ogNyrC/w= +github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= -github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= -github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= @@ -935,37 +1054,48 @@ github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GW github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= +github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= +github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-sqlite3 v1.14.5/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI= +github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= +github.com/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.mod h1:dSsfyI2zABAdhcbvkXqgxOxrCsbYeHCPgrZkku60dSg= +github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ= +github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/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/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= @@ -977,12 +1107,16 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4 github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= +github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= +github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= +github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -990,7 +1124,10 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= +github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= +github.com/montanaflynn/stats v0.7.0/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= +github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -1002,7 +1139,9 @@ github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= @@ -1019,7 +1158,9 @@ github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= @@ -1039,7 +1180,6 @@ github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJ github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= @@ -1051,39 +1191,44 @@ github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIw github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 h1:hDSdbBuw3Lefr6R18ax0tZ2BJeNB3NehB3trOwYBsdU= github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/philhofer/fwd v1.0.0/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/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.0/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -1092,28 +1237,35 @@ github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1: github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.1-0.20210607210712-147c58e9608a/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= -github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/protolambda/bls12-381-util v0.0.0-20220416220906-d8552aa452c7/go.mod h1:IToEjHuttnUzwZI5KBSM/LOOW3qLbbrHOEfp3SbECGY= +github.com/prysmaticlabs/gohashtree v0.0.1-alpha.0.20220714111606-acbb2962fb48/go.mod h1:4pWaT30XoEx1j8KNJf3TV+E3mQkaufn7mf+jRNb/Fuk= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -1121,12 +1273,13 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5X github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= -github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= -github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= -github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= @@ -1141,7 +1294,10 @@ github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= +github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= @@ -1149,11 +1305,10 @@ github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWR github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= -github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= @@ -1180,6 +1335,8 @@ github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -1188,10 +1345,11 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= +github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= +github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -1201,7 +1359,6 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -1212,11 +1369,13 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= @@ -1236,19 +1395,19 @@ github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhso github.com/tidwall/sjson v1.2.4/go.mod h1:098SZ494YoMWPmMO6ct4dcFnqxwj9r/gF0Etp19pSNM= github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= -github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= -github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4= -github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= -github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA= -github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= -github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= @@ -1261,21 +1420,29 @@ github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0o github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/urfave/cli/v2 v2.10.2 h1:x3p8awjp/2arX+Nl/G2040AZpOCHS/eMJJ1/a+mye4Y= -github.com/urfave/cli/v2 v2.10.2/go.mod h1:f8iq5LtQ/bLxafbdBSLPPNsgaW0l/2fYYEHhAyPlwvo= +github.com/urfave/cli/v2 v2.24.1/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= +github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= +github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= -github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= +github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -1286,6 +1453,7 @@ github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= @@ -1319,12 +1487,12 @@ go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/automaxprocs v1.5.2/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= @@ -1338,7 +1506,6 @@ golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -1350,14 +1517,30 @@ golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWP golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220511200225-c6db032c6c88/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb h1:xIApU0ow1zwMa2uL1VDNeQlNVFTWMQxZUZCMDy0Q4Us= golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +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/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1381,6 +1564,8 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91 golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1395,15 +1580,18 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1421,18 +1609,20 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1446,11 +1636,15 @@ golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfS golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.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.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= -golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/oauth2 v0.0.0-20170207211851-4464e7848382/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1478,6 +1672,7 @@ golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= +golang.org/x/perf v0.0.0-20230113213139-801c7ef9e5c5/go.mod h1:UBKtEnL8aqnd+0JHqZ+2qoMDwtuy6cYhhKNoHLBiTQc= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1493,8 +1688,10 @@ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1518,14 +1715,15 @@ golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1548,24 +1746,26 @@ golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1573,10 +1773,12 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1590,29 +1792,41 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.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.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 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.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= -golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= -golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1625,26 +1839,32 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -1653,17 +1873,18 @@ golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191126055441-b0650ceb63d9/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1697,8 +1918,9 @@ golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= +golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= 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= @@ -1709,11 +1931,13 @@ golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNq golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= -gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +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/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= +gonum.org/v1/plot v0.10.0/go.mod h1:JWIHJ7U20drSQb/aDpTetJzfC1KlAPldJLpkSy88dvQ= +google.golang.org/api v0.0.0-20170206182103-3d017632ea10/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= @@ -1775,6 +1999,7 @@ google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1782,7 +2007,6 @@ google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= @@ -1790,7 +2014,6 @@ google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= @@ -1890,6 +2113,8 @@ google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe h1: google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA= google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe h1:bQnxqljG/wqi4NTXu2+DJ3n7APcEA882QZ1JvhQAq9o= google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s= +google.golang.org/grpc v0.0.0-20170208002647-2a6bf6142e96/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1955,6 +2180,7 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= @@ -1963,10 +2189,13 @@ gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qS gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= +gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= +gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= @@ -1983,6 +2212,7 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= @@ -1996,7 +2226,6 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= @@ -2005,6 +2234,7 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8 rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= diff --git a/proto/nibiru/sudo/v1/event.proto b/proto/nibiru/sudo/v1/event.proto index 15c949d1c7..3653a7f825 100644 --- a/proto/nibiru/sudo/v1/event.proto +++ b/proto/nibiru/sudo/v1/event.proto @@ -10,8 +10,8 @@ option go_package = "github.com/NibiruChain/nibiru/v2/x/sudo/types"; // EventUpdateSudoers: ABCI event emitted upon execution of "MsgEditSudoers". message EventUpdateSudoers { - nibiru.sudo.v1.Sudoers sudoers = 1 [ (gogoproto.nullable) = false ]; + nibiru.sudo.v1.Sudoers sudoers = 1 [(gogoproto.nullable) = false]; - // Action is the type of update that occured to the "sudoers" + // Action is the type of update that occurred to the "sudoers" string action = 2; } diff --git a/x/evm/chain_config.go b/x/evm/chain_config.go index eb3662d8ac..eb389638cf 100644 --- a/x/evm/chain_config.go +++ b/x/evm/chain_config.go @@ -6,39 +6,46 @@ import ( errorsmod "cosmossdk.io/errors" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/params" ) // EthereumConfig returns an Ethereum ChainConfig for EVM state transitions. func EthereumConfig(chainID *big.Int) *params.ChainConfig { return ¶ms.ChainConfig{ - ChainID: chainID, - HomesteadBlock: big.NewInt(0), - DAOForkBlock: big.NewInt(0), - DAOForkSupport: true, - EIP150Block: big.NewInt(0), - EIP150Hash: common.Hash{}, - EIP155Block: big.NewInt(0), - EIP158Block: big.NewInt(0), - ByzantiumBlock: big.NewInt(0), - ConstantinopleBlock: big.NewInt(0), - PetersburgBlock: big.NewInt(0), - IstanbulBlock: big.NewInt(0), - MuirGlacierBlock: big.NewInt(0), - BerlinBlock: big.NewInt(0), - LondonBlock: big.NewInt(0), - ArrowGlacierBlock: big.NewInt(0), - GrayGlacierBlock: big.NewInt(0), - MergeNetsplitBlock: big.NewInt(0), - ShanghaiBlock: nil, // TODO: change this if we upgrade go-ethereum dependency - CancunBlock: nil, // TODO: change this if we upgrade go-ethereum dependency + ChainID: chainID, + HomesteadBlock: Big0, + DAOForkBlock: Big0, + DAOForkSupport: true, + EIP150Block: Big0, + EIP155Block: Big0, + EIP158Block: Big0, + ByzantiumBlock: Big0, + ConstantinopleBlock: Big0, + PetersburgBlock: Big0, + IstanbulBlock: Big0, + MuirGlacierBlock: Big0, + BerlinBlock: Big0, + LondonBlock: Big0, + ArrowGlacierBlock: Big0, + GrayGlacierBlock: Big0, + MergeNetsplitBlock: Big0, + // Shanghai switch time (nil = no fork, 0 => already on shanghai) + ShanghaiTime: ptrU64(0), + // CancunTime switch time (nil = no fork, 0 => already on cancun) + CancunTime: ptrU64(0), // 0 => already on ... + PragueTime: ptrU64(0), // 0 => already on ... + VerkleTime: ptrU64(0), // 0 => already on ... TerminalTotalDifficulty: nil, Ethash: nil, Clique: nil, } } +func ptrU64(n uint) *uint64 { + u64 := uint64(n) + return &u64 +} + // Validate performs a basic validation of the ChainConfig params. The function will return an error // if any of the block values is uninitialized (i.e. nil) or if the EIP150Hash is an invalid hash. func Validate() error { diff --git a/x/evm/const.go b/x/evm/const.go index 0d86ca1858..214529fdef 100644 --- a/x/evm/const.go +++ b/x/evm/const.go @@ -9,6 +9,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" gethcommon "github.com/ethereum/go-ethereum/common" + gethvm "github.com/ethereum/go-ethereum/core/vm" + + "github.com/NibiruChain/nibiru/v2/x/common/set" ) // BASE_FEE_MICRONIBI is the global base fee value for the network. It has a @@ -18,6 +21,19 @@ var ( BASE_FEE_WEI = NativeToWei(BASE_FEE_MICRONIBI) ) +var PRECOMPILE_ADDRS []gethcommon.Address = +// Using a set cleanly removes potential duplicates +set.New[gethcommon.Address]( + append(gethvm.PrecompiledAddressesCancun, []gethcommon.Address{ + // FunToken 0x...800 + gethcommon.HexToAddress("0x0000000000000000000000000000000000000800"), + // Wasm 0x...802 + gethcommon.HexToAddress("0x0000000000000000000000000000000000000802"), + // Oracle 0x...801 + gethcommon.HexToAddress("0x0000000000000000000000000000000000000801"), + }...)..., +).ToSlice() + const ( // ModuleName string name of module ModuleName = "evm" @@ -153,3 +169,15 @@ func ParseWeiAsMultipleOfMicronibi(weiInt *big.Int) (newWeiInt *big.Int, err err newWeiInt = NativeToWei(WeiToNative(weiInt)) return newWeiInt, nil } + +// Parses the block time as a Unix timestamp in seconds for use with +// "gethcore.MakeSigner". +func ParseBlockTimeUnixU64(ctx sdk.Context) uint64 { + blockTimeI64 := ctx.BlockTime().Unix() + if blockTimeI64 <= 0 { + return 0 + } + return uint64(blockTimeI64) +} + +var Big0 = big.NewInt(0) diff --git a/x/evm/evmtest/tx.go b/x/evm/evmtest/tx.go index a5803a3f76..5a2346860f 100644 --- a/x/evm/evmtest/tx.go +++ b/x/evm/evmtest/tx.go @@ -12,6 +12,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" gethcommon "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + core "github.com/ethereum/go-ethereum/core" gethcore "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" gethparams "github.com/ethereum/go-ethereum/params" @@ -359,16 +360,16 @@ func NewEthTxMsgFromTxData( return ethTxMsg, ethTxMsg.Sign(deps.GethSigner(), deps.Sender.KeyringSigner) } -var MOCK_GETH_MESSAGE = gethcore.NewMessage( - evm.EVM_MODULE_ADDRESS, - nil, - 0, - big.NewInt(0), - 0, - big.NewInt(0), - big.NewInt(0), - big.NewInt(0), - []byte{}, - gethcore.AccessList{}, - false, -) +var MOCK_GETH_MESSAGE = core.Message{ + To: nil, + From: evm.EVM_MODULE_ADDRESS, + Nonce: 0, + Value: evm.Big0, // amount + GasLimit: 0, + GasPrice: evm.Big0, + GasFeeCap: evm.Big0, + GasTipCap: evm.Big0, + Data: []byte{}, + AccessList: gethcore.AccessList{}, + SkipAccountChecks: false, +} diff --git a/x/evm/json_tx_args.go b/x/evm/json_tx_args.go index 2318250a74..e06616bbd2 100644 --- a/x/evm/json_tx_args.go +++ b/x/evm/json_tx_args.go @@ -11,6 +11,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/core" geth "github.com/ethereum/go-ethereum/core/types" ) @@ -158,10 +159,10 @@ func (args *JsonTxArgs) ToMsgEthTx() *MsgEthereumTx { // ToMessage converts the arguments to the Message type used by the core evm. // This assumes that setTxDefaults has been called. -func (args *JsonTxArgs) ToMessage(globalGasCap uint64, baseFeeWei *big.Int) (geth.Message, error) { +func (args *JsonTxArgs) ToMessage(globalGasCap uint64, baseFeeWei *big.Int) (core.Message, error) { // Reject invalid combinations of pre- and post-1559 fee styles if args.GasPrice != nil && (args.MaxFeePerGas != nil || args.MaxPriorityFeePerGas != nil) { - return geth.Message{}, errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified") + return core.Message{}, errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified") } // Set sender address or use zero address if none specified. @@ -228,8 +229,21 @@ func (args *JsonTxArgs) ToMessage(globalGasCap uint64, baseFeeWei *big.Int) (get nonce = uint64(*args.Nonce) } - msg := geth.NewMessage(addr, args.To, nonce, value, gas, gasPrice, gasFeeCap, gasTipCap, data, accessList, true) - return msg, nil + evmMsg := core.Message{ + To: args.To, + From: addr, + Nonce: nonce, + Value: value, // amount + GasLimit: gas, + GasPrice: gasPrice, + GasFeeCap: gasFeeCap, + GasTipCap: gasTipCap, + Data: data, + AccessList: accessList, + SkipAccountChecks: true, + } + + return evmMsg, nil } // GetFrom retrieves the transaction sender address. diff --git a/x/evm/keeper/call_contract.go b/x/evm/keeper/call_contract.go index 439e6094f4..53b388e56a 100644 --- a/x/evm/keeper/call_contract.go +++ b/x/evm/keeper/call_contract.go @@ -8,6 +8,7 @@ import ( "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" gethcommon "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" gethcore "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" @@ -43,19 +44,21 @@ func (k Keeper) CallContractWithInput( nonce := k.GetAccNonce(ctx, fromAcc) unusedBigInt := big.NewInt(0) - evmMsg := gethcore.NewMessage( - fromAcc, - contract, - nonce, - unusedBigInt, // amount - gasLimit, - unusedBigInt, // gasFeeCap - unusedBigInt, // gasTipCap - unusedBigInt, // gasPrice - contractInput, - gethcore.AccessList{}, - !commit, // isFake - ) + evmMsg := core.Message{ + To: contract, + From: fromAcc, + Nonce: nonce, + Value: unusedBigInt, // amount + GasLimit: gasLimit, + GasPrice: unusedBigInt, + GasFeeCap: unusedBigInt, + GasTipCap: unusedBigInt, + Data: contractInput, + AccessList: gethcore.AccessList{}, + BlobGasFeeCap: &big.Int{}, + BlobHashes: []gethcommon.Hash{}, + SkipAccountChecks: false, + } // Generating TxConfig with an empty tx hash as there is no actual eth tx // sent by a user diff --git a/x/evm/keeper/funtoken_from_coin.go b/x/evm/keeper/funtoken_from_coin.go index 1c31f624cd..7826487d8d 100644 --- a/x/evm/keeper/funtoken_from_coin.go +++ b/x/evm/keeper/funtoken_from_coin.go @@ -8,6 +8,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" bank "github.com/cosmos/cosmos-sdk/x/bank/types" gethcommon "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" gethcore "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" @@ -79,19 +80,20 @@ func (k *Keeper) deployERC20ForBankCoin( } input := append(embeds.SmartContract_ERC20MinterWithMetadataUpdates.Bytecode, packedArgs...) - evmMsg := gethcore.NewMessage( - evm.EVM_MODULE_ADDRESS, - nil, /*contract*/ - k.GetAccNonce(ctx, evm.EVM_MODULE_ADDRESS), - big.NewInt(0), /*amount*/ - Erc20GasLimitDeploy, - big.NewInt(0), /*gasFeeCap*/ - big.NewInt(0), /*gasTipCap*/ - big.NewInt(0), /*gasPrice*/ - input, - gethcore.AccessList{}, - false, /*isFake*/ - ) + unusedBigInt := big.NewInt(0) + evmMsg := core.Message{ + To: nil, + From: evm.EVM_MODULE_ADDRESS, + Nonce: k.GetAccNonce(ctx, evm.EVM_MODULE_ADDRESS), + Value: unusedBigInt, // amount + GasLimit: Erc20GasLimitDeploy, + GasPrice: unusedBigInt, + GasFeeCap: unusedBigInt, + GasTipCap: unusedBigInt, + Data: input, + AccessList: gethcore.AccessList{}, + SkipAccountChecks: false, + } evmCfg := k.GetEVMConfig(ctx) txConfig := k.TxConfig(ctx, gethcommon.BigToHash(big.NewInt(0))) stateDB := k.Bank.StateDB diff --git a/x/evm/keeper/funtoken_from_erc20.go b/x/evm/keeper/funtoken_from_erc20.go index 23d7dd805f..ec7b056f8e 100644 --- a/x/evm/keeper/funtoken_from_erc20.go +++ b/x/evm/keeper/funtoken_from_erc20.go @@ -10,6 +10,7 @@ import ( bank "github.com/cosmos/cosmos-sdk/x/bank/types" gethabi "github.com/ethereum/go-ethereum/accounts/abi" gethcommon "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" gethcore "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" @@ -135,19 +136,20 @@ func (k *Keeper) createFunTokenFromERC20( defer func() { k.Bank.StateDB = nil }() - evmMsg := gethcore.NewMessage( - evm.EVM_MODULE_ADDRESS, - &erc20, - 0, - big.NewInt(0), - 0, - big.NewInt(0), - big.NewInt(0), - big.NewInt(0), - []byte{}, - gethcore.AccessList{}, - false, - ) + evmMsg := core.Message{ + To: &erc20, + From: evm.EVM_MODULE_ADDRESS, + Nonce: k.GetAccNonce(ctx, evm.EVM_MODULE_ADDRESS), + Value: evm.Big0, // amount + GasLimit: 0, + GasPrice: evm.Big0, + GasFeeCap: evm.Big0, + GasTipCap: evm.Big0, + Data: []byte{}, + AccessList: gethcore.AccessList{}, + SkipAccountChecks: false, + } + evmObj := k.NewEVM(ctx, evmMsg, k.GetEVMConfig(ctx), evm.NewNoOpTracer(), stateDB) erc20Info, err := k.FindERC20Metadata(ctx, evmObj, erc20, nil) if err != nil { diff --git a/x/evm/keeper/gas_fees.go b/x/evm/keeper/gas_fees.go index 8b8a6a4959..c9e35d97b5 100644 --- a/x/evm/keeper/gas_fees.go +++ b/x/evm/keeper/gas_fees.go @@ -18,19 +18,6 @@ import ( "github.com/NibiruChain/nibiru/v2/x/evm" ) -// GetEthIntrinsicGas returns the intrinsic gas cost for the transaction -func (k *Keeper) GetEthIntrinsicGas( - ctx sdk.Context, - msg core.Message, - cfg *params.ChainConfig, - isContractCreation bool, -) (uint64, error) { - return core.IntrinsicGas( - msg.Data(), msg.AccessList(), - isContractCreation, true, true, - ) -} - // RefundGas transfers the leftover gas to the sender of the message. func (k *Keeper) RefundGas( ctx sdk.Context, @@ -163,7 +150,14 @@ func VerifyFee( accessList = txData.GetAccessList() } - intrinsicGas, err := core.IntrinsicGas(txData.GetData(), accessList, isContractCreation, true, true) + intrinsicGas, err := core.IntrinsicGas( + txData.GetData(), + accessList, + isContractCreation, + true, // isHomestead + true, // isEIP2028 + true, // isEIP3860 === isShanghai + ) if err != nil { return nil, errors.Wrapf( err, diff --git a/x/evm/keeper/grpc_query.go b/x/evm/keeper/grpc_query.go index da2274d508..649f3d6a52 100644 --- a/x/evm/keeper/grpc_query.go +++ b/x/evm/keeper/grpc_query.go @@ -379,27 +379,29 @@ func (k Keeper) EstimateGasForEvmCallType( // helper to check if a gas allowance results in an executable transaction. executable := func(gas uint64) (vmError bool, rsp *evm.MsgEthereumTxResponse, err error) { // update the message with the new gas value - evmMsg = gethcore.NewMessage( - evmMsg.From(), - evmMsg.To(), - evmMsg.Nonce(), - evmMsg.Value(), - gas, - evmMsg.GasPrice(), - evmMsg.GasFeeCap(), - evmMsg.GasTipCap(), - evmMsg.Data(), - evmMsg.AccessList(), - evmMsg.IsFake(), - ) + evmMsg = core.Message{ + To: evmMsg.To, + From: evmMsg.From, + Nonce: evmMsg.Nonce, + Value: evmMsg.Value, + GasLimit: gas, // <---- This one changed + GasPrice: evmMsg.GasPrice, + GasFeeCap: evmMsg.GasFeeCap, + GasTipCap: evmMsg.GasTipCap, + Data: evmMsg.Data, + AccessList: evmMsg.AccessList, + BlobGasFeeCap: evmMsg.BlobGasFeeCap, + BlobHashes: evmMsg.BlobHashes, + SkipAccountChecks: evmMsg.SkipAccountChecks, + } tmpCtx := ctx if fromType == evm.CallTypeRPC { tmpCtx, _ = ctx.CacheContext() - acct := k.GetAccount(tmpCtx, evmMsg.From()) + acct := k.GetAccount(tmpCtx, evmMsg.From) - from := evmMsg.From() + from := evmMsg.From if acct == nil { acc := k.accountKeeper.NewAccountWithAddress(tmpCtx, from[:]) k.accountKeeper.SetAccount(tmpCtx, acc) @@ -412,7 +414,7 @@ func (k Keeper) EstimateGasForEvmCallType( return true, nil, err } // resetting the gasMeter after increasing the sequence to have an accurate gas estimation on EVM extensions transactions - gasMeter := eth.NewInfiniteGasMeterWithLimit(evmMsg.Gas()) + gasMeter := eth.NewInfiniteGasMeterWithLimit(evmMsg.GasLimit) tmpCtx = tmpCtx.WithGasMeter(gasMeter). WithKVGasConfig(storetypes.GasConfig{}). WithTransientKVGasConfig(storetypes.GasConfig{}) @@ -495,7 +497,11 @@ func (k Keeper) TraceTx( evmCfg.BaseFeeWei = baseFeeWeiPerGas } - signer := gethcore.MakeSigner(evmCfg.ChainConfig, big.NewInt(ctx.BlockHeight())) + signer := gethcore.MakeSigner( + evmCfg.ChainConfig, + big.NewInt(ctx.BlockHeight()), + evm.ParseBlockTimeUnixU64(ctx), + ) txConfig := statedb.NewEmptyTxConfig(gethcommon.BytesToHash(ctx.HeaderHash().Bytes())) // gas used at this point corresponds to GetProposerAddress & CalculateBaseFee @@ -504,19 +510,19 @@ func (k Keeper) TraceTx( for i, tx := range req.Predecessors { ethTx := tx.AsTransaction() - msg, err := ethTx.AsMessage(signer, evmCfg.BaseFeeWei) + msg, err := core.TransactionToMessage(ethTx, signer, evmCfg.BaseFeeWei) if err != nil { continue } txConfig.TxHash = ethTx.Hash() txConfig.TxIndex = uint(i) // reset gas meter for each transaction - ctx = ctx.WithGasMeter(eth.NewInfiniteGasMeterWithLimit(msg.Gas())). + ctx = ctx.WithGasMeter(eth.NewInfiniteGasMeterWithLimit(msg.GasLimit)). WithKVGasConfig(storetypes.GasConfig{}). WithTransientKVGasConfig(storetypes.GasConfig{}) stateDB := statedb.New(ctx, &k, txConfig) - evmObj := k.NewEVM(ctx, msg, evmCfg, nil /*tracer*/, stateDB) - rsp, err := k.ApplyEvmMsg(ctx, msg, evmObj, nil /*tracer*/, false /*commit*/, txConfig.TxHash) + evmObj := k.NewEVM(ctx, *msg, evmCfg, nil /*tracer*/, stateDB) + rsp, err := k.ApplyEvmMsg(ctx, *msg, evmObj, nil /*tracer*/, false /*commit*/, txConfig.TxHash) if err != nil { continue } @@ -535,12 +541,12 @@ func (k Keeper) TraceTx( tracerConfig, _ = json.Marshal(req.TraceConfig.TracerConfig) } - msg, err := tx.AsMessage(signer, evmCfg.BaseFeeWei) + msg, err := core.TransactionToMessage(tx, signer, evmCfg.BaseFeeWei) if err != nil { return nil, err } - result, _, err := k.TraceEthTxMsg(ctx, evmCfg, txConfig, msg, req.TraceConfig, tracerConfig) + result, _, err := k.TraceEthTxMsg(ctx, evmCfg, txConfig, *msg, req.TraceConfig, tracerConfig) if err != nil { // error will be returned with detail status from traceTx return nil, err @@ -605,19 +611,19 @@ func (k Keeper) TraceCall( if err != nil { return nil, grpcstatus.Errorf(grpccodes.Internal, "failed to unpack tx data: %s", err.Error()) } - evmMsg := gethcore.NewMessage( - gethcommon.HexToAddress(msgEthTx.From), - txData.GetTo(), - txData.GetNonce(), - txData.GetValueWei(), - txData.GetGas(), - txData.GetGasPrice(), - txData.GetGasFeeCapWei(), - txData.GetGasTipCapWei(), - txData.GetData(), - txData.GetAccessList(), - false, // isFake - ) + evmMsg := core.Message{ + To: txData.GetTo(), + From: gethcommon.HexToAddress(msgEthTx.From), + Nonce: txData.GetNonce(), + Value: txData.GetValueWei(), // amount + GasLimit: txData.GetGas(), + GasPrice: txData.GetGasPrice(), + GasFeeCap: txData.GetGasFeeCapWei(), + GasTipCap: txData.GetGasTipCapWei(), + Data: txData.GetData(), + AccessList: txData.GetAccessList(), + SkipAccountChecks: false, + } result, _, err := k.TraceEthTxMsg(ctx, evmCfg, txConfig, evmMsg, req.TraceConfig, tracerConfig) if err != nil { // error will be returned with detail status from traceTx @@ -679,7 +685,11 @@ func (k Keeper) TraceBlock( tracerConfig, _ = json.Marshal(req.TraceConfig.TracerConfig) } - signer := gethcore.MakeSigner(evmCfg.ChainConfig, big.NewInt(ctx.BlockHeight())) + signer := gethcore.MakeSigner( + evmCfg.ChainConfig, + big.NewInt(ctx.BlockHeight()), + evm.ParseBlockTimeUnixU64(ctx), + ) txsLength := len(req.Txs) results := make([]*evm.TxTraceResult, 0, txsLength) @@ -690,12 +700,12 @@ func (k Keeper) TraceBlock( ethTx := tx.AsTransaction() txConfig.TxHash = ethTx.Hash() txConfig.TxIndex = uint(i) - msg, err := ethTx.AsMessage(signer, evmCfg.BaseFeeWei) + msg, err := core.TransactionToMessage(ethTx, signer, evmCfg.BaseFeeWei) if err != nil { result.Error = err.Error() continue } - traceResult, logIndex, err := k.TraceEthTxMsg(ctx, evmCfg, txConfig, msg, req.TraceConfig, tracerConfig) + traceResult, logIndex, err := k.TraceEthTxMsg(ctx, evmCfg, txConfig, *msg, req.TraceConfig, tracerConfig) if err != nil { result.Error = err.Error() } else { @@ -721,7 +731,7 @@ func (k *Keeper) TraceEthTxMsg( ctx sdk.Context, evmCfg statedb.EVMConfig, txConfig statedb.TxConfig, - msg gethcore.Message, + msg core.Message, traceConfig *evm.TraceConfig, tracerJSONConfig json.RawMessage, ) (*any, uint, error) { @@ -755,7 +765,9 @@ func (k *Keeper) TraceEthTxMsg( } if traceConfig.Tracer != "" { - if tracer, err = tracers.New(traceConfig.Tracer, tCtx, tracerJSONConfig); err != nil { + if tracer, err = tracers.DefaultDirectory.New( + traceConfig.Tracer, tCtx, tracerJSONConfig, + ); err != nil { return nil, 0, grpcstatus.Error(grpccodes.Internal, err.Error()) } } @@ -785,7 +797,7 @@ func (k *Keeper) TraceEthTxMsg( // and not kvstore actions // 3. Setup an empty transient KV gas config for transient gas to be // calculated by opcodes - ctx = ctx.WithGasMeter(eth.NewInfiniteGasMeterWithLimit(msg.Gas())). + ctx = ctx.WithGasMeter(eth.NewInfiniteGasMeterWithLimit(msg.GasLimit)). WithKVGasConfig(storetypes.GasConfig{}). WithTransientKVGasConfig(storetypes.GasConfig{}) stateDB := statedb.New(ctx, k, txConfig) diff --git a/x/evm/keeper/keeper.go b/x/evm/keeper/keeper.go index 19de7266d9..062913b1ec 100644 --- a/x/evm/keeper/keeper.go +++ b/x/evm/keeper/keeper.go @@ -17,7 +17,6 @@ import ( gethcommon "github.com/ethereum/go-ethereum/common" "github.com/NibiruChain/nibiru/v2/app/appconst" - "github.com/NibiruChain/nibiru/v2/x/common/omap" "github.com/NibiruChain/nibiru/v2/x/evm" ) @@ -43,12 +42,6 @@ type Keeper struct { accountKeeper evm.AccountKeeper stakingKeeper evm.StakingKeeper - // precompiles is the set of active precompiled contracts used in the EVM. - // Precompiles are special, built-in contract interfaces that exist at - // predefined address and run custom logic outside of what is possible only - // in Solidity. - precompiles omap.SortedMap[gethcommon.Address, vm.PrecompiledContract] - // tracer: Configures the output type for a geth `vm.EVMLogger`. Tracer types // include "access_list", "json", "struct", and "markdown". If any other // value is used, a no operation tracer is set. diff --git a/x/evm/keeper/msg_server.go b/x/evm/keeper/msg_server.go index adc627dc31..0857434ac8 100644 --- a/x/evm/keeper/msg_server.go +++ b/x/evm/keeper/msg_server.go @@ -17,7 +17,7 @@ import ( gethcore "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/params" + "github.com/holiman/uint256" "github.com/NibiruChain/nibiru/v2/eth" "github.com/NibiruChain/nibiru/v2/x/evm" @@ -48,7 +48,9 @@ func (k *Keeper) EthereumTx( evmCfg := k.GetEVMConfig(ctx) // get the signer according to the chain rules from the config and block height - evmMsg, err := tx.AsMessage(gethcore.NewLondonSigner(evmCfg.ChainConfig.ChainID), evmCfg.BaseFeeWei) + evmMsg, err := core.TransactionToMessage( + tx, gethcore.NewLondonSigner(evmCfg.ChainConfig.ChainID), evmCfg.BaseFeeWei, + ) if err != nil { return nil, errors.Wrap(err, "failed to convert ethereum transaction as core message") } @@ -61,10 +63,10 @@ func (k *Keeper) EthereumTx( defer func() { k.Bank.StateDB = nil }() - evmObj := k.NewEVM(ctx, evmMsg, evmCfg, nil /*tracer*/, stateDB) + evmObj := k.NewEVM(ctx, *evmMsg, evmCfg, nil /*tracer*/, stateDB) evmResp, err = k.ApplyEvmMsg( ctx, - evmMsg, + *evmMsg, evmObj, nil, /*tracer*/ true, /*commit*/ @@ -82,15 +84,15 @@ func (k *Keeper) EthereumTx( // refund gas in order to match the Ethereum gas consumption instead of the // default SDK one. refundGas := uint64(0) - if evmMsg.Gas() > evmResp.GasUsed { - refundGas = evmMsg.Gas() - evmResp.GasUsed + if evmMsg.GasLimit > evmResp.GasUsed { + refundGas = evmMsg.GasLimit - evmResp.GasUsed } weiPerGas := txMsg.EffectiveGasPriceWeiPerGas(evmCfg.BaseFeeWei) - if err = k.RefundGas(ctx, evmMsg.From(), refundGas, weiPerGas); err != nil { - return nil, errors.Wrapf(err, "error refunding leftover gas to sender %s", evmMsg.From()) + if err = k.RefundGas(ctx, evmMsg.From, refundGas, weiPerGas); err != nil { + return nil, errors.Wrapf(err, "error refunding leftover gas to sender %s", evmMsg.From) } - err = k.EmitEthereumTxEvents(ctx, tx.To(), tx.Type(), evmMsg, evmResp) + err = k.EmitEthereumTxEvents(ctx, tx.To(), tx.Type(), *evmMsg, evmResp) if err != nil { return nil, errors.Wrap(err, "error emitting ethereum tx events") } @@ -119,7 +121,7 @@ func (k *Keeper) NewEVM( evmCfg statedb.EVMConfig, tracer vm.EVMLogger, stateDB vm.StateDB, -) *vm.EVM { +) (evmObj *vm.EVM) { pseudoRandomBytes := make([]byte, 8) binary.BigEndian.PutUint64(pseudoRandomBytes, uint64(ctx.BlockHeader().Time.UnixNano())) pseudoRandom := crypto.Keccak256Hash(append(pseudoRandomBytes, ctx.BlockHeader().LastCommitHash...)) @@ -131,20 +133,18 @@ func (k *Keeper) NewEVM( Coinbase: evmCfg.BlockCoinbase, GasLimit: eth.BlockGasLimit(ctx), BlockNumber: big.NewInt(ctx.BlockHeight()), - Time: big.NewInt(ctx.BlockHeader().Time.Unix()), + Time: evm.ParseBlockTimeUnixU64(ctx), Difficulty: big.NewInt(0), // unused. Only required in PoW context BaseFee: evmCfg.BaseFeeWei, Random: &pseudoRandom, } - txCtx := core.NewEVMTxContext(msg) + txCtx := core.NewEVMTxContext(&msg) if tracer == nil { tracer = k.Tracer(ctx, msg, evmCfg.ChainConfig) } vmConfig := k.VMConfig(ctx, &evmCfg, tracer) - theEvm := vm.NewEVM(blockCtx, txCtx, stateDB, evmCfg.ChainConfig, vmConfig) - theEvm.WithPrecompiles(k.precompiles.InternalData(), k.precompiles.Keys()) - return theEvm + return vm.NewEVM(blockCtx, txCtx, stateDB, evmCfg.ChainConfig, vmConfig) } // GetHashFn implements vm.GetHashFunc for Ethermint. It handles 3 cases: @@ -259,22 +259,22 @@ func (k *Keeper) ApplyEvmMsg( commit bool, txHash gethcommon.Hash, ) (resp *evm.MsgEthereumTxResponse, err error) { - gasRemaining := msg.Gas() + gasRemaining := msg.GasLimit - // Allow the tracer captures the tx level events, mainly the gas consumption. - vmCfg := evmObj.Config - if vmCfg.Debug { - vmCfg.Tracer.CaptureTxStart(gasRemaining) - defer func() { - vmCfg.Tracer.CaptureTxEnd(gasRemaining) - }() - } + // Allow the tracer to capture tx level events pertaining to gas consumption. + evmObj.Config.Tracer.CaptureTxStart(gasRemaining) + defer func() { + evmObj.Config.Tracer.CaptureTxEnd(gasRemaining) + }() - contractCreation := msg.To() == nil + contractCreation := msg.To == nil intrinsicGasCost, err := core.IntrinsicGas( - msg.Data(), msg.AccessList(), - contractCreation, true, true, + msg.Data, msg.AccessList, + contractCreation, + true, // isHomestead + true, // isEIP2028 + true, // isEIP3860 === isShanghai ) if err != nil { // should have already been checked on Ante Handler @@ -300,43 +300,48 @@ func (k *Keeper) ApplyEvmMsg( // access list preparation is moved from ante handler to here, because it's // needed when `ApplyMessage` is called under contexts where ante handlers // are not run, for example `eth_call` and `eth_estimateGas`. - evmObj.StateDB.PrepareAccessList( - msg.From(), - msg.To(), - evmObj.ActivePrecompiles(params.Rules{}), - msg.AccessList(), + evmObj.StateDB.Prepare( + // rules + evmObj.ChainConfig().Rules( + big.NewInt(ctx.BlockHeight()), false, evm.ParseBlockTimeUnixU64(ctx), + ), + msg.From, // sender + evmObj.Context.Coinbase, // coinbase + msg.To, + evm.PRECOMPILE_ADDRS, + msg.AccessList, // accessList ) - msgWei, err := ParseWeiAsMultipleOfMicronibi(msg.Value()) + msgWei, err := ParseWeiAsMultipleOfMicronibi(msg.Value) if err != nil { - return nil, errors.Wrapf(err, "ApplyEvmMsg: invalid wei amount %s", msg.Value()) + return nil, errors.Wrapf(err, "ApplyEvmMsg: invalid wei amount %s", msg.Value) } // take over the nonce management from evm: // - reset sender's nonce to msg.Nonce() before calling evm. // - increase sender's nonce by one no matter the result. - evmObj.StateDB.SetNonce(msg.From(), msg.Nonce()) + evmObj.StateDB.SetNonce(msg.From, msg.Nonce) var returnBz []byte var vmErr error if contractCreation { returnBz, _, gasRemaining, vmErr = evmObj.Create( - vm.AccountRef(msg.From()), - msg.Data(), + vm.AccountRef(msg.From), + msg.Data, gasRemaining, msgWei, ) } else { returnBz, gasRemaining, vmErr = evmObj.Call( - vm.AccountRef(msg.From()), - *msg.To(), - msg.Data(), + vm.AccountRef(msg.From), + *msg.To, + msg.Data, gasRemaining, msgWei, ) } // Increment nonce after processing the message - evmObj.StateDB.SetNonce(msg.From(), msg.Nonce()+1) + evmObj.StateDB.SetNonce(msg.From, msg.Nonce+1) // EVM execution error needs to be available for the JSON-RPC client var vmError string @@ -345,7 +350,7 @@ func (k *Keeper) ApplyEvmMsg( } // process gas refunds (we refund a portion of the unused gas) - gasUsed := msg.Gas() - gasRemaining + gasUsed := msg.GasLimit - gasRemaining // please see https://eips.ethereum.org/EIPS/eip-3529 for why we do refunds refundAmount := gasToRefund(evmObj.StateDB.GetRefund(), gasUsed) gasRemaining += refundAmount @@ -359,9 +364,9 @@ func (k *Keeper) ApplyEvmMsg( Hash: txHash.Hex(), } - if gasRemaining > msg.Gas() { // rare case of overflow - evmResp.GasUsed = msg.Gas() // cap the gas used to the original gas limit - return evmResp, errors.Wrapf(core.ErrGasUintOverflow, "ApplyEvmMsg: message gas limit (%d) < leftover gas (%d)", msg.Gas(), gasRemaining) + if gasRemaining > msg.GasLimit { // rare case of overflow + evmResp.GasUsed = msg.GasLimit // cap the gas used to the original gas limit + return evmResp, errors.Wrapf(core.ErrGasUintOverflow, "ApplyEvmMsg: message gas limit (%d) < leftover gas (%d)", msg.GasLimit, gasRemaining) } // The dirty states in `StateDB` is either committed or discarded after return @@ -374,21 +379,33 @@ func (k *Keeper) ApplyEvmMsg( return evmResp, nil } -func ParseWeiAsMultipleOfMicronibi(weiInt *big.Int) (newWeiInt *big.Int, err error) { +func ParseWeiAsMultipleOfMicronibi(weiInt *big.Int) ( + newWeiInt *uint256.Int, err error, +) { // if "weiValue" is nil, 0, or negative, early return - if weiInt == nil || !(weiInt.Cmp(big.NewInt(0)) > 0) { - return weiInt, nil + cmpSign := weiInt.Cmp(big.NewInt(0)) + if weiInt == nil { + return (*uint256.Int)(nil), nil + } else if cmpSign == 0 { + return uint256.NewInt(0), nil + } else if cmpSign < 0 { + return newWeiInt, fmt.Errorf("Wei parsing error: negative wei value cannot be a uint256 (%s)", weiInt) } // err if weiInt is too small tenPow12 := new(big.Int).Exp(big.NewInt(10), big.NewInt(12), nil) if weiInt.Cmp(tenPow12) < 0 { - return weiInt, fmt.Errorf( - "wei amount is too small (%s), cannot transfer less than 1 micronibi. 1 NIBI == 10^6 micronibi == 10^18 wei", weiInt) + return newWeiInt, fmt.Errorf( + "Wei parsing error: wei amount is too small (%s), cannot transfer less than 1 micronibi. 1 NIBI == 10^6 micronibi == 10^18 wei", weiInt) } // truncate to highest micronibi amount - newWeiInt = evm.NativeToWei(evm.WeiToNative(weiInt)) + newWeiInt, overflowed := uint256.FromBig( + evm.NativeToWei(evm.WeiToNative(weiInt)), + ) + if overflowed { + return newWeiInt, fmt.Errorf("Wei parsing error: overflow occurred in conversion from big.Int to uint256.Int for wei value %s", weiInt) + } return newWeiInt, nil } @@ -513,19 +530,22 @@ func (k Keeper) convertCoinToEvmBornCoin( if err != nil { return nil, err } - evmMsg := gethcore.NewMessage( - evm.EVM_MODULE_ADDRESS, - &erc20Addr, - k.GetAccNonce(ctx, evm.EVM_MODULE_ADDRESS), - big.NewInt(0), - Erc20GasLimitExecute, - big.NewInt(0), - big.NewInt(0), - big.NewInt(0), - contractInput, - gethcore.AccessList{}, - true, - ) + unusedBigInt := big.NewInt(0) + evmMsg := core.Message{ + To: &erc20Addr, + From: evm.EVM_MODULE_ADDRESS, + Nonce: k.GetAccNonce(ctx, evm.EVM_MODULE_ADDRESS), + Value: unusedBigInt, // amount + GasLimit: Erc20GasLimitExecute, + GasPrice: unusedBigInt, + GasFeeCap: unusedBigInt, + GasTipCap: unusedBigInt, + Data: contractInput, + AccessList: gethcore.AccessList{}, + BlobGasFeeCap: &big.Int{}, + BlobHashes: []gethcommon.Hash{}, + SkipAccountChecks: true, + } txConfig := k.TxConfig(ctx, gethcommon.Hash{}) stateDB := k.Bank.StateDB if stateDB == nil { @@ -626,19 +646,22 @@ func (k Keeper) convertCoinToEvmBornERC20( if err != nil { return nil, err } - evmMsg := gethcore.NewMessage( - evm.EVM_MODULE_ADDRESS, - &erc20Addr, - k.GetAccNonce(ctx, evm.EVM_MODULE_ADDRESS), - big.NewInt(0), - Erc20GasLimitExecute, - big.NewInt(0), - big.NewInt(0), - big.NewInt(0), - contractInput, - gethcore.AccessList{}, - true, - ) + unusedBigInt := big.NewInt(0) + evmMsg := core.Message{ + To: &erc20Addr, + From: evm.EVM_MODULE_ADDRESS, + Nonce: k.GetAccNonce(ctx, evm.EVM_MODULE_ADDRESS), + Value: unusedBigInt, // amount + GasLimit: Erc20GasLimitExecute, + GasPrice: unusedBigInt, + GasFeeCap: unusedBigInt, + GasTipCap: unusedBigInt, + Data: contractInput, + AccessList: gethcore.AccessList{}, + BlobGasFeeCap: &big.Int{}, + BlobHashes: []gethcommon.Hash{}, + SkipAccountChecks: true, + } evmObj := k.NewEVM(ctx, evmMsg, k.GetEVMConfig(ctx), nil /*tracer*/, stateDB) _, evmResp, err := k.ERC20().Transfer( erc20Addr, @@ -680,7 +703,7 @@ func (k *Keeper) EmitEthereumTxEvents( ctx sdk.Context, recipient *gethcommon.Address, txType uint8, - msg gethcore.Message, + msg core.Message, evmResp *evm.MsgEthereumTxResponse, ) error { // Typed event: eth.evm.v1.EventEthereumTx @@ -708,7 +731,7 @@ func (k *Keeper) EmitEthereumTxEvents( sdk.NewEvent( sdk.EventTypeMessage, sdk.NewAttribute(sdk.AttributeKeyModule, evm.ModuleName), - sdk.NewAttribute(sdk.AttributeKeySender, msg.From().Hex()), + sdk.NewAttribute(sdk.AttributeKeySender, msg.From.Hex()), sdk.NewAttribute(evm.MessageEventAttrTxType, fmt.Sprintf("%d", txType)), ), ) @@ -716,21 +739,21 @@ func (k *Keeper) EmitEthereumTxEvents( // Emit typed events if !evmResp.Failed() { if recipient == nil { // contract creation - contractAddr := crypto.CreateAddress(msg.From(), msg.Nonce()) + contractAddr := crypto.CreateAddress(msg.From, msg.Nonce) _ = ctx.EventManager().EmitTypedEvent(&evm.EventContractDeployed{ - Sender: msg.From().Hex(), + Sender: msg.From.Hex(), ContractAddr: contractAddr.String(), }) - } else if len(msg.Data()) > 0 { // contract executed + } else if len(msg.Data) > 0 { // contract executed _ = ctx.EventManager().EmitTypedEvent(&evm.EventContractExecuted{ - Sender: msg.From().Hex(), - ContractAddr: msg.To().String(), + Sender: msg.From.Hex(), + ContractAddr: msg.To.String(), }) - } else if msg.Value().Cmp(big.NewInt(0)) > 0 { // evm transfer + } else if msg.Value.Cmp(big.NewInt(0)) > 0 { // evm transfer _ = ctx.EventManager().EmitTypedEvent(&evm.EventTransfer{ - Sender: msg.From().Hex(), - Recipient: msg.To().Hex(), - Amount: msg.Value().String(), + Sender: msg.From.Hex(), + Recipient: msg.To.Hex(), + Amount: msg.Value.String(), }) } } diff --git a/x/evm/keeper/precompiles.go b/x/evm/keeper/precompiles.go deleted file mode 100644 index 3b1a0e4805..0000000000 --- a/x/evm/keeper/precompiles.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) 2023-2024 Nibi, Inc. -package keeper - -import ( - gethcommon "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/vm" - - "github.com/NibiruChain/nibiru/v2/x/common/omap" -) - -func (k *Keeper) AddPrecompiles( - precompileMap map[gethcommon.Address]vm.PrecompiledContract, -) { - if k.precompiles.Len() == 0 { - k.precompiles = omap.SortedMap_EthAddress( - precompileMap, - ) - } else { - for addr, precompile := range precompileMap { - k.precompiles.Set(addr, precompile) - } - } -} - -func (k *Keeper) IsPrecompile(addr gethcommon.Address) bool { - return k.precompiles.Has(addr) -} diff --git a/x/evm/keeper/vm_config.go b/x/evm/keeper/vm_config.go index 1bf53fbbd7..1be50d16b9 100644 --- a/x/evm/keeper/vm_config.go +++ b/x/evm/keeper/vm_config.go @@ -38,13 +38,7 @@ func (k *Keeper) TxConfig( func (k Keeper) VMConfig( ctx sdk.Context, cfg *statedb.EVMConfig, tracer vm.EVMLogger, ) vm.Config { - var debug bool - if _, ok := tracer.(evm.NoOpTracer); !ok { - debug = true - } - return vm.Config{ - Debug: debug, Tracer: tracer, NoBaseFee: false, ExtraEips: cfg.Params.EIPs(), diff --git a/x/evm/msg.go b/x/evm/msg.go index c0839bd80d..bff8e584ea 100644 --- a/x/evm/msg.go +++ b/x/evm/msg.go @@ -309,8 +309,11 @@ func (msg MsgEthereumTx) AsTransaction() *gethcore.Transaction { } // AsMessage creates an Ethereum core.Message from the msg fields -func (msg MsgEthereumTx) AsMessage(signer gethcore.Signer, baseFeeWei *big.Int) (core.Message, error) { - return msg.AsTransaction().AsMessage(signer, baseFeeWei) +func (msg MsgEthereumTx) AsMessage( + signer gethcore.Signer, + baseFeeWei *big.Int, +) (*core.Message, error) { + return core.TransactionToMessage(msg.AsTransaction(), signer, baseFeeWei) } // GetSender extracts the sender address from the signature values using the latest signer for the given chainID. diff --git a/x/evm/precompile/funtoken.go b/x/evm/precompile/funtoken.go index 80b2c70950..2224c1d9b3 100644 --- a/x/evm/precompile/funtoken.go +++ b/x/evm/precompile/funtoken.go @@ -110,7 +110,7 @@ func (p precompileFunToken) Run( return bz, err } -func PrecompileFunToken(keepers keepers.PublicKeepers) vm.PrecompiledContract { +func PrecompileFunToken(keepers keepers.PublicKeepers) NibiruCustomPrecompile { return precompileFunToken{ evmKeeper: keepers.EvmKeeper, } diff --git a/x/evm/precompile/oracle.go b/x/evm/precompile/oracle.go index 12f559515b..a7a8ea01d8 100644 --- a/x/evm/precompile/oracle.go +++ b/x/evm/precompile/oracle.go @@ -71,7 +71,7 @@ func (p precompileOracle) Run( return bz, err } -func PrecompileOracle(keepers keepers.PublicKeepers) vm.PrecompiledContract { +func PrecompileOracle(keepers keepers.PublicKeepers) NibiruCustomPrecompile { return precompileOracle{ oracleKeeper: keepers.OracleKeeper, } diff --git a/x/evm/precompile/precompile.go b/x/evm/precompile/precompile.go index 40d7f04c86..7ab75b2fb1 100644 --- a/x/evm/precompile/precompile.go +++ b/x/evm/precompile/precompile.go @@ -39,22 +39,24 @@ import ( // - A map of Ethereum addresses to PrecompiledContract implementations. func InitPrecompiles( k keepers.PublicKeepers, -) (precompiles map[gethcommon.Address]vm.PrecompiledContract) { - precompiles = make(map[gethcommon.Address]vm.PrecompiledContract) - - // Default precompiles - for addr, pc := range vm.PrecompiledContractsBerlin { - precompiles[addr] = pc - } - +) { // Custom precompiles - for _, precompileSetupFn := range []func(k keepers.PublicKeepers) vm.PrecompiledContract{ + for _, precompileSetupFn := range []func(k keepers.PublicKeepers) NibiruCustomPrecompile{ PrecompileFunToken, PrecompileWasm, PrecompileOracle, } { pc := precompileSetupFn(k) - precompiles[pc.Address()] = pc + for _, precompileMap := range []map[gethcommon.Address]vm.PrecompiledContract{ + vm.PrecompiledContractsHomestead, + vm.PrecompiledContractsByzantium, + vm.PrecompiledContractsIstanbul, + vm.PrecompiledContractsBerlin, + vm.PrecompiledContractsCancun, + vm.PrecompiledContractsBLS, + } { + precompileMap[pc.Address()] = pc + } } // TODO: feat(evm): implement precompiled contracts for ibc transfer @@ -64,8 +66,11 @@ func InitPrecompiles( // Note that liquid staked assets can be a useful alternative to adding a // staking precompile. // Check if there is sufficient demand for this. +} - return precompiles +type NibiruCustomPrecompile interface { + vm.PrecompiledContract + Address() gethcommon.Address } // methodById: Looks up an ABI method by the 4-byte id. diff --git a/x/evm/precompile/wasm.go b/x/evm/precompile/wasm.go index bfb9ff9d86..cc33335db8 100644 --- a/x/evm/precompile/wasm.go +++ b/x/evm/precompile/wasm.go @@ -114,7 +114,7 @@ type Wasm struct { wasmkeeper.Keeper } -func PrecompileWasm(keepers keepers.PublicKeepers) vm.PrecompiledContract { +func PrecompileWasm(keepers keepers.PublicKeepers) NibiruCustomPrecompile { return precompileWasm{ Keeper: keepers.EvmKeeper, Wasm: Wasm{ diff --git a/x/evm/statedb/interfaces.go b/x/evm/statedb/interfaces.go index c242771ca1..0d646a7716 100644 --- a/x/evm/statedb/interfaces.go +++ b/x/evm/statedb/interfaces.go @@ -28,6 +28,4 @@ type Keeper interface { // DeleteAccount handles contract's suicide call, clearing the balance, // contract bytecode, contract state, and its native account. DeleteAccount(ctx sdk.Context, addr common.Address) error - - IsPrecompile(addr common.Address) bool } diff --git a/x/evm/statedb/journal.go b/x/evm/statedb/journal.go index acbba5eabf..58b6a02812 100644 --- a/x/evm/statedb/journal.go +++ b/x/evm/statedb/journal.go @@ -361,3 +361,23 @@ func (ch PrecompileCalled) Revert(s *StateDB) { func (ch PrecompileCalled) Dirtied() *common.Address { return nil } + +// ------------------------------------------------------ +// transientStorageChange represents a [JournalChange] for whenver a transient +// storage slot changes. +var _ JournalChange = transientStorageChange{} + +// transientStorageChange: [JournalChange] implementation for whenver a transient +// storage slot changes +type transientStorageChange struct { + address *common.Address + key, prevValue common.Hash +} + +func (ch transientStorageChange) Revert(s *StateDB) { + s.transientStorage.Set(*ch.address, ch.key, ch.prevValue) +} + +func (ch transientStorageChange) Dirtied() *common.Address { + return nil +} diff --git a/x/evm/statedb/journal_test.go b/x/evm/statedb/journal_test.go index 2b85564248..8e85883bf0 100644 --- a/x/evm/statedb/journal_test.go +++ b/x/evm/statedb/journal_test.go @@ -9,6 +9,7 @@ import ( "github.com/MakeNowJust/heredoc/v2" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/ethereum/go-ethereum/core/vm" + "github.com/holiman/uint256" serverconfig "github.com/NibiruChain/nibiru/v2/app/server/config" "github.com/NibiruChain/nibiru/v2/x/common" @@ -58,11 +59,11 @@ func (s *Suite) TestCommitRemovesDirties_OnlyStateDB() { randomAcc := evmtest.NewEthPrivAcc().EthAddr balDelta := evm.NativeToWei(big.NewInt(4)) // 2 dirties from [createObjectChange, balanceChange] - stateDB.AddBalance(randomAcc, balDelta) + stateDB.AddBalanceSigned(randomAcc, balDelta) // 1 dirties from [balanceChange] - stateDB.AddBalance(randomAcc, balDelta) + stateDB.AddBalanceSigned(randomAcc, balDelta) // 1 dirties from [balanceChange] - stateDB.SubBalance(randomAcc, balDelta) + stateDB.AddBalanceSigned(randomAcc, balDelta) if stateDB.DebugDirtiesCount() != 4 { debugDirtiesCountMismatch(stateDB, s.T()) s.FailNow("expected 4 dirty journal changes") @@ -126,7 +127,7 @@ func (s *Suite) TestContractCallsAnotherContract() { erc20, contractInput, serverconfig.DefaultEthCallGasLimit, - big.NewInt(0), + uint256.NewInt(0), ) s.Require().NoError(err) if stateDB.DebugDirtiesCount() != 2 { @@ -153,7 +154,7 @@ func (s *Suite) TestContractCallsAnotherContract() { erc20, contractInput, serverconfig.DefaultEthCallGasLimit, - big.NewInt(0), + uint256.NewInt(0), ) s.Require().ErrorContains(err, vm.ErrExecutionReverted.Error()) }) diff --git a/x/evm/statedb/state_object.go b/x/evm/statedb/state_object.go index 28ba2d85a9..8358f576d3 100644 --- a/x/evm/statedb/state_object.go +++ b/x/evm/statedb/state_object.go @@ -4,6 +4,7 @@ package statedb import ( "bytes" + "fmt" "math/big" "sort" @@ -93,6 +94,21 @@ func (s Storage) SortedKeys() []common.Hash { return keys } +func (s Storage) Copy() Storage { + cpy := make(Storage, len(s)) + for key, value := range s { + cpy[key] = value + } + return cpy +} + +func (s Storage) String() (str string) { + for key, value := range s { + str += fmt.Sprintf("%X : %X\n", key, value) + } + return +} + // stateObject represents the state of a Nibiru EVM account. // It encapsulates both the account data (balance, nonce, code) and the contract // storage state. stateObject serves as an in-memory cache and staging area for @@ -122,12 +138,17 @@ type stateObject struct { address common.Address // flags - DirtyCode bool - Suicided bool + DirtyCode bool + Suicided bool // True if the stateObject has been self destructed + createdThisBlock bool // True if the stateObject was created this block } // newObject creates a state object. -func newObject(db *StateDB, address common.Address, account Account) *stateObject { +func newObject(db *StateDB, address common.Address, account *Account) *stateObject { + createdThisBlock := account == nil + if createdThisBlock { + account = &Account{} + } if account.BalanceNative == nil { account.BalanceNative = new(big.Int) } @@ -138,9 +159,10 @@ func newObject(db *StateDB, address common.Address, account Account) *stateObjec db: db, address: address, // Reflect the micronibi (unibi) balance in wei - account: account.ToWei(), - OriginStorage: make(Storage), - DirtyStorage: make(Storage), + account: account.ToWei(), + OriginStorage: make(Storage), + DirtyStorage: make(Storage), + createdThisBlock: createdThisBlock, } } diff --git a/x/evm/statedb/statedb.go b/x/evm/statedb/statedb.go index f711c6cb3d..47b67ea029 100644 --- a/x/evm/statedb/statedb.go +++ b/x/evm/statedb/statedb.go @@ -28,6 +28,8 @@ import ( gethcore "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" + gethparams "github.com/ethereum/go-ethereum/params" + "github.com/holiman/uint256" ) var _ vm.StateDB = &StateDB{} @@ -49,7 +51,8 @@ type StateDB struct { validRevisions []revision nextRevisionID int - stateObjects map[common.Address]*stateObject + stateObjects map[common.Address]*stateObject + transientStorage transientStorage txConfig TxConfig @@ -90,8 +93,7 @@ func New(ctx sdk.Context, keeper Keeper, txConfig TxConfig) *StateDB { stateObjects: make(map[common.Address]*stateObject), Journal: newJournal(), accessList: newAccessList(), - - txConfig: txConfig, + txConfig: txConfig, } } @@ -169,12 +171,12 @@ func (s *StateDB) Empty(addr common.Address) bool { } // GetBalance retrieves the balance from the given address or 0 if object not found -func (s *StateDB) GetBalance(addr common.Address) *big.Int { +func (s *StateDB) GetBalance(addr common.Address) *uint256.Int { stateObject := s.getStateObject(addr) if stateObject != nil { - return stateObject.Balance() + return uint256.MustFromBig(stateObject.Balance()) } - return common.Big0 + return uint256.NewInt(0) } // GetNonce returns the nonce of account, 0 if not exists. @@ -271,7 +273,7 @@ func (s *StateDB) getStateObject(addr common.Address) *stateObject { } // Insert into the live set - obj := newObject(s, addr, *account) + obj := newObject(s, addr, account) s.setStateObject(obj) return obj } @@ -290,7 +292,7 @@ func (s *StateDB) getOrNewStateObject(addr common.Address) *stateObject { func (s *StateDB) createObject(addr common.Address) (newobj, prev *stateObject) { prev = s.getStateObject(addr) - newobj = newObject(s, addr, Account{}) + newobj = newObject(s, addr, nil) if prev == nil { s.Journal.append(createObjectChange{account: &addr}) } else { @@ -351,18 +353,34 @@ func (s *StateDB) setStateObject(object *stateObject) { */ // AddBalance adds amount to the account associated with addr. -func (s *StateDB) AddBalance(addr common.Address, wei *big.Int) { +func (s *StateDB) AddBalance(addr common.Address, wei *uint256.Int) { stateObject := s.getOrNewStateObject(addr) if stateObject != nil { - stateObject.AddBalance(wei) + stateObject.AddBalance(wei.ToBig()) + } +} + +func (s *StateDB) AddBalanceSigned(addr common.Address, wei *big.Int) { + weiSign := wei.Sign() + weiAbs, isOverflow := uint256.FromBig(new(big.Int).Abs(wei)) + if isOverflow { + // TODO: Is there a better strategy than panicking here? + panic(fmt.Errorf( + "uint256 overflow occurred for big.Int value %s", wei)) + } + + if weiSign >= 0 { + s.AddBalance(addr, weiAbs) + } else { + s.SubBalance(addr, weiAbs) } } // SubBalance subtracts amount from the account associated with addr. -func (s *StateDB) SubBalance(addr common.Address, wei *big.Int) { +func (s *StateDB) SubBalance(addr common.Address, wei *uint256.Int) { stateObject := s.getOrNewStateObject(addr) if stateObject != nil { - stateObject.SubBalance(wei) + stateObject.SubBalance(wei.ToBig()) } } @@ -397,15 +415,15 @@ func (s *StateDB) SetState(addr common.Address, key, value common.Hash) { } } -// Suicide marks the given account as suicided. +// SelfDestruct marks the given account as suicided. // This clears the account balance. // // The account's state object is still available until the state is committed, -// getStateObject will return a non-nil account after Suicide. -func (s *StateDB) Suicide(addr common.Address) bool { +// getStateObject will return a non-nil account after [SelfDestruct]. +func (s *StateDB) SelfDestruct(addr common.Address) { stateObject := s.getStateObject(addr) if stateObject == nil { - return false + return } s.Journal.append(suicideChange{ account: &addr, @@ -414,12 +432,30 @@ func (s *StateDB) Suicide(addr common.Address) bool { }) stateObject.Suicided = true stateObject.account.BalanceWei = new(big.Int) +} - return true +func (s *StateDB) HasSelfDestructed(addr common.Address) bool { + stateObject := s.getStateObject(addr) + if stateObject == nil { + return false + } + return stateObject.Suicided } -// PrepareAccessList handles the preparatory steps for executing a state transition with -// regards to both EIP-2929 and EIP-2930: +// Selfdestruct6780 calls SelfDesrtuct only if the [stateObject] corresponding to +// the given "addr" was created this block. +func (s *StateDB) Selfdestruct6780(addr common.Address) { + stateObject := s.getStateObject(addr) + if stateObject == nil { + return + } + if stateObject.createdThisBlock { + s.SelfDestruct(addr) + } +} + +// PrepareAccessList handles the preparatory steps for executing a state +// transition with regards to both EIP-2929 and EIP-2930: // // - Add sender to access list (2929) // - Add destination to access list (2929) @@ -431,7 +467,7 @@ func (s *StateDB) PrepareAccessList( sender common.Address, dst *common.Address, precompiles []common.Address, - list gethcore.AccessList, + txAccesses gethcore.AccessList, ) { s.AddAddressToAccessList(sender) if dst != nil { @@ -441,7 +477,7 @@ func (s *StateDB) PrepareAccessList( for _, addr := range precompiles { s.AddAddressToAccessList(addr) } - for _, el := range list { + for _, el := range txAccesses { s.AddAddressToAccessList(el.Address) for _, key := range el.StorageKeys { s.AddSlotToAccessList(el.Address, key) @@ -449,6 +485,45 @@ func (s *StateDB) PrepareAccessList( } } +// Prepare handles the preparatory steps for executing a state transition with. +// This method must be invoked before state transition. +// +// Berlin fork: +// - Add sender to access list (2929) +// - Add destination to access list (2929) +// - Add precompiles to access list (2929) +// - Add the contents of the optional tx access list (2930) +// +// EIPs Included: +// - Reset access list (Berlin) +// - Add coinbase to access list (EIP-3651) | Shanghai +// - Reset transient storage (EIP-1153) +func (s *StateDB) Prepare( + _ gethparams.Rules, // only relevant prior to Shangai and Berlin upgrades + sender, coinbase common.Address, + dest *common.Address, + precompiles []common.Address, + txAccesses gethcore.AccessList, +) { + s.AddAddressToAccessList(sender) + if dest != nil { + s.AddAddressToAccessList(*dest) + // If it's a create-tx, the destination will be added inside evm.create + } + for _, addr := range precompiles { + s.AddAddressToAccessList(addr) + } + for _, el := range txAccesses { + s.AddAddressToAccessList(el.Address) + for _, key := range el.StorageKeys { + s.AddSlotToAccessList(el.Address, key) + } + } + s.AddAddressToAccessList(coinbase) // Shaghai: EIP-3651: warm coinbse + // EIP-1153: Reset transient storage for beginning of tx execution + s.transientStorage = make(transientStorage) +} + // AddAddressToAccessList adds the given address to the access list func (s *StateDB) AddAddressToAccessList(addr common.Address) { if s.accessList.AddAddress(addr) { @@ -618,3 +693,59 @@ func (s *StateDB) SavePrecompileCalledJournalChange( } const maxMultistoreCacheCount uint8 = 10 + +// transientStorage is a representation of EIP-1153 "Transient Storage". +type transientStorage map[common.Address]Storage + +// Set sets the transient-storage `value` for `key` at the given `addr`. +func (t transientStorage) Set(addr common.Address, key, value common.Hash) { + if _, ok := t[addr]; !ok { + t[addr] = make(Storage) + } + t[addr][key] = value +} + +// Get gets the transient storage for `key` at the given `addr`. +func (t transientStorage) Get(addr common.Address, key common.Hash) common.Hash { + val, ok := t[addr] + if !ok { + return common.Hash{} + } + return val[key] +} + +// Copy does a deep copy of the transientStorage +func (t transientStorage) Copy() transientStorage { + storage := make(transientStorage) + for key, value := range t { + storage[key] = value.Copy() + } + return storage +} + +// GetTransientState gets transient storage ([common.Hash]) for a given account. +func (s *StateDB) GetTransientState( + addr common.Address, + key common.Hash, +) common.Hash { + return s.transientStorage.Get(addr, key) +} + +// SetTransientState sets transient storage for a given account. It +// adds the change to the journal so that it can be rolled back +// to its previous value if there is a revert. +func (s *StateDB) SetTransientState( + addr common.Address, + key, value common.Hash, +) { + prev := s.GetTransientState(addr, key) + if prev == value { + return + } + s.Journal.append(transientStorageChange{ + address: &addr, + key: key, + prevValue: prev, + }) + s.transientStorage.Set(addr, key, prev) +} diff --git a/x/evm/statedb/statedb_test.go b/x/evm/statedb/statedb_test.go index fc0a1fdc06..191a1a58b5 100644 --- a/x/evm/statedb/statedb_test.go +++ b/x/evm/statedb/statedb_test.go @@ -8,8 +8,11 @@ import ( gethcore "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" + "github.com/holiman/uint256" "github.com/stretchr/testify/suite" + xcommon "github.com/NibiruChain/nibiru/v2/x/common" "github.com/NibiruChain/nibiru/v2/x/common/set" "github.com/NibiruChain/nibiru/v2/x/evm/evmtest" "github.com/NibiruChain/nibiru/v2/x/evm/statedb" @@ -42,7 +45,8 @@ type Suite struct { // It returns a map of storage slots to their values. func CollectContractStorage(db vm.StateDB) statedb.Storage { storage := make(statedb.Storage) - err := db.ForEachStorage( + sdb := db.(*statedb.StateDB) + err := sdb.ForEachStorage( address, func(k, v common.Hash) bool { storage[k] = v @@ -68,7 +72,7 @@ func (s *Suite) TestAccount() { {"non-exist account", func(deps *evmtest.TestDeps, db *statedb.StateDB) { s.Require().Equal(false, db.Exist(address)) s.Require().Equal(true, db.Empty(address)) - s.Require().Equal(big.NewInt(0), db.GetBalance(address)) + s.Require().Equal(uint256.NewInt(0), db.GetBalance(address)) s.Require().Equal([]byte(nil), db.GetCode(address)) s.Require().Equal(common.Hash{}, db.GetCodeHash(address)) s.Require().Equal(uint64(0), db.GetNonce(address)) @@ -85,20 +89,21 @@ func (s *Suite) TestAccount() { db = deps.NewStateDB() s.Require().Equal(true, db.Exist(address)) s.Require().Equal(true, db.Empty(address)) - s.Require().Equal(big.NewInt(0), db.GetBalance(address)) + s.Require().Equal(uint256.NewInt(0), db.GetBalance(address)) s.Require().Equal([]byte(nil), db.GetCode(address)) s.Require().Equal(common.BytesToHash(emptyCodeHash), db.GetCodeHash(address)) s.Require().Equal(uint64(0), db.GetNonce(address)) }}, {"suicide", func(deps *evmtest.TestDeps, db *statedb.StateDB) { // non-exist account. - s.Require().False(db.Suicide(address)) + s.Require().False(db.HasSuicided(address)) + db.SelfDestruct(address) s.Require().False(db.HasSuicided(address)) // create a contract account db.CreateAccount(address) db.SetCode(address, []byte("hello world")) - db.AddBalance(address, big.NewInt(100)) + db.AddBalanceSigned(address, big.NewInt(100)) db.SetState(address, key1, value1) db.SetState(address, key2, value2) s.Require().NoError(db.Commit()) @@ -106,12 +111,13 @@ func (s *Suite) TestAccount() { // suicide db = deps.NewStateDB() s.Require().False(db.HasSuicided(address)) - s.Require().True(db.Suicide(address)) + db.SelfDestruct(address) + s.Require().True(db.HasSuicided(address)) // check dirty state s.Require().True(db.HasSuicided(address)) // balance is cleared - s.Require().Equal(big.NewInt(0), db.GetBalance(address)) + s.Require().Equal(uint256.NewInt(0), db.GetBalance(address)) // but code and state are still accessible in dirty state s.Require().Equal(value1, db.GetState(address, key1)) s.Require().Equal([]byte("hello world"), db.GetCode(address)) @@ -140,14 +146,14 @@ func (s *Suite) TestAccountOverride() { amount := big.NewInt(1) // init an EOA account, account overridden only happens on EOA account. - db.AddBalance(address, amount) + db.AddBalanceSigned(address, amount) db.SetNonce(address, 1) // override db.CreateAccount(address) // check balance is not lost - s.Require().Equal(amount, db.GetBalance(address)) + s.Require().Equal(uint256.MustFromBig(amount), db.GetBalance(address)) // but nonce is reset s.Require().Equal(uint64(0), db.GetNonce(address)) } @@ -162,8 +168,8 @@ func (s *Suite) TestDBError() { }}, {"delete account", func(db vm.StateDB) { db.SetNonce(errAddress, 1) - s.Require().True(db.Suicide(errAddress)) - s.True(db.HasSuicided(errAddress)) + db.SelfDestruct(errAddress) + s.Require().True(db.HasSelfDestructed(errAddress)) }}, } for _, tc := range testCases { @@ -178,34 +184,79 @@ func (s *Suite) TestBalance() { // NOTE: no need to test overflow/underflow, that is guaranteed by evm implementation. testCases := []struct { name string - malleate func(*statedb.StateDB) - expBalance *big.Int + do func(*statedb.StateDB) + expBalance *uint256.Int }{ - {"add balance", func(db *statedb.StateDB) { - db.AddBalance(address, big.NewInt(10)) - }, big.NewInt(10)}, - {"sub balance", func(db *statedb.StateDB) { - db.AddBalance(address, big.NewInt(10)) - // get dirty balance - s.Require().Equal(big.NewInt(10), db.GetBalance(address)) - db.SubBalance(address, big.NewInt(2)) - }, big.NewInt(8)}, - {"add zero balance", func(db *statedb.StateDB) { - db.AddBalance(address, big.NewInt(0)) - }, big.NewInt(0)}, - {"sub zero balance", func(db *statedb.StateDB) { - db.SubBalance(address, big.NewInt(0)) - }, big.NewInt(0)}, + { + name: "add balance", + do: func(db *statedb.StateDB) { + db.AddBalanceSigned(address, big.NewInt(10)) + }, + expBalance: uint256.NewInt(10), + }, + { + name: "sub balance", + do: func(db *statedb.StateDB) { + db.AddBalanceSigned(address, big.NewInt(10)) + s.Require().Equal(uint256.NewInt(10), db.GetBalance(address)) + db.AddBalanceSigned(address, big.NewInt(-2)) + }, + expBalance: uint256.NewInt(8), + }, + { + name: "add zero balance", + do: func(db *statedb.StateDB) { + db.AddBalanceSigned(address, big.NewInt(0)) + }, + expBalance: uint256.NewInt(0), + }, + { + name: "sub zero balance", + do: func(db *statedb.StateDB) { + db.AddBalanceSigned(address, big.NewInt(0)) + }, + expBalance: uint256.NewInt(0), + }, + { + name: "overflow on addition", + do: func(db *statedb.StateDB) { + db.AddBalanceSigned(address, big.NewInt(69)) + tooBig := new(big.Int).Exp(big.NewInt(2), big.NewInt(256), nil) + maybeErr := xcommon.TryCatch(func() { + db.AddBalanceSigned(address, tooBig) + })() + s.ErrorContains(maybeErr, "uint256 overflow occurred for big.Int") + }, + expBalance: uint256.NewInt(69), + }, + { + name: "overflow on subtraction", + do: func(db *statedb.StateDB) { + db.AddBalanceSigned(address, big.NewInt(420)) + db.AddBalanceSigned(address, big.NewInt(-20)) // balance: 400 + + // Construct -2^256 + tooBig := new(big.Int).Exp(big.NewInt(2), big.NewInt(256), nil) + tooBig.Neg(tooBig) + + maybeErr := xcommon.TryCatch(func() { + db.AddBalanceSigned(address, tooBig) + })() + + s.ErrorContains(maybeErr, "uint256 overflow occurred for big.Int") + }, + expBalance: uint256.NewInt(400), + }, } for _, tc := range testCases { s.Run(tc.name, func() { deps := evmtest.NewTestDeps() db := deps.NewStateDB() - tc.malleate(db) + tc.do(db) // check dirty state - s.Require().Equal(tc.expBalance, db.GetBalance(address)) + s.Equal(tc.expBalance, db.GetBalance(address)) s.Require().NoError(db.Commit()) // check committed balance too @@ -331,8 +382,8 @@ func (s *Suite) TestRevertSnapshot() { db.SetNonce(address, 10) }}, {"change balance", func(db vm.StateDB) { - db.AddBalance(address, big.NewInt(10)) - db.SubBalance(address, big.NewInt(5)) + db.AddBalance(address, uint256.NewInt(10)) + db.SubBalance(address, uint256.NewInt(5)) }}, {"override account", func(db vm.StateDB) { db.CreateAccount(address) @@ -343,7 +394,9 @@ func (s *Suite) TestRevertSnapshot() { {"suicide", func(db vm.StateDB) { db.SetState(address, v1, v2) db.SetCode(address, []byte("hello world")) - s.Require().True(db.Suicide(address)) + s.Require().False(db.HasSelfDestructed(address)) + db.SelfDestruct(address) + s.Require().True(db.HasSelfDestructed(address)) }}, {"add log", func(db vm.StateDB) { db.AddLog(&gethcore.Log{ @@ -366,7 +419,7 @@ func (s *Suite) TestRevertSnapshot() { // do some arbitrary changes to the storage db := deps.NewStateDB() db.SetNonce(address, 1) - db.AddBalance(address, big.NewInt(100)) + db.AddBalanceSigned(address, big.NewInt(100)) db.SetCode(address, []byte("hello world")) db.SetState(address, v1, v2) db.SetNonce(address2, 1) @@ -479,7 +532,8 @@ func (s *Suite) TestAccessList() { StorageKeys: []common.Hash{value1}, }} - db.PrepareAccessList(address, &address2, vm.PrecompiledAddressesBerlin, al) + sender, dest := address, &address2 + db.Prepare(params.Rules{}, sender, sender, dest, vm.PrecompiledAddressesBerlin, al) // check sender and dst s.Require().True(db.AddressInAccessList(address)) diff --git a/x/evm/vmtracer.go b/x/evm/vmtracer.go index 2078bdfe7f..1adfd70281 100644 --- a/x/evm/vmtracer.go +++ b/x/evm/vmtracer.go @@ -4,7 +4,6 @@ package evm import ( "math/big" "os" - "time" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" @@ -30,12 +29,11 @@ func NewTracer(tracer string, msg core.Message, cfg *params.ChainConfig, height switch tracer { case TracerAccessList: - rules := cfg.Rules(big.NewInt(height), cfg.MergeNetsplitBlock != nil) - precompileAddrs := vm.DefaultActivePrecompiles(rules) + precompileAddrs := PRECOMPILE_ADDRS return logger.NewAccessListTracer( - msg.AccessList(), - msg.From(), - *msg.To(), + msg.AccessList, + msg.From, + *msg.To, precompileAddrs, ) case TracerJSON: @@ -92,7 +90,7 @@ func (dt NoOpTracer) CaptureFault(pc uint64, op vm.OpCode, gas, cost uint64, sco // CaptureEnd implements vm.Tracer interface // //nolint:revive // allow unused parameters to indicate expected signature -func (dt NoOpTracer) CaptureEnd(output []byte, gasUsed uint64, tm time.Duration, err error) {} +func (dt NoOpTracer) CaptureEnd(output []byte, gasUsed uint64, err error) {} // CaptureEnter implements vm.Tracer interface // diff --git a/x/sudo/types/event.pb.go b/x/sudo/types/event.pb.go index b49d54d1e5..192393eaf0 100644 --- a/x/sudo/types/event.pb.go +++ b/x/sudo/types/event.pb.go @@ -27,7 +27,7 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // EventUpdateSudoers: ABCI event emitted upon execution of "MsgEditSudoers". type EventUpdateSudoers struct { Sudoers Sudoers `protobuf:"bytes,1,opt,name=sudoers,proto3" json:"sudoers"` - // Action is the type of update that occured to the "sudoers" + // Action is the type of update that occurred to the "sudoers" Action string `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` } From 7c52ee37e524fe2ad8c21faedb645f3c0ce74ffe Mon Sep 17 00:00:00 2001 From: Unique Divine <51418232+Unique-Divine@users.noreply.github.com> Date: Thu, 17 Apr 2025 06:48:04 -0500 Subject: [PATCH 02/11] feat(evm)!: Update to geth v1.14 with newer pebble and Go 1.24 (#2275) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This upgrade bumps Nibiru's Geth dependency from v1.13 to v1.14.13 and updates the Go version to 1.24 across the codebase and CI workflows. The upgrade is motivated by the need to support modern database backends (e.g., Cockroach Pebble), leverage recent Go generics improvements, and remain aligned with upstream changes in the Geth EVM architecture. Key changes: - Refactored EVM backend logic to use Geth's new `core.Block` constructor signature, which requires `core.Body`, `Receipts`, and `TrieHasher` explicitly. - Migrated `TraceTransaction`, `TraceCall`, and `TraceBlock` methods to return `json.RawMessage` as required by Geth's new trace API interfaces. - Replaced `go-ethereum/log` with the new `log/slog` stdlib implementation, per Geth v1.14’s logging changes. - Introduced `SuccessfulTx` struct in EVM tests to simplify managing and reusing stateful block hashes and numbers across assertions. - Updated all Dockerfile and CI workflows to Go 1.24 to ensure compatibility. - Disabled the `revive` linter’s `exported` rule for smoother CI linting. Compatibility notes: - Nibiru remains on the Berlin hard fork to avoid breaking changes from Ethereum’s blob transactions (Cancun) and Verkle tree requirements that are not applicable to Nibiru’s consensus and storage design. - Geth v1.14 is the last compatible version before Cancun-related features become mandatory. BREAKING CHANGE: Trace API return types and internal block construction logic have changed to comply with Geth v1.14. Any downstream tools or integrations depending on older behaviors may need to be updated. --- .github/workflows/e2e-evm.yml | 2 +- .github/workflows/e2e-wasm.yml | 55 - .github/workflows/golangci-lint.yml | 2 +- .github/workflows/integration-tests.yml | 2 +- .github/workflows/release.yml | 4 + .github/workflows/simulation-tests.yml | 8 +- .github/workflows/unit-tests.yml | 4 +- .golangci.yml | 5 +- CHANGELOG.md | 9 + Dockerfile | 2 +- .../tokenfactory/module/module.pulsar.go | 1191 +++++++++++++++++ app/app.go | 3 +- app/app_config.go | 6 + app/evmante/evmante_verify_eth_acc.go | 2 +- app/keepers.go | 12 - app/server/geth_log_handler.go | 9 +- .../scripts/e2e/contracts/cw_nameservice.wasm | Bin 146179 -> 0 bytes contrib/scripts/e2e/deploy-wasm.sh | 50 - eth/rpc/backend/account_info_test.go | 12 +- eth/rpc/backend/backend_suite_test.go | 85 +- eth/rpc/backend/blocks.go | 16 +- eth/rpc/backend/blocks_test.go | 12 +- eth/rpc/backend/nonce_test.go | 6 +- eth/rpc/backend/tracing.go | 37 +- eth/rpc/backend/tracing_test.go | 81 +- eth/rpc/backend/tx_info_test.go | 8 +- eth/rpc/backend/utils_test.go | 2 +- eth/rpc/rpc.go | 4 +- eth/rpc/rpcapi/eth_filters_api.go | 11 +- evm-e2e/test/debug_queries.test.ts | 6 +- evm-e2e/test/wrapped_nibiru_wnibi.test.ts | 1 + go.mod | 52 +- go.sum | 942 +++++++++++-- proto/nibiru/tokenfactory/module/module.proto | 25 + x/common/nmath/nmath.go | 19 + x/evm/chain_config.go | 2 +- x/evm/const.go | 41 +- x/evm/evmtest/test_deps.go | 11 +- x/evm/evmtest/tx.go | 23 +- x/evm/json_tx_args.go | 29 +- x/evm/keeper/call_contract.go | 29 +- x/evm/keeper/funtoken_from_coin.go | 23 +- x/evm/keeper/funtoken_from_erc20.go | 29 +- x/evm/keeper/grpc_query.go | 132 +- x/evm/keeper/grpc_query_test.go | 1 + x/evm/keeper/keeper.go | 9 - x/evm/keeper/msg_server.go | 167 ++- x/evm/keeper/statedb.go | 5 +- x/evm/keeper/vm_config.go | 3 +- x/evm/msg_test.go | 4 +- x/evm/precompile/funtoken.go | 18 +- x/evm/precompile/oracle.go | 13 +- x/evm/precompile/wasm.go | 14 +- x/evm/statedb/journal.go | 64 +- x/evm/statedb/journal_test.go | 2 +- x/evm/statedb/state_object.go | 90 +- x/evm/statedb/statedb.go | 187 ++- x/evm/statedb/statedb_test.go | 5 +- x/evm/tx_data_dynamic_fee.go | 4 +- x/evm/vmtracer.go | 98 +- x/tokenfactory/module.go | 62 + 61 files changed, 3044 insertions(+), 706 deletions(-) delete mode 100644 .github/workflows/e2e-wasm.yml create mode 100644 api/nibiru/tokenfactory/module/module.pulsar.go delete mode 100644 contrib/scripts/e2e/contracts/cw_nameservice.wasm delete mode 100644 contrib/scripts/e2e/deploy-wasm.sh create mode 100644 proto/nibiru/tokenfactory/module/module.proto create mode 100644 x/common/nmath/nmath.go diff --git a/.github/workflows/e2e-evm.yml b/.github/workflows/e2e-evm.yml index b7d52e495b..7e77e14c22 100644 --- a/.github/workflows/e2e-evm.yml +++ b/.github/workflows/e2e-evm.yml @@ -30,7 +30,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: 1.22 + go-version: 1.24 cache: true # Use GitHub actions output paramters to get go paths. For more info, see diff --git a/.github/workflows/e2e-wasm.yml b/.github/workflows/e2e-wasm.yml deleted file mode 100644 index 93e04146d2..0000000000 --- a/.github/workflows/e2e-wasm.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: Wasm E2E tests - -on: - # On normal PRs or when workflow goreleaser finishes, as it gets the last release tag. - pull_request: - -# Allow concurrent runs on main/release branches but isolates other branches -concurrency: - group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref }} - cancel-in-progress: ${{ ! (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release/')) }} - -jobs: - e2e-wasm: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - name: Download release - id: latest_release - uses: pozetroninc/github-action-get-latest-release@v0.8.0 - with: - repository: ${{ github.repository }} - token: ${{ secrets.GITHUB_TOKEN }} - - - name: download release - uses: robinraju/release-downloader@v1.11 - with: - # uses latest (including drafts) - # tag: ${{ steps.latest_release.outputs.release }} - # uses latest (excluding drafts) as tagged by GitHub - latest: true - fileName: "*linux_amd64.tar.gz" - - - name: unpack release - run: | - tar -xzf *linux_amd64.tar.gz - rm nibid*.gz - mv nibid* nibid || true - mv nibid /usr/local/bin/ - echo "nibid version: $(nibid version)" - - - name: "Install just" - # casey/just: https://just.systems/man/en/chapter_6.html - # taiki-e/install-action: https://github.com/taiki-e/install-action - uses: taiki-e/install-action@just - - - name: "launch localnet" - run: | - just localnet --no-build & - sleep 6 - - - name: run e2e tests - run: | - sh ./contrib/scripts/e2e/deploy-wasm.sh diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index 54ccb873d4..a912a75918 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -40,7 +40,7 @@ jobs: - uses: actions/setup-go@v5 if: steps.check_nibiru_go.outputs.nibiru-go == 'true' with: - go-version: 1.22 + go-version: 1.24 cache: false # the golangci-lint action already caches for us (https://github.com/golangci/golangci-lint-action#performance) # Use GitHub actions output paramters to get go paths. For more info, see diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 810678ee0f..8d918214cb 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -41,7 +41,7 @@ jobs: if: steps.check_nibiru_go.outputs.nibiru-go == 'true' uses: actions/setup-go@v5 with: - go-version: 1.22 + go-version: 1.24 cache: true # Use GitHub actions output paramters to get go paths. For more info, see diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 033f7f418c..ef8b8b02d7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -259,6 +259,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Download all artifacts uses: actions/download-artifact@v4 @@ -276,6 +278,8 @@ jobs: - name: Generate changelog id: changes uses: simbo/changes-between-tags-action@v1 + with: + tag-pattern: '^v?[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.\-]+)?$' - name: Publish Release uses: softprops/action-gh-release@v2 diff --git a/.github/workflows/simulation-tests.yml b/.github/workflows/simulation-tests.yml index 1fed208953..2df3db8e02 100644 --- a/.github/workflows/simulation-tests.yml +++ b/.github/workflows/simulation-tests.yml @@ -16,7 +16,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: 1.22 + go-version: 1.24 cache: true - name: TestAppStateDeterminism run: | @@ -28,7 +28,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: 1.22 + go-version: 1.24 cache: true - name: TestFullAppSimulation run: | @@ -40,7 +40,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: 1.22 + go-version: 1.24 cache: true - name: TestAppImportExport run: | @@ -52,7 +52,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: 1.22 + go-version: 1.24 cache: true - name: TestAppSimulationAfterImport run: | diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index 73edbd9262..1cc5a83ab5 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -39,7 +39,7 @@ jobs: if: steps.check_nibiru_go.outputs.nibiru-go == 'true' uses: actions/setup-go@v5 with: - go-version: 1.22 + go-version: 1.24 cache: true # Use GitHub actions output paramters to get go paths. For more info, see @@ -94,7 +94,7 @@ jobs: if: steps.check_nibiru_go.outputs.nibiru-go == 'true' uses: actions/setup-go@v5 with: - go-version: 1.22 + go-version: 1.24 - name: "Install just" if: steps.check_nibiru_go.outputs.nibiru-go == 'true' diff --git a/.golangci.yml b/.golangci.yml index c919cec4a0..5b696edc5a 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -11,7 +11,6 @@ issues: linters: enable: - whitespace - - misspell - goimports linters-settings: misspell: @@ -20,5 +19,9 @@ linters-settings: # Put imports beginning with prefix after 3rd-party packages. # It's a comma-separated list of prefixes. local-prefixes: github.com/NibiruChain/nibiru + revive: + rules: + - name: exported + disabled: true severity: default-severity: error diff --git a/CHANGELOG.md b/CHANGELOG.md index 69a70f26e7..053b689d3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,8 +40,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +- [#2271](https://github.com/NibiruChain/nibiru/pull/2271) - fix(ci): update tag-pattern for changelog step in releases - [#2270](https://github.com/NibiruChain/nibiru/pull/2270) - refactor(app): remove private keeper struct and transient/mem keys from app - [#2274](https://github.com/NibiruChain/nibiru/pull/2274) - feat(evm)!: update to geth v1.13 with EIP-1153, PRECOMPILE_ADDRS, and transient storage support +- [#2275](https://github.com/NibiruChain/nibiru/pull/2275) - feat(evm)!: update +to geth v1.14 with tracing updates and new StateDB methods. + - This upgrade keeps Nibiru's EVM on the Berlin upgrade to avoid + incompatibilities stemming from functionality specific to Ethereum's consesnus + setup. Namely, blobs (Cancun) and Verkle additions for zkEVM. + - The jump to v1.14 was necessary to use an up-to-date "cockroach/pebble" DB + dependency and leverage new generics features added in Go 1.23+. ## v2.3.0 @@ -64,6 +72,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#2263](https://github.com/NibiruChain/nibiru/pull/2263) - feat: add depinject wiring for x/epochs module - [#2265](https://github.com/NibiruChain/nibiru/pull/2265) - feat: add depinject wiring for x/inflation module - [#2266](https://github.com/NibiruChain/nibiru/pull/2266) - feat: add depinject wiring for x/evm module +- [#2272](https://github.com/NibiruChain/nibiru/pull/2272) - feat: add depinject wiring for x/tokenfactory module ## [v2.2.0](https://github.com/NibiruChain/nibiru/releases/tag/v2.2.0) - 2025-03-27 diff --git a/Dockerfile b/Dockerfile index 578712373d..d840a2dd66 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG src=base # ---------- Build Stage ---------- -FROM golang:1.22 AS build-base +FROM golang:1.24 AS build-base WORKDIR /nibiru diff --git a/api/nibiru/tokenfactory/module/module.pulsar.go b/api/nibiru/tokenfactory/module/module.pulsar.go new file mode 100644 index 0000000000..800f6109f9 --- /dev/null +++ b/api/nibiru/tokenfactory/module/module.pulsar.go @@ -0,0 +1,1191 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package modulev1 + +import ( + _ "cosmossdk.io/api/cosmos/app/v1alpha1" + fmt "fmt" + runtime "github.com/cosmos/cosmos-proto/runtime" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoiface "google.golang.org/protobuf/runtime/protoiface" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + io "io" + reflect "reflect" + sync "sync" +) + +var ( + md_Module protoreflect.MessageDescriptor + fd_Module_authority protoreflect.FieldDescriptor +) + +func init() { + file_nibiru_tokenfactory_module_module_proto_init() + md_Module = File_nibiru_tokenfactory_module_module_proto.Messages().ByName("Module") + fd_Module_authority = md_Module.Fields().ByName("authority") +} + +var _ protoreflect.Message = (*fastReflection_Module)(nil) + +type fastReflection_Module Module + +func (x *Module) ProtoReflect() protoreflect.Message { + return (*fastReflection_Module)(x) +} + +func (x *Module) slowProtoReflect() protoreflect.Message { + mi := &file_nibiru_tokenfactory_module_module_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_Module_messageType fastReflection_Module_messageType +var _ protoreflect.MessageType = fastReflection_Module_messageType{} + +type fastReflection_Module_messageType struct{} + +func (x fastReflection_Module_messageType) Zero() protoreflect.Message { + return (*fastReflection_Module)(nil) +} +func (x fastReflection_Module_messageType) New() protoreflect.Message { + return new(fastReflection_Module) +} +func (x fastReflection_Module_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Module +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_Module) Descriptor() protoreflect.MessageDescriptor { + return md_Module +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_Module) Type() protoreflect.MessageType { + return _fastReflection_Module_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_Module) New() protoreflect.Message { + return new(fastReflection_Module) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_Module) Interface() protoreflect.ProtoMessage { + return (*Module)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_Module) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Authority != "" { + value := protoreflect.ValueOfString(x.Authority) + if !f(fd_Module_authority, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_Module) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "nibiru.tokenfactory.module.v1.Module.authority": + return x.Authority != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: nibiru.tokenfactory.module.v1.Module")) + } + panic(fmt.Errorf("message nibiru.tokenfactory.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "nibiru.tokenfactory.module.v1.Module.authority": + x.Authority = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: nibiru.tokenfactory.module.v1.Module")) + } + panic(fmt.Errorf("message nibiru.tokenfactory.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_Module) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "nibiru.tokenfactory.module.v1.Module.authority": + value := x.Authority + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: nibiru.tokenfactory.module.v1.Module")) + } + panic(fmt.Errorf("message nibiru.tokenfactory.module.v1.Module does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "nibiru.tokenfactory.module.v1.Module.authority": + x.Authority = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: nibiru.tokenfactory.module.v1.Module")) + } + panic(fmt.Errorf("message nibiru.tokenfactory.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "nibiru.tokenfactory.module.v1.Module.authority": + panic(fmt.Errorf("field authority of message nibiru.tokenfactory.module.v1.Module is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: nibiru.tokenfactory.module.v1.Module")) + } + panic(fmt.Errorf("message nibiru.tokenfactory.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_Module) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "nibiru.tokenfactory.module.v1.Module.authority": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: nibiru.tokenfactory.module.v1.Module")) + } + panic(fmt.Errorf("message nibiru.tokenfactory.module.v1.Module does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_Module) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in nibiru.tokenfactory.module.v1.Module", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_Module) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_Module) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_Module) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_Module) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Authority) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Authority) > 0 { + i -= len(x.Authority) + copy(dAtA[i:], x.Authority) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Authority))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*Module) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Module: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Module: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var _ protoreflect.List = (*_ModuleAccountPermission_2_list)(nil) + +type _ModuleAccountPermission_2_list struct { + list *[]string +} + +func (x *_ModuleAccountPermission_2_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_ModuleAccountPermission_2_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfString((*x.list)[i]) +} + +func (x *_ModuleAccountPermission_2_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.String() + concreteValue := valueUnwrapped + (*x.list)[i] = concreteValue +} + +func (x *_ModuleAccountPermission_2_list) Append(value protoreflect.Value) { + valueUnwrapped := value.String() + concreteValue := valueUnwrapped + *x.list = append(*x.list, concreteValue) +} + +func (x *_ModuleAccountPermission_2_list) AppendMutable() protoreflect.Value { + panic(fmt.Errorf("AppendMutable can not be called on message ModuleAccountPermission at list field Permissions as it is not of Message kind")) +} + +func (x *_ModuleAccountPermission_2_list) Truncate(n int) { + *x.list = (*x.list)[:n] +} + +func (x *_ModuleAccountPermission_2_list) NewElement() protoreflect.Value { + v := "" + return protoreflect.ValueOfString(v) +} + +func (x *_ModuleAccountPermission_2_list) IsValid() bool { + return x.list != nil +} + +var ( + md_ModuleAccountPermission protoreflect.MessageDescriptor + fd_ModuleAccountPermission_account protoreflect.FieldDescriptor + fd_ModuleAccountPermission_permissions protoreflect.FieldDescriptor +) + +func init() { + file_nibiru_tokenfactory_module_module_proto_init() + md_ModuleAccountPermission = File_nibiru_tokenfactory_module_module_proto.Messages().ByName("ModuleAccountPermission") + fd_ModuleAccountPermission_account = md_ModuleAccountPermission.Fields().ByName("account") + fd_ModuleAccountPermission_permissions = md_ModuleAccountPermission.Fields().ByName("permissions") +} + +var _ protoreflect.Message = (*fastReflection_ModuleAccountPermission)(nil) + +type fastReflection_ModuleAccountPermission ModuleAccountPermission + +func (x *ModuleAccountPermission) ProtoReflect() protoreflect.Message { + return (*fastReflection_ModuleAccountPermission)(x) +} + +func (x *ModuleAccountPermission) slowProtoReflect() protoreflect.Message { + mi := &file_nibiru_tokenfactory_module_module_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_ModuleAccountPermission_messageType fastReflection_ModuleAccountPermission_messageType +var _ protoreflect.MessageType = fastReflection_ModuleAccountPermission_messageType{} + +type fastReflection_ModuleAccountPermission_messageType struct{} + +func (x fastReflection_ModuleAccountPermission_messageType) Zero() protoreflect.Message { + return (*fastReflection_ModuleAccountPermission)(nil) +} +func (x fastReflection_ModuleAccountPermission_messageType) New() protoreflect.Message { + return new(fastReflection_ModuleAccountPermission) +} +func (x fastReflection_ModuleAccountPermission_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_ModuleAccountPermission +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_ModuleAccountPermission) Descriptor() protoreflect.MessageDescriptor { + return md_ModuleAccountPermission +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_ModuleAccountPermission) Type() protoreflect.MessageType { + return _fastReflection_ModuleAccountPermission_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_ModuleAccountPermission) New() protoreflect.Message { + return new(fastReflection_ModuleAccountPermission) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_ModuleAccountPermission) Interface() protoreflect.ProtoMessage { + return (*ModuleAccountPermission)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_ModuleAccountPermission) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Account != "" { + value := protoreflect.ValueOfString(x.Account) + if !f(fd_ModuleAccountPermission_account, value) { + return + } + } + if len(x.Permissions) != 0 { + value := protoreflect.ValueOfList(&_ModuleAccountPermission_2_list{list: &x.Permissions}) + if !f(fd_ModuleAccountPermission_permissions, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_ModuleAccountPermission) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "nibiru.tokenfactory.module.v1.ModuleAccountPermission.account": + return x.Account != "" + case "nibiru.tokenfactory.module.v1.ModuleAccountPermission.permissions": + return len(x.Permissions) != 0 + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: nibiru.tokenfactory.module.v1.ModuleAccountPermission")) + } + panic(fmt.Errorf("message nibiru.tokenfactory.module.v1.ModuleAccountPermission does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ModuleAccountPermission) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "nibiru.tokenfactory.module.v1.ModuleAccountPermission.account": + x.Account = "" + case "nibiru.tokenfactory.module.v1.ModuleAccountPermission.permissions": + x.Permissions = nil + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: nibiru.tokenfactory.module.v1.ModuleAccountPermission")) + } + panic(fmt.Errorf("message nibiru.tokenfactory.module.v1.ModuleAccountPermission does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_ModuleAccountPermission) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "nibiru.tokenfactory.module.v1.ModuleAccountPermission.account": + value := x.Account + return protoreflect.ValueOfString(value) + case "nibiru.tokenfactory.module.v1.ModuleAccountPermission.permissions": + if len(x.Permissions) == 0 { + return protoreflect.ValueOfList(&_ModuleAccountPermission_2_list{}) + } + listValue := &_ModuleAccountPermission_2_list{list: &x.Permissions} + return protoreflect.ValueOfList(listValue) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: nibiru.tokenfactory.module.v1.ModuleAccountPermission")) + } + panic(fmt.Errorf("message nibiru.tokenfactory.module.v1.ModuleAccountPermission does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ModuleAccountPermission) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "nibiru.tokenfactory.module.v1.ModuleAccountPermission.account": + x.Account = value.Interface().(string) + case "nibiru.tokenfactory.module.v1.ModuleAccountPermission.permissions": + lv := value.List() + clv := lv.(*_ModuleAccountPermission_2_list) + x.Permissions = *clv.list + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: nibiru.tokenfactory.module.v1.ModuleAccountPermission")) + } + panic(fmt.Errorf("message nibiru.tokenfactory.module.v1.ModuleAccountPermission does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ModuleAccountPermission) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "nibiru.tokenfactory.module.v1.ModuleAccountPermission.permissions": + if x.Permissions == nil { + x.Permissions = []string{} + } + value := &_ModuleAccountPermission_2_list{list: &x.Permissions} + return protoreflect.ValueOfList(value) + case "nibiru.tokenfactory.module.v1.ModuleAccountPermission.account": + panic(fmt.Errorf("field account of message nibiru.tokenfactory.module.v1.ModuleAccountPermission is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: nibiru.tokenfactory.module.v1.ModuleAccountPermission")) + } + panic(fmt.Errorf("message nibiru.tokenfactory.module.v1.ModuleAccountPermission does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_ModuleAccountPermission) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "nibiru.tokenfactory.module.v1.ModuleAccountPermission.account": + return protoreflect.ValueOfString("") + case "nibiru.tokenfactory.module.v1.ModuleAccountPermission.permissions": + list := []string{} + return protoreflect.ValueOfList(&_ModuleAccountPermission_2_list{list: &list}) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: nibiru.tokenfactory.module.v1.ModuleAccountPermission")) + } + panic(fmt.Errorf("message nibiru.tokenfactory.module.v1.ModuleAccountPermission does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_ModuleAccountPermission) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in nibiru.tokenfactory.module.v1.ModuleAccountPermission", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_ModuleAccountPermission) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ModuleAccountPermission) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_ModuleAccountPermission) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_ModuleAccountPermission) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*ModuleAccountPermission) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Account) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.Permissions) > 0 { + for _, s := range x.Permissions { + l = len(s) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*ModuleAccountPermission) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Permissions) > 0 { + for iNdEx := len(x.Permissions) - 1; iNdEx >= 0; iNdEx-- { + i -= len(x.Permissions[iNdEx]) + copy(dAtA[i:], x.Permissions[iNdEx]) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Permissions[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(x.Account) > 0 { + i -= len(x.Account) + copy(dAtA[i:], x.Account) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Account))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*ModuleAccountPermission) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ModuleAccountPermission: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ModuleAccountPermission: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Account", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Account = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Permissions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Permissions = append(x.Permissions, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: nibiru/tokenfactory/module/module.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Module is the config object for the tokenfactory module. +type Module struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // authority defines the custom module authority. If not set, defaults to the governance module. + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` +} + +func (x *Module) Reset() { + *x = Module{} + if protoimpl.UnsafeEnabled { + mi := &file_nibiru_tokenfactory_module_module_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Module) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Module) ProtoMessage() {} + +// Deprecated: Use Module.ProtoReflect.Descriptor instead. +func (*Module) Descriptor() ([]byte, []int) { + return file_nibiru_tokenfactory_module_module_proto_rawDescGZIP(), []int{0} +} + +func (x *Module) GetAuthority() string { + if x != nil { + return x.Authority + } + return "" +} + +// ModuleAccountPermission represents permissions for a module account. +type ModuleAccountPermission struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // account is the name of the module. + Account string `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` + // permissions are the permissions this module has. Currently recognized + // values are minter, burner and staking. + Permissions []string `protobuf:"bytes,2,rep,name=permissions,proto3" json:"permissions,omitempty"` +} + +func (x *ModuleAccountPermission) Reset() { + *x = ModuleAccountPermission{} + if protoimpl.UnsafeEnabled { + mi := &file_nibiru_tokenfactory_module_module_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ModuleAccountPermission) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ModuleAccountPermission) ProtoMessage() {} + +// Deprecated: Use ModuleAccountPermission.ProtoReflect.Descriptor instead. +func (*ModuleAccountPermission) Descriptor() ([]byte, []int) { + return file_nibiru_tokenfactory_module_module_proto_rawDescGZIP(), []int{1} +} + +func (x *ModuleAccountPermission) GetAccount() string { + if x != nil { + return x.Account + } + return "" +} + +func (x *ModuleAccountPermission) GetPermissions() []string { + if x != nil { + return x.Permissions + } + return nil +} + +var File_nibiru_tokenfactory_module_module_proto protoreflect.FileDescriptor + +var file_nibiru_tokenfactory_module_module_proto_rawDesc = []byte{ + 0x0a, 0x27, 0x6e, 0x69, 0x62, 0x69, 0x72, 0x75, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x66, 0x61, + 0x63, 0x74, 0x6f, 0x72, 0x79, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x6e, 0x69, 0x62, 0x69, 0x72, + 0x75, 0x2e, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x20, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5c, 0x0a, 0x06, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x74, 0x79, 0x3a, 0x34, 0xba, 0xc0, 0x96, 0xda, 0x01, 0x2e, 0x0a, 0x2c, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4e, 0x69, 0x62, 0x69, 0x72, 0x75, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x2f, 0x6e, 0x69, 0x62, 0x69, 0x72, 0x75, 0x2f, 0x78, 0x2f, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x55, 0x0a, 0x17, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x0a, + 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, + 0xfd, 0x01, 0x0a, 0x21, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x69, 0x62, 0x69, 0x72, 0x75, 0x2e, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, + 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x69, 0x62, 0x69, 0x72, 0x75, 0x2f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x2f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x3b, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4e, 0x54, 0x4d, + 0xaa, 0x02, 0x1d, 0x4e, 0x69, 0x62, 0x69, 0x72, 0x75, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x66, + 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x56, 0x31, + 0xca, 0x02, 0x1d, 0x4e, 0x69, 0x62, 0x69, 0x72, 0x75, 0x5c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x66, + 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5c, 0x56, 0x31, + 0xe2, 0x02, 0x29, 0x4e, 0x69, 0x62, 0x69, 0x72, 0x75, 0x5c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x66, + 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5c, 0x56, 0x31, + 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x20, 0x4e, + 0x69, 0x62, 0x69, 0x72, 0x75, 0x3a, 0x3a, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x66, 0x61, 0x63, 0x74, + 0x6f, 0x72, 0x79, 0x3a, 0x3a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_nibiru_tokenfactory_module_module_proto_rawDescOnce sync.Once + file_nibiru_tokenfactory_module_module_proto_rawDescData = file_nibiru_tokenfactory_module_module_proto_rawDesc +) + +func file_nibiru_tokenfactory_module_module_proto_rawDescGZIP() []byte { + file_nibiru_tokenfactory_module_module_proto_rawDescOnce.Do(func() { + file_nibiru_tokenfactory_module_module_proto_rawDescData = protoimpl.X.CompressGZIP(file_nibiru_tokenfactory_module_module_proto_rawDescData) + }) + return file_nibiru_tokenfactory_module_module_proto_rawDescData +} + +var file_nibiru_tokenfactory_module_module_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_nibiru_tokenfactory_module_module_proto_goTypes = []interface{}{ + (*Module)(nil), // 0: nibiru.tokenfactory.module.v1.Module + (*ModuleAccountPermission)(nil), // 1: nibiru.tokenfactory.module.v1.ModuleAccountPermission +} +var file_nibiru_tokenfactory_module_module_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_nibiru_tokenfactory_module_module_proto_init() } +func file_nibiru_tokenfactory_module_module_proto_init() { + if File_nibiru_tokenfactory_module_module_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_nibiru_tokenfactory_module_module_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Module); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_nibiru_tokenfactory_module_module_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ModuleAccountPermission); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_nibiru_tokenfactory_module_module_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_nibiru_tokenfactory_module_module_proto_goTypes, + DependencyIndexes: file_nibiru_tokenfactory_module_module_proto_depIdxs, + MessageInfos: file_nibiru_tokenfactory_module_module_proto_msgTypes, + }.Build() + File_nibiru_tokenfactory_module_module_proto = out.File + file_nibiru_tokenfactory_module_module_proto_rawDesc = nil + file_nibiru_tokenfactory_module_module_proto_goTypes = nil + file_nibiru_tokenfactory_module_module_proto_depIdxs = nil +} diff --git a/app/app.go b/app/app.go index 5cc6fe0e05..0ae2c4519c 100644 --- a/app/app.go +++ b/app/app.go @@ -323,6 +323,7 @@ func NewNibiruApp( &app.EpochsKeeper, &app.InflationKeeper, &app.EvmKeeper, + &app.TokenFactoryKeeper, ); err != nil { panic(err) } @@ -341,7 +342,6 @@ func NewNibiruApp( // nibiru x/ keys wasmtypes.StoreKey, devgastypes.StoreKey, - tokenfactorytypes.StoreKey, ) for _, k := range app.keys { if err := app.RegisterStores(k); err != nil { @@ -366,7 +366,6 @@ func NewNibiruApp( // wasm wasm.NewAppModule(app.appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.MsgServiceRouter(), app.getSubspace(wasmtypes.ModuleName)), devgas.NewAppModule(app.DevGasKeeper, app.AccountKeeper), - tokenfactory.NewAppModule(app.TokenFactoryKeeper, app.AccountKeeper), ); err != nil { panic(err) } diff --git a/app/app_config.go b/app/app_config.go index 94a9a2995a..43943af9c4 100644 --- a/app/app_config.go +++ b/app/app_config.go @@ -51,6 +51,7 @@ import ( inflationmodulev1 "github.com/NibiruChain/nibiru/v2/api/nibiru/inflation/module" oraclemodulev1 "github.com/NibiruChain/nibiru/v2/api/nibiru/oracle/module" sudomodulev1 "github.com/NibiruChain/nibiru/v2/api/nibiru/sudo/module" + tfmodulev1 "github.com/NibiruChain/nibiru/v2/api/nibiru/tokenfactory/module" "github.com/NibiruChain/nibiru/v2/x/common" devgastypes "github.com/NibiruChain/nibiru/v2/x/devgas/v1/types" epochstypes "github.com/NibiruChain/nibiru/v2/x/epochs/types" @@ -60,6 +61,7 @@ import ( inflationtypes "github.com/NibiruChain/nibiru/v2/x/inflation/types" oracletypes "github.com/NibiruChain/nibiru/v2/x/oracle/types" sudotypes "github.com/NibiruChain/nibiru/v2/x/sudo/types" + tftypes "github.com/NibiruChain/nibiru/v2/x/tokenfactory/types" tokenfactorytypes "github.com/NibiruChain/nibiru/v2/x/tokenfactory/types" ) @@ -302,6 +304,10 @@ func init() { Name: evmtypes.ModuleName, Config: appconfig.WrapAny(&evmmodulev1.Module{}), }, + { + Name: tftypes.ModuleName, + Config: appconfig.WrapAny(&tfmodulev1.Module{}), + }, }, }) } diff --git a/app/evmante/evmante_verify_eth_acc.go b/app/evmante/evmante_verify_eth_acc.go index e62af51912..860bef28e7 100644 --- a/app/evmante/evmante_verify_eth_acc.go +++ b/app/evmante/evmante_verify_eth_acc.go @@ -71,7 +71,7 @@ func (anteDec AnteDecVerifyEthAcc) AnteHandle( } if err := keeper.CheckSenderBalance( - evm.NativeToWei(acct.BalanceNative), txData, + evm.NativeToWei(acct.BalanceNative.ToBig()), txData, ); err != nil { return ctx, errors.Wrap(err, "failed to check sender balance") } diff --git a/app/keepers.go b/app/keepers.go index 6aa4e8a558..2778807876 100644 --- a/app/keepers.go +++ b/app/keepers.go @@ -61,8 +61,6 @@ import ( devgastypes "github.com/NibiruChain/nibiru/v2/x/devgas/v1/types" epochstypes "github.com/NibiruChain/nibiru/v2/x/epochs/types" "github.com/NibiruChain/nibiru/v2/x/evm/precompile" - tokenfactorykeeper "github.com/NibiruChain/nibiru/v2/x/tokenfactory/keeper" - tokenfactorytypes "github.com/NibiruChain/nibiru/v2/x/tokenfactory/types" ) const wasmVmContractMemoryLimit = 32 @@ -271,16 +269,6 @@ func (app *NibiruApp) initNonDepinjectKeepers( govModuleAddr, ) - app.TokenFactoryKeeper = tokenfactorykeeper.NewKeeper( - app.keys[tokenfactorytypes.StoreKey], - app.appCodec, - app.BankKeeper, - app.AccountKeeper, - app.DistrKeeper, - app.SudoKeeper, - govModuleAddr, - ) - // register the proposal types // Mock Module setup for testing IBC and also acts as the interchain accounts authentication module diff --git a/app/server/geth_log_handler.go b/app/server/geth_log_handler.go index efdc34369e..388b66e79f 100644 --- a/app/server/geth_log_handler.go +++ b/app/server/geth_log_handler.go @@ -1,15 +1,14 @@ package server import ( + // Use "log/slog" from the Go std lib because Geth migrated to support + // slog and deprecated the original go-ethereum/log implementation. + // For more info on the migration, see https://github.com/ethereum/go-ethereum/pull/28187 "context" + "log/slog" cmtlog "github.com/cometbft/cometbft/libs/log" gethlog "github.com/ethereum/go-ethereum/log" - - // Use "log/slog" from the Go std lib because Geth migrated to support - // slog and deprecated the original go-ethereum/log implementation. - // For more info on the migration, see https://github.com/ethereum/go-ethereum/pull/28187 - "golang.org/x/exp/slog" ) // Ensure LogHandler implements slog.Handler diff --git a/contrib/scripts/e2e/contracts/cw_nameservice.wasm b/contrib/scripts/e2e/contracts/cw_nameservice.wasm deleted file mode 100644 index 24b39ec5247e19d93c5b9a5359c34f3628eb1d20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146179 zcmd?S51gIXS>O5oxqs)*9o>;+Teju+y*Jus1Qt{f&vm)z&fB+LV@DapNg}SX^O)Itrlwzm=7t9B< z+3)Xp&Ux>9XGXGYTt0lZRxOFXCJ3NVHsc)4Yw3hjs@FW)EGJjC* zSr^=8530lF{s;Ll$^J#QF5h$aea+k6@$S9*l9sO9x4+|-y?buEJ!$B!!`*l6y>s85 zB-L%#UcT$y_w5-Me$P8^yF1BZ)w}oHzt5}oZ@c~Wy|>(V+g*3wejD|zxmkNgg?Hb5 z=R0}xPxmB=YI@l_-utfG?yjB<-m~YO_k8WwUA_3aTkhMl_s(yBpLeop{CMx4cLK@Y zTkd)9I~Mo6FX^eJnLW3E?bm(X>)tR?XJdT$j@$OV^NxvE&D;092&tZ@)+M+kPmWYQ1aEyWYL`eOc1G^X~WT zyY23McWTzJXz#gy&pY4C)qmGC>?T_~x7~HuyWgpo|7hy=J=M)yXZP;8_q})S-SeJX zAh*4@?R)p$t(A z?z!b1x4maio^?OVn9H>H;E{CaRolMiwNIymZ+rXO{^wh6z3mmaI=}OG(hp?+Te@@b!|9Kt^N**qkEMh8N7DZz zJ(m7t`kC~NPo$qs2T!H{I{nS`jVIGDrT->9lYTkP6>a%#aqz(!de)==h0PqG|aeqy}tzRyln0p=0!%2!z>rDnE{dTsIkc9 zsHrZR>ViiFrKnRZj`F@>p3ANpW`cdYwV3WMvfX>RZSLE>x8Eo-!4CBbb{~=fR1Nj- z670FdE`;pft63KC8rroQ+U|bN<<2ll-Dqg}i%tub!lVfAJ}K$$J~yhLy@dK{y*@Xp zAEw>N5Rk`s)|@dpgV6*5Y!>)N00z@2e=hjl5r(J_p`s zg@vjl!-z(G4q~I6nev;+$xFt&wbktyAZXvf;!4 zdx$s2*cIb=144ZkB*XYUk2WogXf48ILr5w{4@1}#K=L6ZrO#LnNIqi{H6lcT)G&~8 zWK9JWQ(gy3xSuxM2j&x1!@jDWTWy$pVn8iH-x5C79?ECqA4J?8=RX(aV#x zcV)t8!aI8-G}X#{8a0o6U;Cd){TYmdG@HsB%~re96;(xP-R07;OM~3d>2$XSR3~<< z4m%UC+VxlM=}xUytNyAr-LAcA)?YQJTeVkGNj9JAtKmu`kbNCH$RDJGutRx+UD7Sk zzpCagvoEl!7{;fYs+r5g3#_W?tg4!{Sfe7XhRM`q3+!LbvUGp`;H#5z*TSf=MYEeD z>`XP6ovX71!B{kq)}r-=t$DH|Pq^Q%`@#5rPWPSazR0a)LCL`ae~N{{Hx-So`C!!I z&e|C@58Q0MWc!Ou%;efrT}iUi$y~NQ=+U6$iUd-R3<38ggO6l9z+M=9Q`u4bFx=bd zzyKMwi{{&kX3_qZ%lr9d;wLn23YbCT_R6fs_$dB*=iAh})TDt+(VlT`_1YnV4{I|n z1PML67Pln54{pr*`x`>#$qc2w1&z!L`uzk3W!aLLo1Se7!%6nwB!dX&yGA|mQC?A| zgHpX{Lfcno5dC~Aq^IRY3+0zSyqs)Jk{yZTp?tD_-&rWXP{04&_(rrb|AR|QODA)+ zC3CAtHM{UvUY<-AMrom|6Nzv!I4C?Z=jq@OA`!8dZ%cNT>Ae_H<&59Hq5LbRqZw-t zKCCK`MLKwht8K~a4cDRz=5f@dAw8W_BaAW|W>RQ8*=j;Hy?5B6{;_Of*yi_8woo?q z4yPqp*ZK#wd?mei)F`id6Qt89|2nxIMcLBBep+^Ee5U8O^o4rRZPP(47PxX?iU14) zQ~`h)N*TtsN3^ZV*8ZFN{c;24`ohvCZ$rGYE!kAH(h#rklb7EoGL3pJI|e%R`&c&Y>-T6T&gkn;tDL#sxZ})sLPRrAJfaT}|9pHqC6F9r zFh#38@BvC@g90fCgpD;CXihdDsK*U7ss_r05wv<`Drn2}n&i7O1R3xV|5hfIBWSi*;xZ)J{vGc8)Xi>{kIrs9jn?qUjSZBWPpnjQ!=+?FDZ z0F=*j*NJxm;Rxfn)uB1YPdND?lLJDp?Sl z20*|Y4O~8$fM*1Ci0>KA+8jxk6ke|22@*&_%;wYKK(;_$ z9<*tOGRIR{k;jtp-X|rJM0<}Kx}9A=p1SmLrW9p}8KwCuAu_1gKa;B8FR*9JKTcF| zg7rTZz%u&kH%im2KIhHB$a}DHily3PWttaln*^8x(eQq#7C`if$U}Q8zY!_hwxLk4HBjXe^FZA2rTWH zS@XpdV=0mV99buUCCKt5qG|T#K7S!*NmGm*!|B?1cJYiDsJC-cYQz+p@YmKzsGP0?4n zAmP_8u{^Hj=XAr|6Q}6CnTTW? zD}n$;2P%r_QP2dv)JFG@x(s#*q|7Ui8>876!_71-i}|EwwlL}!sb;8A^kvC4Ze&h0 zK9C_n*(y7Wqn3hC15Fkfg_aKeb69e7`4~Tg-$tm!2cL@%3i#|UI&P}Ze8Pn&8jvwM zScGhpOw;lh1-Uf1xh6)h@=yR@dQENs^bTMG_$I*BKLF0&%v?7#g|I7lYl$|A?645R z6b3k-j$p+HPsRt4cWF5JCR)nyUSy+Xy}^?bmVgNnHpIY)SPX~~0>`wKM8PI^`>HE! zwG6AmIRjyMOG}M!2F$L8Wj+O7@?x0^+#IUO2Ad?lu*~%Xg(55p5og)iN8K0N_j0*u z-`;X?-`6KdI#pqM)VY}qPaR&5o6b=0+p)qv_Y zP2Cj})T~WVBSF|mc-YivGPsjN$8yg<8?=3I+P#u#BmP$TDV2-Ex>DI6cbWdh2pLVuqy#l%&u%~ z_8gPGzL>4rnO$Ix0gx!hU~!b7zLN6rCnZ;9=3gbUOUh@VU$f#xL1|%OVYHp~S`z>YefD7LLKIkoxo1VbP->LRg%lQ{$}i*a09JmWTCJBBYQMIIg>Yt2;@5 zRXx$m+8)z6i(n=`Mk!n)BoRZW1CtxVbBOFHXf^6e0pQtSC}?^cx*(dLWJw^*E#T7efJG2kU z0Imoow#p~;JSDo45?!HIXN?Lr>0Y5zuRt>wU7elaH4bmn3|wCg1c(y=BO#FriiZ3o zB481U*YM;q0BDrY5Dbwe2q6;iWC%Mnw;J zLD(_I*jh7!?&B+3!J<@yvI18$SpM*HiL6I^ExRJ3RZ}E_un`UpgG_KM)CLs1V5<-! zy=Kwen(YfiZHl$cHiAAhz73fB{E=j?V`1w_W!-bT4oPNlRl zrd+3H$lJ{X4K=@+wlno+tGL)1-J(-W;j{ASlwn22#>Uw;c2DXClQVWACm0TBmhczk z{<$>G_G61_v1>~L8juBMhu;JO;?ibTru$^A^RIE^>}aB1m*vQu^jKZUPtKMUo+e;3Q|xVOwf zaEVOv64^eiL=XZxi}cMjLAXzh6kazMi}a?;t*8|5;8)TS@utDgrlZ#2|HAQeQ4|02 z=I6~E!0w(p)Uxztp*rC(KIY&G&*ya}4q2fE{OsH&-smsRRu}t(1om6}(}@ zH_xf2vz)ovRDgh4u5E`CQlVi3);ASISKdg z>4|o3?B^LKr{Oe0Bl;ut;un}fUwSfXHTbjuEimOoS73fVh08h+X8GW~blfx4n!>Zr zyl2yio~6dpmdmbDLn}p%Vp@)lEqKYHE1x{@`NaM(SLK7CKfmugXqZ4ngwy?SLs)(E zLKsLGfH3hFk;PxoZ(nxd;73!71W*7CV{=&EUp`<&aygMHJ-hL8969I;BaA9jUa)#` znZ4n;H4bgTLW5sU;RG27&M^g1484XSH3i8~2^ewB27zaK7U7Zy;gUt+B2|;tg-d=u z;i7aYrSZ6Mfq^AlkP2hrlF7(JxZr9bTrw9fiW*tXnsDJ6CZP)#U1Q|dg^O7*SzWk% zBF`EgphY;gWC+lzc&|veks!)^N}o4{1zn-f8?Nu9Z$Uo#)=Hqy6$E44SZd~Apfz2e zGhK?x!Ew|anN~Kp0#1vy<-5>t(G1#J>=>K!3X5f5WTF={C|8H7s)b6(w#H0=7S2xD zS_t=6BSPh%i^DDWqjyr(D_V=H+FnalgAK&%z+EELR%7t}Mi(vVK?$7Ki7r|cY3xV) zLm4g4uu_nS7e#ApwsF*v9;}iLs6aRuq1-Ip&TZMW^gfb1IqeD=D3X7Srxp=wVqDcD zVkA;BJBWK^^~bb`-tfR!!&4=cbuvPPl_wv@q5q2%J-B^wltQX3&w+G}Dg|8gBe;6u z=M>MtexW*yoR&v^*&`nGz|aPNWkZL*U%vugcHB1rCz@Q*R!HpF=SGzcN^4ZchnlDh)q`jqR^QhdOJ z@>ACJ$}^y&+`;|Mg>w13xIXeR@bfHj4$$oZk005VZQkG1>cwd!F{Z=d(^Bo&x-@nd zSD5O^B3&KkDzmGzIW#es-9NfSKTGN0Rhq)J{%Hm6Y<@EX&dp`Z%Ow~j)8L?#-250? zZpezVC#vu~IV;D3g7=3go!Gmh0_$MlF0F}{51Y|FBp6v9@kA*?HzB*ZA0{5Es|9E!FtOv@bpVG!|sAc(BqL!fxTV<8QNKA^A9)$jP5rby@B!GLBq3~E z8HCF2DLrDHyYFsOYH=AQxxsvhB+V=?@(?t#YQtlhb;%H2#|Vp%w4+cC6xp1hv%^hA za;B8Cb7d&!^a%ab=@I(Lp-0*jP)GBH(G#`RgT*chCT7+uuCIboo#0nRd({@UQ+SqL0UH9}yHE>~x#8G&KP z+5;}28eQqn5Q?MC4ts>v1n5RzMlu14<6sdvm$a?o)m|0JIl9Q*wY+?cn<z=-z(MvCKv^u*_IW1fcMov5GS?pU~+DnD60e;(4hn9|GRgfr;? z2D?cW@qS4nvw)lBD%MIph1)dn#!qrN>z7Y*x!x~NaEX(ksrdqzm+5kIF>;)IiYJ%) z%i~-E0DxHOeyF6L73w<+K8u;Fvn2#du>p~--*s1KhxJR1qx_bKn!#K!N;t@!XX>c) zCGN)B_IY|6XQ-X!ju1r9#AmqcR(Gelo1pL$KyymHLDjgjrcsAoewSJGZOeS9)=LQ7 zk@Nu`6$uF~T3)aWo9Z45QkGA3kIGY;T6Mo&_ZDms(kvrcDQ59~1zkf|#g4ovF7ikN zKZp}*92J2mxQAVc>5|lgdyP4w)W-3$jGscbK{qnrp+XCQDRynueAPsGXh?_4Rr(~$ z2NN$PwRu3&b9gUFQhtFx8|Bj$Xw_uX`c`_{k$ujbHCCTgKnnp196y;V$i?k(r7Nf` zqz7wd`)CAfj6osALuT=n3J}H6uB??RKs4T6Q$fJk6<-vxgXR{>6kh}o#O`?^)$1e1 zcvh@xfT4U2ia0E73DA#OmNXZ@Y&K~$L_ud2a+qHe?h&?XHT zopGX-R*4+2g^u`)yQNU#t>!~wGxV>={%w>VN*wAE&1JMd8af3@QCSBxGcr~*h~6pz zwhK3@SU^sJ=B7f=Bfr8DXAbm?H3<_Z76vqT0RN47bp#B2*kE8|Wrynx6b#P7%b0kc zK#RUjL_t^HtBNAFb=+}34H>st1hzNO6zfy_%y7}VuuLe$IIS{q9NTbK!@b4>qh^W- zX0|@8tRnBkTB=18X^C~@2uZgpS9uiO@y?MhOd3E}B?8YDP z^jTLC=23cULAo zMVYD*hv#HIPAxw-$`u$3PWw1>VT|&au>4;I

T#`KtrUSqfIBco7ipSv2OVt%>l% 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

ikX1zlz##||73_kP|o@F%IQQtcB2UHM# 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 0 { - AssertTraceCall(s, res[0].Result.(map[string]interface{})) + typedResult, ok := res[0].Result.(map[string]any) + if !ok { + s.T().Errorf("failed to parse block result as map[string]any. Got %#v", res[0].Result) + } + traceResult, err := json.Marshal(typedResult) + s.Require().NoError(err) + AssertTraceCall(s, traceResult) } }) } @@ -116,6 +157,7 @@ func (s *BackendSuite) TestTraceCall() { } s.Require().NoError(err) + traceConfig := traceConfigDefaultTracer() res, err := s.backend.TraceCall( txArgs, rpc.BlockNumber(block), @@ -123,10 +165,17 @@ func (s *BackendSuite) TestTraceCall() { ) s.Require().NoError(err) s.Require().NotNil(res) - AssertTraceCall(s, res.(map[string]interface{})) + AssertTraceCall(s, res) } -func AssertTraceCall(s *BackendSuite, trace map[string]interface{}) { +func AssertTraceCall( + s *BackendSuite, + traceResult json.RawMessage, +) { + var trace map[string]any + err := json.Unmarshal(traceResult, &trace) + s.Require().NoErrorf(err, "error unmarshaling traceResult: traceResult %s", traceResult) + s.Require().Equal("CALL", trace["type"]) s.Require().Equal(strings.ToLower(s.fundedAccEthAddr.Hex()), trace["from"]) s.Require().Equal(strings.ToLower(recipient.Hex()), trace["to"]) diff --git a/eth/rpc/backend/tx_info_test.go b/eth/rpc/backend/tx_info_test.go index d0d1eb0e47..53a45e9801 100644 --- a/eth/rpc/backend/tx_info_test.go +++ b/eth/rpc/backend/tx_info_test.go @@ -21,7 +21,7 @@ func (s *BackendSuite) TestGetTransactionByHash() { }{ { name: "happy: tx found", - txHash: transferTxHash, + txHash: s.SuccessfulTxTransfer().Receipt.TxHash, wantTxFound: true, }, { @@ -56,7 +56,7 @@ func (s *BackendSuite) TestGetTransactionReceipt() { }{ { name: "happy: tx found", - txHash: transferTxHash, + txHash: s.SuccessfulTxTransfer().Receipt.TxHash, wantTxFound: true, }, { @@ -128,7 +128,7 @@ func (s *BackendSuite) TestGetTransactionByBlockHashAndIndex() { } s.Require().NoError(err) s.Require().NotNil(tx) - AssertTxResults(s, tx, transferTxHash) + AssertTxResults(s, tx, s.SuccessfulTxTransfer().Receipt.TxHash) }) } } @@ -169,7 +169,7 @@ func (s *BackendSuite) TestGetTransactionByBlockNumberAndIndex() { } s.Require().NoError(err) s.Require().NotNil(tx) - AssertTxResults(s, tx, transferTxHash) + AssertTxResults(s, tx, s.SuccessfulTxTransfer().Receipt.TxHash) }) } } diff --git a/eth/rpc/backend/utils_test.go b/eth/rpc/backend/utils_test.go index 083d243618..8db9162093 100644 --- a/eth/rpc/backend/utils_test.go +++ b/eth/rpc/backend/utils_test.go @@ -13,7 +13,7 @@ import ( ) func (s *BackendSuite) TestGetLogsFromBlockResults() { - blockWithTx := deployContractBlockNumber.Int64() + blockWithTx := s.SuccessfulTxDeployContract().BlockNumberRpc().Int64() blockResults, err := s.backend.TendermintBlockResultByNumber(&blockWithTx) s.Require().NoError(err) s.Require().NotNil(blockResults) diff --git a/eth/rpc/rpc.go b/eth/rpc/rpc.go index c6c0891de4..c35a6c896c 100644 --- a/eth/rpc/rpc.go +++ b/eth/rpc/rpc.go @@ -15,11 +15,11 @@ import ( "github.com/cosmos/cosmos-sdk/client" errortypes "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/NibiruChain/nibiru/v2/x/common/nmath" "github.com/NibiruChain/nibiru/v2/x/evm" gethcommon "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" - gethmath "github.com/ethereum/go-ethereum/common/math" gethcore "github.com/ethereum/go-ethereum/core/types" gethparams "github.com/ethereum/go-ethereum/params" ) @@ -225,7 +225,7 @@ func NewRPCTxFromEthTx( // if the transaction has been mined, compute the effective gas price if baseFee != nil && blockHash != (gethcommon.Hash{}) { // price = min(tip, gasFeeCap - baseFee) + baseFee - price := gethmath.BigMin(new(big.Int).Add(tx.GasTipCap(), baseFee), tx.GasFeeCap()) + price := nmath.BigMin(new(big.Int).Add(tx.GasTipCap(), baseFee), tx.GasFeeCap()) result.GasPrice = (*hexutil.Big)(price) } else { result.GasPrice = (*hexutil.Big)(tx.GasFeeCap()) diff --git a/eth/rpc/rpcapi/eth_filters_api.go b/eth/rpc/rpcapi/eth_filters_api.go index eca8dd27c5..e5fa23a988 100644 --- a/eth/rpc/rpcapi/eth_filters_api.go +++ b/eth/rpc/rpcapi/eth_filters_api.go @@ -227,9 +227,6 @@ func (api *FiltersAPI) NewPendingTransactions(ctx context.Context) (*gethrpc.Sub case <-rpcSub.Err(): pendingTxSub.Unsubscribe(api.events) return - case <-notifier.Closed(): - pendingTxSub.Unsubscribe(api.events) - return } } }(pendingTxSub.EventCh) @@ -347,9 +344,6 @@ func (api *FiltersAPI) NewHeads(ctx context.Context) (*gethrpc.Subscription, err case <-rpcSub.Err(): headersSub.Unsubscribe(api.events) return - case <-notifier.Closed(): - headersSub.Unsubscribe(api.events) - return } } }(headersSub.EventCh) @@ -417,9 +411,6 @@ func (api *FiltersAPI) Logs( case <-rpcSub.Err(): // client send an unsubscribe request logsSub.Unsubscribe(api.events) return - case <-notifier.Closed(): // connection dropped - logsSub.Unsubscribe(api.events) - return } } }(logsSub.EventCh) @@ -643,7 +634,7 @@ func (api *FiltersAPI) GetFilterChanges(id gethrpc.ID) (any, error) { hashes := f.hashes f.hashes = nil return returnHashes(hashes), nil - case filters.LogsSubscription, filters.MinedAndPendingLogsSubscription: + case filters.LogsSubscription: logs := make([]*gethcore.Log, len(f.logs)) copy(logs, f.logs) f.logs = []*gethcore.Log{} diff --git a/evm-e2e/test/debug_queries.test.ts b/evm-e2e/test/debug_queries.test.ts index a6774aa4ec..6877adcb57 100644 --- a/evm-e2e/test/debug_queries.test.ts +++ b/evm-e2e/test/debug_queries.test.ts @@ -86,7 +86,8 @@ describe("debug queries", () => { expectTrace([{ result: traceResult }]) }) - // TODO: impl in EVM + // TODO: feat(evm-rpc): impl the debug_getBadBlocks EVM RPC method + // ticket: https://github.com/NibiruChain/nibiru/issues/2279 it("debug_getBadBlocks", async () => { try { const traceResult = await provider.send("debug_getBadBlocks", [txHash]) @@ -98,7 +99,8 @@ describe("debug queries", () => { } }) - // TODO: impl in EVM + // TODO: feat(evm-rpc): impl the debug_storageRangeAt EVM RPC method + // ticket: https://github.com/NibiruChain/nibiru/issues/2281 it("debug_storageRangeAt", async () => { try { const traceResult = await provider.send("debug_storageRangeAt", [ diff --git a/evm-e2e/test/wrapped_nibiru_wnibi.test.ts b/evm-e2e/test/wrapped_nibiru_wnibi.test.ts index 9916bd6881..6751c00496 100644 --- a/evm-e2e/test/wrapped_nibiru_wnibi.test.ts +++ b/evm-e2e/test/wrapped_nibiru_wnibi.test.ts @@ -54,6 +54,7 @@ test( } // TODO: test: Deposit via method call + // ticket: https://github.com/NibiruChain/nibiru/issues/2282 // TODO: test: totalSupply and transfer tests }, TEST_TIMEOUT, diff --git a/go.mod b/go.mod index e6671f6a83..0ed0a5027c 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ module github.com/NibiruChain/nibiru/v2 // See: // - [go-ethereum#30100: Build fails with Go 1.23rc](https://github.com/ethereum/go-ethereum/issues/30100) // - https://github.com/fjl/memsize/issues/4 -go 1.21 +go 1.24 require ( github.com/CosmWasm/wasmd v0.44.0 @@ -19,7 +19,7 @@ require ( github.com/cosmos/cosmos-proto v1.0.0-beta.5 github.com/cosmos/cosmos-sdk v0.47.11 github.com/cosmos/ibc-go/v7 v7.4.0 - github.com/ethereum/go-ethereum v1.13.14 + github.com/ethereum/go-ethereum v1.14.13 ) require ( @@ -40,7 +40,7 @@ require ( github.com/gorilla/mux v1.8.1 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 - github.com/holiman/uint256 v1.2.4 + github.com/holiman/uint256 v1.3.1 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.18.0 github.com/rakyll/statik v0.1.7 @@ -54,7 +54,7 @@ require ( github.com/tyler-smith/go-bip39 v1.1.0 google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe google.golang.org/grpc v1.62.1 - google.golang.org/protobuf v1.33.0 + google.golang.org/protobuf v1.34.2 gopkg.in/yaml.v2 v2.4.0 ) @@ -69,9 +69,9 @@ require ( github.com/rs/cors v1.8.3 github.com/rs/zerolog v1.32.0 github.com/status-im/keycard-go v0.2.0 - golang.org/x/crypto v0.21.0 + golang.org/x/crypto v0.22.0 golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa - golang.org/x/net v0.23.0 + golang.org/x/net v0.24.0 golang.org/x/text v0.14.0 ) @@ -87,24 +87,25 @@ require ( github.com/99designs/keyring v1.2.1 // indirect github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect github.com/DataDog/zstd v1.5.5 // indirect - github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect github.com/StackExchange/wmi v1.2.1 // indirect - github.com/VictoriaMetrics/fastcache v1.12.1 // indirect + github.com/VictoriaMetrics/fastcache v1.12.2 // indirect github.com/aws/aws-sdk-go v1.44.203 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect - github.com/bits-and-blooms/bitset v1.10.0 // indirect + github.com/bits-and-blooms/bitset v1.13.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/cespare/xxhash v1.1.0 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect - github.com/cockroachdb/errors v1.11.1 // indirect + github.com/cockroachdb/errors v1.11.3 // indirect + github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect - github.com/cockroachdb/pebble v1.1.0 // indirect + github.com/cockroachdb/pebble v1.1.2 // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect github.com/coinbase/rosetta-sdk-go v0.7.9 // indirect @@ -118,11 +119,11 @@ require ( github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/ledger-cosmos-go v0.12.4 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect - github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 // indirect - github.com/crate-crypto/go-kzg-4844 v0.7.0 // indirect + github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c // indirect + github.com/crate-crypto/go-kzg-4844 v1.0.0 // indirect github.com/creachadair/taskgroup v0.4.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect - github.com/deckarep/golang-set/v2 v2.1.0 // indirect + github.com/deckarep/golang-set/v2 v2.6.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect github.com/dgraph-io/badger/v2 v2.2007.4 // indirect @@ -131,12 +132,11 @@ require ( github.com/docker/distribution v2.8.2+incompatible // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.6.0 // indirect - github.com/ethereum/c-kzg-4844 v0.4.0 // indirect + github.com/ethereum/c-kzg-4844 v1.0.0 // indirect + github.com/ethereum/go-verkle v0.1.1-0.20240829091221-dffa7562dbe9 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff // indirect - github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 // indirect - github.com/getsentry/sentry-go v0.23.0 // indirect + github.com/getsentry/sentry-go v0.27.0 // indirect github.com/ghodss/yaml v1.0.0 // indirect github.com/gin-gonic/gin v1.9.1 // indirect github.com/go-kit/kit v0.12.0 // indirect @@ -217,7 +217,7 @@ require ( github.com/spf13/afero v1.11.0 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/subosito/gotenv v1.6.0 // indirect - github.com/supranational/blst v0.3.11 // indirect + github.com/supranational/blst v0.3.13 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.6.0 // indirect @@ -237,13 +237,11 @@ require ( go.opentelemetry.io/otel/trace v1.21.0 // indirect go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.9.0 // indirect - golang.org/x/mod v0.17.0 // indirect golang.org/x/oauth2 v0.16.0 // indirect - golang.org/x/sync v0.6.0 // indirect - golang.org/x/sys v0.18.0 // indirect - golang.org/x/term v0.18.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.22.0 // indirect + golang.org/x/term v0.19.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.15.0 // indirect google.golang.org/api v0.155.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 // indirect @@ -262,12 +260,12 @@ replace ( github.com/CosmWasm/wasmd => github.com/NibiruChain/wasmd v0.44.0-nibiru // github.com/cockroachdb/pebble: Has to be pinned for compatibilit with // go-ethereum/ethdb, which uses pebble imports - github.com/cockroachdb/pebble => github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 + // github.com/cockroachdb/pebble => github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 github.com/cosmos/cosmos-sdk => github.com/NibiruChain/cosmos-sdk v0.47.11-nibiru.3 github.com/cosmos/iavl => github.com/cosmos/iavl v0.20.0 - github.com/ethereum/go-ethereum => github.com/NibiruChain/go-ethereum v1.13.15-nibiru + github.com/ethereum/go-ethereum => github.com/NibiruChain/go-ethereum v1.14.13-nibiru.2 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 diff --git a/go.sum b/go.sum index d7242377b7..7c2f4819b3 100644 --- a/go.sum +++ b/go.sum @@ -4,6 +4,7 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= @@ -16,6 +17,7 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= @@ -27,28 +29,92 @@ cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+Y cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= +cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM= cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= +cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= +cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= +cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= +cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= +cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= +cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= cloud.google.com/go/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= @@ -56,12 +122,44 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= +cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= +cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E= +cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= +cloud.google.com/go/bigquery v1.49.0/go.mod h1:Sv8hMmTFFYBlt/ftw2uN6dFdQPzBlREY9yBh7Oy7/4Q= +cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= +cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= +cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= +cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= +cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= +cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= +cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= +cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= +cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= +cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= +cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= +cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M= +cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg= +cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= +cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= +cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= +cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= +cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= +cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= +cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= @@ -69,122 +167,441 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= +cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= +cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= +cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= +cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= +cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= +cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= +cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= +cloud.google.com/go/container v1.14.0/go.mod h1:3AoJMPhHfLDxLvrlVWaK57IXzaPnLaZq63WX59aQBfM= +cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= +cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= +cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= +cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M= +cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= +cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= +cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= +cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= +cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= +cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= +cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= +cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= +cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= +cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= +cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= +cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= +cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= +cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= +cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= +cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= +cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= +cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= +cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= +cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= +cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= +cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= +cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= +cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= +cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= +cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= +cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= +cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= +cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= +cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= +cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= +cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= +cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= +cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= +cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= +cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= +cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= +cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= +cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= +cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= +cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= +cloud.google.com/go/functions v1.12.0/go.mod h1:AXWGrF3e2C/5ehvwYo/GH6O5s09tOPksiKhz+hH8WkA= +cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= +cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= +cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= +cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= +cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= +cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= +cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= +cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= +cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= +cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= +cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= +cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= +cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= +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/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= +cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= +cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= +cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= +cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= +cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= +cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= +cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= +cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= +cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= +cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= +cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= +cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= +cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= +cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= +cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= +cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= +cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= +cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= +cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= +cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= +cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= +cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= +cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= +cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= +cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= +cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= +cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= +cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= +cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= +cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= +cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= +cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= +cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= +cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= +cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= +cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= +cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= +cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= +cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= +cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= +cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= +cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= +cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= +cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= +cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= +cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= +cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= +cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= +cloud.google.com/go/resourcemanager v1.6.0/go.mod h1:YcpXGRs8fDzcUl1Xw8uOVmI8JEadvhRIkoXXUNVYcVo= +cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= +cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= +cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= +cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= +cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= +cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= +cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= +cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= +cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= +cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= +cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= +cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= +cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= +cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= +cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= +cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= +cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= +cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= +cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= +cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= +cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= +cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA= +cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc= +cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= +cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= +cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= +cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= +cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= +cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= +cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= +cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= +cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= +cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= +cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= +cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= +cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= +cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= +cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= +cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= +cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= +cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= cloud.google.com/go/storage v1.36.0 h1:P0mOkAcaJxhCTvAkMhxMfrTKiNcub4YmmPBtlhAyTr8= cloud.google.com/go/storage v1.36.0/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= +cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= +cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= +cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= +cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= +cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= +cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= +cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= +cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= +cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= +cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= +cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= +cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= +cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= +cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0= +cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= +cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= +cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg= +cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk= +cloud.google.com/go/video v1.14.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= +cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= +cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= +cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= +cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= +cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= +cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= +cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= +cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= +cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= +cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= +cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= +cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= +cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= +cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= +cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= +cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= +cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= +cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= @@ -207,13 +624,13 @@ filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7 filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= +git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= 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= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.0.0/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= @@ -234,8 +651,8 @@ github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbi github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= -github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a/go.mod h1:EFZQ978U7x8IRnstaskI3IysnWY5Ao3QgZUKOXlsAdw= -github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w= +github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= +github.com/CloudyKit/jet/v6 v6.2.0/go.mod h1:d3ypHeIRNo2+XyqnGA8s+aphtcVpjP5hPwP/Lzo7Ro4= github.com/CosmWasm/wasmvm v1.5.8 h1:vrmAvDuXcNqw7XqDiVDIyopo9gNdkcvRLFTC8+wBb/A= github.com/CosmWasm/wasmvm v1.5.8/go.mod h1:2qaMB5ISmYXtpkJR2jy8xxx5Ti8sntOEf1cUgolb4QI= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= @@ -245,32 +662,33 @@ github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20190129172621-c8b1d7a94ddf/go.mod h1:aJ4qN3TfrelA6NZ6AXsXRfmEVaYin3EDbSPJrKS8OXo= 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/Joker/jade v1.1.3/go.mod h1:T+2WLyt7VH6Lp0TRxQrUYEs64nRc83wkMQrfeIQKduM= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/MakeNowJust/heredoc/v2 v2.0.1 h1:rlCHh70XXXv7toz95ajQWOWQnN4WNLt0TdpZYIR/J6A= github.com/MakeNowJust/heredoc/v2 v2.0.1/go.mod h1:6/2Abh5s+hc3g9nbWLe9ObDIOhaRrqsyY9MWy+4JdRM= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/NibiruChain/collections v0.5.0 h1:33pXpVTe1PK/tfdZlAJF1JF7AdzGNARG+iL9G/z3X7k= github.com/NibiruChain/collections v0.5.0/go.mod h1:43L6yjuF0BMre/mw4gqn/kUOZz1c2Y3huZ/RQfBFrOQ= github.com/NibiruChain/cosmos-sdk v0.47.11-nibiru.3 h1:MI3c8dJjWDYvhGlgKYexu8Gg9vuaYXFG40ulirlYbx0= github.com/NibiruChain/cosmos-sdk v0.47.11-nibiru.3/go.mod h1:ADjORYzUQqQv/FxDi0H0K5gW/rAk1CiDR3ZKsExfJV0= -github.com/NibiruChain/go-ethereum v1.13.15-nibiru h1:ZRtSXEoViqKkkqUO2XX9gllw1o+6WuIJiQP+RAzXgjM= -github.com/NibiruChain/go-ethereum v1.13.15-nibiru/go.mod h1:He1JcSQdNBjodHSb16fNibw2x72TRLsFjvs9H1ys4uY= +github.com/NibiruChain/go-ethereum v1.14.13-nibiru.2 h1:ck5YAdn2Fklelh8JfLzU9VwXWXmitkbI0ixyoXcD1U8= +github.com/NibiruChain/go-ethereum v1.14.13-nibiru.2/go.mod h1:RAC2gVMWJ6FkxSPESfbshrcKpIokgQKsVKmAuqdekDY= github.com/NibiruChain/wasmd v0.44.0-nibiru h1:b+stNdbMFsl0+o4KedXyF83qRnEpB/jCiTGZZgv2h2U= github.com/NibiruChain/wasmd v0.44.0-nibiru/go.mod h1:inrbdsixQ0Kdu4mFUg1u7fn3XPOEkzqieGv0H/gR0ck= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= +github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06/go.mod h1:7erjKLwalezA0k99cWs5L11HWOAPNjdUZ6RxH1BXbbM= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= -github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= -github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= +github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI= +github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= @@ -281,8 +699,11 @@ github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/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-20210923152817-c3b6e2f0c527/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -290,9 +711,14 @@ github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRF github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= +github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= @@ -319,7 +745,7 @@ github.com/aws/aws-sdk-go-v2/service/sso v1.15.2/go.mod h1:gsL4keucRCgW+xA85ALBp github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3/go.mod h1:a7bHA82fyUXOm+ZSWKU6PIoBxrjSprdLoM8xPYvzYVg= github.com/aws/aws-sdk-go-v2/service/sts v1.23.2/go.mod h1:Eows6e1uQEsc4ZaHANmsPRzAKcVDrcmjjWiih2+HUUQ= github.com/aws/smithy-go v1.15.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= -github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= +github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -331,8 +757,9 @@ github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2 github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bits-and-blooms/bitset v1.5.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bits-and-blooms/bitset v1.7.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/bits-and-blooms/bitset v1.10.0 h1:ePXTeiPEazB5+opbv5fr8umg2R/1NlzgDsyepwsSr88= -github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/bits-and-blooms/bitset v1.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= +github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= @@ -380,14 +807,18 @@ github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInq github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= @@ -412,32 +843,33 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ= github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/cockroachdb/datadriven v1.0.0/go.mod h1:5Ib8Meh+jk1RlHIXej6Pzevx/NLlNvQB9pmSBZErGA4= +github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.6.1/go.mod h1:tm6FTP5G81vwJ5lC0SizQo374JNCOPrHyXGitRJoDqM= -github.com/cockroachdb/errors v1.8.1/go.mod h1:qGwQn6JmZ+oMjuLwjWzUNqblqk0xl4CVV3SQbGwK7Ac= -github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= -github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= -github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= +github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I= +github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8= +github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce h1:giXvy4KSc/6g/esnpM7Geqxka4WSqI1SZc7sMJFd3y4= +github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 h1:aPEJyR4rPBvDmeyi+l/FS/VtA00IWvjeFvjen1m1l1A= -github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593/go.mod h1:6hk1eMY/u5t+Cf18q5lFMUA1Rc+Sm5I6Ra1QuPyxXCo= -github.com/cockroachdb/redact v1.0.8/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/pebble v1.1.2 h1:CUh2IPtR4swHlEj48Rhfzw6l/d0qA31fItcIszQVIsA= +github.com/cockroachdb/pebble v1.1.2/go.mod h1:4exszw1r40423ZsmkG/09AFEG83I0uDgfujJdbL6kYU= github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2/go.mod h1:8BT+cPK6xvFOcRlk0R8eg+OTkcqI6baNH4xAkpiYVvQ= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= @@ -502,10 +934,10 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsr github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 h1:d28BXYi+wUpz1KBmiF9bWrjEMacUEREV6MBi2ODnrfQ= -github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= -github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA= -github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= +github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c h1:uQYC5Z1mdLRPrZhHjHxufI8+2UG/i25QG92j0Er9p6I= +github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= +github.com/crate-crypto/go-kzg-4844 v1.0.0 h1:TsSgHwrkTKecKJ4kadtHi4b3xHW5dCFUDFnUp1TsawI= +github.com/crate-crypto/go-kzg-4844 v1.0.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= @@ -513,13 +945,14 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= +github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= -github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= +github.com/deckarep/golang-set/v2 v2.6.0 h1:XfcQbWM1LlMB8BsJ8N9vW5ehnnPVIw0je80NsVHagjM= +github.com/deckarep/golang-set/v2 v2.6.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= @@ -529,7 +962,6 @@ github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0 github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= @@ -540,7 +972,9 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/djherbis/atime v1.1.0/go.mod h1:28OF6Y8s3NQWwacXc5eZTsEsiMzp7LF8MbXE+XJPdBE= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= @@ -551,8 +985,10 @@ github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKoh github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0/go.mod h1:56wL82FO0bfMU5RvfXoIwSOP2ggqqxT+tAfNEIyxuHw= github.com/dop251/goja v0.0.0-20211022113120-dc8c55024d06/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= -github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127/go.mod h1:QMWlm50DNe14hD7t24KEqZuUdC9sOTy8W6XbCU1mlw4= +github.com/dop251/goja v0.0.0-20230605162241-28ee0ee714f3/go.mod h1:QMWlm50DNe14hD7t24KEqZuUdC9sOTy8W6XbCU1mlw4= github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= github.com/dop251/goja_nodejs v0.0.0-20211022123610-8dd9abb0616d/go.mod h1:DngW8aVqWbuLRMHItjPUyqdj+HWPvnQe8V8y1nDpIbM= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -576,24 +1012,28 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= +github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= +github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= -github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= -github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY= -github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= -github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= +github.com/ethereum/c-kzg-4844 v1.0.0 h1:0X1LBXxaEtYD9xsyj9B9ctQEZIpnvVDeoBx8aHEwTNA= +github.com/ethereum/c-kzg-4844 v1.0.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum/go-verkle v0.1.1-0.20240829091221-dffa7562dbe9 h1:8NfxH2iXvJ60YRB8ChToFTUzl8awsc3cJ8CbLjGIl/A= +github.com/ethereum/go-verkle v0.1.1-0.20240829091221-dffa7562dbe9/go.mod h1:M3b90YRnzqKyyzBEWJGqj8Qff4IDeXnzFw0P9bFw3uk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/ferranbt/fastssz v0.1.2/go.mod h1:X5UPrE2u1UJjxHA8X54u04SBwdAQjG2sFtWs39YxyWs= github.com/fjl/gencodec v0.0.0-20230517082657-f9840df7b83e/go.mod h1:AzA8Lj6YtixmJWL+wkKoBGsLWy9gFrAzi4g+5bCKwpY= -github.com/fjl/memsize v0.0.2 h1:27txuSD9or+NZlnOWdKUxeBzTAUkWCVh+4Gf2dWFOzA= -github.com/fjl/memsize v0.0.2/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA= +github.com/flosch/pongo2/v4 v4.0.2/go.mod h1:B5ObFANs/36VwxxlgKpdchIJHMvHB562PW+BWPhwZD8= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= @@ -604,33 +1044,27 @@ github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHk github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61/go.mod h1:Q0X6pkwTILDlzrGEckF6HKjXe48EgsY/l7K7vhY4MW8= -github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 h1:BAIP2GihuqhwdILrV+7GJel5lyPV3u1+PgzrWLc0TkE= -github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46/go.mod h1:QNpY22eby74jVhqH4WhDLDwxc/vqsern6pW+u2kbkpc= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE= -github.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= +github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= -github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= @@ -654,38 +1088,52 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= +github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= +github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU= +github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= +github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= +github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/gobwas/ws v1.1.0 h1:7RFti/xnNkMJnrK7D1yQ/iCIB5OrrY/54/H930kIbHA= +github.com/gobwas/ws v1.1.0/go.mod h1:nzvNcVha5eUziGrbxFCo6qFIojQHjJV5cLYIbezhfL0= +github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= @@ -699,14 +1147,18 @@ github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2 github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= -github.com/golang-jwt/jwt v3.2.1+incompatible h1:73Z+4BJcrTC+KczS6WvTPvRGOp1WmfEP4Q1lOd9Z/+c= github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= +github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.4.3/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= +github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= github.com/golang/glog v1.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc= github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -753,7 +1205,6 @@ github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= -github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= github.com/gonum/internal v0.0.0-20181124074243-f884aa714029/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= @@ -763,6 +1214,7 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -780,7 +1232,6 @@ github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -804,8 +1255,10 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -824,6 +1277,8 @@ github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go v0.0.0-20161107002406-da06d194a00e/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= @@ -836,11 +1291,15 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= @@ -848,6 +1307,7 @@ github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -865,6 +1325,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is= github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= @@ -923,8 +1385,9 @@ github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 h1:X4egAf/gcS1zATw6w github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= -github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= -github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= +github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= +github.com/holiman/uint256 v1.3.1 h1:JfTzmih28bittyHM8z360dCjIA9dbPIBlcTI6lmctQs= +github.com/holiman/uint256 v1.3.1/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= @@ -933,7 +1396,8 @@ github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXM github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= -github.com/hydrogen18/memlistener v0.0.0-20141126152155-54553eb933fb/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= +github.com/hydrogen18/memlistener v1.0.0/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= @@ -947,10 +1411,9 @@ github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrp github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= -github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI= -github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= +github.com/iris-contrib/httpexpect/v2 v2.12.1/go.mod h1:7+RB6W5oNClX7PTwJgJnsQP3ZuUUYB3u61KCqeSgZ88= +github.com/iris-contrib/schema v0.0.6/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267/go.mod h1:h1nSAbGFqGVzn6Jyl1R/iCcBUHN4g+gW1u9CoBTrb9E= @@ -966,6 +1429,7 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfC github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -979,40 +1443,41 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= -github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= -github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= -github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/kataras/golog v0.0.9/go.mod h1:12HJgwBIZFNGL0EJnMRhmvGA0PQGx8VFwrZtM4CqbAk= -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/karalabe/hid v1.0.1-0.20240306101548-573246063e52/go.mod h1:qk1sX/IBgppQNcGCRoj90u6EGC056EBoIc1oEjCWla8= +github.com/kataras/blocks v0.0.7/go.mod h1:UJIU97CluDo0f+zEjbnbkeMRlvYORtmc1304EeyXf4I= +github.com/kataras/golog v0.1.8/go.mod h1:rGPAin4hYROfk1qT9wZP6VY2rsb4zzc37QpdPjdkqVw= +github.com/kataras/iris/v12 v12.2.0/go.mod h1:BLzBpEunc41GbE68OUaQlqX4jzi791mx5HU04uPb90Y= +github.com/kataras/jwt v0.1.8/go.mod h1:Q5j2IkcIHnfwy+oNY3TVWuEBJNw0ADgCcXK9CaZwV4o= +github.com/kataras/neffos v0.0.21/go.mod h1:FeGka8lu8cjD2H+0OpBvW8c6xXawy3fj5VX6xcIJ1Fg= +github.com/kataras/pio v0.0.11/go.mod h1:38hH6SWH6m4DKSYmRhlrCJ5WItwWgCVrTNU62XZyUvI= +github.com/kataras/sitemap v0.0.6/go.mod h1:dW4dOCNs896OR1HmG+dMLdT7JjDk7mYBzoIRwuj5jA4= +github.com/kataras/tunnel v0.0.4/go.mod h1:9FkU4LaeifdMWqZu7o20ojmW4B7hdhv2CMLwfnHGpYw= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kilic/bls12-381 v0.1.0/go.mod h1:vDTTHJONJ6G+P2R74EhnyotQDTliQDnFEwhdmfzw1ig= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.15.0/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/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/cpuid v1.2.1 h1:vJi+O/nMdFt0vqm8NZBI6wzALWdA2X+egi0ogNyrC/w= -github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -1026,12 +1491,14 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= +github.com/labstack/echo/v4 v4.10.0/go.mod h1:S/T/5fy/GigaXnHTkh0ZGe4LpkkQysvRjFMSUTkDRNQ= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= @@ -1043,27 +1510,34 @@ github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0U github.com/linxGnu/grocksdb v1.8.12 h1:1/pCztQUOa3BX/1gR3jSZDoaKFpeHFvQ1XrqZpSvZVo= github.com/linxGnu/grocksdb v1.8.12/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mailgun/raymond/v2 v2.0.48/go.mod h1:lsgvL50kgt1ylcFJYZiULi5fjPBkkhNfj4KA0W54Z18= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= +github.com/matryer/try v0.0.0-20161228173917-9ac251b645a2/go.mod h1:0KeJpeMD6o+O4hW7qJOT7vyQPKrWmj26uf5wMc/IiIs= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= @@ -1081,20 +1555,22 @@ github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.14.5/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= +github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= -github.com/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.mod h1:dSsfyI2zABAdhcbvkXqgxOxrCsbYeHCPgrZkku60dSg= -github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ= -github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= +github.com/mediocregopher/radix/v3 v3.8.1/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= +github.com/microcosm-cc/bluemonday v1.0.23/go.mod h1:mN70sk7UkkF8TUr2IGBpNN0jAgStuPzlK76QuruE/z4= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/mimoo/StrobeGo v0.0.0-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.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -1103,6 +1579,7 @@ github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrk github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= @@ -1127,7 +1604,6 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/montanaflynn/stats v0.7.0/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= -github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -1138,12 +1614,15 @@ github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/jwt/v2 v2.3.0/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM= +github.com/nats-io/nats-server/v2 v2.9.11/go.mod h1:b0oVuxSlkvS3ZjMkncFeACGyZohbO4XhSqW1Lt7iRRY= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4= +github.com/nats-io/nats.go v1.19.0/go.mod h1:tLqubohF7t4z3du1QDPYJIQQyhb4wl6DhjxEajSI7UA= +github.com/nats-io/nats.go v1.23.0/go.mod h1:ki/Scsa23edbh8IRZbCuNXR9TDcbvfaSijKtaqQgw+Q= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/neilotoole/errgroup v0.1.6/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= @@ -1160,16 +1639,34 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= +github.com/onsi/ginkgo/v2 v2.1.6/go.mod h1:MEH45j8TBi6u9BMogfbp0stKC5cdGjumZj5Y7AG4VIk= +github.com/onsi/ginkgo/v2 v2.3.0/go.mod h1:Eew0uilEqZmIEZr8JrvYlvOM7Rr6xzTmMV8AyFNU9d0= +github.com/onsi/ginkgo/v2 v2.4.0/go.mod h1:iHkDK1fKGcBoEHT5W7YBq4RFWaQulw+caOMkAt4OrFo= +github.com/onsi/ginkgo/v2 v2.5.0/go.mod h1:Luc4sArBICYCS8THh8v3i3i5CuSZO+RaQRaJoeNwomw= +github.com/onsi/ginkgo/v2 v2.7.0/go.mod h1:yjiuMwPokqY1XauOgju45q3sJt6VzQ/Fict1LFVcsAo= +github.com/onsi/ginkgo/v2 v2.8.1/go.mod h1:N1/NbDngAFcSLdyZ+/aYTYGSlq9qMCS/cNKGJjy+csc= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= -github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/onsi/gomega v1.20.1/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= +github.com/onsi/gomega v1.21.1/go.mod h1:iYAIXgPSaDHak0LCMA+AWBpIKBr8WZicMxnE8luStNc= +github.com/onsi/gomega v1.22.1/go.mod h1:x6n7VNe4hw0vkyYUM4mjIXx3JbLiPaBPNgB7PRQ1tuM= +github.com/onsi/gomega v1.24.0/go.mod h1:Z/NWtiqwBrwUt4/2loMmHL63EDLnYHmVbuBpDr2vQAg= +github.com/onsi/gomega v1.24.1/go.mod h1:3AOiACssS3/MajrniINInwbfOOtfZvplPzuRSmvt1jM= +github.com/onsi/gomega v1.26.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM= +github.com/onsi/gomega v1.27.1 h1:rfztXRbg6nv/5f+Raen9RcGoSecHIFgBBLQK3Wdj754= +github.com/onsi/gomega v1.27.1/go.mod h1:aHX5xOykVYzWOV4WqQy0sy8BQptgukenXpCXfadcIAw= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= @@ -1193,6 +1690,8 @@ github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0Mw github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= @@ -1205,20 +1704,26 @@ github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/diff v0.0.0-20200914180035-5b29258ca4f7/go.mod h1:zO8QMzTeZd5cpnIkz/Gn6iK0jDfGicM1nynOkkPIl28= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= @@ -1238,6 +1743,7 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.1-0.20210607210712-147c58e9608a/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= @@ -1264,7 +1770,10 @@ github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/protolambda/bls12-381-util v0.0.0-20220416220906-d8552aa452c7/go.mod h1:IToEjHuttnUzwZI5KBSM/LOOW3qLbbrHOEfp3SbECGY= +github.com/protolambda/bls12-381-util v0.1.0/go.mod h1:cdkysJTRpeFeuUVx/TXGDQNMTiRAalk1vQw3TYTHcE4= +github.com/protolambda/messagediff v1.4.0/go.mod h1:LboJp0EwIbJsePYpzh5Op/9G1/4mIztMRYzzwR0dR2M= +github.com/protolambda/zrnt v0.32.2/go.mod h1:A0fezkp9Tt3GBLATSPIbuY4ywYESyAuc/FFmPKg8Lqs= +github.com/protolambda/ztyp v0.2.2/go.mod h1:9bYgKGqg3wJqT9ac1gI2hnVb0STQq7p/1lapqrqY1dU= github.com/prysmaticlabs/gohashtree v0.0.1-alpha.0.20220714111606-acbb2962fb48/go.mod h1:4pWaT30XoEx1j8KNJf3TV+E3mQkaufn7mf+jRNb/Fuk= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= @@ -1273,12 +1782,14 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5X github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= @@ -1297,27 +1808,30 @@ github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sanity-io/litter v1.5.5/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF7bU2UI5U= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= -github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= +github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil/v3 v3.23.2/go.mod h1:gv0aQw33GLo3pG8SiWKiQrbDzbRY1K80RyZJ7V4Th1M= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -1328,6 +1842,9 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= @@ -1359,6 +1876,8 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v0.0.0-20161117074351-18a02ba4a312/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -1370,15 +1889,21 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= -github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/supranational/blst v0.3.13 h1:AYeSxdOMacwu7FBmpfloBz5pbFXDmJL33RuwnKtmTjk= +github.com/supranational/blst v0.3.13/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= +github.com/tailscale/depaware v0.0.0-20210622194025-720c4b409502/go.mod h1:p9lPsd+cx33L3H9nNoecRRxPssFKUwwI50I3pZ0yT+8= +github.com/tdewolff/minify/v2 v2.12.4/go.mod h1:h+SRvSIX3kwgwTFOpSckvSxgax3uy8kZTSF1Ojrr3bk= +github.com/tdewolff/parse/v2 v2.6.4/go.mod h1:woz0cgbLwFdtbjJu8PIKxhW05KplTFQkOdX78o+Jgrs= +github.com/tdewolff/test v1.0.7/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= @@ -1395,8 +1920,10 @@ github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhso github.com/tidwall/sjson v1.2.4/go.mod h1:098SZ494YoMWPmMO6ct4dcFnqxwj9r/gF0Etp19pSNM= github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= +github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -1408,10 +1935,12 @@ github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2 github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo= +github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= @@ -1425,10 +1954,11 @@ github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= +github.com/valyala/fasthttp v1.40.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= +github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -1440,6 +1970,7 @@ github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRT github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= +github.com/yosssi/ace v0.0.5/go.mod h1:ALfIzm2vT7t5ZE7uoIZqF3TQ7SAOyupFZnkrF5id+K0= github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= @@ -1448,16 +1979,22 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= +github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -1482,11 +2019,14 @@ go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6 go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc= go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/automaxprocs v1.5.1/go.mod h1:BF4eumQw0P9GtnuxxovUd06vwm1o18oMzFtK66vU6XU= go.uber.org/automaxprocs v1.5.2/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= @@ -1506,6 +2046,7 @@ golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -1514,22 +2055,30 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220511200225-c6db032c6c88/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.2.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb h1:xIApU0ow1zwMa2uL1VDNeQlNVFTWMQxZUZCMDy0Q4Us= golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= @@ -1541,6 +2090,8 @@ golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+o golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1560,14 +2111,19 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.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/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/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= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1591,7 +2147,6 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1614,13 +2169,16 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1633,17 +2191,25 @@ golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.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/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= -golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= golang.org/x/oauth2 v0.0.0-20170207211851-4464e7848382/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1668,8 +2234,13 @@ golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7Lm golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= +golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= golang.org/x/perf v0.0.0-20230113213139-801c7ef9e5c5/go.mod h1:UBKtEnL8aqnd+0JHqZ+2qoMDwtuy6cYhhKNoHLBiTQc= @@ -1686,12 +2257,13 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1749,10 +2321,14 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201207223542-d4d67f95c62d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1760,6 +2336,7 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1770,11 +2347,14 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1784,8 +2364,10 @@ golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1796,37 +2378,50 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= -golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= -golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= -golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= +golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1838,10 +2433,13 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= @@ -1852,19 +2450,20 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.2.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -1905,22 +2504,31 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201211185031-d93e913c1a58/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.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/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= +golang.org/x/tools v0.11.0/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= -golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= -golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= +golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= 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= @@ -1933,10 +2541,12 @@ golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNq gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= +gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= gonum.org/v1/plot v0.10.0/go.mod h1:JWIHJ7U20drSQb/aDpTetJzfC1KlAPldJLpkSy88dvQ= +gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= google.golang.org/api v0.0.0-20170206182103-3d017632ea10/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= @@ -1986,7 +2596,16 @@ google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaE google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= +google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= +google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= +google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= google.golang.org/api v0.155.0 h1:vBmGhCYs0djJttDNynWo44zosHlPvHmA0XiN2zP2DtA= google.golang.org/api v0.155.0/go.mod h1:GI5qK5f40kCpHfPn6+YzGAByIKWv8ujFnmoWm7Igduk= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -2039,8 +2658,10 @@ google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -2074,6 +2695,7 @@ google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2 google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= @@ -2106,7 +2728,36 @@ google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53B google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= +google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 h1:KAeGQVN3M9nD0/bQXnr/ClcEMJ968gUXJQ9pwfSynuQ= google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80/go.mod h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro= google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe h1:0poefMBYvYbs7g5UkjS6HcxBPaTRAmznle9jnxYoAI8= @@ -2147,6 +2798,7 @@ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= @@ -2156,6 +2808,11 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= +google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= @@ -2174,8 +2831,12 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.29.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -2189,13 +2850,10 @@ gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qS gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= -gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= @@ -2226,6 +2884,42 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= +modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= +modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= +modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= +modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= +modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= +modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= +modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= +modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= +modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s= +modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4= +modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= +modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= +modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= +moul.io/http2curl/v2 v2.3.0/go.mod h1:RW4hyBjTWSYDOxapodpNEtX0g5Eb16sxklBqmd2RHcE= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= diff --git a/proto/nibiru/tokenfactory/module/module.proto b/proto/nibiru/tokenfactory/module/module.proto new file mode 100644 index 0000000000..eae5e332fd --- /dev/null +++ b/proto/nibiru/tokenfactory/module/module.proto @@ -0,0 +1,25 @@ +syntax = "proto3"; + +package nibiru.tokenfactory.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object for the tokenfactory module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/NibiruChain/nibiru/x/tokenfactory" + }; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 1; +} + +// ModuleAccountPermission represents permissions for a module account. +message ModuleAccountPermission { + // account is the name of the module. + string account = 1; + + // permissions are the permissions this module has. Currently recognized + // values are minter, burner and staking. + repeated string permissions = 2; +} diff --git a/x/common/nmath/nmath.go b/x/common/nmath/nmath.go new file mode 100644 index 0000000000..72db2c5b51 --- /dev/null +++ b/x/common/nmath/nmath.go @@ -0,0 +1,19 @@ +package nmath + +import "math/big" + +// BigMin returns the smaller of x or y +func BigMin(x, y *big.Int) *big.Int { + if x == nil || x.Cmp(y) > 0 { + return y + } + return x +} + +// BigMax returns the larger of x or y +func BigMax(x, y *big.Int) *big.Int { + if x == nil || x.Cmp(y) < 0 { + return y + } + return x +} diff --git a/x/evm/chain_config.go b/x/evm/chain_config.go index eb389638cf..69f19c3305 100644 --- a/x/evm/chain_config.go +++ b/x/evm/chain_config.go @@ -34,7 +34,7 @@ func EthereumConfig(chainID *big.Int) *params.ChainConfig { // CancunTime switch time (nil = no fork, 0 => already on cancun) CancunTime: ptrU64(0), // 0 => already on ... PragueTime: ptrU64(0), // 0 => already on ... - VerkleTime: ptrU64(0), // 0 => already on ... + VerkleTime: nil, // nil => disable stateless verification TerminalTotalDifficulty: nil, Ethash: nil, Clique: nil, diff --git a/x/evm/const.go b/x/evm/const.go index 214529fdef..d2c9728880 100644 --- a/x/evm/const.go +++ b/x/evm/const.go @@ -9,7 +9,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" gethcommon "github.com/ethereum/go-ethereum/common" + gethcore "github.com/ethereum/go-ethereum/core" gethvm "github.com/ethereum/go-ethereum/core/vm" + "github.com/holiman/uint256" "github.com/NibiruChain/nibiru/v2/x/common/set" ) @@ -24,7 +26,7 @@ var ( var PRECOMPILE_ADDRS []gethcommon.Address = // Using a set cleanly removes potential duplicates set.New[gethcommon.Address]( - append(gethvm.PrecompiledAddressesCancun, []gethcommon.Address{ + append(gethvm.PrecompiledAddressesBerlin, []gethcommon.Address{ // FunToken 0x...800 gethcommon.HexToAddress("0x0000000000000000000000000000000000000800"), // Wasm 0x...802 @@ -136,6 +138,38 @@ func WeiToNative(weiAmount *big.Int) (evmDenomAmount *big.Int) { return new(big.Int).Quo(weiAmount, pow10) } +// WeiToNativeMustU256 is identical to [WeiToNative], except it returns a +// [uint256.Int] instead of a [big.Int]. +// NOTE: It's okay to panic on overflow here because NIBI has a max supply of +// 1.5 billion. That means the highest amount of NIBI is in wei units is +// 1.5 * 10^{9} * 10^{18} == 1.5 * 10^{27}, +// whereas the maximum uint256 value is +// 2^{256} - 1 == 1.15792089 * 10^{77} +func WeiToNativeMustU256(wei *big.Int) (evmDenomAmount *uint256.Int) { + weiSign := wei.Sign() + if weiSign < 0 { + panic(fmt.Errorf( + "uint256 cannot be parsed from the negative big.Int %s", wei), + ) + } + + nBig := WeiToNative(wei) // <- The output value + evmDenomAmount, isOverflow := uint256.FromBig(new(big.Int).Abs(nBig)) + if isOverflow { + // TODO: Is there a better strategy than panicking here? + panic(fmt.Errorf( + "uint256 overflow occurred for big.Int value %s", wei), + ) + } + return evmDenomAmount +} + +// NativeToWeiU256 is the uint256 equivalent of the [NativeToWei] function. +func NativeToWeiU256(evmDenomAmount *uint256.Int) (weiAmount *uint256.Int) { + out := NativeToWei(evmDenomAmount.ToBig()) + return uint256.MustFromBig(out) +} + // ParseWeiAsMultipleOfMicronibi truncates the given wei amount to the highest // multiple of 1 micronibi (10^12 wei). It returns the truncated value and an // error if the input value is too small. @@ -181,3 +215,8 @@ func ParseBlockTimeUnixU64(ctx sdk.Context) uint64 { } var Big0 = big.NewInt(0) + +func GasPool(gasLimit uint64) *gethcore.GasPool { + gasPool := (gethcore.GasPool)(gasLimit) + return &gasPool +} diff --git a/x/evm/evmtest/test_deps.go b/x/evm/evmtest/test_deps.go index 8d4169a6e1..1d25d77b85 100644 --- a/x/evm/evmtest/test_deps.go +++ b/x/evm/evmtest/test_deps.go @@ -7,6 +7,7 @@ import ( gethcommon "github.com/ethereum/go-ethereum/common" gethcore "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/eth/tracers/logger" "github.com/NibiruChain/nibiru/v2/app" "github.com/NibiruChain/nibiru/v2/eth" @@ -48,7 +49,15 @@ func (deps TestDeps) NewStateDB() *statedb.StateDB { func (deps TestDeps) NewEVM() (*vm.EVM, *statedb.StateDB) { stateDB := deps.EvmKeeper.NewStateDB(deps.Ctx, statedb.NewEmptyTxConfig(gethcommon.BytesToHash(deps.Ctx.HeaderHash()))) - evmObj := deps.EvmKeeper.NewEVM(deps.Ctx, MOCK_GETH_MESSAGE, deps.EvmKeeper.GetEVMConfig(deps.Ctx), evm.NewNoOpTracer(), stateDB) + loggerConfig := &logger.Config{Debug: true} + evmObj := deps.EvmKeeper.NewEVM( + deps.Ctx, + MOCK_GETH_MESSAGE, + deps.EvmKeeper.GetEVMConfig(deps.Ctx), + logger.NewStructLogger(loggerConfig).Hooks(), + // logger.NewJSONLogger(loggerConfig, os.Stdout), + stateDB, + ) return evmObj, stateDB } diff --git a/x/evm/evmtest/tx.go b/x/evm/evmtest/tx.go index 5a2346860f..45fd93d7dc 100644 --- a/x/evm/evmtest/tx.go +++ b/x/evm/evmtest/tx.go @@ -361,15 +361,16 @@ func NewEthTxMsgFromTxData( } var MOCK_GETH_MESSAGE = core.Message{ - To: nil, - From: evm.EVM_MODULE_ADDRESS, - Nonce: 0, - Value: evm.Big0, // amount - GasLimit: 0, - GasPrice: evm.Big0, - GasFeeCap: evm.Big0, - GasTipCap: evm.Big0, - Data: []byte{}, - AccessList: gethcore.AccessList{}, - SkipAccountChecks: false, + To: nil, + From: evm.EVM_MODULE_ADDRESS, + Nonce: 0, + Value: evm.Big0, // amount + GasLimit: 0, + GasPrice: evm.Big0, + GasFeeCap: evm.Big0, + GasTipCap: evm.Big0, + Data: []byte{}, + AccessList: gethcore.AccessList{}, + SkipNonceChecks: false, + SkipFromEOACheck: false, } diff --git a/x/evm/json_tx_args.go b/x/evm/json_tx_args.go index e06616bbd2..5d422f3229 100644 --- a/x/evm/json_tx_args.go +++ b/x/evm/json_tx_args.go @@ -4,15 +4,17 @@ package evm import ( "errors" "fmt" + "math" "math/big" sdkmath "cosmossdk.io/math" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/core" geth "github.com/ethereum/go-ethereum/core/types" + + "github.com/NibiruChain/nibiru/v2/x/common/nmath" ) // JsonTxArgs represents the arguments to construct a new transaction @@ -210,7 +212,7 @@ func (args *JsonTxArgs) ToMessage(globalGasCap uint64, baseFeeWei *big.Int) (cor // Backfill the legacy gasPrice for EVM execution, unless we're all zeroes gasPrice = new(big.Int) if gasFeeCap.BitLen() > 0 || gasTipCap.BitLen() > 0 { - gasPrice = math.BigMin(new(big.Int).Add(gasTipCap, baseFeeWei), gasFeeCap) + gasPrice = nmath.BigMin(new(big.Int).Add(gasTipCap, baseFeeWei), gasFeeCap) } } } @@ -230,17 +232,18 @@ func (args *JsonTxArgs) ToMessage(globalGasCap uint64, baseFeeWei *big.Int) (cor } evmMsg := core.Message{ - To: args.To, - From: addr, - Nonce: nonce, - Value: value, // amount - GasLimit: gas, - GasPrice: gasPrice, - GasFeeCap: gasFeeCap, - GasTipCap: gasTipCap, - Data: data, - AccessList: accessList, - SkipAccountChecks: true, + To: args.To, + From: addr, + Nonce: nonce, + Value: value, // amount + GasLimit: gas, + GasPrice: gasPrice, + GasFeeCap: gasFeeCap, + GasTipCap: gasTipCap, + Data: data, + AccessList: accessList, + SkipNonceChecks: true, + SkipFromEOACheck: true, } return evmMsg, nil diff --git a/x/evm/keeper/call_contract.go b/x/evm/keeper/call_contract.go index 53b388e56a..fdc1c966c3 100644 --- a/x/evm/keeper/call_contract.go +++ b/x/evm/keeper/call_contract.go @@ -45,26 +45,27 @@ func (k Keeper) CallContractWithInput( unusedBigInt := big.NewInt(0) evmMsg := core.Message{ - To: contract, - From: fromAcc, - Nonce: nonce, - Value: unusedBigInt, // amount - GasLimit: gasLimit, - GasPrice: unusedBigInt, - GasFeeCap: unusedBigInt, - GasTipCap: unusedBigInt, - Data: contractInput, - AccessList: gethcore.AccessList{}, - BlobGasFeeCap: &big.Int{}, - BlobHashes: []gethcommon.Hash{}, - SkipAccountChecks: false, + To: contract, + From: fromAcc, + Nonce: nonce, + Value: unusedBigInt, // amount + GasLimit: gasLimit, + GasPrice: unusedBigInt, + GasFeeCap: unusedBigInt, + GasTipCap: unusedBigInt, + Data: contractInput, + AccessList: gethcore.AccessList{}, + BlobGasFeeCap: &big.Int{}, + BlobHashes: []gethcommon.Hash{}, + SkipNonceChecks: false, + SkipFromEOACheck: false, } // Generating TxConfig with an empty tx hash as there is no actual eth tx // sent by a user txConfig := k.TxConfig(ctx, gethcommon.BigToHash(big.NewInt(0))) evmResp, err = k.ApplyEvmMsg( - ctx, evmMsg, evmObj, evm.NewNoOpTracer(), commit, txConfig.TxHash, + ctx, evmMsg, evmObj, commit, txConfig.TxHash, ) if evmResp != nil { ctx.GasMeter().ConsumeGas(evmResp.GasUsed, "CallContractWithInput") diff --git a/x/evm/keeper/funtoken_from_coin.go b/x/evm/keeper/funtoken_from_coin.go index 7826487d8d..e56b156f09 100644 --- a/x/evm/keeper/funtoken_from_coin.go +++ b/x/evm/keeper/funtoken_from_coin.go @@ -82,17 +82,18 @@ func (k *Keeper) deployERC20ForBankCoin( unusedBigInt := big.NewInt(0) evmMsg := core.Message{ - To: nil, - From: evm.EVM_MODULE_ADDRESS, - Nonce: k.GetAccNonce(ctx, evm.EVM_MODULE_ADDRESS), - Value: unusedBigInt, // amount - GasLimit: Erc20GasLimitDeploy, - GasPrice: unusedBigInt, - GasFeeCap: unusedBigInt, - GasTipCap: unusedBigInt, - Data: input, - AccessList: gethcore.AccessList{}, - SkipAccountChecks: false, + To: nil, + From: evm.EVM_MODULE_ADDRESS, + Nonce: k.GetAccNonce(ctx, evm.EVM_MODULE_ADDRESS), + Value: unusedBigInt, // amount + GasLimit: Erc20GasLimitDeploy, + GasPrice: unusedBigInt, + GasFeeCap: unusedBigInt, + GasTipCap: unusedBigInt, + Data: input, + AccessList: gethcore.AccessList{}, + SkipNonceChecks: false, + SkipFromEOACheck: false, } evmCfg := k.GetEVMConfig(ctx) txConfig := k.TxConfig(ctx, gethcommon.BigToHash(big.NewInt(0))) diff --git a/x/evm/keeper/funtoken_from_erc20.go b/x/evm/keeper/funtoken_from_erc20.go index ec7b056f8e..b38e4724dd 100644 --- a/x/evm/keeper/funtoken_from_erc20.go +++ b/x/evm/keeper/funtoken_from_erc20.go @@ -137,20 +137,21 @@ func (k *Keeper) createFunTokenFromERC20( k.Bank.StateDB = nil }() evmMsg := core.Message{ - To: &erc20, - From: evm.EVM_MODULE_ADDRESS, - Nonce: k.GetAccNonce(ctx, evm.EVM_MODULE_ADDRESS), - Value: evm.Big0, // amount - GasLimit: 0, - GasPrice: evm.Big0, - GasFeeCap: evm.Big0, - GasTipCap: evm.Big0, - Data: []byte{}, - AccessList: gethcore.AccessList{}, - SkipAccountChecks: false, - } - - evmObj := k.NewEVM(ctx, evmMsg, k.GetEVMConfig(ctx), evm.NewNoOpTracer(), stateDB) + To: &erc20, + From: evm.EVM_MODULE_ADDRESS, + Nonce: k.GetAccNonce(ctx, evm.EVM_MODULE_ADDRESS), + Value: evm.Big0, // amount + GasLimit: 0, + GasPrice: evm.Big0, + GasFeeCap: evm.Big0, + GasTipCap: evm.Big0, + Data: []byte{}, + AccessList: gethcore.AccessList{}, + SkipNonceChecks: false, + SkipFromEOACheck: false, + } + + evmObj := k.NewEVM(ctx, evmMsg, k.GetEVMConfig(ctx), nil, stateDB) erc20Info, err := k.FindERC20Metadata(ctx, evmObj, erc20, nil) if err != nil { return nil, err diff --git a/x/evm/keeper/grpc_query.go b/x/evm/keeper/grpc_query.go index 649f3d6a52..d5e826df6f 100644 --- a/x/evm/keeper/grpc_query.go +++ b/x/evm/keeper/grpc_query.go @@ -18,6 +18,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/NibiruChain/nibiru/v2/eth" + "github.com/NibiruChain/nibiru/v2/x/common/set" "github.com/NibiruChain/nibiru/v2/x/evm" "github.com/NibiruChain/nibiru/v2/x/evm/statedb" @@ -286,7 +287,7 @@ func (k *Keeper) EthCall( // pass false to not commit StateDB stateDB := statedb.New(ctx, k, txConfig) evm := k.NewEVM(ctx, msg, evmCfg, nil /*tracer*/, stateDB) - res, err := k.ApplyEvmMsg(ctx, msg, evm, nil /*tracer*/, false /*commit*/, txConfig.TxHash) + res, err := k.ApplyEvmMsg(ctx, msg, evm, false /*commit*/, txConfig.TxHash) if err != nil { return nil, grpcstatus.Error(grpccodes.Internal, err.Error()) } @@ -380,19 +381,20 @@ func (k Keeper) EstimateGasForEvmCallType( executable := func(gas uint64) (vmError bool, rsp *evm.MsgEthereumTxResponse, err error) { // update the message with the new gas value evmMsg = core.Message{ - To: evmMsg.To, - From: evmMsg.From, - Nonce: evmMsg.Nonce, - Value: evmMsg.Value, - GasLimit: gas, // <---- This one changed - GasPrice: evmMsg.GasPrice, - GasFeeCap: evmMsg.GasFeeCap, - GasTipCap: evmMsg.GasTipCap, - Data: evmMsg.Data, - AccessList: evmMsg.AccessList, - BlobGasFeeCap: evmMsg.BlobGasFeeCap, - BlobHashes: evmMsg.BlobHashes, - SkipAccountChecks: evmMsg.SkipAccountChecks, + To: evmMsg.To, + From: evmMsg.From, + Nonce: evmMsg.Nonce, + Value: evmMsg.Value, + GasLimit: gas, // <---- This one changed + GasPrice: evmMsg.GasPrice, + GasFeeCap: evmMsg.GasFeeCap, + GasTipCap: evmMsg.GasTipCap, + Data: evmMsg.Data, + AccessList: evmMsg.AccessList, + BlobGasFeeCap: evmMsg.BlobGasFeeCap, + BlobHashes: evmMsg.BlobHashes, + SkipNonceChecks: evmMsg.SkipNonceChecks, + SkipFromEOACheck: evmMsg.SkipFromEOACheck, } tmpCtx := ctx @@ -423,7 +425,7 @@ func (k Keeper) EstimateGasForEvmCallType( txConfig := statedb.NewEmptyTxConfig(gethcommon.BytesToHash(ctx.HeaderHash().Bytes())) stateDB := statedb.New(ctx, &k, txConfig) evmObj := k.NewEVM(tmpCtx, evmMsg, evmCfg, nil /*tracer*/, stateDB) - rsp, err = k.ApplyEvmMsg(tmpCtx, evmMsg, evmObj, nil /*tracer*/, false /*commit*/, txConfig.TxHash) + rsp, err = k.ApplyEvmMsg(tmpCtx, evmMsg, evmObj, false /*commit*/, txConfig.TxHash) if err != nil { if errors.Is(err, core.ErrIntrinsicGas) { return true, nil, nil // Special case, raise gas limit @@ -504,10 +506,10 @@ func (k Keeper) TraceTx( ) txConfig := statedb.NewEmptyTxConfig(gethcommon.BytesToHash(ctx.HeaderHash().Bytes())) - // gas used at this point corresponds to GetProposerAddress & CalculateBaseFee - // need to reset gas meter per transaction to be consistent with tx execution - // and avoid stacking the gas used of every predecessor in the same gas meter - + // gas used at this point corresponds to GetProposerAddress & + // CalculateBaseFee need to reset gas meter per transaction to be consistent + // with tx execution and avoid stacking the gas used of every predecessor in + // the same gas meter for i, tx := range req.Predecessors { ethTx := tx.AsTransaction() msg, err := core.TransactionToMessage(ethTx, signer, evmCfg.BaseFeeWei) @@ -522,7 +524,7 @@ func (k Keeper) TraceTx( WithTransientKVGasConfig(storetypes.GasConfig{}) stateDB := statedb.New(ctx, &k, txConfig) evmObj := k.NewEVM(ctx, *msg, evmCfg, nil /*tracer*/, stateDB) - rsp, err := k.ApplyEvmMsg(ctx, *msg, evmObj, nil /*tracer*/, false /*commit*/, txConfig.TxHash) + rsp, err := k.ApplyEvmMsg(ctx, *msg, evmObj, false /*commit*/, txConfig.TxHash) if err != nil { continue } @@ -552,13 +554,13 @@ func (k Keeper) TraceTx( return nil, err } - resultData, err := json.Marshal(result) + resultJson, err := json.Marshal(result) if err != nil { return nil, grpcstatus.Error(grpccodes.Internal, err.Error()) } return &evm.QueryTraceTxResponse{ - Data: resultData, + Data: resultJson, }, nil } @@ -612,17 +614,18 @@ func (k Keeper) TraceCall( return nil, grpcstatus.Errorf(grpccodes.Internal, "failed to unpack tx data: %s", err.Error()) } evmMsg := core.Message{ - To: txData.GetTo(), - From: gethcommon.HexToAddress(msgEthTx.From), - Nonce: txData.GetNonce(), - Value: txData.GetValueWei(), // amount - GasLimit: txData.GetGas(), - GasPrice: txData.GetGasPrice(), - GasFeeCap: txData.GetGasFeeCapWei(), - GasTipCap: txData.GetGasTipCapWei(), - Data: txData.GetData(), - AccessList: txData.GetAccessList(), - SkipAccountChecks: false, + To: txData.GetTo(), + From: gethcommon.HexToAddress(msgEthTx.From), + Nonce: txData.GetNonce(), + Value: txData.GetValueWei(), // amount + GasLimit: txData.GetGas(), + GasPrice: txData.GetGasPrice(), + GasFeeCap: txData.GetGasFeeCapWei(), + GasTipCap: txData.GetGasTipCapWei(), + Data: txData.GetData(), + AccessList: txData.GetAccessList(), + SkipNonceChecks: false, + SkipFromEOACheck: false, } result, _, err := k.TraceEthTxMsg(ctx, evmCfg, txConfig, evmMsg, req.TraceConfig, tracerConfig) if err != nil { @@ -725,6 +728,26 @@ func (k Keeper) TraceBlock( }, nil } +// gasRemainingTxPartial returns a [gethcore.Transaction] that only has its "Gas" +// field set. +func gasRemainingTxPartial(gasLimit uint64) *gethcore.Transaction { + txData := gethcore.LegacyTx{Gas: gasLimit} + return gethcore.NewTx(&txData) +} + +var gethTracerNames = set.New( + "callTracer", // Tracer with structured call tracer and hierarchical execution + "flatCallTracer", // Similar to "callTracer" but with a flattened call trace + "noopTracer", // minimal tracer that doesn't actually collect data + "4byteTracer", // Collects statistics on 4-byte func signatures + "muxTracer", // A tracer that can combine multiple tracers in parallel + "prestateTracer", // Captures the state of the tx before execution (pre-state) + // Geth's StructLogger. It's not registered in the sense of + // "go-ethereum/eth/tracers/native", meaning it cannot be accessed with + // the [tracers.DefaultDirectory].New function. + evm.TracerStruct, +) + // TraceEthTxMsg do trace on one transaction, it returns a tuple: (traceResult, // nextLogIndex, error). func (k *Keeper) TraceEthTxMsg( @@ -734,12 +757,11 @@ func (k *Keeper) TraceEthTxMsg( msg core.Message, traceConfig *evm.TraceConfig, tracerJSONConfig json.RawMessage, -) (*any, uint, error) { - // Assemble the structured logger or the JavaScript tracer +) (traceResult *json.RawMessage, nextLogIndex uint, err error) { + // Assemble the structured logger or the JavaScript tracerHooks var ( - tracer tracers.Tracer + tracer *tracers.Tracer overrides *gethparams.ChainConfig - err error timeout = DefaultGethTraceTimeout ) if traceConfig == nil { @@ -756,21 +778,38 @@ func (k *Keeper) TraceEthTxMsg( Overrides: overrides, } - tracer = logger.NewStructLogger(&logConfig) - tCtx := &tracers.Context{ BlockHash: txConfig.BlockHash, TxIndex: int(txConfig.TxIndex), TxHash: txConfig.TxHash, } - if traceConfig.Tracer != "" { - if tracer, err = tracers.DefaultDirectory.New( - traceConfig.Tracer, tCtx, tracerJSONConfig, - ); err != nil { + var usingCallTracer bool + if traceConfig.Tracer == evm.TracerStruct { + logger := logger.NewStructLogger(&logConfig) + tracer = &tracers.Tracer{ + Hooks: logger.Hooks(), + GetResult: logger.GetResult, + Stop: logger.Stop, + } + } else { + if traceConfig.Tracer == "" || !gethTracerNames.Has(traceConfig.Tracer) { + traceConfig.Tracer = "callTracer" + usingCallTracer = true + } + tracer, err = tracers.DefaultDirectory.New( + traceConfig.Tracer, tCtx, tracerJSONConfig, evmCfg.ChainConfig, + ) + if err != nil { return nil, 0, grpcstatus.Error(grpccodes.Internal, err.Error()) } } + if tracer == nil && !usingCallTracer { + traceConfig.Tracer = "callTracer" + tracer, err = tracers.DefaultDirectory.New( + traceConfig.Tracer, tCtx, tracerJSONConfig, evmCfg.ChainConfig, + ) + } // Define a meaningful timeout of a single transaction trace if traceConfig.Timeout != "" { @@ -801,14 +840,13 @@ func (k *Keeper) TraceEthTxMsg( WithKVGasConfig(storetypes.GasConfig{}). WithTransientKVGasConfig(storetypes.GasConfig{}) stateDB := statedb.New(ctx, k, txConfig) - evmObj := k.NewEVM(ctx, msg, evmCfg, tracer, stateDB) - res, err := k.ApplyEvmMsg(ctx, msg, evmObj, tracer, false /*commit*/, txConfig.TxHash) + evmObj := k.NewEVM(ctx, msg, evmCfg, tracer.Hooks, stateDB) + res, err := k.ApplyEvmMsg(ctx, msg, evmObj, false /*commit*/, txConfig.TxHash) if err != nil { return nil, 0, grpcstatus.Error(grpccodes.Internal, err.Error()) } - var result any - result, err = tracer.GetResult() + result, err := tracer.GetResult() if err != nil { return nil, 0, grpcstatus.Error(grpccodes.Internal, err.Error()) } diff --git a/x/evm/keeper/grpc_query_test.go b/x/evm/keeper/grpc_query_test.go index 21cd62e18c..a736243aeb 100644 --- a/x/evm/keeper/grpc_query_test.go +++ b/x/evm/keeper/grpc_query_test.go @@ -808,6 +808,7 @@ func (s *Suite) TestTraceTx() { s.Assert().NoError(err) s.Assert().NotNil(gotResp) s.Assert().NotNil(gotResp.Data) + s.Require().True(json.Valid(gotResp.Data), "expected json.RawMessage") // // Replace spaces in want resp // re := regexp.MustCompile(`[\s\n\r]+`) diff --git a/x/evm/keeper/keeper.go b/x/evm/keeper/keeper.go index 062913b1ec..c5c945daa9 100644 --- a/x/evm/keeper/keeper.go +++ b/x/evm/keeper/keeper.go @@ -5,9 +5,7 @@ import ( "fmt" "math/big" - "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/vm" - gethparams "github.com/ethereum/go-ethereum/params" "github.com/cometbft/cometbft/libs/log" @@ -108,13 +106,6 @@ func (k Keeper) Logger(ctx sdk.Context) log.Logger { return ctx.Logger().With("module", evm.ModuleName) } -// Tracer return a default vm.Tracer based on current keeper state -func (k Keeper) Tracer( - ctx sdk.Context, msg core.Message, ethCfg *gethparams.ChainConfig, -) vm.EVMLogger { - return evm.NewTracer(k.tracer, msg, ethCfg, ctx.BlockHeight()) -} - // HandleOutOfGasPanic gracefully captures "out of gas" panic and just sets the value to err func HandleOutOfGasPanic(err *error, format string) func() { return func() { diff --git a/x/evm/keeper/msg_server.go b/x/evm/keeper/msg_server.go index 0857434ac8..5ccdb3e04f 100644 --- a/x/evm/keeper/msg_server.go +++ b/x/evm/keeper/msg_server.go @@ -14,6 +14,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" gethcommon "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/tracing" gethcore "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" @@ -68,7 +70,6 @@ func (k *Keeper) EthereumTx( ctx, *evmMsg, evmObj, - nil, /*tracer*/ true, /*commit*/ txConfig.TxHash, ) @@ -119,7 +120,7 @@ func (k *Keeper) NewEVM( ctx sdk.Context, msg core.Message, evmCfg statedb.EVMConfig, - tracer vm.EVMLogger, + tracer *tracing.Hooks, stateDB vm.StateDB, ) (evmObj *vm.EVM) { pseudoRandomBytes := make([]byte, 8) @@ -141,10 +142,13 @@ func (k *Keeper) NewEVM( txCtx := core.NewEVMTxContext(&msg) if tracer == nil { - tracer = k.Tracer(ctx, msg, evmCfg.ChainConfig) + // Return a default tracer (*[tracing.Hooks]) based on current keeper state + tracer = evm.NewTracer(k.tracer, msg, evmCfg.ChainConfig, ctx.BlockHeight()) } vmConfig := k.VMConfig(ctx, &evmCfg, tracer) - return vm.NewEVM(blockCtx, txCtx, stateDB, evmCfg.ChainConfig, vmConfig) + evmObj = vm.NewEVM(blockCtx, txCtx, stateDB, evmCfg.ChainConfig, vmConfig) + evmObj.AccessEvents = state.NewAccessEvents(nil) // prevents nil pointers on access + return evmObj } // GetHashFn implements vm.GetHashFunc for Ethermint. It handles 3 cases: @@ -255,26 +259,61 @@ func (k *Keeper) ApplyEvmMsg( ctx sdk.Context, msg core.Message, evmObj *vm.EVM, - tracer vm.EVMLogger, commit bool, txHash gethcommon.Hash, -) (resp *evm.MsgEthereumTxResponse, err error) { - gasRemaining := msg.GasLimit - - // Allow the tracer to capture tx level events pertaining to gas consumption. - evmObj.Config.Tracer.CaptureTxStart(gasRemaining) - defer func() { - evmObj.Config.Tracer.CaptureTxEnd(gasRemaining) - }() +) (evmResp *evm.MsgEthereumTxResponse, err error) { + var ( + contractCreation = msg.To == nil + rules = evmObj.ChainConfig().Rules( + big.NewInt(ctx.BlockHeight()), false, evm.ParseBlockTimeUnixU64(ctx), + ) + // gasRemaining represents a running tally of remaining gas + // available for EVM execution. Gas remaining starts starts at + // the [core.Message].GasLimit and is progressively reduced by: + // + // 1. Intrinsic gas costs (base transaction fees, data payload costs) + // 2. Actual EVM operation execution costs + // 3. Potential gas refunds + // + // It determines how much computational work can be performed before the transaction + // runs out of gas, with unused gas potentially being refunded to the sender. + gasRemaining = msg.GasLimit + tracer = evmObj.Config.Tracer + evmStateDB = evmObj.StateDB.(*statedb.StateDB) // retains doc comments + ) - contractCreation := msg.To == nil + // Required: Allow the tracer to capture tx level events pertaining to gas consumption. + if tracer != nil { + // Formerly: evmObj.Config.Tracer.CaptureTxStart in geth v1.10 + if tracer.OnTxStart != nil { + ethTx := gasRemainingTxPartial(msg.GasLimit) + tracer.OnTxStart( + evmObj.GetVMContext(), + ethTx, + msg.From, + ) + } + // Formerly: evmObj.Config.Tracer.CaptureTxEnd in geth v1.10 + if tracer.OnTxEnd != nil { + defer func() { + localEvmResp := new(evm.MsgEthereumTxResponse) + if evmResp != nil { + localEvmResp = evmResp + } + tracer.OnTxEnd(&gethcore.Receipt{ + GasUsed: localEvmResp.GasUsed, + TxHash: txHash, + }, err) + }() + } + } intrinsicGasCost, err := core.IntrinsicGas( msg.Data, msg.AccessList, contractCreation, - true, // isHomestead - true, // isEIP2028 - true, // isEIP3860 === isShanghai + rules.IsHomestead, + rules.IsIstanbul, + rules.IsShanghai, ) if err != nil { // should have already been checked on Ante Handler @@ -295,16 +334,26 @@ func (k *Keeper) ApplyEvmMsg( gasRemaining, intrinsicGasCost, ) } + if tracer != nil && tracer.OnGasChange != nil { + tracer.OnGasChange( + gasRemaining, gasRemaining-intrinsicGasCost, tracing.GasChangeTxIntrinsicGas) + } gasRemaining -= intrinsicGasCost + if rules.IsEIP4762 { + evmObj.AccessEvents.AddTxOrigin(msg.From) + if dest := msg.To; dest != nil { + evmObj.AccessEvents.AddTxDestination( + *dest, msg.Value.Sign() != 0, + ) + } + } + // access list preparation is moved from ante handler to here, because it's // needed when `ApplyMessage` is called under contexts where ante handlers // are not run, for example `eth_call` and `eth_estimateGas`. - evmObj.StateDB.Prepare( - // rules - evmObj.ChainConfig().Rules( - big.NewInt(ctx.BlockHeight()), false, evm.ParseBlockTimeUnixU64(ctx), - ), + evmStateDB.Prepare( + rules, msg.From, // sender evmObj.Context.Coinbase, // coinbase msg.To, @@ -320,10 +369,13 @@ func (k *Keeper) ApplyEvmMsg( // take over the nonce management from evm: // - reset sender's nonce to msg.Nonce() before calling evm. // - increase sender's nonce by one no matter the result. - evmObj.StateDB.SetNonce(msg.From, msg.Nonce) + evmStateDB.SetNonce(msg.From, msg.Nonce) - var returnBz []byte - var vmErr error + var ( + returnBz []byte + // vmErr: VM errors do not affect consensus and therefore are not assigned to "err" + vmErr error + ) if contractCreation { returnBz, _, gasRemaining, vmErr = evmObj.Create( vm.AccountRef(msg.From), @@ -341,7 +393,7 @@ func (k *Keeper) ApplyEvmMsg( ) } // Increment nonce after processing the message - evmObj.StateDB.SetNonce(msg.From, msg.Nonce+1) + evmStateDB.SetNonce(msg.From, msg.Nonce+1) // EVM execution error needs to be available for the JSON-RPC client var vmError string @@ -352,15 +404,15 @@ func (k *Keeper) ApplyEvmMsg( // process gas refunds (we refund a portion of the unused gas) gasUsed := msg.GasLimit - gasRemaining // please see https://eips.ethereum.org/EIPS/eip-3529 for why we do refunds - refundAmount := gasToRefund(evmObj.StateDB.GetRefund(), gasUsed) + refundAmount := gasToRefund(evmStateDB.GetRefund(), gasUsed) gasRemaining += refundAmount gasUsed -= refundAmount - evmResp := &evm.MsgEthereumTxResponse{ + evmResp = &evm.MsgEthereumTxResponse{ GasUsed: gasUsed, VmError: vmError, Ret: returnBz, - Logs: evm.NewLogsFromEth(evmObj.StateDB.(*statedb.StateDB).Logs()), + Logs: evm.NewLogsFromEth(evmStateDB.Logs()), Hash: txHash.Hex(), } @@ -371,9 +423,10 @@ func (k *Keeper) ApplyEvmMsg( // The dirty states in `StateDB` is either committed or discarded after return if commit { - if err := evmObj.StateDB.(*statedb.StateDB).Commit(); err != nil { + if err := evmStateDB.Commit(); err != nil { return evmResp, errors.Wrap(err, "ApplyEvmMsg: failed to commit stateDB") } + evmObj.StateDB.Finalise( /*deleteEmptyObjects*/ false) } return evmResp, nil @@ -532,19 +585,20 @@ func (k Keeper) convertCoinToEvmBornCoin( } unusedBigInt := big.NewInt(0) evmMsg := core.Message{ - To: &erc20Addr, - From: evm.EVM_MODULE_ADDRESS, - Nonce: k.GetAccNonce(ctx, evm.EVM_MODULE_ADDRESS), - Value: unusedBigInt, // amount - GasLimit: Erc20GasLimitExecute, - GasPrice: unusedBigInt, - GasFeeCap: unusedBigInt, - GasTipCap: unusedBigInt, - Data: contractInput, - AccessList: gethcore.AccessList{}, - BlobGasFeeCap: &big.Int{}, - BlobHashes: []gethcommon.Hash{}, - SkipAccountChecks: true, + To: &erc20Addr, + From: evm.EVM_MODULE_ADDRESS, + Nonce: k.GetAccNonce(ctx, evm.EVM_MODULE_ADDRESS), + Value: unusedBigInt, // amount + GasLimit: Erc20GasLimitExecute, + GasPrice: unusedBigInt, + GasFeeCap: unusedBigInt, + GasTipCap: unusedBigInt, + Data: contractInput, + AccessList: gethcore.AccessList{}, + BlobGasFeeCap: &big.Int{}, + BlobHashes: []gethcommon.Hash{}, + SkipNonceChecks: true, + SkipFromEOACheck: true, } txConfig := k.TxConfig(ctx, gethcommon.Hash{}) stateDB := k.Bank.StateDB @@ -648,19 +702,20 @@ func (k Keeper) convertCoinToEvmBornERC20( } unusedBigInt := big.NewInt(0) evmMsg := core.Message{ - To: &erc20Addr, - From: evm.EVM_MODULE_ADDRESS, - Nonce: k.GetAccNonce(ctx, evm.EVM_MODULE_ADDRESS), - Value: unusedBigInt, // amount - GasLimit: Erc20GasLimitExecute, - GasPrice: unusedBigInt, - GasFeeCap: unusedBigInt, - GasTipCap: unusedBigInt, - Data: contractInput, - AccessList: gethcore.AccessList{}, - BlobGasFeeCap: &big.Int{}, - BlobHashes: []gethcommon.Hash{}, - SkipAccountChecks: true, + To: &erc20Addr, + From: evm.EVM_MODULE_ADDRESS, + Nonce: k.GetAccNonce(ctx, evm.EVM_MODULE_ADDRESS), + Value: unusedBigInt, // amount + GasLimit: Erc20GasLimitExecute, + GasPrice: unusedBigInt, + GasFeeCap: unusedBigInt, + GasTipCap: unusedBigInt, + Data: contractInput, + AccessList: gethcore.AccessList{}, + BlobGasFeeCap: &big.Int{}, + BlobHashes: []gethcommon.Hash{}, + SkipNonceChecks: true, + SkipFromEOACheck: true, } evmObj := k.NewEVM(ctx, evmMsg, k.GetEVMConfig(ctx), nil /*tracer*/, stateDB) _, evmResp, err := k.ERC20().Transfer( diff --git a/x/evm/keeper/statedb.go b/x/evm/keeper/statedb.go index f46c491e6b..19c2e09db6 100644 --- a/x/evm/keeper/statedb.go +++ b/x/evm/keeper/statedb.go @@ -6,6 +6,7 @@ import ( sdkmath "cosmossdk.io/math" "github.com/NibiruChain/collections" + "github.com/holiman/uint256" sdk "github.com/cosmos/cosmos-sdk/types" gethcommon "github.com/ethereum/go-ethereum/common" @@ -30,7 +31,7 @@ func (k *Keeper) GetAccount(ctx sdk.Context, addr gethcommon.Address) *statedb.A return nil } - acct.BalanceNative = k.GetEvmGasBalance(ctx, addr) + acct.BalanceNative = uint256.MustFromBig(k.GetEvmGasBalance(ctx, addr)) return acct } @@ -129,7 +130,7 @@ func (k *Keeper) SetAccount( k.accountKeeper.SetAccount(ctx, acct) - if err := k.SetAccBalance(ctx, addr, account.BalanceNative); err != nil { + if err := k.SetAccBalance(ctx, addr, account.BalanceNative.ToBig()); err != nil { return err } diff --git a/x/evm/keeper/vm_config.go b/x/evm/keeper/vm_config.go index 1be50d16b9..141f723a56 100644 --- a/x/evm/keeper/vm_config.go +++ b/x/evm/keeper/vm_config.go @@ -4,6 +4,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/vm" "github.com/NibiruChain/nibiru/v2/app/appconst" @@ -36,7 +37,7 @@ func (k *Keeper) TxConfig( // EIPs enabled on the module parameters. The config generated uses the default // JumpTable from the EVM. func (k Keeper) VMConfig( - ctx sdk.Context, cfg *statedb.EVMConfig, tracer vm.EVMLogger, + ctx sdk.Context, cfg *statedb.EVMConfig, tracer *tracing.Hooks, ) vm.Config { return vm.Config{ Tracer: tracer, diff --git a/x/evm/msg_test.go b/x/evm/msg_test.go index d48dad5227..47f42eeb8d 100644 --- a/x/evm/msg_test.go +++ b/x/evm/msg_test.go @@ -827,7 +827,9 @@ func (s *MsgsSuite) TestTxEncoding() { signer = gethcore.NewEIP2930Signer(common.Big1) addr = common.HexToAddress("0x0000000000000000000000000000000000000001") recipient = common.HexToAddress("095e7baea6a6c7c4c2dfeb977efac326af552d87") - accesses = gethcore.AccessList{{Address: addr, StorageKeys: []common.Hash{{0}}}} + accesses = gethcore.AccessList{ + gethcore.AccessTuple{Address: addr, StorageKeys: []common.Hash{{0}}}, + } ) for i := uint64(0); i < 500; i++ { var txdata gethcore.TxData diff --git a/x/evm/precompile/funtoken.go b/x/evm/precompile/funtoken.go index 2224c1d9b3..439b540694 100644 --- a/x/evm/precompile/funtoken.go +++ b/x/evm/precompile/funtoken.go @@ -10,6 +10,7 @@ import ( bank "github.com/cosmos/cosmos-sdk/x/bank/types" gethabi "github.com/ethereum/go-ethereum/accounts/abi" gethcommon "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/vm" tftypes "github.com/NibiruChain/nibiru/v2/x/tokenfactory/types" @@ -53,7 +54,11 @@ const ( // Run runs the precompiled contract func (p precompileFunToken) Run( - evm *vm.EVM, contract *vm.Contract, readonly bool, + evm *vm.EVM, + sender gethcommon.Address, + contract *vm.Contract, + readonly bool, + isDelegatedCall bool, ) (bz []byte, err error) { defer func() { err = ErrPrecompileRun(err, p) @@ -91,7 +96,11 @@ func (p precompileFunToken) Run( return } // Gas consumed by a local gas meter - contract.UseGas(startResult.CacheCtx.GasMeter().GasConsumed()) + contract.UseGas( + startResult.CacheCtx.GasMeter().GasConsumed(), + evm.Config.Tracer, + tracing.GasChangeCallPrecompiledContract, + ) if err != nil { return nil, err } @@ -227,11 +236,6 @@ func (p precompileFunToken) sendToBank( ) } - // TODO: UD-DEBUG: feat: Emit EVM events - // https://github.com/NibiruChain/nibiru/issues/2121 - // TODO: emit event for balance change of sender - // TODO: emit event for balance change of recipient - return method.Outputs.Pack(gotAmount) } diff --git a/x/evm/precompile/oracle.go b/x/evm/precompile/oracle.go index a7a8ea01d8..20641239da 100644 --- a/x/evm/precompile/oracle.go +++ b/x/evm/precompile/oracle.go @@ -7,6 +7,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" gethabi "github.com/ethereum/go-ethereum/accounts/abi" gethcommon "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/vm" "github.com/NibiruChain/nibiru/v2/app/keepers" @@ -39,7 +40,11 @@ const ( // Run runs the precompiled contract func (p precompileOracle) Run( - evm *vm.EVM, contract *vm.Contract, readonly bool, + evm *vm.EVM, + sender gethcommon.Address, + contract *vm.Contract, + readonly bool, + isDelegatedCall bool, ) (bz []byte, err error) { defer func() { err = ErrPrecompileRun(err, p) @@ -63,7 +68,11 @@ func (p precompileOracle) Run( err = fmt.Errorf("invalid method called with name \"%s\"", method.Name) return } - contract.UseGas(startResult.CacheCtx.GasMeter().GasConsumed()) + contract.UseGas( + startResult.CacheCtx.GasMeter().GasConsumed(), + evm.Config.Tracer, + tracing.GasChangeCallPrecompiledContract, + ) if err != nil { return nil, err } diff --git a/x/evm/precompile/wasm.go b/x/evm/precompile/wasm.go index cc33335db8..213cfe0c42 100644 --- a/x/evm/precompile/wasm.go +++ b/x/evm/precompile/wasm.go @@ -5,6 +5,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/ethereum/go-ethereum/core/tracing" + "github.com/NibiruChain/nibiru/v2/app/keepers" "github.com/NibiruChain/nibiru/v2/eth" "github.com/NibiruChain/nibiru/v2/x/evm/embeds" @@ -33,7 +35,11 @@ const ( // Run runs the precompiled contract func (p precompileWasm) Run( - evm *vm.EVM, contract *vm.Contract, readonly bool, + evm *vm.EVM, + sender gethcommon.Address, + contract *vm.Contract, + readonly bool, + isDelegatedCall bool, ) (bz []byte, err error) { defer func() { err = ErrPrecompileRun(err, p) @@ -69,7 +75,11 @@ func (p precompileWasm) Run( // The reason it's unnecessary to check for a success value is because // GasConsumed is guaranteed to be less than the contract.Gas because the gas // meter was initialized.... - contract.UseGas(startResult.CacheCtx.GasMeter().GasConsumed()) + contract.UseGas( + startResult.CacheCtx.GasMeter().GasConsumed(), + evm.Config.Tracer, + tracing.GasChangeCallPrecompiledContract, + ) if err != nil { return nil, err diff --git a/x/evm/statedb/journal.go b/x/evm/statedb/journal.go index 58b6a02812..62406147ee 100644 --- a/x/evm/statedb/journal.go +++ b/x/evm/statedb/journal.go @@ -24,6 +24,7 @@ import ( store "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/ethereum/go-ethereum/common" + "github.com/holiman/uint256" ) // JournalChange, also called a "journal entry", is a modification entry in the @@ -71,6 +72,13 @@ func (j *journal) append(entry JournalChange) { } } +// dirty explicitly sets an address to dirty, even if the change entries would +// otherwise suggest it as clean. This method is an ugly hack to handle the RIPEMD +// precompile consensus exception. +func (j *journal) dirty(addr common.Address) { + j.dirties[addr]++ +} + // Revert undoes a batch of journalled modifications along with any Reverted // dirty handling too. func (j *journal) Revert(statedb *StateDB, snapshot int) { @@ -146,7 +154,7 @@ var _ JournalChange = suicideChange{} func (ch suicideChange) Revert(s *StateDB) { obj := s.getStateObject(*ch.account) if obj != nil { - obj.Suicided = ch.prev + obj.SelfDestructed = ch.prev obj.setBalance(ch.prevbalance) } } @@ -161,13 +169,13 @@ func (ch suicideChange) Dirtied() *common.Address { // balanceChange: [JournalChange] for an update to the wei balance of an account. type balanceChange struct { account *common.Address - prevWei *big.Int + prevWei *uint256.Int } var _ JournalChange = balanceChange{} func (ch balanceChange) Revert(s *StateDB) { - s.getStateObject(*ch.account).setBalance(ch.prevWei) + s.getStateObject(*ch.account).setBalance(ch.prevWei.ToBig()) } func (ch balanceChange) Dirtied() *common.Address { @@ -223,12 +231,13 @@ func (ch codeChange) Dirtied() *common.Address { type storageChange struct { account *common.Address key, prevalue common.Hash + origin common.Hash } var _ JournalChange = storageChange{} func (ch storageChange) Revert(s *StateDB) { - s.getStateObject(*ch.account).setState(ch.key, ch.prevalue) + s.getStateObject(*ch.account).setState(ch.key, ch.prevalue, ch.origin) } func (ch storageChange) Dirtied() *common.Address { @@ -381,3 +390,50 @@ func (ch transientStorageChange) Revert(s *StateDB) { func (ch transientStorageChange) Dirtied() *common.Address { return nil } + +var _ JournalChange = touchChange{} + +// touchChange is a journal entry that marks an account as 'touched'. +// +// This is necessary to comply with EIP-161, which defines that accounts must be +// considered for deletion at the end of a transaction if they remain empty +// (balance, nonce, and code are all zero) and were not accessed during the +// transaction. +// +// Calling 'touch' ensures that the account is retained in state for the duration +// of the transaction, even if it remains empty. This helps prevent unintended +// deletions of accounts that are interacted with but have no effective state +// changes. +// +// No actual state is reverted during a `touchChange.revert()` — its presence in +// the journal is only meaningful for dirtiness tracking and snapshot +// consistency. +type touchChange struct { + account common.Address +} + +// Revert is an intentional no-op. To revert a [touchChange], do nothing. +func (ch touchChange) Revert(s *StateDB) {} + +func (ch touchChange) Dirtied() *common.Address { + return &ch.account +} + +// createContractChange represents an account becoming a contract-account. +// This event happens prior to executing initcode. The journal-event simply +// manages the created-flag, in order to allow same-tx destruction. +type createContractChange struct { + account common.Address +} + +func (ch createContractChange) Revert(s *StateDB) { + obj := s.getStateObject(ch.account) + if obj == nil { + return + } + obj.newContract = false +} + +func (ch createContractChange) Dirtied() *common.Address { + return nil +} diff --git a/x/evm/statedb/journal_test.go b/x/evm/statedb/journal_test.go index 8e85883bf0..d052a0a1bc 100644 --- a/x/evm/statedb/journal_test.go +++ b/x/evm/statedb/journal_test.go @@ -258,7 +258,7 @@ func debugDirtiesCountMismatch(db *statedb.StateDB, t *testing.T) { obj := *maybeObj lines = append(lines, fmt.Sprintf(" balance: %s", obj.Balance())) - lines = append(lines, fmt.Sprintf(" suicided: %v", obj.Suicided)) + lines = append(lines, fmt.Sprintf(" suicided: %v", obj.SelfDestructed)) lines = append(lines, fmt.Sprintf(" dirtyCode: %v", obj.DirtyCode)) // Print storage state diff --git a/x/evm/statedb/state_object.go b/x/evm/statedb/state_object.go index 8358f576d3..300d6400ff 100644 --- a/x/evm/statedb/state_object.go +++ b/x/evm/statedb/state_object.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "github.com/holiman/uint256" "github.com/NibiruChain/nibiru/v2/x/evm" ) @@ -22,7 +23,7 @@ var emptyCodeHash = crypto.Keccak256(nil) type Account struct { // BalanceNative is the micronibi (unibi) balance of the account, which is // the official balance in the x/bank module state - BalanceNative *big.Int + BalanceNative *uint256.Int // Nonce is the number of transactions sent from this account or, for contract accounts, the number of contract-creations made by this account Nonce uint64 // CodeHash is the hash of the contract code for this account, or nil if it's not a contract account @@ -35,7 +36,7 @@ type Account struct { // values, which are 10^12 times larger than the native unibi value due to the // definition of NIBI as "ether". type AccountWei struct { - BalanceWei *big.Int + BalanceWei *uint256.Int // Nonce is the number of transactions sent from this account or, for contract accounts, the number of contract-creations made by this account Nonce uint64 // CodeHash is the hash of the contract code for this account, or nil if it's not a contract account @@ -48,7 +49,7 @@ type AccountWei struct { // unibi to wei. func (acc Account) ToWei() AccountWei { return AccountWei{ - BalanceWei: evm.NativeToWei(acc.BalanceNative), + BalanceWei: evm.NativeToWeiU256(acc.BalanceNative), Nonce: acc.Nonce, CodeHash: acc.CodeHash, } @@ -60,7 +61,7 @@ func (acc Account) ToWei() AccountWei { // convert from wei to unibi. func (acc AccountWei) ToNative() Account { return Account{ - BalanceNative: evm.WeiToNative(acc.BalanceWei), + BalanceNative: evm.WeiToNativeMustU256(acc.BalanceWei.ToBig()), Nonce: acc.Nonce, CodeHash: acc.CodeHash, } @@ -69,7 +70,7 @@ func (acc AccountWei) ToNative() Account { // NewEmptyAccount returns an empty account. func NewEmptyAccount() *Account { return &Account{ - BalanceNative: new(big.Int), + BalanceNative: new(uint256.Int), CodeHash: emptyCodeHash, } } @@ -139,8 +140,14 @@ type stateObject struct { // flags DirtyCode bool - Suicided bool // True if the stateObject has been self destructed + SelfDestructed bool // True if the stateObject has been self destructed createdThisBlock bool // True if the stateObject was created this block + // This is an EIP-6780 flag indicating whether the object is eligible for + // self-destruct according to EIP-6780. The flag could be set either when + // the contract is just created within the current transaction, or when the + // object was previously existent and is being deployed as a contract within + // the current transaction. + newContract bool } // newObject creates a state object. @@ -150,7 +157,7 @@ func newObject(db *StateDB, address common.Address, account *Account) *stateObje account = &Account{} } if account.BalanceNative == nil { - account.BalanceNative = new(big.Int) + account.BalanceNative = new(uint256.Int) } if account.CodeHash == nil { account.CodeHash = emptyCodeHash @@ -175,33 +182,38 @@ func (s *stateObject) isEmpty() bool { // AddBalance adds amount to s's balance. // It is used to add funds to the destination account of a transfer. -func (s *stateObject) AddBalance(amount *big.Int) { +func (s *stateObject) AddBalance(amount *uint256.Int) (prevWei uint256.Int) { if amount.Sign() == 0 { - return + if s.isEmpty() { + s.touch() + } + return *(s.Balance()) } - s.SetBalance(new(big.Int).Add(s.Balance(), amount)) + return s.SetBalance(new(big.Int).Add(s.Balance().ToBig(), amount.ToBig())) } // SubBalance removes amount from s's balance. // It is used to remove funds from the origin account of a transfer. -func (s *stateObject) SubBalance(amount *big.Int) { +func (s *stateObject) SubBalance(amount *big.Int) (prevWei uint256.Int) { if amount.Sign() == 0 { - return + return *s.Balance() } - s.SetBalance(new(big.Int).Sub(s.Balance(), amount)) + return s.SetBalance(new(big.Int).Sub(s.Balance().ToBig(), amount)) } -// SetBalance update account balance. -func (s *stateObject) SetBalance(amount *big.Int) { +// SetBalance update account balance and returns the previous balance. +func (s *stateObject) SetBalance(amount *big.Int) (prevWei uint256.Int) { + prevWei = *s.account.BalanceWei s.db.Journal.append(balanceChange{ account: &s.address, - prevWei: new(big.Int).Set(s.account.BalanceWei), + prevWei: (&prevWei).Clone(), }) s.setBalance(amount) + return prevWei } func (s *stateObject) setBalance(amount *big.Int) { - s.account.BalanceWei = amount + s.account.BalanceWei = uint256.MustFromBig(amount) } // @@ -268,7 +280,7 @@ func (s *stateObject) CodeHash() []byte { } // Balance returns the balance of account -func (s *stateObject) Balance() *big.Int { +func (s *stateObject) Balance() *uint256.Int { return s.account.BalanceWei } @@ -289,29 +301,55 @@ func (s *stateObject) GetCommittedState(key common.Hash) common.Hash { } // GetState query the current state (including dirty state) -func (s *stateObject) GetState(key common.Hash) common.Hash { +func (s *stateObject) GetState(key common.Hash) (val, origin common.Hash) { + origin = s.GetCommittedState(key) if value, dirty := s.DirtyStorage[key]; dirty { - return value + return value, origin } - return s.GetCommittedState(key) + return origin, origin } // SetState sets the contract state -func (s *stateObject) SetState(key common.Hash, value common.Hash) { +func (s *stateObject) SetState(key common.Hash, value common.Hash) (prev common.Hash) { // If the new value is the same as old, don't set - prev := s.GetState(key) + prev, origin := s.GetState(key) if prev == value { - return + return prev } // New value is different, update and journal the change s.db.Journal.append(storageChange{ account: &s.address, key: key, prevalue: prev, + origin: origin, }) - s.setState(key, value) + s.setState(key, value, origin) + return prev } -func (s *stateObject) setState(key, value common.Hash) { +// setState updates a value in account dirty storage. The dirtiness will be +// removed if the value being set equals to the original value. +func (s *stateObject) setState(key, value, origin common.Hash) { + // If storage slot is set back to its original value, undo the dirty marker + if value == origin { + delete(s.DirtyStorage, key) + return + } s.DirtyStorage[key] = value } + +// Copied from /core/state/journal.go in geth v1.14 +var ripemd = common.HexToAddress("0000000000000000000000000000000000000003") + +// Copied from /core/state/state_object.go in geth v1.14 +func (s *stateObject) touch() { + addr := s.address + s.db.Journal.append(touchChange{ + account: addr, + }) + if addr == ripemd { + // Explicitly put it in the dirty-cache, which is otherwise generated + // from flattened journals. + s.db.Journal.dirty(addr) + } +} diff --git a/x/evm/statedb/statedb.go b/x/evm/statedb/statedb.go index 47b67ea029..16bad98cae 100644 --- a/x/evm/statedb/statedb.go +++ b/x/evm/statedb/statedb.go @@ -25,10 +25,13 @@ import ( store "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/stateless" + "github.com/ethereum/go-ethereum/core/tracing" gethcore "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" gethparams "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/trie/utils" "github.com/holiman/uint256" ) @@ -174,7 +177,11 @@ func (s *StateDB) Empty(addr common.Address) bool { func (s *StateDB) GetBalance(addr common.Address) *uint256.Int { stateObject := s.getStateObject(addr) if stateObject != nil { - return uint256.MustFromBig(stateObject.Balance()) + bal := stateObject.Balance() + if bal == nil { + return uint256.NewInt(0) + } + return bal } return uint256.NewInt(0) } @@ -217,10 +224,11 @@ func (s *StateDB) GetCodeHash(addr common.Address) common.Hash { } // GetState retrieves a value from the given account's storage trie. -func (s *StateDB) GetState(addr common.Address, hash common.Hash) common.Hash { +func (s *StateDB) GetState(addr common.Address, hash common.Hash) (value common.Hash) { stateObject := s.getStateObject(addr) if stateObject != nil { - return stateObject.GetState(hash) + value, _ = stateObject.GetState(hash) + return value } return common.Hash{} } @@ -243,7 +251,7 @@ func (s *StateDB) GetRefund() uint64 { func (s *StateDB) HasSuicided(addr common.Address) bool { stateObject := s.getStateObject(addr) if stateObject != nil { - return stateObject.Suicided + return stateObject.SelfDestructed } return false } @@ -318,7 +326,20 @@ func (s *StateDB) createObject(addr common.Address) (newobj, prev *stateObject) func (s *StateDB) CreateAccount(addr common.Address) { newObj, prev := s.createObject(addr) if prev != nil { - newObj.setBalance(prev.account.BalanceWei) + newObj.setBalance(prev.account.BalanceWei.ToBig()) + } +} + +// CreateContract is used whenever a contract is created. This may be preceded +// by CreateAccount, but that is not required if it already existed in the +// state due to funds sent beforehand. +// This operation sets the 'newContract'-flag, which is required in order to +// correctly handle EIP-6780 'delete-in-same-transaction' logic. +func (s *StateDB) CreateContract(addr common.Address) { + obj := s.getStateObject(addr) + if !obj.newContract { + obj.newContract = true + s.Journal.append(createContractChange{account: addr}) } } @@ -353,13 +374,19 @@ func (s *StateDB) setStateObject(object *stateObject) { */ // AddBalance adds amount to the account associated with addr. -func (s *StateDB) AddBalance(addr common.Address, wei *uint256.Int) { +func (s *StateDB) AddBalance( + addr common.Address, + wei *uint256.Int, + reason tracing.BalanceChangeReason, +) (prevWei uint256.Int) { stateObject := s.getOrNewStateObject(addr) - if stateObject != nil { - stateObject.AddBalance(wei.ToBig()) + if stateObject == nil { + return prevWei // 0 default } + return stateObject.AddBalance(wei) } +// AddBalanceSigned is only used in tests for convenience. func (s *StateDB) AddBalanceSigned(addr common.Address, wei *big.Int) { weiSign := wei.Sign() weiAbs, isOverflow := uint256.FromBig(new(big.Int).Abs(wei)) @@ -369,19 +396,27 @@ func (s *StateDB) AddBalanceSigned(addr common.Address, wei *big.Int) { "uint256 overflow occurred for big.Int value %s", wei)) } + reason := tracing.BalanceChangeTransfer if weiSign >= 0 { - s.AddBalance(addr, weiAbs) + s.AddBalance(addr, weiAbs, reason) } else { - s.SubBalance(addr, weiAbs) + s.SubBalance(addr, weiAbs, reason) } } // SubBalance subtracts amount from the account associated with addr. -func (s *StateDB) SubBalance(addr common.Address, wei *uint256.Int) { +func (s *StateDB) SubBalance( + addr common.Address, + wei *uint256.Int, + reason tracing.BalanceChangeReason, +) (prevWei uint256.Int) { stateObject := s.getOrNewStateObject(addr) - if stateObject != nil { - stateObject.SubBalance(wei.ToBig()) + if stateObject == nil { + return prevWei // 0 default + } else if wei.IsZero() { + return *stateObject.Balance() } + return stateObject.SubBalance(wei.ToBig()) } func (s *StateDB) SetBalanceWei(addr common.Address, wei *big.Int) { @@ -408,11 +443,14 @@ func (s *StateDB) SetCode(addr common.Address, code []byte) { } // SetState sets the contract state. -func (s *StateDB) SetState(addr common.Address, key, value common.Hash) { +func (s *StateDB) SetState( + addr common.Address, key, value common.Hash, +) (prevValue common.Hash) { stateObject := s.getOrNewStateObject(addr) if stateObject != nil { - stateObject.SetState(key, value) + return stateObject.SetState(key, value) } + return common.Hash{} } // SelfDestruct marks the given account as suicided. @@ -420,18 +458,28 @@ func (s *StateDB) SetState(addr common.Address, key, value common.Hash) { // // The account's state object is still available until the state is committed, // getStateObject will return a non-nil account after [SelfDestruct]. -func (s *StateDB) SelfDestruct(addr common.Address) { +func (s *StateDB) SelfDestruct(addr common.Address) (prevWei uint256.Int) { stateObject := s.getStateObject(addr) if stateObject == nil { - return + return prevWei + } + prevWei = *(stateObject.Balance()) + // Regardless of whether it is already destructed or not, we do have to + // journal the balance-change, if we set it to zero here. + if !stateObject.Balance().IsZero() { + stateObject.account.BalanceWei = new(uint256.Int) + } + // If it is already marked as self-destructed, we do not need to add it + // for journalling a second time. + if !stateObject.SelfDestructed { + s.Journal.append(suicideChange{ + account: &addr, + prev: stateObject.SelfDestructed, + prevbalance: new(big.Int).Set(prevWei.ToBig()), + }) + stateObject.SelfDestructed = true } - s.Journal.append(suicideChange{ - account: &addr, - prev: stateObject.Suicided, - prevbalance: new(big.Int).Set(stateObject.Balance()), - }) - stateObject.Suicided = true - stateObject.account.BalanceWei = new(big.Int) + return prevWei } func (s *StateDB) HasSelfDestructed(addr common.Address) bool { @@ -439,19 +487,29 @@ func (s *StateDB) HasSelfDestructed(addr common.Address) bool { if stateObject == nil { return false } - return stateObject.Suicided + return stateObject.SelfDestructed } -// Selfdestruct6780 calls SelfDesrtuct only if the [stateObject] corresponding to +// SelfDestruct6780 calls [SelfDesrtuct] only if the [stateObject] corresponding to // the given "addr" was created this block. -func (s *StateDB) Selfdestruct6780(addr common.Address) { +// +// SelfDestruct6780 is post-EIP6780 selfdestruct, which means that it's a +// send-all-to-beneficiary, unless the contract was created in this same +// transaction, in which case it will be destructed. +// This method returns the prior balance, along with a boolean which is +// true iff the object was indeed destructed. +func (s *StateDB) SelfDestruct6780( + addr common.Address, +) (prevWei uint256.Int, isSelfDestructed bool) { stateObject := s.getStateObject(addr) if stateObject == nil { - return - } - if stateObject.createdThisBlock { - s.SelfDestruct(addr) + isSelfDestructed = false + } else if stateObject.createdThisBlock { + prevWei, isSelfDestructed = s.SelfDestruct(addr), true + } else { + prevWei, isSelfDestructed = *(stateObject.Balance()), false } + return prevWei, isSelfDestructed } // PrepareAccessList handles the preparatory steps for executing a state @@ -624,7 +682,7 @@ func (s *StateDB) commitCtx(ctx sdk.Context) error { s.Journal.dirties[addr] = 0 continue } - if obj.Suicided { + if obj.SelfDestructed { // Invariant: After [StateDB.Suicide] for some address, the // corresponding account's state object is only available until the // state is committed. @@ -749,3 +807,68 @@ func (s *StateDB) SetTransientState( }) s.transientStorage.Set(addr, key, prev) } + +// Witness returns nil. +// +// Rationale: In Geth v1.14+, a [stateless.Witness] encompasses the state +// required to apply a set of transactions and derive a post state/receipt root. +// +// On Ethereum, this can be used to record trie (Merkle Patricia) accesses +// (storage and account), generate proofs for stateless clients, snap sync, or +// zkEVMs, and later reconstruct state from those proofs. +// In other words, [Witness] is part of an effort toward stateless execution. +// +// NOTE: Nibiru does not use a Merkle Patricia Trie. +// Instead it uses IAVL over KVStore. That means there's no notion of +// Ethereum-style witnesses unless we simulate that separately. +// +// Thus, this function is optional to implement unless we build: +// - zkEVM compatibility +// - Stateless Ethereum clients +// - Custom light client proofs that require a witness +func (s *StateDB) Witness() *stateless.Witness { + return nil +} + +// ↓ If you remove the quotes below, golangci-lint will change the function name +// to American spelling, "FinFinalizebreaking interface compatibility. + +// "Finalise" prepares state objects at the end of a transaction execution. +// +// In Ethereum/Geth, this typically moves dirty storage to a pending layer, +// flushes prefetchers, and finalizes flags like newContract. +// +// Behavior: This matches Ethereum behavior (e.g., EIP-161 and EIP-6780 compatibility). +// - If the account is non-empty, it clears the `newContract` flag. +// - If the account is empty and deleteEmptyObjects is true, it removes it from live state. +// +// In Nibiru, [StateDB.Finalize] can be a a no-op because: +// - The Cosmos SDK state machine executes each transaction atomically. +// - All writes happen against a cached multistore (`s.cacheCtx`) that gets committed +// during `StateDB.Commit`. +// +// This function implementsFinalize.StateDB] interface. +func (s *StateDB) Finalise(deleteEmptyObjects bool) { + // No-op for now. May add logic for empty account pruning if desired. + for addr, obj := range s.stateObjects { + if !obj.isEmpty() { + obj.newContract = false + } else if obj.isEmpty() && deleteEmptyObjects { + delete(s.stateObjects, addr) + } + } +} + +// GetStorageRoot returns an empty state hash. This is done because a storage +// root make sense to implement for Nibiru, as it does not use Merkle Patricia +// Tries. +// This function implements the [vm.StateDB] interface. +func (s *StateDB) GetStorageRoot(addr common.Address) (root common.Hash) { + return root // or panic("unsupported") +} + +// PointCache returns the point cache used by verkle tree. +// This function implements the [vm.StateDB] interface. +func (s *StateDB) PointCache() *utils.PointCache { + return nil +} diff --git a/x/evm/statedb/statedb_test.go b/x/evm/statedb/statedb_test.go index 191a1a58b5..ccd07b894a 100644 --- a/x/evm/statedb/statedb_test.go +++ b/x/evm/statedb/statedb_test.go @@ -5,6 +5,7 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/tracing" gethcore "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" @@ -382,8 +383,8 @@ func (s *Suite) TestRevertSnapshot() { db.SetNonce(address, 10) }}, {"change balance", func(db vm.StateDB) { - db.AddBalance(address, uint256.NewInt(10)) - db.SubBalance(address, uint256.NewInt(5)) + db.AddBalance(address, uint256.NewInt(10), tracing.BalanceChangeUnspecified) + db.SubBalance(address, uint256.NewInt(5), tracing.BalanceChangeUnspecified) }}, {"override account", func(db vm.StateDB) { db.CreateAccount(address) diff --git a/x/evm/tx_data_dynamic_fee.go b/x/evm/tx_data_dynamic_fee.go index 040fa5d4d1..857bc63e2e 100644 --- a/x/evm/tx_data_dynamic_fee.go +++ b/x/evm/tx_data_dynamic_fee.go @@ -5,13 +5,13 @@ import ( "math/big" "github.com/ethereum/go-ethereum/common" - gethmath "github.com/ethereum/go-ethereum/common/math" gethcore "github.com/ethereum/go-ethereum/core/types" errorsmod "cosmossdk.io/errors" sdkmath "cosmossdk.io/math" "github.com/NibiruChain/nibiru/v2/eth" + "github.com/NibiruChain/nibiru/v2/x/common/nmath" ) // BigIntMax returns max(x,y). @@ -302,7 +302,7 @@ func (tx *DynamicFeeTx) EffectiveGasPriceWeiPerGas(baseFeeWei *big.Int) *big.Int feeWithSpecifiedTip := new(big.Int).Add(tx.GasTipCap.BigInt(), baseFeeWei) // Enforce base fee as the minimum [EffectiveGasPriceWei]: - rawEffectiveGasPrice := gethmath.BigMin(feeWithSpecifiedTip, tx.GasFeeCap.BigInt()) + rawEffectiveGasPrice := nmath.BigMin(feeWithSpecifiedTip, tx.GasFeeCap.BigInt()) return BigIntMax(baseFeeWei, rawEffectiveGasPrice) } diff --git a/x/evm/vmtracer.go b/x/evm/vmtracer.go index 1adfd70281..1cc1968c82 100644 --- a/x/evm/vmtracer.go +++ b/x/evm/vmtracer.go @@ -2,13 +2,13 @@ package evm import ( - "math/big" "os" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/core/tracing" + "github.com/ethereum/go-ethereum/eth/tracers" "github.com/ethereum/go-ethereum/eth/tracers/logger" + tracersnative "github.com/ethereum/go-ethereum/eth/tracers/native" "github.com/ethereum/go-ethereum/params" ) @@ -21,8 +21,13 @@ const ( // NewTracer creates a new Logger tracer to collect execution traces from an // EVM transaction. -func NewTracer(tracer string, msg core.Message, cfg *params.ChainConfig, height int64) vm.EVMLogger { - // TODO: enable additional log configuration +func NewTracer( + tracer string, + msg core.Message, + cfg *params.ChainConfig, + height int64, +) *tracing.Hooks { + // TODO: feat(evm-vmtracer): enable additional log configuration logCfg := &logger.Config{ Debug: true, } @@ -35,15 +40,29 @@ func NewTracer(tracer string, msg core.Message, cfg *params.ChainConfig, height msg.From, *msg.To, precompileAddrs, - ) + ).Hooks() case TracerJSON: return logger.NewJSONLogger(logCfg, os.Stdout) case TracerMarkdown: - return logger.NewMarkdownLogger(logCfg, os.Stdout) + return logger.NewMarkdownLogger(logCfg, os.Stdout).Hooks() case TracerStruct: - return logger.NewStructLogger(logCfg) + return NewDefaultTracer().Hooks default: - return NewNoOpTracer() + // The no-op tracer, `return NewNoOpTracer().Hooks` is meant for testing + // in geth, not production. + return NewDefaultTracer().Hooks + } +} + +func NewDefaultTracer() *tracers.Tracer { + logCfg := &logger.Config{ + Debug: true, + } + defaultLogger := logger.NewStructLogger(logCfg) + return &tracers.Tracer{ + Hooks: defaultLogger.Hooks(), + GetResult: defaultLogger.GetResult, + Stop: defaultLogger.Stop, } } @@ -53,62 +72,9 @@ type TxTraceResult struct { Error string `json:"error,omitempty"` // Trace failure produced by the tracer } -var _ vm.EVMLogger = &NoOpTracer{} - -// NoOpTracer is an empty implementation of vm.Tracer interface -type NoOpTracer struct{} - // NewNoOpTracer creates a no-op vm.Tracer -func NewNoOpTracer() *NoOpTracer { - return &NoOpTracer{} -} - -// CaptureStart implements vm.Tracer interface -// -//nolint:revive // allow unused parameters to indicate expected signature -func (dt NoOpTracer) CaptureStart(env *vm.EVM, - from common.Address, - to common.Address, - create bool, - input []byte, - gas uint64, - value *big.Int) { +func NewNoOpTracer() (tracer *tracers.Tracer) { + // This function cannot error, so we ignore the second return value + tracer, _ = tracersnative.NewNoopTracer(nil, nil, nil) + return tracer } - -// CaptureState implements vm.Tracer interface -// -//nolint:revive // allow unused parameters to indicate expected signature -func (dt NoOpTracer) CaptureState(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, rData []byte, depth int, err error) { -} - -// CaptureFault implements vm.Tracer interface -// -//nolint:revive // allow unused parameters to indicate expected signature -func (dt NoOpTracer) CaptureFault(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, depth int, err error) { -} - -// CaptureEnd implements vm.Tracer interface -// -//nolint:revive // allow unused parameters to indicate expected signature -func (dt NoOpTracer) CaptureEnd(output []byte, gasUsed uint64, err error) {} - -// CaptureEnter implements vm.Tracer interface -// -//nolint:revive // allow unused parameters to indicate expected signature -func (dt NoOpTracer) CaptureEnter(typ vm.OpCode, from common.Address, to common.Address, input []byte, gas uint64, value *big.Int) { -} - -// CaptureExit implements vm.Tracer interface -// -//nolint:revive // allow unused parameters to indicate expected signature -func (dt NoOpTracer) CaptureExit(output []byte, gasUsed uint64, err error) {} - -// CaptureTxStart implements vm.Tracer interface -// -//nolint:revive // allow unused parameters to indicate expected signature -func (dt NoOpTracer) CaptureTxStart(gasLimit uint64) {} - -// CaptureTxEnd implements vm.Tracer interface -// -//nolint:revive // allow unused parameters to indicate expected signature -func (dt NoOpTracer) CaptureTxEnd(restGas uint64) {} diff --git a/x/tokenfactory/module.go b/x/tokenfactory/module.go index 8bdc247ef9..cf96b51ae5 100644 --- a/x/tokenfactory/module.go +++ b/x/tokenfactory/module.go @@ -14,21 +14,30 @@ import ( "encoding/json" "fmt" + "cosmossdk.io/core/appmodule" + "cosmossdk.io/depinject" abci "github.com/cometbft/cometbft/abci/types" sdkclient "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" sdkcodec "github.com/cosmos/cosmos-sdk/codec" sdkcodectypes "github.com/cosmos/cosmos-sdk/codec/types" + store "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" + sudokeeper "github.com/NibiruChain/nibiru/v2/x/sudo/keeper" "github.com/NibiruChain/nibiru/v2/x/tokenfactory/cli" "github.com/NibiruChain/nibiru/v2/x/tokenfactory/keeper" "github.com/NibiruChain/nibiru/v2/x/tokenfactory/simulation" "github.com/NibiruChain/nibiru/v2/x/tokenfactory/types" + + modulev1 "github.com/NibiruChain/nibiru/v2/api/nibiru/tokenfactory/module" ) // type check to ensure the interface is properly implemented @@ -134,6 +143,12 @@ func (AppModule) Name() string { return types.ModuleName } +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} + // RegisterInvariants registers the fees module's invariants. func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} @@ -190,3 +205,50 @@ func (AppModule) RegisterStoreDecoder(sdk.StoreDecoderRegistry) { func (AppModule) WeightedOperations(simState module.SimulationState) []simtypes.WeightedOperation { return []simtypes.WeightedOperation{} } + +// +// App Wiring Setup +// + +func init() { + appmodule.Register(&modulev1.Module{}, + appmodule.Provide(ProvideModule), + ) +} + +type TokenFactoryInputs struct { + depinject.In + + Config *modulev1.Module + Key *store.KVStoreKey + Cdc codec.Codec + + AccountKeeper authkeeper.AccountKeeper + BankKeeper types.BankKeeper + DistrKeeper types.CommunityPoolKeeper + SudoKeeper sudokeeper.Keeper +} + +type TokenFactoryOutputs struct { + depinject.Out + + Keeper keeper.Keeper + + Module appmodule.AppModule +} + +func ProvideModule(in TokenFactoryInputs) TokenFactoryOutputs { + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + if in.Config.Authority != "" { + authority = authtypes.NewModuleAddressOrBech32Address(in.Config.Authority) + } + + k := keeper.NewKeeper(in.Key, in.Cdc, in.BankKeeper, in.AccountKeeper, in.DistrKeeper, in.SudoKeeper, authority.String()) + + m := NewAppModule(k, in.AccountKeeper) + + return TokenFactoryOutputs{ + Keeper: k, + Module: m, + } +} From 86111b94fd22e9a133d6dae3a9d7d6f5800ea22f Mon Sep 17 00:00:00 2001 From: Unique Divine Date: Thu, 17 Apr 2025 07:30:33 -0500 Subject: [PATCH 03/11] refactor: self-review changes --- go.mod | 20 ++++++-------------- go.sum | 18 ++++++++++++------ x/evm/chain_config.go | 6 +++--- x/evm/keeper/grpc_query.go | 3 +++ x/evm/precompile/precompile.go | 5 +++-- x/evm/statedb/journal.go | 5 +++-- 6 files changed, 30 insertions(+), 27 deletions(-) diff --git a/go.mod b/go.mod index 0ed0a5027c..204f30944b 100644 --- a/go.mod +++ b/go.mod @@ -1,9 +1,5 @@ module github.com/NibiruChain/nibiru/v2 -// go-ethereum is incompatible with Go 1.23 and causes issues -// See: -// - [go-ethereum#30100: Build fails with Go 1.23rc](https://github.com/ethereum/go-ethereum/issues/30100) -// - https://github.com/fjl/memsize/issues/4 go 1.24 require ( @@ -69,10 +65,10 @@ require ( github.com/rs/cors v1.8.3 github.com/rs/zerolog v1.32.0 github.com/status-im/keycard-go v0.2.0 - golang.org/x/crypto v0.22.0 + golang.org/x/crypto v0.36.0 golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa - golang.org/x/net v0.24.0 - golang.org/x/text v0.14.0 + golang.org/x/net v0.37.0 + golang.org/x/text v0.23.0 ) require ( @@ -238,9 +234,9 @@ require ( go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.9.0 // indirect golang.org/x/oauth2 v0.16.0 // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.22.0 // indirect - golang.org/x/term v0.19.0 // indirect + golang.org/x/sync v0.12.0 // indirect + golang.org/x/sys v0.31.0 // indirect + golang.org/x/term v0.30.0 // indirect golang.org/x/time v0.5.0 // indirect google.golang.org/api v0.155.0 // indirect google.golang.org/appengine v1.6.8 // indirect @@ -258,11 +254,7 @@ replace ( cosmossdk.io/api => cosmossdk.io/api v0.3.1 github.com/CosmWasm/wasmd => github.com/NibiruChain/wasmd v0.44.0-nibiru - // github.com/cockroachdb/pebble: Has to be pinned for compatibilit with - // go-ethereum/ethdb, which uses pebble imports - // github.com/cockroachdb/pebble => github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 github.com/cosmos/cosmos-sdk => github.com/NibiruChain/cosmos-sdk v0.47.11-nibiru.3 - github.com/cosmos/iavl => github.com/cosmos/iavl v0.20.0 github.com/ethereum/go-ethereum => github.com/NibiruChain/go-ethereum v1.14.13-nibiru.2 diff --git a/go.sum b/go.sum index 7c2f4819b3..1cc6a1f281 100644 --- a/go.sum +++ b/go.sum @@ -2077,8 +2077,9 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= -golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= +golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb h1:xIApU0ow1zwMa2uL1VDNeQlNVFTWMQxZUZCMDy0Q4Us= golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= @@ -2208,8 +2209,9 @@ golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= +golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= golang.org/x/oauth2 v0.0.0-20170207211851-4464e7848382/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -2262,8 +2264,9 @@ golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= +golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -2399,8 +2402,9 @@ golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -2420,8 +2424,9 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= -golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= +golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= +golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2442,8 +2447,9 @@ golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/x/evm/chain_config.go b/x/evm/chain_config.go index 69f19c3305..a3b491f3c2 100644 --- a/x/evm/chain_config.go +++ b/x/evm/chain_config.go @@ -32,9 +32,9 @@ func EthereumConfig(chainID *big.Int) *params.ChainConfig { // Shanghai switch time (nil = no fork, 0 => already on shanghai) ShanghaiTime: ptrU64(0), // CancunTime switch time (nil = no fork, 0 => already on cancun) - CancunTime: ptrU64(0), // 0 => already on ... - PragueTime: ptrU64(0), // 0 => already on ... - VerkleTime: nil, // nil => disable stateless verification + CancunTime: nil, // nil => disable "blobs" + PragueTime: nil, // nil => disable EIP-7702, blob improvements, and increased CALL gas costs + VerkleTime: nil, // nil => disable stateless verification TerminalTotalDifficulty: nil, Ethash: nil, Clique: nil, diff --git a/x/evm/keeper/grpc_query.go b/x/evm/keeper/grpc_query.go index d5e826df6f..0237ffc9fe 100644 --- a/x/evm/keeper/grpc_query.go +++ b/x/evm/keeper/grpc_query.go @@ -809,6 +809,9 @@ func (k *Keeper) TraceEthTxMsg( tracer, err = tracers.DefaultDirectory.New( traceConfig.Tracer, tCtx, tracerJSONConfig, evmCfg.ChainConfig, ) + if err != nil { + return nil, 0, grpcstatus.Error(grpccodes.Internal, err.Error()) + } } // Define a meaningful timeout of a single transaction trace diff --git a/x/evm/precompile/precompile.go b/x/evm/precompile/precompile.go index 7ab75b2fb1..d812437b9e 100644 --- a/x/evm/precompile/precompile.go +++ b/x/evm/precompile/precompile.go @@ -52,8 +52,9 @@ func InitPrecompiles( vm.PrecompiledContractsByzantium, vm.PrecompiledContractsIstanbul, vm.PrecompiledContractsBerlin, - vm.PrecompiledContractsCancun, - vm.PrecompiledContractsBLS, + // Below precompiles omitted intentionally. + // vm.PrecompiledContractsCancun, + // vm.PrecompiledContractsBLS, } { precompileMap[pc.Address()] = pc } diff --git a/x/evm/statedb/journal.go b/x/evm/statedb/journal.go index 62406147ee..c7174e8bba 100644 --- a/x/evm/statedb/journal.go +++ b/x/evm/statedb/journal.go @@ -73,8 +73,9 @@ func (j *journal) append(entry JournalChange) { } // dirty explicitly sets an address to dirty, even if the change entries would -// otherwise suggest it as clean. This method is an ugly hack to handle the RIPEMD -// precompile consensus exception. +// otherwise suggest it as clean. It is copied directly from go-ethereum. In the +// words of the library authors, "this method is an ugly hack to handle the +// RIPEMD precompile consensus exception." - geth/core/state/journal.go func (j *journal) dirty(addr common.Address) { j.dirties[addr]++ } From 3d1c685d86eacaf60633d7c9e89ef8c4557b04ea Mon Sep 17 00:00:00 2001 From: Unique Divine Date: Thu, 17 Apr 2025 09:38:33 -0500 Subject: [PATCH 04/11] fix(evm-precompile): get new delegate call behavior using the sender arg --- x/evm/precompile/funtoken.go | 29 ++++++++++++++++------------- x/evm/precompile/wasm.go | 24 ++++++++++++------------ 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/x/evm/precompile/funtoken.go b/x/evm/precompile/funtoken.go index 439b540694..f1ef8f9522 100644 --- a/x/evm/precompile/funtoken.go +++ b/x/evm/precompile/funtoken.go @@ -76,7 +76,7 @@ func (p precompileFunToken) Run( method := startResult.Method switch PrecompileMethod(method.Name) { case FunTokenMethod_sendToBank: - bz, err = p.sendToBank(startResult, contract.CallerAddress, readonly, evm) + bz, err = p.sendToBank(startResult, sender, readonly, evm) case FunTokenMethod_balance: bz, err = p.balance(startResult, contract, evm) case FunTokenMethod_bankBalance: @@ -84,9 +84,9 @@ func (p precompileFunToken) Run( case FunTokenMethod_whoAmI: bz, err = p.whoAmI(startResult, contract) case FunTokenMethod_sendToEvm: - bz, err = p.sendToEvm(startResult, contract.CallerAddress, readonly, evm) + bz, err = p.sendToEvm(startResult, sender, readonly, evm) case FunTokenMethod_bankMsgSend: - bz, err = p.bankMsgSend(startResult, contract.CallerAddress, readonly) + bz, err = p.bankMsgSend(startResult, sender, readonly) case FunTokenMethod_getErc20Address: bz, err = p.getErc20Address(startResult, contract) default: @@ -146,7 +146,7 @@ type precompileFunToken struct { // module. func (p precompileFunToken) sendToBank( startResult OnRunStartResult, - caller gethcommon.Address, + sender gethcommon.Address, readOnly bool, evmObj *vm.EVM, ) (bz []byte, err error) { @@ -181,17 +181,20 @@ func (p precompileFunToken) sendToBank( return nil, fmt.Errorf("recipient address invalid (%s): %w", to, err) } - // Caller transfers ERC20 to the EVM module account + // Sender transfers ERC20 to the EVM module account gotAmount, _, err := p.evmKeeper.ERC20().Transfer( erc20, /*erc20*/ - caller, /*from*/ + sender, /*from*/ evm.EVM_MODULE_ADDRESS, /*to*/ amount, /*value*/ ctx, evmObj, ) if err != nil { - return nil, fmt.Errorf("error in ERC20.transfer from caller to EVM account: %w", err) + return nil, fmt.Errorf( + "error in ERC20.transfer from caller to EVM account: %w: from %s, erc20 %s, amount: %s", + err, sender, erc20, amount, + ) } // EVM account mints FunToken.BankDenom to module account @@ -213,7 +216,7 @@ func (p precompileFunToken) sendToBank( err = p.evmKeeper.Bank.MintCoins(ctx, evm.ModuleName, sdk.NewCoins(coinToSend)) if err != nil { return nil, fmt.Errorf("mint failed for module \"%s\" (%s): contract caller %s: %w", - evm.ModuleName, evm.EVM_MODULE_ADDRESS.Hex(), caller.Hex(), err, + evm.ModuleName, evm.EVM_MODULE_ADDRESS.Hex(), sender.Hex(), err, ) } } @@ -232,7 +235,7 @@ func (p precompileFunToken) sendToBank( ) if err != nil { return nil, fmt.Errorf("send failed for module \"%s\" (%s): contract caller %s: %w", - evm.ModuleName, evm.EVM_MODULE_ADDRESS.Hex(), caller.Hex(), err, + evm.ModuleName, evm.EVM_MODULE_ADDRESS.Hex(), sender.Hex(), err, ) } @@ -540,7 +543,7 @@ func (p precompileFunToken) parseArgsWhoAmI(args []any) ( // the EVM side. func (p precompileFunToken) sendToEvm( startResult OnRunStartResult, - caller gethcommon.Address, + sender gethcommon.Address, readOnly bool, evmObj *vm.EVM, ) ([]byte, error) { @@ -576,7 +579,7 @@ func (p precompileFunToken) sendToEvm( // 1) remove (burn or escrow) the bank coin from caller coinToSend := sdk.NewCoin(funtoken.BankDenom, math.NewIntFromBigInt(amount)) - senderBech32 := eth.EthAddrToNibiruAddr(caller) + senderBech32 := eth.EthAddrToNibiruAddr(sender) // bank send from account => module if err := p.evmKeeper.Bank.SendCoinsFromAccountToModule( @@ -691,7 +694,7 @@ func parseToAddr(toStr string) (gethcommon.Address, error) { func (p precompileFunToken) bankMsgSend( startResult OnRunStartResult, - caller gethcommon.Address, + sender gethcommon.Address, readOnly bool, ) ([]byte, error) { ctx, method, args := startResult.CacheCtx, startResult.Method, startResult.Args @@ -710,7 +713,7 @@ func (p precompileFunToken) bankMsgSend( if e != nil { return nil, e } - fromBech32 := eth.EthAddrToNibiruAddr(caller) + fromBech32 := eth.EthAddrToNibiruAddr(sender) toBech32 := eth.EthAddrToNibiruAddr(toEthAddr) // do the bank send diff --git a/x/evm/precompile/wasm.go b/x/evm/precompile/wasm.go index 213cfe0c42..af9619fc57 100644 --- a/x/evm/precompile/wasm.go +++ b/x/evm/precompile/wasm.go @@ -56,13 +56,13 @@ func (p precompileWasm) Run( switch PrecompileMethod(startResult.Method.Name) { case WasmMethod_execute: - bz, err = p.execute(startResult, contract.CallerAddress, readonly) + bz, err = p.execute(startResult, sender, readonly) case WasmMethod_query: bz, err = p.query(startResult, contract) case WasmMethod_instantiate: - bz, err = p.instantiate(startResult, contract.CallerAddress, readonly) + bz, err = p.instantiate(startResult, sender, readonly) case WasmMethod_executeMulti: - bz, err = p.executeMulti(startResult, contract.CallerAddress, readonly) + bz, err = p.executeMulti(startResult, sender, readonly) case WasmMethod_queryRaw: bz, err = p.queryRaw(startResult, contract) default: @@ -155,7 +155,7 @@ func PrecompileWasm(keepers keepers.PublicKeepers) NibiruCustomPrecompile { // uncommon to use this field, so you'll pass an empty array most of the time. func (p precompileWasm) execute( start OnRunStartResult, - caller gethcommon.Address, + sender gethcommon.Address, readOnly bool, ) (bz []byte, err error) { method, args, ctx := start.Method, start.Args, start.CacheCtx @@ -173,7 +173,7 @@ func (p precompileWasm) execute( err = ErrInvalidArgs(err) return } - data, err := p.Wasm.Execute(ctx, wasmContract, eth.EthAddrToNibiruAddr(caller), msgArgsBz, funds) + data, err := p.Wasm.Execute(ctx, wasmContract, eth.EthAddrToNibiruAddr(sender), msgArgsBz, funds) if err != nil { return } @@ -239,7 +239,7 @@ func (p precompileWasm) query( // ``` func (p precompileWasm) instantiate( start OnRunStartResult, - caller gethcommon.Address, + sender gethcommon.Address, readOnly bool, ) (bz []byte, err error) { method, args, ctx := start.Method, start.Args, start.CacheCtx @@ -252,8 +252,8 @@ func (p precompileWasm) instantiate( return nil, err } - callerBech32 := eth.EthAddrToNibiruAddr(caller) - txMsg, err := p.parseArgsWasmInstantiate(args, callerBech32.String()) + senderBech32 := eth.EthAddrToNibiruAddr(sender) + txMsg, err := p.parseArgsWasmInstantiate(args, senderBech32.String()) if err != nil { err = ErrInvalidArgs(err) return @@ -264,7 +264,7 @@ func (p precompileWasm) instantiate( adminAddr = sdk.MustAccAddressFromBech32(txMsg.Admin) // validated in parse } contractAddr, data, err := p.Wasm.Instantiate( - ctx, txMsg.CodeID, callerBech32, adminAddr, txMsg.Msg, txMsg.Label, txMsg.Funds, + ctx, txMsg.CodeID, senderBech32, adminAddr, txMsg.Msg, txMsg.Label, txMsg.Funds, ) if err != nil { return @@ -290,7 +290,7 @@ func (p precompileWasm) instantiate( // ``` func (p precompileWasm) executeMulti( start OnRunStartResult, - caller gethcommon.Address, + sender gethcommon.Address, readOnly bool, ) (bz []byte, err error) { method, args, ctx := start.Method, start.Args, start.CacheCtx @@ -308,7 +308,7 @@ func (p precompileWasm) executeMulti( err = ErrInvalidArgs(err) return } - callerBech32 := eth.EthAddrToNibiruAddr(caller) + senderBech32 := eth.EthAddrToNibiruAddr(sender) var responses [][]byte for i, m := range wasmExecMsgs { @@ -329,7 +329,7 @@ func (p precompileWasm) executeMulti( Amount: sdk.NewIntFromBigInt(fund.Amount), }) } - respBz, e := p.Wasm.Execute(ctx, wasmContract, callerBech32, m.MsgArgs, funds) + respBz, e := p.Wasm.Execute(ctx, wasmContract, senderBech32, m.MsgArgs, funds) if e != nil { err = fmt.Errorf("Execute failed at index %d: %w", i, e) return From 1ab808bb04901656f78941baacc6958541e61a93 Mon Sep 17 00:00:00 2001 From: Unique Divine Date: Thu, 17 Apr 2025 12:46:10 -0500 Subject: [PATCH 05/11] refactor: more self-review --- eth/rpc/backend/account_info_test.go | 18 ++++---- eth/rpc/backend/backend_suite_test.go | 65 +++++++++++++-------------- eth/rpc/backend/blocks.go | 11 +++-- eth/rpc/backend/blocks_test.go | 21 +++++---- eth/rpc/backend/chain_info_test.go | 7 ++- eth/rpc/backend/tracing_test.go | 6 +-- eth/rpc/backend/tx_info_test.go | 7 +-- eth/rpc/backend/utils_test.go | 2 +- 8 files changed, 72 insertions(+), 65 deletions(-) diff --git a/eth/rpc/backend/account_info_test.go b/eth/rpc/backend/account_info_test.go index 1f88438900..45352c4b71 100644 --- a/eth/rpc/backend/account_info_test.go +++ b/eth/rpc/backend/account_info_test.go @@ -21,13 +21,13 @@ func (s *BackendSuite) TestGetCode() { { name: "happy: valid contract address", contractAddr: testContractAddress, - blockNumber: s.SuccessfulTxDeployContract().BlockNumberRpc(), + blockNumber: *s.SuccessfulTxDeployContract().BlockNumberRpc, codeFound: true, }, { name: "sad: not a contract address", contractAddr: s.fundedAccEthAddr, - blockNumber: s.SuccessfulTxDeployContract().BlockNumberRpc(), + blockNumber: *s.SuccessfulTxDeployContract().BlockNumberRpc, codeFound: false, }, } @@ -62,7 +62,7 @@ func (s *BackendSuite) TestGetProof() { name: "happy: balance of the contract deployer", contractAddr: testContractAddress, address: s.fundedAccEthAddr, - blockNumber: s.SuccessfulTxDeployContract().BlockNumberRpc(), + blockNumber: *s.SuccessfulTxDeployContract().BlockNumberRpc, slot: 0, // _balances is the first slot in ERC20 wantValue: "0xd3c21bcecceda1000000", // = 1000000 * (10**18), initial supply }, @@ -70,7 +70,7 @@ func (s *BackendSuite) TestGetProof() { name: "sad: address which is not in contract storage", contractAddr: s.fundedAccEthAddr, address: recipient, - blockNumber: s.SuccessfulTxDeployContract().BlockNumberRpc(), + blockNumber: *s.SuccessfulTxDeployContract().BlockNumberRpc, slot: 0, wantValue: "0x0", }, @@ -104,7 +104,7 @@ func (s *BackendSuite) TestGetStorageAt() { name: "happy: balance of the contract deployer", contractAddr: testContractAddress, address: s.fundedAccEthAddr, - blockNumber: s.SuccessfulTxDeployContract().BlockNumberRpc(), + blockNumber: *s.SuccessfulTxDeployContract().BlockNumberRpc, // _balances is the first slot in ERC20 slot: 0, // = 1000000 * (10**18), initial supply @@ -114,7 +114,7 @@ func (s *BackendSuite) TestGetStorageAt() { name: "sad: address which is not in contract storage", contractAddr: s.fundedAccEthAddr, address: recipient, - blockNumber: s.SuccessfulTxDeployContract().BlockNumberRpc(), + blockNumber: *s.SuccessfulTxDeployContract().BlockNumberRpc, slot: 0, wantValue: "0x0000000000000000000000000000000000000000000000000000000000000000", }, @@ -145,7 +145,7 @@ func (s *BackendSuite) TestGetBalance() { { name: "happy: funded account balance", address: s.fundedAccEthAddr, - blockNumber: transferTxBlockNumber, + blockNumber: *s.SuccessfulTxTransfer().BlockNumberRpc, wantPositiveBalance: true, }, { @@ -157,13 +157,13 @@ func (s *BackendSuite) TestGetBalance() { { name: "happy: recipient balance after transfer", address: recipient, - blockNumber: transferTxBlockNumber, + blockNumber: *s.SuccessfulTxTransfer().BlockNumberRpc, wantPositiveBalance: true, }, { name: "sad: not existing account", address: evmtest.NewEthPrivAcc().EthAddr, - blockNumber: transferTxBlockNumber, + blockNumber: *s.SuccessfulTxTransfer().BlockNumberRpc, wantPositiveBalance: false, }, } diff --git a/eth/rpc/backend/backend_suite_test.go b/eth/rpc/backend/backend_suite_test.go index 5a017f3ef6..1b70a1c081 100644 --- a/eth/rpc/backend/backend_suite_test.go +++ b/eth/rpc/backend/backend_suite_test.go @@ -43,8 +43,6 @@ var ( amountToSend = evm.NativeToWei(big.NewInt(1)) ) -var transferTxBlockNumber rpc.BlockNumber - var testContractAddress gethcommon.Address type BackendSuite struct { @@ -101,34 +99,40 @@ func (s *BackendSuite) SetupSuite() { // Send Transfer TX and use the results in the tests s.Require().NoError(err) transferTxHash := s.SendNibiViaEthTransfer(recipient, amountToSend, true /*waitForNextBlock*/) - blockNumber, blockHash, txReceipt := WaitForReceipt(s, transferTxHash) - s.NotNil(blockNumber) - s.NotNil(blockHash) - s.Require().NotNil(txReceipt) - s.Require().Equal(transferTxHash, txReceipt.TxHash) - transferTxBlockNumber = rpc.NewBlockNumber(blockNumber) - s.SuccessfulTxs["transfer"] = SuccessfulTx{ - BlockNumber: blockNumber, - BlockHash: blockHash, - Receipt: txReceipt, + { + blockNumber, blockHash, txReceipt := WaitForReceipt(s, transferTxHash) + s.NotNil(blockNumber) + s.NotNil(blockHash) + s.Require().NotNil(txReceipt) + s.Require().Equal(transferTxHash, txReceipt.TxHash) + blockNumberRpc := rpc.NewBlockNumber(blockNumber) + s.SuccessfulTxs["transfer"] = SuccessfulTx{ + BlockNumber: blockNumber, + BlockHash: blockHash, + Receipt: txReceipt, + BlockNumberRpc: &blockNumberRpc, + } } // Deploy test erc20 contract deployContractTxHash, contractAddress := s.DeployTestContract(true) testContractAddress = contractAddress - blockNumber, blockHash, txReceipt = WaitForReceipt(s, deployContractTxHash) - s.NotNil(blockNumber) - s.NotNil(blockHash) - s.Require().NotNil(txReceipt) - s.SuccessfulTxs["deployContract"] = SuccessfulTx{ - BlockNumber: blockNumber, - BlockHash: blockHash, - Receipt: txReceipt, + { + blockNumber, blockHash, txReceipt := WaitForReceipt(s, deployContractTxHash) + s.NotNil(blockNumber) + s.NotNil(blockHash) + s.Require().NotNil(txReceipt) + blockNumberRpc := rpc.NewBlockNumber(blockNumber) + s.SuccessfulTxs["deployContract"] = SuccessfulTx{ + BlockNumber: blockNumber, + BlockNumberRpc: &blockNumberRpc, + BlockHash: blockHash, + Receipt: txReceipt, + } } - s.Require().Len(s.SuccessfulTxs, 2) - for _, successfulTx := range s.SuccessfulTxs { - successfulTx.Log(s.T()) + for _, tx := range s.SuccessfulTxs { + s.T().Logf("SuccessfulTx{ BlockNumber: %s, BlockHash: %s, TxHash: %s }", tx.BlockNumber, tx.BlockHash.Hex(), tx.Receipt.TxHash.Hex()) } } @@ -141,17 +145,10 @@ func (s *BackendSuite) SuccessfulTxDeployContract() SuccessfulTx { } type SuccessfulTx struct { - BlockNumber *big.Int - BlockHash *gethcommon.Hash - Receipt *backend.TransactionReceipt -} - -func (testTx SuccessfulTx) BlockNumberRpc() rpc.BlockNumber { - return rpc.NewBlockNumber(testTx.BlockNumber) -} - -func (testTx SuccessfulTx) Log(t *testing.T) { - t.Logf("SuccessfulTx{BlockNumber: %s, BlockHash: %s, TxHash: %s}", testTx.BlockNumber, testTx.BlockHash.Hex(), testTx.Receipt.TxHash.Hex()) + BlockNumber *big.Int + BlockHash *gethcommon.Hash + Receipt *backend.TransactionReceipt + BlockNumberRpc *rpc.BlockNumber } // SendNibiViaEthTransfer sends nibi using the eth rpc backend diff --git a/eth/rpc/backend/blocks.go b/eth/rpc/backend/blocks.go index ac66397d6d..80a8c469b1 100644 --- a/eth/rpc/backend/blocks.go +++ b/eth/rpc/backend/blocks.go @@ -487,17 +487,20 @@ func (b *Backend) EthBlockFromTendermintBlock( txs[i] = ethMsg.AsTransaction() } - // TODO: feat(evm-backend): Add tx receipts in gethcore.NewBlock for the - // EthBlockFromTendermintBlock function. - // TODO: feat: See if we can simulate Trie behavior on CometBFT. body := &gethcore.Body{ Transactions: txs, Uncles: []*gethcore.Header{}, // unused Withdrawals: []*gethcore.Withdrawal{}, // unused: Specific to Etheruem mainnet } + // TODO: feat(evm-backend): Add tx receipts in gethcore.NewBlock for the + // EthBlockFromTendermintBlock function. + // ticket: https://github.com/NibiruChain/nibiru/issues/2282 + + // TODO: feat: See if we can simulate Trie behavior on CometBFT. + var ( - receipts []*gethcore.Receipt = nil + receipts = []*gethcore.Receipt{} hasher gethcore.TrieHasher = trie.NewStackTrie(nil) ) ethBlock := gethcore.NewBlock(ethHeader, body, receipts, hasher) diff --git a/eth/rpc/backend/blocks_test.go b/eth/rpc/backend/blocks_test.go index 216ef7fd4d..4bbd084f4f 100644 --- a/eth/rpc/backend/blocks_test.go +++ b/eth/rpc/backend/blocks_test.go @@ -22,13 +22,14 @@ func (s *BackendSuite) TestBlockNumber() { } func (s *BackendSuite) TestGetBlockByNumberr() { - block, err := s.backend.GetBlockByNumber(transferTxBlockNumber, true) + block, err := s.backend.GetBlockByNumber( + *s.SuccessfulTxTransfer().BlockNumberRpc, true) s.Require().NoError(err) s.Require().NotNil(block) s.Require().Greater(len(block["transactions"].([]any)), 0) s.Require().NotNil(block["size"]) s.Require().NotNil(block["nonce"]) - s.Require().Equal(int64(block["number"].(hexutil.Uint64)), transferTxBlockNumber.Int64()) + s.Require().Equal(int64(block["number"].(hexutil.Uint64)), s.SuccessfulTxTransfer().BlockNumberRpc.Int64()) } func (s *BackendSuite) TestGetBlockByHash() { @@ -47,9 +48,9 @@ func (s *BackendSuite) TestBlockNumberFromTendermint() { { name: "happy: block number specified", blockNrOrHash: rpc.BlockNumberOrHash{ - BlockNumber: &transferTxBlockNumber, + BlockNumber: s.SuccessfulTxTransfer().BlockNumberRpc, }, - wantBlockNumber: transferTxBlockNumber, + wantBlockNumber: *s.SuccessfulTxTransfer().BlockNumberRpc, wantErr: "", }, { @@ -57,7 +58,7 @@ func (s *BackendSuite) TestBlockNumberFromTendermint() { blockNrOrHash: rpc.BlockNumberOrHash{ BlockHash: s.SuccessfulTxTransfer().BlockHash, }, - wantBlockNumber: transferTxBlockNumber, + wantBlockNumber: *s.SuccessfulTxTransfer().BlockNumberRpc, wantErr: "", }, { @@ -83,10 +84,11 @@ func (s *BackendSuite) TestBlockNumberFromTendermint() { } func (s *BackendSuite) TestEthBlockByNumber() { - block, err := s.backend.EthBlockByNumber(transferTxBlockNumber) + block, err := s.backend.EthBlockByNumber( + *s.SuccessfulTxTransfer().BlockNumberRpc) s.Require().NoError(err) s.Require().NotNil(block) - s.Require().Equal(transferTxBlockNumber.Int64(), block.Number().Int64()) + s.Require().Equal(s.SuccessfulTxTransfer().BlockNumberRpc.Int64(), block.Number().Int64()) s.Require().Greater(block.Transactions().Len(), 0) s.Require().NotNil(block.ParentHash()) s.Require().NotNil(block.UncleHash()) @@ -98,7 +100,8 @@ func (s *BackendSuite) TestGetBlockTransactionCountByHash() { } func (s *BackendSuite) TestGetBlockTransactionCountByNumber() { - txCount := s.backend.GetBlockTransactionCountByNumber(transferTxBlockNumber) + txCount := s.backend.GetBlockTransactionCountByNumber( + *s.SuccessfulTxTransfer().BlockNumberRpc) s.Require().Greater((uint64)(*txCount), uint64(0)) } @@ -107,5 +110,5 @@ func AssertBlockContents(s *BackendSuite, blockMap map[string]any) { s.Require().Greater(len(blockMap["transactions"].([]any)), 0) s.Require().NotNil(blockMap["size"]) s.Require().NotNil(blockMap["nonce"]) - s.Require().Equal(int64(blockMap["number"].(hexutil.Uint64)), transferTxBlockNumber.Int64()) + s.Require().Equal(int64(blockMap["number"].(hexutil.Uint64)), s.SuccessfulTxTransfer().BlockNumberRpc.Int64()) } diff --git a/eth/rpc/backend/chain_info_test.go b/eth/rpc/backend/chain_info_test.go index d65bbd1ab9..43c28b33e0 100644 --- a/eth/rpc/backend/chain_info_test.go +++ b/eth/rpc/backend/chain_info_test.go @@ -22,7 +22,8 @@ func (s *BackendSuite) TestChainConfig() { } func (s *BackendSuite) TestBaseFeeWei() { - resBlock, err := s.backend.TendermintBlockResultByNumber(transferTxBlockNumber.TmHeight()) + resBlock, err := s.backend.TendermintBlockResultByNumber( + s.SuccessfulTxTransfer().BlockNumberRpc.TmHeight()) s.Require().NoError(err) baseFeeWei, err := s.backend.BaseFeeWei(resBlock) s.Require().NoError(err) @@ -33,7 +34,9 @@ func (s *BackendSuite) TestCurrentHeader() { currentHeader, err := s.backend.CurrentHeader() s.Require().NoError(err) s.Require().NotNil(currentHeader) - s.Require().GreaterOrEqual(currentHeader.Number.Int64(), transferTxBlockNumber.Int64()) + s.Require().GreaterOrEqual( + currentHeader.Number.Int64(), + s.SuccessfulTxTransfer().BlockNumberRpc.Int64()) } func (s *BackendSuite) TestPendingTransactions() { diff --git a/eth/rpc/backend/tracing_test.go b/eth/rpc/backend/tracing_test.go index 48b3045878..c8c8bbabd1 100644 --- a/eth/rpc/backend/tracing_test.go +++ b/eth/rpc/backend/tracing_test.go @@ -70,7 +70,7 @@ func (s *BackendSuite) TestTraceTransaction() { func (s *BackendSuite) TestTraceBlock() { tmBlockWithTx, err := s.backend.TendermintBlockByNumber( - s.SuccessfulTxTransfer().BlockNumberRpc(), + *s.SuccessfulTxTransfer().BlockNumberRpc, ) s.Require().NoError(err) @@ -101,14 +101,14 @@ func (s *BackendSuite) TestTraceBlock() { }, { name: "happy: TraceBlock, transfer tx, tracer: callTracer", - blockNumber: transferTxBlockNumber, + blockNumber: *s.SuccessfulTxTransfer().BlockNumberRpc, tmBlock: tmBlockWithTx, txCount: 1, traceConfig: traceConfigCallTracer(), }, { name: "happy: TraceBlock, transfer tx, tracer: default", - blockNumber: transferTxBlockNumber, + blockNumber: *s.SuccessfulTxTransfer().BlockNumberRpc, tmBlock: tmBlockWithTx, txCount: 1, traceConfig: traceConfigDefaultTracer(), diff --git a/eth/rpc/backend/tx_info_test.go b/eth/rpc/backend/tx_info_test.go index 53a45e9801..148f712923 100644 --- a/eth/rpc/backend/tx_info_test.go +++ b/eth/rpc/backend/tx_info_test.go @@ -89,7 +89,8 @@ func (s *BackendSuite) TestGetTransactionReceipt() { } func (s *BackendSuite) TestGetTransactionByBlockHashAndIndex() { - blockWithTx, err := s.backend.GetBlockByNumber(transferTxBlockNumber, false) + blockWithTx, err := s.backend.GetBlockByNumber( + *s.SuccessfulTxTransfer().BlockNumberRpc, false) s.Require().NoError(err) blockHash := gethcommon.BytesToHash(blockWithTx["hash"].(hexutil.Bytes)) @@ -142,7 +143,7 @@ func (s *BackendSuite) TestGetTransactionByBlockNumberAndIndex() { }{ { name: "happy: tx found", - blockNumber: transferTxBlockNumber, + blockNumber: *s.SuccessfulTxTransfer().BlockNumberRpc, txIndex: 0, wantTxFound: true, }, @@ -154,7 +155,7 @@ func (s *BackendSuite) TestGetTransactionByBlockNumberAndIndex() { }, { name: "sad: tx not found", - blockNumber: transferTxBlockNumber, + blockNumber: *s.SuccessfulTxTransfer().BlockNumberRpc, txIndex: 9999, wantTxFound: false, }, diff --git a/eth/rpc/backend/utils_test.go b/eth/rpc/backend/utils_test.go index 8db9162093..77a0440bff 100644 --- a/eth/rpc/backend/utils_test.go +++ b/eth/rpc/backend/utils_test.go @@ -13,7 +13,7 @@ import ( ) func (s *BackendSuite) TestGetLogsFromBlockResults() { - blockWithTx := s.SuccessfulTxDeployContract().BlockNumberRpc().Int64() + blockWithTx := s.SuccessfulTxDeployContract().BlockNumberRpc.Int64() blockResults, err := s.backend.TendermintBlockResultByNumber(&blockWithTx) s.Require().NoError(err) s.Require().NotNil(blockResults) From b12c04b1e93ed139ba2dfdb4496b3e8fac93fe0a Mon Sep 17 00:00:00 2001 From: Unique Divine Date: Thu, 17 Apr 2025 21:52:21 -0500 Subject: [PATCH 06/11] refactor(evm): VerifyFee MUST use the same gethparams.Rules as the EVM --- app/evmante/evmante_gas_consume.go | 2 +- x/evm/const.go | 10 ++++----- x/evm/evmtest/test_deps.go | 4 +--- x/evm/keeper/gas_fees.go | 26 ++++++++++++++++++----- x/evm/keeper/gas_fees_test.go | 4 ++-- x/evm/precompile/funtoken.go | 34 +++++++++++++++++------------- x/evm/precompile/oracle.go | 6 +++++- x/evm/precompile/wasm.go | 30 ++++++++++++++------------ 8 files changed, 71 insertions(+), 45 deletions(-) diff --git a/app/evmante/evmante_gas_consume.go b/app/evmante/evmante_gas_consume.go index 01d39668e3..150b2f9e29 100644 --- a/app/evmante/evmante_gas_consume.go +++ b/app/evmante/evmante_gas_consume.go @@ -100,7 +100,7 @@ func (anteDec AnteDecEthGasConsume) AnteHandle( fees, err := keeper.VerifyFee( txData, baseFeeMicronibiPerGas, - ctx.IsCheckTx(), + ctx, ) if err != nil { return ctx, errors.Wrapf(err, "failed to verify the fees") diff --git a/x/evm/const.go b/x/evm/const.go index d2c9728880..3eee3e07d4 100644 --- a/x/evm/const.go +++ b/x/evm/const.go @@ -140,6 +140,7 @@ func WeiToNative(weiAmount *big.Int) (evmDenomAmount *big.Int) { // WeiToNativeMustU256 is identical to [WeiToNative], except it returns a // [uint256.Int] instead of a [big.Int]. +// // NOTE: It's okay to panic on overflow here because NIBI has a max supply of // 1.5 billion. That means the highest amount of NIBI is in wei units is // 1.5 * 10^{9} * 10^{18} == 1.5 * 10^{27}, @@ -149,16 +150,15 @@ func WeiToNativeMustU256(wei *big.Int) (evmDenomAmount *uint256.Int) { weiSign := wei.Sign() if weiSign < 0 { panic(fmt.Errorf( - "uint256 cannot be parsed from the negative big.Int %s", wei), + "uint256 error: uint256 cannot be parsed from the negative big.Int %s", wei), ) } - nBig := WeiToNative(wei) // <- The output value - evmDenomAmount, isOverflow := uint256.FromBig(new(big.Int).Abs(nBig)) + bigM := WeiToNative(wei) // <- The output value + evmDenomAmount, isOverflow := uint256.FromBig(new(big.Int).Abs(bigM)) if isOverflow { - // TODO: Is there a better strategy than panicking here? panic(fmt.Errorf( - "uint256 overflow occurred for big.Int value %s", wei), + "uint256 error: uint256 overflow occurred for big.Int value %s", wei), ) } return evmDenomAmount diff --git a/x/evm/evmtest/test_deps.go b/x/evm/evmtest/test_deps.go index 1d25d77b85..43d3a648e9 100644 --- a/x/evm/evmtest/test_deps.go +++ b/x/evm/evmtest/test_deps.go @@ -49,13 +49,11 @@ func (deps TestDeps) NewStateDB() *statedb.StateDB { func (deps TestDeps) NewEVM() (*vm.EVM, *statedb.StateDB) { stateDB := deps.EvmKeeper.NewStateDB(deps.Ctx, statedb.NewEmptyTxConfig(gethcommon.BytesToHash(deps.Ctx.HeaderHash()))) - loggerConfig := &logger.Config{Debug: true} evmObj := deps.EvmKeeper.NewEVM( deps.Ctx, MOCK_GETH_MESSAGE, deps.EvmKeeper.GetEVMConfig(deps.Ctx), - logger.NewStructLogger(loggerConfig).Hooks(), - // logger.NewJSONLogger(loggerConfig, os.Stdout), + logger.NewStructLogger(&logger.Config{Debug: true}).Hooks(), stateDB, ) return evmObj, stateDB diff --git a/x/evm/keeper/gas_fees.go b/x/evm/keeper/gas_fees.go index c9e35d97b5..fc96c7a95b 100644 --- a/x/evm/keeper/gas_fees.go +++ b/x/evm/keeper/gas_fees.go @@ -10,11 +10,14 @@ import ( errortypes "github.com/cosmos/cosmos-sdk/types/errors" authante "github.com/cosmos/cosmos-sdk/x/auth/ante" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + gethcommon "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" gethcore "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/params" + gethparams "github.com/ethereum/go-ethereum/params" + "github.com/NibiruChain/nibiru/v2/app/appconst" "github.com/NibiruChain/nibiru/v2/x/evm" ) @@ -139,9 +142,13 @@ func (k *Keeper) DeductTxCostsFromUserBalance( func VerifyFee( txData evm.TxData, baseFeeMicronibi *big.Int, - isCheckTx bool, + ctx sdk.Context, ) (sdk.Coins, error) { - isContractCreation := txData.GetTo() == nil + var ( + isContractCreation = txData.GetTo() == nil + isCheckTx = ctx.IsCheckTx() + rules = Rules(ctx) + ) gasLimit := txData.GetGas() @@ -154,9 +161,9 @@ func VerifyFee( txData.GetData(), accessList, isContractCreation, - true, // isHomestead - true, // isEIP2028 - true, // isEIP3860 === isShanghai + rules.IsHomestead, + rules.IsIstanbul, // isEIP2028 === IsInstanbul + rules.IsShanghai, // isEIP3860 === isShanghai ) if err != nil { return nil, errors.Wrapf( @@ -188,3 +195,12 @@ func VerifyFee( return sdk.Coins{{Denom: bankDenom, Amount: sdkmath.NewIntFromBigInt(feeAmtMicronibi)}}, nil } + +func Rules(ctx sdk.Context) gethparams.Rules { + chainConfig := evm.EthereumConfig(appconst.GetEthChainID(ctx.ChainID())) + return chainConfig.Rules( + big.NewInt(ctx.BlockHeight()), + false, // isMerge + evm.ParseBlockTimeUnixU64(ctx), + ) +} diff --git a/x/evm/keeper/gas_fees_test.go b/x/evm/keeper/gas_fees_test.go index 0ee23b00c0..31685f3707 100644 --- a/x/evm/keeper/gas_fees_test.go +++ b/x/evm/keeper/gas_fees_test.go @@ -101,11 +101,11 @@ func (s *Suite) TestVerifyFee() { } }, } { - isCheckTx := true tc := getTestCase() + ctx := sdk.Context{}.WithIsCheckTx(true) s.Run(tc.name, func() { gotCoins, err := evmkeeper.VerifyFee( - tc.txData, tc.baseFeeMicronibi, isCheckTx, + tc.txData, tc.baseFeeMicronibi, ctx, ) if tc.wantErr != "" { s.Require().ErrorContains(err, tc.wantErr) diff --git a/x/evm/precompile/funtoken.go b/x/evm/precompile/funtoken.go index f1ef8f9522..a5fbbda3cb 100644 --- a/x/evm/precompile/funtoken.go +++ b/x/evm/precompile/funtoken.go @@ -55,9 +55,13 @@ const ( // Run runs the precompiled contract func (p precompileFunToken) Run( evm *vm.EVM, - sender gethcommon.Address, + trueCaller gethcommon.Address, + // Note that we use "trueCaller" here to differentiate between a delegate + // caller ("parent.CallerAddress" in geth) and "contract.CallerAddress" + // because these two addresses may differ. contract *vm.Contract, readonly bool, + // isDelegatedCall: Flag to add conditional logic specific to delegate calls isDelegatedCall bool, ) (bz []byte, err error) { defer func() { @@ -76,7 +80,7 @@ func (p precompileFunToken) Run( method := startResult.Method switch PrecompileMethod(method.Name) { case FunTokenMethod_sendToBank: - bz, err = p.sendToBank(startResult, sender, readonly, evm) + bz, err = p.sendToBank(startResult, trueCaller, readonly, evm) case FunTokenMethod_balance: bz, err = p.balance(startResult, contract, evm) case FunTokenMethod_bankBalance: @@ -84,9 +88,9 @@ func (p precompileFunToken) Run( case FunTokenMethod_whoAmI: bz, err = p.whoAmI(startResult, contract) case FunTokenMethod_sendToEvm: - bz, err = p.sendToEvm(startResult, sender, readonly, evm) + bz, err = p.sendToEvm(startResult, trueCaller, readonly, evm) case FunTokenMethod_bankMsgSend: - bz, err = p.bankMsgSend(startResult, sender, readonly) + bz, err = p.bankMsgSend(startResult, trueCaller, readonly) case FunTokenMethod_getErc20Address: bz, err = p.getErc20Address(startResult, contract) default: @@ -146,7 +150,7 @@ type precompileFunToken struct { // module. func (p precompileFunToken) sendToBank( startResult OnRunStartResult, - sender gethcommon.Address, + caller gethcommon.Address, readOnly bool, evmObj *vm.EVM, ) (bz []byte, err error) { @@ -181,10 +185,10 @@ func (p precompileFunToken) sendToBank( return nil, fmt.Errorf("recipient address invalid (%s): %w", to, err) } - // Sender transfers ERC20 to the EVM module account + // Caller transfers ERC20 to the EVM module account gotAmount, _, err := p.evmKeeper.ERC20().Transfer( erc20, /*erc20*/ - sender, /*from*/ + caller, /*from*/ evm.EVM_MODULE_ADDRESS, /*to*/ amount, /*value*/ ctx, @@ -193,7 +197,7 @@ func (p precompileFunToken) sendToBank( if err != nil { return nil, fmt.Errorf( "error in ERC20.transfer from caller to EVM account: %w: from %s, erc20 %s, amount: %s", - err, sender, erc20, amount, + err, caller, erc20, amount, ) } @@ -216,7 +220,7 @@ func (p precompileFunToken) sendToBank( err = p.evmKeeper.Bank.MintCoins(ctx, evm.ModuleName, sdk.NewCoins(coinToSend)) if err != nil { return nil, fmt.Errorf("mint failed for module \"%s\" (%s): contract caller %s: %w", - evm.ModuleName, evm.EVM_MODULE_ADDRESS.Hex(), sender.Hex(), err, + evm.ModuleName, evm.EVM_MODULE_ADDRESS.Hex(), caller.Hex(), err, ) } } @@ -235,7 +239,7 @@ func (p precompileFunToken) sendToBank( ) if err != nil { return nil, fmt.Errorf("send failed for module \"%s\" (%s): contract caller %s: %w", - evm.ModuleName, evm.EVM_MODULE_ADDRESS.Hex(), sender.Hex(), err, + evm.ModuleName, evm.EVM_MODULE_ADDRESS.Hex(), caller.Hex(), err, ) } @@ -543,7 +547,7 @@ func (p precompileFunToken) parseArgsWhoAmI(args []any) ( // the EVM side. func (p precompileFunToken) sendToEvm( startResult OnRunStartResult, - sender gethcommon.Address, + caller gethcommon.Address, readOnly bool, evmObj *vm.EVM, ) ([]byte, error) { @@ -579,11 +583,11 @@ func (p precompileFunToken) sendToEvm( // 1) remove (burn or escrow) the bank coin from caller coinToSend := sdk.NewCoin(funtoken.BankDenom, math.NewIntFromBigInt(amount)) - senderBech32 := eth.EthAddrToNibiruAddr(sender) + callerBech32 := eth.EthAddrToNibiruAddr(caller) // bank send from account => module if err := p.evmKeeper.Bank.SendCoinsFromAccountToModule( - ctx, senderBech32, evm.ModuleName, sdk.NewCoins(coinToSend), + ctx, callerBech32, evm.ModuleName, sdk.NewCoins(coinToSend), ); err != nil { return nil, fmt.Errorf("failed to send coins to module: %w", err) } @@ -694,7 +698,7 @@ func parseToAddr(toStr string) (gethcommon.Address, error) { func (p precompileFunToken) bankMsgSend( startResult OnRunStartResult, - sender gethcommon.Address, + caller gethcommon.Address, readOnly bool, ) ([]byte, error) { ctx, method, args := startResult.CacheCtx, startResult.Method, startResult.Args @@ -713,7 +717,7 @@ func (p precompileFunToken) bankMsgSend( if e != nil { return nil, e } - fromBech32 := eth.EthAddrToNibiruAddr(sender) + fromBech32 := eth.EthAddrToNibiruAddr(caller) toBech32 := eth.EthAddrToNibiruAddr(toEthAddr) // do the bank send diff --git a/x/evm/precompile/oracle.go b/x/evm/precompile/oracle.go index 20641239da..40b97898b7 100644 --- a/x/evm/precompile/oracle.go +++ b/x/evm/precompile/oracle.go @@ -41,9 +41,13 @@ const ( // Run runs the precompiled contract func (p precompileOracle) Run( evm *vm.EVM, - sender gethcommon.Address, + trueCaller gethcommon.Address, + // Note that we use "trueCaller" here to differentiate between a delegate + // caller ("parent.CallerAddress" in geth) and "contract.CallerAddress" + // because these two addresses may differ. contract *vm.Contract, readonly bool, + // isDelegatedCall: Flag to add conditional logic specific to delegate calls isDelegatedCall bool, ) (bz []byte, err error) { defer func() { diff --git a/x/evm/precompile/wasm.go b/x/evm/precompile/wasm.go index af9619fc57..56f869e284 100644 --- a/x/evm/precompile/wasm.go +++ b/x/evm/precompile/wasm.go @@ -36,9 +36,13 @@ const ( // Run runs the precompiled contract func (p precompileWasm) Run( evm *vm.EVM, - sender gethcommon.Address, + trueCaller gethcommon.Address, + // Note that we use "trueCaller" here to differentiate between a delegate + // caller ("parent.CallerAddress" in geth) and "contract.CallerAddress" + // because these two addresses may differ. contract *vm.Contract, readonly bool, + // isDelegatedCall: Flag to add conditional logic specific to delegate calls isDelegatedCall bool, ) (bz []byte, err error) { defer func() { @@ -56,13 +60,13 @@ func (p precompileWasm) Run( switch PrecompileMethod(startResult.Method.Name) { case WasmMethod_execute: - bz, err = p.execute(startResult, sender, readonly) + bz, err = p.execute(startResult, trueCaller, readonly) case WasmMethod_query: bz, err = p.query(startResult, contract) case WasmMethod_instantiate: - bz, err = p.instantiate(startResult, sender, readonly) + bz, err = p.instantiate(startResult, trueCaller, readonly) case WasmMethod_executeMulti: - bz, err = p.executeMulti(startResult, sender, readonly) + bz, err = p.executeMulti(startResult, trueCaller, readonly) case WasmMethod_queryRaw: bz, err = p.queryRaw(startResult, contract) default: @@ -155,7 +159,7 @@ func PrecompileWasm(keepers keepers.PublicKeepers) NibiruCustomPrecompile { // uncommon to use this field, so you'll pass an empty array most of the time. func (p precompileWasm) execute( start OnRunStartResult, - sender gethcommon.Address, + caller gethcommon.Address, readOnly bool, ) (bz []byte, err error) { method, args, ctx := start.Method, start.Args, start.CacheCtx @@ -173,7 +177,7 @@ func (p precompileWasm) execute( err = ErrInvalidArgs(err) return } - data, err := p.Wasm.Execute(ctx, wasmContract, eth.EthAddrToNibiruAddr(sender), msgArgsBz, funds) + data, err := p.Wasm.Execute(ctx, wasmContract, eth.EthAddrToNibiruAddr(caller), msgArgsBz, funds) if err != nil { return } @@ -239,7 +243,7 @@ func (p precompileWasm) query( // ``` func (p precompileWasm) instantiate( start OnRunStartResult, - sender gethcommon.Address, + caller gethcommon.Address, readOnly bool, ) (bz []byte, err error) { method, args, ctx := start.Method, start.Args, start.CacheCtx @@ -252,8 +256,8 @@ func (p precompileWasm) instantiate( return nil, err } - senderBech32 := eth.EthAddrToNibiruAddr(sender) - txMsg, err := p.parseArgsWasmInstantiate(args, senderBech32.String()) + callerBech32 := eth.EthAddrToNibiruAddr(caller) + txMsg, err := p.parseArgsWasmInstantiate(args, callerBech32.String()) if err != nil { err = ErrInvalidArgs(err) return @@ -264,7 +268,7 @@ func (p precompileWasm) instantiate( adminAddr = sdk.MustAccAddressFromBech32(txMsg.Admin) // validated in parse } contractAddr, data, err := p.Wasm.Instantiate( - ctx, txMsg.CodeID, senderBech32, adminAddr, txMsg.Msg, txMsg.Label, txMsg.Funds, + ctx, txMsg.CodeID, callerBech32, adminAddr, txMsg.Msg, txMsg.Label, txMsg.Funds, ) if err != nil { return @@ -290,7 +294,7 @@ func (p precompileWasm) instantiate( // ``` func (p precompileWasm) executeMulti( start OnRunStartResult, - sender gethcommon.Address, + caller gethcommon.Address, readOnly bool, ) (bz []byte, err error) { method, args, ctx := start.Method, start.Args, start.CacheCtx @@ -308,7 +312,7 @@ func (p precompileWasm) executeMulti( err = ErrInvalidArgs(err) return } - senderBech32 := eth.EthAddrToNibiruAddr(sender) + callerBech32 := eth.EthAddrToNibiruAddr(caller) var responses [][]byte for i, m := range wasmExecMsgs { @@ -329,7 +333,7 @@ func (p precompileWasm) executeMulti( Amount: sdk.NewIntFromBigInt(fund.Amount), }) } - respBz, e := p.Wasm.Execute(ctx, wasmContract, senderBech32, m.MsgArgs, funds) + respBz, e := p.Wasm.Execute(ctx, wasmContract, callerBech32, m.MsgArgs, funds) if e != nil { err = fmt.Errorf("Execute failed at index %d: %w", i, e) return From 2d82c81990fd4e1a06da5dc0575edd1c92ea3877 Mon Sep 17 00:00:00 2001 From: Tomass <155266802+zeroprooff@users.noreply.github.com> Date: Sat, 19 Apr 2025 23:45:04 +0300 Subject: [PATCH 07/11] docs: remove consecutive duplicate words (#2285) * Update LEGACY-CHANGELOG.md * Update HACKING.md --- LEGACY-CHANGELOG.md | 2 +- x/evm/embeds/HACKING.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/LEGACY-CHANGELOG.md b/LEGACY-CHANGELOG.md index db38dedbd2..f86209260d 100644 --- a/LEGACY-CHANGELOG.md +++ b/LEGACY-CHANGELOG.md @@ -216,7 +216,7 @@ NOTE: It's pragmatic to assume that any change prior to v1.0.0 was state machine - [#1459](https://github.com/NibiruChain/nibiru/pull/1459) - fix(spot): wire `x/spot` msgService into app router - [#1452](https://github.com/NibiruChain/nibiru/pull/1452) - fix(oracle): continue with abci hook during error - [#1451](https://github.com/NibiruChain/nibiru/pull/1451) - fix(perp): decrease position with zero size -- [#1446](https://github.com/NibiruChain/nibiru/pull/1446) - fix(cmd): Add custom InitCmd to set set desired Tendermint consensus params for each node. +- [#1446](https://github.com/NibiruChain/nibiru/pull/1446) - fix(cmd): Add custom InitCmd to set desired Tendermint consensus params for each node. - [#1441](https://github.com/NibiruChain/nibiru/pull/1441) - fix(oracle): ignore abstain votes in std dev calculation - [#1425](https://github.com/NibiruChain/nibiru/pull/1425) - fix: remove positions from state when closed with reverse position - [#1423](https://github.com/NibiruChain/nibiru/pull/1423) - fix: remove panics from abci hooks diff --git a/x/evm/embeds/HACKING.md b/x/evm/embeds/HACKING.md index c9789debdd..abaf6e6ccd 100644 --- a/x/evm/embeds/HACKING.md +++ b/x/evm/embeds/HACKING.md @@ -46,7 +46,7 @@ Example from IHooks.sol: /// @param sender The initial msg.sender for the remove liquidity call /// @param key The key for the pool /// @param params The parameters for removing liquidity -/// @param hookData Arbitrary data handed into the PoolManager by the liquidity provider to be be passed on to the hook +/// @param hookData Arbitrary data handed into the PoolManager by the liquidity provider to be passed on to the hook /// @return bytes4 The function selector for the hook function beforeRemoveLiquidity( address sender, From 36b5160e7332a512b565c23609cfd9a230957e32 Mon Sep 17 00:00:00 2001 From: tsinghuacoder Date: Sun, 20 Apr 2025 04:46:03 +0800 Subject: [PATCH 08/11] chore: fix function name in comment (#2273) Signed-off-by: tsinghuacoder Co-authored-by: Kevin Yang <5478483+k-yang@users.noreply.github.com> --- x/tokenfactory/types/tx_msgs_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x/tokenfactory/types/tx_msgs_test.go b/x/tokenfactory/types/tx_msgs_test.go index c71033c7f9..42cd7855be 100644 --- a/x/tokenfactory/types/tx_msgs_test.go +++ b/x/tokenfactory/types/tx_msgs_test.go @@ -37,7 +37,7 @@ func (vbt ValidateBasicTest) test() func(t *testing.T) { } } -// TestMsgMint_ValidateBasic: Tests if MsgCreateDenom is properly validated. +// TestMsgCreateDenom_ValidateBasic: Tests if MsgCreateDenom is properly validated. func TestMsgCreateDenom_ValidateBasic(t *testing.T) { addr := testutil.AccAddress().String() for _, tc := range []ValidateBasicTest{ @@ -70,7 +70,7 @@ func TestMsgCreateDenom_ValidateBasic(t *testing.T) { } } -// TestMsgMint_ValidateBasic: Tests if MsgChangeAdmin is properly validated. +// TestMsgChangeAdmin_ValidateBasic: Tests if MsgChangeAdmin is properly validated. func TestMsgChangeAdmin_ValidateBasic(t *testing.T) { sbf := testutil.AccAddress().String() validDenom := fmt.Sprintf("tf/%s/ftt", sbf) From 6f4821ae0f97701534074a4c81d63e5c16439ab8 Mon Sep 17 00:00:00 2001 From: Dmitry <98899785+mdqst@users.noreply.github.com> Date: Sun, 20 Apr 2025 00:10:34 +0300 Subject: [PATCH 09/11] chore: fix typo in RewardBand description (#2234) Co-authored-by: Unique Divine <51418232+Unique-Divine@users.noreply.github.com> --- proto/nibiru/oracle/v1/oracle.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proto/nibiru/oracle/v1/oracle.proto b/proto/nibiru/oracle/v1/oracle.proto index 76378ff904..839154722a 100644 --- a/proto/nibiru/oracle/v1/oracle.proto +++ b/proto/nibiru/oracle/v1/oracle.proto @@ -21,7 +21,7 @@ message Params { (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false ]; - // RewardBand defines a maxium divergence that a price vote can have from the + // RewardBand defines a maximum divergence that a price vote can have from the // weighted median in the ballot. If a vote lies within the valid range // defined by: // μ := weightedMedian, From a27954c8e7e402b2a398ebc9acc7fdf3a3f331c9 Mon Sep 17 00:00:00 2001 From: Kevin Yang <5478483+k-yang@users.noreply.github.com> Date: Mon, 21 Apr 2025 11:00:23 -0700 Subject: [PATCH 10/11] Update CHANGELOG.md --- CHANGELOG.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b6ed5d5f7..990588a3d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,14 +42,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#2271](https://github.com/NibiruChain/nibiru/pull/2271) - fix(ci): update tag-pattern for changelog step in releases - [#2270](https://github.com/NibiruChain/nibiru/pull/2270) - refactor(app): remove private keeper struct and transient/mem keys from app -<<<<<<< HEAD - [#2274](https://github.com/NibiruChain/nibiru/pull/2274) - feat(evm)!: update to geth v1.13 with EIP-1153, PRECOMPILE_ADDRS, and transient storage support - [#2275](https://github.com/NibiruChain/nibiru/pull/2275) - feat(evm)!: update -to geth v1.14 with tracing updates and new StateDB methods. - - This upgrade keeps Nibiru's EVM on the Berlin upgrade to avoid +to geth v1.14 with tracing updates and new StateDB methods. + - This upgrade keeps Nibiru's EVM on the Berlin upgrade to avoid incompatibilities stemming from functionality specific to Ethereum's consesnus setup. Namely, blobs (Cancun) and Verkle additions for zkEVM. - - The jump to v1.14 was necessary to use an up-to-date "cockroach/pebble" DB + - The jump to v1.14 was necessary to use an up-to-date "cockroach/pebble" DB dependency and leverage new generics features added in Go 1.23+. - [#2288](https://github.com/NibiruChain/nibiru/pull/2288) - chore(ci): add workflow to check for missing upgrade handler - [#2278](https://github.com/NibiruChain/nibiru/pull/2278) - chore: migrate to cosmossdk.io/mathLegacyDec and cosmossdk.io/math.Int From 7b0e33410b11c9b5a7f0c816a116565d7f7d7bf1 Mon Sep 17 00:00:00 2001 From: Unique Divine <51418232+Unique-Divine@users.noreply.github.com> Date: Mon, 21 Apr 2025 14:22:57 -0500 Subject: [PATCH 11/11] fix(eth-rpc): error propagation fixes and tests for the methods exposed by Nibiru's EVM JSON-RPC (#2289) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * test(rpcapi): prevent more regressions with runtime service inspection * fix(backend): fix error propagation * fix(eth): error propagation fixes and tests for the methods exposed by Nibiru's EVM JSON-RPC Replace legacy error aliases throughout the eth module with sdkioerrors.Wrapf and sdkerrors.Err* to ensure consistent wrapping of Cosmos SDK errors. Simplify EVM backend error reporting by using fmt.Errorf with clear method prefixes (e.g. “BlockNumberError”, “RPCBlockFromTendermintBlock error”) and defaulting the base fee to evm.BASE_FEE_WEI. Suppress pruning‑related bloom errors by returning empty blooms when data is missing. Unify RPC transaction conversion logic by renaming NewRPCTxFromMsg to NewRPCTxFromMsgEthTx, retiring the older NewRPCTxFromEthTx, and centralizing signer and signature‑value extraction. Refactor BackendSuite tests to use a SuccessfulTx map for structured receipt capture—eliminating global variables and improving setup clarity. Stub out unimplemented debugapi methods with context‑aware signatures and adjust filters, tracing, and utils to inline BlockBloom usage and align imports (e.g. eip1559, tracers) with modern patterns. * chore: changelog PR number --- CHANGELOG.md | 1 + eth/assert.go | 12 +- eth/crypto/ethsecp256k1/ethsecp256k1.go | 6 +- eth/eip712/eip712_legacy.go | 12 +- eth/eip712/message.go | 22 +-- eth/eip712/types.go | 16 +-- eth/errors.go | 6 +- eth/indexer/evm_tx_indexer.go | 22 +-- eth/rpc/backend/account_info.go | 5 +- eth/rpc/backend/backend_suite_test.go | 5 +- eth/rpc/backend/blocks.go | 180 +++++++++++------------- eth/rpc/backend/blocks_test.go | 6 +- eth/rpc/backend/call_tx.go | 4 +- eth/rpc/backend/chain_info_test.go | 9 -- eth/rpc/backend/tx_info.go | 35 ++--- eth/rpc/backend/utils.go | 5 +- eth/rpc/rpc.go | 101 +++++-------- eth/rpc/rpcapi/apis.go | 89 ++++++++++++ eth/rpc/rpcapi/debugapi/api.go | 134 +++++++++++++++++- eth/rpc/rpcapi/debugapi/trace.go | 6 +- eth/rpc/rpcapi/eth_api.go | 84 ++++++----- eth/rpc/rpcapi/eth_api_test.go | 121 +++++++++++++++- eth/rpc/rpcapi/event_subscriber_test.go | 11 +- eth/rpc/rpcapi/filters.go | 11 +- eth/safe_math.go | 6 +- evm-e2e/test/debug_queries.test.ts | 2 +- go.mod | 9 ++ go.sum | 4 - x/common/error.go | 8 -- 29 files changed, 601 insertions(+), 331 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 990588a3d7..1f26c47562 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,6 +50,7 @@ to geth v1.14 with tracing updates and new StateDB methods. setup. Namely, blobs (Cancun) and Verkle additions for zkEVM. - The jump to v1.14 was necessary to use an up-to-date "cockroach/pebble" DB dependency and leverage new generics features added in Go 1.23+. +- [#2289](https://github.com/NibiruChain/nibiru/pull/2289) - fix(eth-rpc): error propagation fixes and tests for the methods exposed by Nibiru's EVM JSON-RPC - [#2288](https://github.com/NibiruChain/nibiru/pull/2288) - chore(ci): add workflow to check for missing upgrade handler - [#2278](https://github.com/NibiruChain/nibiru/pull/2278) - chore: migrate to cosmossdk.io/mathLegacyDec and cosmossdk.io/math.Int diff --git a/eth/assert.go b/eth/assert.go index 09e5bd3284..57c47ae9e2 100644 --- a/eth/assert.go +++ b/eth/assert.go @@ -4,8 +4,8 @@ package eth import ( "bytes" - errorsmod "cosmossdk.io/errors" - errortypes "github.com/cosmos/cosmos-sdk/types/errors" + sdkioerrors "cosmossdk.io/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/ethereum/go-ethereum/common" ) @@ -22,8 +22,8 @@ func IsZeroAddress(address string) bool { // ValidateAddress returns an error if the provided string is either not a hex formatted string address func ValidateAddress(address string) error { if !common.IsHexAddress(address) { - return errorsmod.Wrapf( - errortypes.ErrInvalidAddress, "address '%s' is not a valid ethereum hex address", + return sdkioerrors.Wrapf( + sdkerrors.ErrInvalidAddress, "address '%s' is not a valid ethereum hex address", address, ) } @@ -34,8 +34,8 @@ func ValidateAddress(address string) error { // formatted string address or is equal to zero func ValidateNonZeroAddress(address string) error { if IsZeroAddress(address) { - return errorsmod.Wrapf( - errortypes.ErrInvalidAddress, "address '%s' must not be zero", + return sdkioerrors.Wrapf( + sdkerrors.ErrInvalidAddress, "address '%s' must not be zero", address, ) } diff --git a/eth/crypto/ethsecp256k1/ethsecp256k1.go b/eth/crypto/ethsecp256k1/ethsecp256k1.go index 7a341931e2..5b2b2a56b5 100644 --- a/eth/crypto/ethsecp256k1/ethsecp256k1.go +++ b/eth/crypto/ethsecp256k1/ethsecp256k1.go @@ -8,11 +8,11 @@ import ( "crypto/subtle" "fmt" - errorsmod "cosmossdk.io/errors" + sdkioerrors "cosmossdk.io/errors" tmcrypto "github.com/cometbft/cometbft/crypto" "github.com/cosmos/cosmos-sdk/codec" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - errortypes "github.com/cosmos/cosmos-sdk/types/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/ethereum/go-ethereum/crypto" "github.com/NibiruChain/nibiru/v2/eth/eip712" @@ -186,7 +186,7 @@ func (pubKey PubKey) MarshalAmino() ([]byte, error) { // UnmarshalAmino overrides Amino binary marshaling. func (pubKey *PubKey) UnmarshalAmino(bz []byte) error { if len(bz) != PubKeySize { - return errorsmod.Wrapf(errortypes.ErrInvalidPubKey, "invalid pubkey size, expected %d, got %d", PubKeySize, len(bz)) + return sdkioerrors.Wrapf(sdkerrors.ErrInvalidPubKey, "invalid pubkey size, expected %d, got %d", PubKeySize, len(bz)) } pubKey.Key = bz diff --git a/eth/eip712/eip712_legacy.go b/eth/eip712/eip712_legacy.go index b50f10e5fd..75647c7466 100644 --- a/eth/eip712/eip712_legacy.go +++ b/eth/eip712/eip712_legacy.go @@ -9,12 +9,12 @@ import ( "strings" "time" - errorsmod "cosmossdk.io/errors" + sdkioerrors "cosmossdk.io/errors" sdkmath "cosmossdk.io/math" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" sdk "github.com/cosmos/cosmos-sdk/types" - errortypes "github.com/cosmos/cosmos-sdk/types/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/ethereum/go-ethereum/common" gethmath "github.com/ethereum/go-ethereum/common/math" @@ -41,7 +41,7 @@ func LegacyWrapTxToTypedData( txData := make(map[string]any) if err := json.Unmarshal(data, &txData); err != nil { - return apitypes.TypedData{}, errorsmod.Wrap(errortypes.ErrJSONUnmarshal, "failed to JSON unmarshal data") + return apitypes.TypedData{}, sdkioerrors.Wrap(sdkerrors.ErrJSONUnmarshal, "failed to JSON unmarshal data") } domain := apitypes.TypedDataDomain{ @@ -60,7 +60,7 @@ func LegacyWrapTxToTypedData( if feeDelegation != nil { feeInfo, ok := txData["fee"].(map[string]any) if !ok { - return apitypes.TypedData{}, errorsmod.Wrap(errortypes.ErrInvalidType, "cannot parse fee from tx data") + return apitypes.TypedData{}, sdkioerrors.Wrap(sdkerrors.ErrInvalidType, "cannot parse fee from tx data") } feeInfo["feePayer"] = feeDelegation.FeePayer.String() @@ -369,7 +369,7 @@ func jsonNameFromTag(tag reflect.StructTag) string { func UnpackAny(cdc codectypes.AnyUnpacker, field reflect.Value) (reflect.Type, reflect.Value, error) { anyData, ok := field.Interface().(*codectypes.Any) if !ok { - return nil, reflect.Value{}, errorsmod.Wrapf(errortypes.ErrPackAny, "%T", field.Interface()) + return nil, reflect.Value{}, sdkioerrors.Wrapf(sdkerrors.ErrPackAny, "%T", field.Interface()) } anyWrapper := &CosmosAnyWrapper{ @@ -377,7 +377,7 @@ func UnpackAny(cdc codectypes.AnyUnpacker, field reflect.Value) (reflect.Type, r } if err := cdc.UnpackAny(anyData, &anyWrapper.Value); err != nil { - return nil, reflect.Value{}, errorsmod.Wrap(err, "failed to unpack Any in msg struct") + return nil, reflect.Value{}, sdkioerrors.Wrap(err, "failed to unpack Any in msg struct") } fieldType := reflect.TypeOf(anyWrapper) diff --git a/eth/eip712/message.go b/eth/eip712/message.go index 176d90b564..cdef601b1e 100644 --- a/eth/eip712/message.go +++ b/eth/eip712/message.go @@ -4,8 +4,8 @@ package eip712 import ( "fmt" - errorsmod "cosmossdk.io/errors" - errortypes "github.com/cosmos/cosmos-sdk/types/errors" + sdkioerrors "cosmossdk.io/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/tidwall/gjson" "github.com/tidwall/sjson" @@ -31,12 +31,12 @@ func createEIP712MessagePayload(data []byte) (eip712MessagePayload, error) { payload, numPayloadMsgs, err := FlattenPayloadMessages(basicPayload) if err != nil { - return eip712MessagePayload{}, errorsmod.Wrap(err, "failed to flatten payload JSON messages") + return eip712MessagePayload{}, sdkioerrors.Wrap(err, "failed to flatten payload JSON messages") } message, ok := payload.Value().(map[string]any) if !ok { - return eip712MessagePayload{}, errorsmod.Wrap(errortypes.ErrInvalidType, "failed to parse JSON as map") + return eip712MessagePayload{}, sdkioerrors.Wrap(sdkerrors.ErrInvalidType, "failed to parse JSON as map") } messagePayload := eip712MessagePayload{ @@ -52,13 +52,13 @@ func createEIP712MessagePayload(data []byte) (eip712MessagePayload, error) { // a JSON object, then makes sure the JSON is an object. func unmarshalBytesToJSONObject(data []byte) (gjson.Result, error) { if !gjson.ValidBytes(data) { - return gjson.Result{}, errorsmod.Wrap(errortypes.ErrJSONUnmarshal, "invalid JSON received") + return gjson.Result{}, sdkioerrors.Wrap(sdkerrors.ErrJSONUnmarshal, "invalid JSON received") } payload := gjson.ParseBytes(data) if !payload.IsObject() { - return gjson.Result{}, errorsmod.Wrap(errortypes.ErrJSONUnmarshal, "failed to JSON unmarshal data as object") + return gjson.Result{}, sdkioerrors.Wrap(sdkerrors.ErrJSONUnmarshal, "failed to JSON unmarshal data as object") } return payload, nil @@ -96,11 +96,11 @@ func getPayloadMessages(payload gjson.Result) ([]gjson.Result, error) { rawMsgs := payload.Get(payloadMsgsField) if !rawMsgs.Exists() { - return nil, errorsmod.Wrap(errortypes.ErrInvalidRequest, "no messages found in payload, unable to parse") + return nil, sdkioerrors.Wrap(sdkerrors.ErrInvalidRequest, "no messages found in payload, unable to parse") } if !rawMsgs.IsArray() { - return nil, errorsmod.Wrap(errortypes.ErrInvalidRequest, "expected type array of messages, cannot parse") + return nil, sdkioerrors.Wrap(sdkerrors.ErrInvalidRequest, "expected type array of messages, cannot parse") } return rawMsgs.Array(), nil @@ -112,14 +112,14 @@ func payloadWithNewMessage(payload gjson.Result, msg gjson.Result, index int) (g field := msgFieldForIndex(index) if payload.Get(field).Exists() { - return gjson.Result{}, errorsmod.Wrapf( - errortypes.ErrInvalidRequest, + return gjson.Result{}, sdkioerrors.Wrapf( + sdkerrors.ErrInvalidRequest, "malformed payload received, did not expect to find key at field %v", field, ) } if !msg.IsObject() { - return gjson.Result{}, errorsmod.Wrapf(errortypes.ErrInvalidRequest, "msg at index %d is not valid JSON: %v", index, msg) + return gjson.Result{}, sdkioerrors.Wrapf(sdkerrors.ErrInvalidRequest, "msg at index %d is not valid JSON: %v", index, msg) } newRaw, err := sjson.SetRaw(payload.Raw, field, msg.Raw) diff --git a/eth/eip712/types.go b/eth/eip712/types.go index 82c4dee9ff..86127022a2 100644 --- a/eth/eip712/types.go +++ b/eth/eip712/types.go @@ -10,8 +10,8 @@ import ( "golang.org/x/text/cases" "golang.org/x/text/language" - errorsmod "cosmossdk.io/errors" - errortypes "github.com/cosmos/cosmos-sdk/types/errors" + sdkioerrors "cosmossdk.io/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/ethereum/go-ethereum/signer/core/apitypes" "github.com/tidwall/gjson" @@ -93,7 +93,7 @@ func addMsgTypesToRoot(eip712Types apitypes.Types, msgField string, msg gjson.Re defer doRecover(&err) if !msg.IsObject() { - return errorsmod.Wrapf(errortypes.ErrInvalidRequest, "message is not valid JSON, cannot parse types") + return sdkioerrors.Wrapf(sdkerrors.ErrInvalidRequest, "message is not valid JSON, cannot parse types") } msgRootType, err := msgRootType(msg) @@ -117,7 +117,7 @@ func msgRootType(msg gjson.Result) (string, error) { msgType := msg.Get(msgTypeField).Str if msgType == "" { // .Str is empty for arrays and objects - return "", errorsmod.Wrap(errortypes.ErrInvalidType, "malformed message type value, expected type string") + return "", sdkioerrors.Wrap(sdkerrors.ErrInvalidType, "malformed message type value, expected type string") } // Convert e.g. cosmos-sdk/MsgSend to TypeMsgSend @@ -152,7 +152,7 @@ func recursivelyAddTypesToRoot( // Must sort the JSON keys for deterministic type generation. sortedFieldNames, err := sortedJSONKeys(payload) if err != nil { - return "", errorsmod.Wrap(err, "unable to sort object keys") + return "", sdkioerrors.Wrap(err, "unable to sort object keys") } typeDef := typeDefForPrefix(prefix, rootType) @@ -224,7 +224,7 @@ func recursivelyAddTypesToRoot( // to be used for deterministic iteration. func sortedJSONKeys(json gjson.Result) ([]string, error) { if !json.IsObject() { - return nil, errorsmod.Wrap(errortypes.ErrInvalidType, "expected JSON map to parse") + return nil, sdkioerrors.Wrap(sdkerrors.ErrInvalidType, "expected JSON map to parse") } jsonMap := json.Map() @@ -299,7 +299,7 @@ func addTypesToRoot(typeMap apitypes.Types, typeDef string, types []apitypes.Typ indexAsDuplicate++ if indexAsDuplicate == maxDuplicateTypeDefs { - return "", errorsmod.Wrap(errortypes.ErrInvalidRequest, "exceeded maximum number of duplicates for a single type definition") + return "", sdkioerrors.Wrap(sdkerrors.ErrInvalidRequest, "exceeded maximum number of duplicates for a single type definition") } } @@ -380,7 +380,7 @@ func getEthTypeForJSON(json gjson.Result) string { func doRecover(err *error) { if r := recover(); r != nil { if e, ok := r.(error); ok { - e = errorsmod.Wrap(e, "panicked with error") + e = sdkioerrors.Wrap(e, "panicked with error") *err = e return } diff --git a/eth/errors.go b/eth/errors.go index 8f2ea84f46..26ec807fa1 100644 --- a/eth/errors.go +++ b/eth/errors.go @@ -1,14 +1,14 @@ package eth import ( - sdkerrors "cosmossdk.io/errors" + sdkioerrors "cosmossdk.io/errors" ) var moduleErrorCodeIdx uint32 = 1 -func registerError(msg string) *sdkerrors.Error { +func registerError(msg string) *sdkioerrors.Error { moduleErrorCodeIdx += 1 - return sdkerrors.Register("eth", moduleErrorCodeIdx, msg) + return sdkioerrors.Register("eth", moduleErrorCodeIdx, msg) } // Module "sentinel" errors diff --git a/eth/indexer/evm_tx_indexer.go b/eth/indexer/evm_tx_indexer.go index 0b1ba8966f..947426aa3f 100644 --- a/eth/indexer/evm_tx_indexer.go +++ b/eth/indexer/evm_tx_indexer.go @@ -4,7 +4,7 @@ package indexer import ( "fmt" - errorsmod "cosmossdk.io/errors" + sdkioerrors "cosmossdk.io/errors" dbm "github.com/cometbft/cometbft-db" abci "github.com/cometbft/cometbft/abci/types" "github.com/cometbft/cometbft/libs/log" @@ -122,12 +122,12 @@ func (indexer *EVMTxIndexer) IndexBlock(block *tmtypes.Block, txResults []*abci. ethTxIndex++ if err := saveTxResult(indexer.clientCtx.Codec, batch, txHash, &txResult); err != nil { - return errorsmod.Wrapf(err, "IndexBlock %d", height) + return sdkioerrors.Wrapf(err, "IndexBlock %d", height) } } } if err := batch.Write(); err != nil { - return errorsmod.Wrapf(err, "IndexBlock %d, write batch", block.Height) + return sdkioerrors.Wrapf(err, "IndexBlock %d, write batch", block.Height) } return nil } @@ -146,14 +146,14 @@ func (indexer *EVMTxIndexer) FirstIndexedBlock() (int64, error) { func (indexer *EVMTxIndexer) GetByTxHash(hash common.Hash) (*eth.TxResult, error) { bz, err := indexer.db.Get(TxHashKey(hash)) if err != nil { - return nil, errorsmod.Wrapf(err, "GetByTxHash %s", hash.Hex()) + return nil, sdkioerrors.Wrapf(err, "GetByTxHash %s", hash.Hex()) } if len(bz) == 0 { return nil, fmt.Errorf("tx not found, hash: %s", hash.Hex()) } var txKey eth.TxResult if err := indexer.clientCtx.Codec.Unmarshal(bz, &txKey); err != nil { - return nil, errorsmod.Wrapf(err, "GetByTxHash %s", hash.Hex()) + return nil, sdkioerrors.Wrapf(err, "GetByTxHash %s", hash.Hex()) } return &txKey, nil } @@ -162,7 +162,7 @@ func (indexer *EVMTxIndexer) GetByTxHash(hash common.Hash) (*eth.TxResult, error func (indexer *EVMTxIndexer) GetByBlockAndIndex(blockNumber int64, txIndex int32) (*eth.TxResult, error) { bz, err := indexer.db.Get(TxIndexKey(blockNumber, txIndex)) if err != nil { - return nil, errorsmod.Wrapf(err, "GetByBlockAndIndex %d %d", blockNumber, txIndex) + return nil, sdkioerrors.Wrapf(err, "GetByBlockAndIndex %d %d", blockNumber, txIndex) } if len(bz) == 0 { return nil, fmt.Errorf("tx not found, block: %d, eth-index: %d", blockNumber, txIndex) @@ -186,7 +186,7 @@ func TxIndexKey(blockNumber int64, txIndex int32) []byte { func LoadLastBlock(db dbm.DB) (int64, error) { it, err := db.ReverseIterator([]byte{KeyPrefixTxIndex}, []byte{KeyPrefixTxIndex + 1}) if err != nil { - return 0, errorsmod.Wrap(err, "LoadLastBlock") + return 0, sdkioerrors.Wrap(err, "LoadLastBlock") } defer it.Close() if !it.Valid() { @@ -199,7 +199,7 @@ func LoadLastBlock(db dbm.DB) (int64, error) { func LoadFirstBlock(db dbm.DB) (int64, error) { it, err := db.Iterator([]byte{KeyPrefixTxIndex}, []byte{KeyPrefixTxIndex + 1}) if err != nil { - return 0, errorsmod.Wrap(err, "LoadFirstBlock") + return 0, sdkioerrors.Wrap(err, "LoadFirstBlock") } defer it.Close() if !it.Valid() { @@ -213,7 +213,7 @@ func (indexer *EVMTxIndexer) CloseDBAndExit() error { indexer.logger.Info("Closing EVMTxIndexer DB") err := indexer.db.Close() if err != nil { - return errorsmod.Wrap(err, "CloseDBAndExit") + return sdkioerrors.Wrap(err, "CloseDBAndExit") } return nil } @@ -235,10 +235,10 @@ func isEthTx(tx sdk.Tx) bool { func saveTxResult(codec codec.Codec, batch dbm.Batch, txHash common.Hash, txResult *eth.TxResult) error { bz := codec.MustMarshal(txResult) if err := batch.Set(TxHashKey(txHash), bz); err != nil { - return errorsmod.Wrap(err, "set tx-hash key") + return sdkioerrors.Wrap(err, "set tx-hash key") } if err := batch.Set(TxIndexKey(txResult.Height, txResult.EthTxIndex), txHash.Bytes()); err != nil { - return errorsmod.Wrap(err, "set tx-index key") + return sdkioerrors.Wrap(err, "set tx-index key") } return nil } diff --git a/eth/rpc/backend/account_info.go b/eth/rpc/backend/account_info.go index a0c0cacebd..cee7ff990a 100644 --- a/eth/rpc/backend/account_info.go +++ b/eth/rpc/backend/account_info.go @@ -6,8 +6,7 @@ import ( "math" "math/big" - errorsmod "cosmossdk.io/errors" - + sdkioerrors "cosmossdk.io/errors" sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -204,7 +203,7 @@ func (b *Backend) GetTransactionCount(address gethcommon.Address, blockNum rpc.B currentHeight := int64(bn) //#nosec G701 -- checked for int overflow already if height > currentHeight { - return &n, errorsmod.Wrapf( + return &n, sdkioerrors.Wrapf( sdkerrors.ErrInvalidHeight, "cannot query with height in the future (current: %d, queried: %d); please provide a valid height", currentHeight, height, diff --git a/eth/rpc/backend/backend_suite_test.go b/eth/rpc/backend/backend_suite_test.go index 1b70a1c081..5ed630d9a0 100644 --- a/eth/rpc/backend/backend_suite_test.go +++ b/eth/rpc/backend/backend_suite_test.go @@ -132,7 +132,10 @@ func (s *BackendSuite) SetupSuite() { } for _, tx := range s.SuccessfulTxs { - s.T().Logf("SuccessfulTx{ BlockNumber: %s, BlockHash: %s, TxHash: %s }", tx.BlockNumber, tx.BlockHash.Hex(), tx.Receipt.TxHash.Hex()) + s.T().Logf( + "SuccessfulTx{ BlockNumber: %s, BlockHash: %s, TxHash: %s }", + tx.BlockNumber, tx.BlockHash.Hex(), tx.Receipt.TxHash.Hex(), + ) } } diff --git a/eth/rpc/backend/blocks.go b/eth/rpc/backend/blocks.go index 80a8c469b1..1b62a83a3a 100644 --- a/eth/rpc/backend/blocks.go +++ b/eth/rpc/backend/blocks.go @@ -2,6 +2,7 @@ package backend import ( + "errors" "fmt" "math" "math/big" @@ -16,7 +17,6 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" gethcore "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/trie" - "github.com/pkg/errors" "github.com/status-im/keycard-go/hexutils" "google.golang.org/grpc" "google.golang.org/grpc/metadata" @@ -34,50 +34,72 @@ func (b *Backend) BlockNumber() (hexutil.Uint64, error) { var header metadata.MD _, err := b.queryClient.Params(b.ctx, &evm.QueryParamsRequest{}, grpc.Header(&header)) if err != nil { - return hexutil.Uint64(0), err + return 0, fmt.Errorf("BlockNumberError: failed to query the EVM module params: %w", err) } blockHeightHeader := header.Get(grpctypes.GRPCBlockHeightHeader) if headerLen := len(blockHeightHeader); headerLen != 1 { - return 0, fmt.Errorf("unexpected '%s' gRPC header length; got %d, expected: %d", grpctypes.GRPCBlockHeightHeader, headerLen, 1) + return 0, fmt.Errorf( + "BlockNumberError: unexpected '%s' gRPC header length; got %d, expected: %d", + grpctypes.GRPCBlockHeightHeader, headerLen, 1) } height, err := strconv.ParseUint(blockHeightHeader[0], 10, 64) if err != nil { - return 0, fmt.Errorf("failed to parse block height: %w", err) + return 0, fmt.Errorf("BlockNumberError: failed to parse block height header: %w", err) } if height > math.MaxInt64 { - return 0, fmt.Errorf("block height %d is greater than max uint64", height) + return 0, fmt.Errorf("BlockNumberError: block height %d is greater than max int64", height) } return hexutil.Uint64(height), nil } +var ErrNilBlockSuccess = errors.New("block query succeeded, but the block was nil") + // GetBlockByNumber returns the JSON-RPC compatible Ethereum block identified by // block number. Depending on fullTx it either returns the full transaction // objects or if false only the hashes of the transactions. -func (b *Backend) GetBlockByNumber(blockNum rpc.BlockNumber, fullTx bool) (map[string]any, error) { +func (b *Backend) GetBlockByNumber( + blockNum rpc.BlockNumber, + fullTx bool, +) (block map[string]any, err error) { + defer func() { + if err != nil { + b.logger.Debug("eth_getBlockByNumber failed", "error", err.Error()) + } + }() resBlock, err := b.TendermintBlockByNumber(blockNum) if err != nil { - return nil, nil + return nil, err } // return if requested block height is greater than the current one if resBlock == nil || resBlock.Block == nil { - return nil, nil + currentBlockNum, err := b.BlockNumber() + if err != nil { + return nil, err + //#nosec G701 -- checked for int overflow already + } else if blockNumI64 := blockNum.Int64(); blockNumI64 >= int64(currentBlockNum) { + return nil, fmt.Errorf("requested block number is too high: current block %d, requested block %d", + currentBlockNum, blockNumI64, + ) + } + return nil, fmt.Errorf("requested block %d: %w", blockNum, ErrNilBlockSuccess) } blockRes, err := b.TendermintBlockResultByNumber(&resBlock.Block.Height) if err != nil { - b.logger.Debug("failed to fetch block result from Tendermint", "height", blockNum, "error", err.Error()) - return nil, nil + return nil, fmt.Errorf( + "failed to fetch block result from Tendermint: blockNumber %d: %w", blockNum, err, + ) } res, err := b.RPCBlockFromTendermintBlock(resBlock, blockRes, fullTx) if err != nil { - b.logger.Debug("GetEthBlockFromTendermint failed", "height", blockNum, "error", err.Error()) - return nil, err + return nil, fmt.Errorf( + "RPCBlockFromTendermintBlock error: blockNumber %d: %w", blockNum, err) } return res, nil @@ -85,27 +107,28 @@ func (b *Backend) GetBlockByNumber(blockNum rpc.BlockNumber, fullTx bool) (map[s // GetBlockByHash returns the JSON-RPC compatible Ethereum block identified by // hash. -func (b *Backend) GetBlockByHash(hash gethcommon.Hash, fullTx bool) (map[string]any, error) { - resBlock, err := b.TendermintBlockByHash(hash) +func (b *Backend) GetBlockByHash( + blockHash gethcommon.Hash, + fullTx bool, +) (block map[string]any, err error) { + resBlock, err := b.TendermintBlockByHash(blockHash) if err != nil { return nil, err } if resBlock == nil { - // block not found - return nil, nil + return nil, fmt.Errorf("block not found: blockHash %s", blockHash.Hex()) } blockRes, err := b.TendermintBlockResultByNumber(&resBlock.Block.Height) if err != nil { - b.logger.Debug("failed to fetch block result from Tendermint", "block-hash", hash.String(), "error", err.Error()) - return nil, nil + return nil, fmt.Errorf( + "failed to fetch block result from Tendermint: blockHash %s: %w", blockHash, err) } res, err := b.RPCBlockFromTendermintBlock(resBlock, blockRes, fullTx) if err != nil { - b.logger.Debug("GetEthBlockFromTendermint failed", "hash", hash, "error", err.Error()) - return nil, err + return nil, fmt.Errorf("RPCBlockFromTendermintBlock error: blockHash %s: %w", blockHash, err) } return res, nil @@ -113,21 +136,18 @@ func (b *Backend) GetBlockByHash(hash gethcommon.Hash, fullTx bool) (map[string] // GetBlockTransactionCountByHash returns the number of Ethereum transactions in // the block identified by hash. -func (b *Backend) GetBlockTransactionCountByHash(hash gethcommon.Hash) *hexutil.Uint { +func (b *Backend) GetBlockTransactionCountByHash(blockHash gethcommon.Hash) (*hexutil.Uint, error) { sc, ok := b.clientCtx.Client.(tmrpcclient.SignClient) if !ok { - b.logger.Error("invalid rpc client") + return nil, fmt.Errorf("invalid rpc client of type %T", b.clientCtx.Client) } - block, err := sc.BlockByHash(b.ctx, hash.Bytes()) + block, err := sc.BlockByHash(b.ctx, blockHash.Bytes()) if err != nil { - b.logger.Debug("block not found", "hash", hash.Hex(), "error", err.Error()) - return nil + return nil, fmt.Errorf("block not found: hash %s: %w", blockHash, err) } - if block.Block == nil { - b.logger.Debug("block not found", "hash", hash.Hex()) - return nil + return nil, fmt.Errorf("block not found: hash %s: %w", blockHash, ErrNilBlockSuccess) } return b.GetBlockTransactionCount(block) @@ -135,16 +155,14 @@ func (b *Backend) GetBlockTransactionCountByHash(hash gethcommon.Hash) *hexutil. // GetBlockTransactionCountByNumber returns the number of Ethereum transactions // in the block identified by number. -func (b *Backend) GetBlockTransactionCountByNumber(blockNum rpc.BlockNumber) *hexutil.Uint { +func (b *Backend) GetBlockTransactionCountByNumber(blockNum rpc.BlockNumber) (*hexutil.Uint, error) { block, err := b.TendermintBlockByNumber(blockNum) if err != nil { - b.logger.Debug("block not found", "height", blockNum.Int64(), "error", err.Error()) - return nil + return nil, fmt.Errorf("block not found: height %d: %w", blockNum.Int64(), err) } if block.Block == nil { - b.logger.Debug("block not found", "height", blockNum.Int64()) - return nil + return nil, fmt.Errorf("block not found: height %d: TendermintBlockByNumber query succeeded but returned a nil block", blockNum.Int64()) } return b.GetBlockTransactionCount(block) @@ -152,15 +170,15 @@ func (b *Backend) GetBlockTransactionCountByNumber(blockNum rpc.BlockNumber) *he // GetBlockTransactionCount returns the number of Ethereum transactions in a // given block. -func (b *Backend) GetBlockTransactionCount(block *tmrpctypes.ResultBlock) *hexutil.Uint { +func (b *Backend) GetBlockTransactionCount(block *tmrpctypes.ResultBlock) (*hexutil.Uint, error) { blockRes, err := b.TendermintBlockResultByNumber(&block.Block.Height) if err != nil { - return nil + return nil, err } ethMsgs := b.EthMsgsFromTendermintBlock(block, blockRes) n := hexutil.Uint(len(ethMsgs)) - return &n + return &n, nil } // TendermintBlockByNumber returns a Tendermint-formatted block for a given @@ -177,13 +195,10 @@ func (b *Backend) TendermintBlockByNumber(blockNum rpc.BlockNumber) (*tmrpctypes } resBlock, err := b.clientCtx.Client.Block(b.ctx, &height) if err != nil { - b.logger.Debug("tendermint client failed to get block", "height", height, "error", err.Error()) - return nil, err + return nil, fmt.Errorf("block not found: tendermint client failed to get block %d: %w", height, err) } - if resBlock.Block == nil { - b.logger.Debug("TendermintBlockByNumber block not found", "height", height) - return nil, nil + return nil, fmt.Errorf("block not found: block number %d: %w", height, ErrNilBlockSuccess) } return resBlock, nil @@ -194,7 +209,7 @@ func (b *Backend) TendermintBlockByNumber(blockNum rpc.BlockNumber) (*tmrpctypes func (b *Backend) TendermintBlockResultByNumber(height *int64) (*tmrpctypes.ResultBlockResults, error) { sc, ok := b.clientCtx.Client.(tmrpcclient.SignClient) if !ok { - return nil, errors.New("invalid rpc client") + return nil, fmt.Errorf("invalid rpc client: type %T", b.clientCtx.Client) } return sc.BlockResults(b.ctx, height) } @@ -203,17 +218,21 @@ func (b *Backend) TendermintBlockResultByNumber(height *int64) (*tmrpctypes.Resu func (b *Backend) TendermintBlockByHash(blockHash gethcommon.Hash) (*tmrpctypes.ResultBlock, error) { sc, ok := b.clientCtx.Client.(tmrpcclient.SignClient) if !ok { - return nil, errors.New("invalid rpc client") + return nil, fmt.Errorf("TendermintBlockByHash: invalid RPC client: type %T", b.clientCtx.Client) } resBlock, err := sc.BlockByHash(b.ctx, blockHash.Bytes()) if err != nil { - b.logger.Debug("tendermint client failed to get block", "blockHash", blockHash.Hex(), "error", err.Error()) - return nil, err + return nil, fmt.Errorf( + "TendermintBlockByHash: RPC BlockByHash(%s) failed: %w", + blockHash.Hex(), err, + ) } if resBlock == nil || resBlock.Block == nil { - b.logger.Debug("TendermintBlockByHash block not found", "blockHash", blockHash.Hex()) - return nil, nil + return nil, fmt.Errorf( + "TendermintBlockByHash: block not found: blockHash %s: %w", + blockHash.Hex(), ErrNilBlockSuccess, + ) } return resBlock, nil @@ -244,7 +263,7 @@ func (b *Backend) BlockNumberFromTendermintByHash(blockHash gethcommon.Hash) (*b return nil, err } if resBlock == nil { - return nil, errors.Errorf("block not found for hash %s", blockHash.Hex()) + return nil, fmt.Errorf("block not found for hash %s", blockHash.Hex()) } return big.NewInt(resBlock.Block.Height), nil } @@ -259,14 +278,12 @@ func (b *Backend) EthMsgsFromTendermintBlock( var result []*evm.MsgEthereumTx block := resBlock.Block - txResults := blockRes.TxsResults - for i, tx := range block.Txs { // Check if tx exists on EVM by cross checking with blockResults: // - Include unsuccessful tx that exceeds block gas limit // - Include unsuccessful tx that failed when committing changes to stateDB // - Exclude unsuccessful tx with any other error but ExceedBlockGasLimit - isValidEnough, reason := rpc.TxIsValidEnough(txResults[i]) + isValidEnough, reason := rpc.TxIsValidEnough(blockRes.TxsResults[i]) if !isValidEnough { b.logger.Debug( "invalid tx result code", @@ -278,7 +295,9 @@ func (b *Backend) EthMsgsFromTendermintBlock( tx, err := b.clientCtx.TxConfig.TxDecoder()(tx) if err != nil { - b.logger.Debug("failed to decode transaction in block", "height", block.Height, "error", err.Error()) + b.logger.Debug( + "failed to decode transaction in block", "height", + block.Height, "error", err.Error()) continue } @@ -302,32 +321,23 @@ func (b *Backend) HeaderByNumber(blockNum rpc.BlockNumber) (*gethcore.Header, er return nil, err } - if resBlock == nil { - return nil, errors.Errorf("block not found for height %d", blockNum) - } - blockRes, err := b.TendermintBlockResultByNumber(&resBlock.Block.Height) if err != nil { return nil, fmt.Errorf("block result not found for height %d. %w", resBlock.Block.Height, err) } - bloom, err := b.BlockBloom(blockRes) - if err != nil { - b.logger.Debug("HeaderByNumber BlockBloom failed", "height", resBlock.Block.Height) - } - - baseFeeWei, err := b.BaseFeeWei(blockRes) - if err != nil { - // handle the error for pruned node. - b.logger.Error("failed to fetch Base Fee from prunned block. Check node prunning configuration", "height", resBlock.Block.Height, "error", err) - } + bloom := b.BlockBloom(blockRes) + baseFeeWei := evm.BASE_FEE_WEI ethHeader := rpc.EthHeaderFromTendermint(resBlock.Block.Header, bloom, baseFeeWei) return ethHeader, nil } // BlockBloom query block bloom filter from block results -func (b *Backend) BlockBloom(blockRes *tmrpctypes.ResultBlockResults) (gethcore.Bloom, error) { +func (b *Backend) BlockBloom(blockRes *tmrpctypes.ResultBlockResults) (bloom gethcore.Bloom) { + if blockRes == nil || len(blockRes.EndBlockEvents) == 0 { + return bloom + } msgType := proto.MessageName((*evm.EventBlockBloom)(nil)) for _, event := range blockRes.EndBlockEvents { if event.Type != msgType { @@ -337,11 +347,11 @@ func (b *Backend) BlockBloom(blockRes *tmrpctypes.ResultBlockResults) (gethcore. if err != nil { continue } - return gethcore.BytesToBloom(hexutils.HexToBytes(blockBloomEvent.Bloom)), nil + return gethcore.BytesToBloom(hexutils.HexToBytes(blockBloomEvent.Bloom)) } // Suppressing error as it is expected to be missing for pruned node or for blocks before evm - return gethcore.Bloom{}, nil + return gethcore.Bloom{} } // RPCBlockFromTendermintBlock returns a JSON-RPC compatible Ethereum block from a @@ -353,12 +363,7 @@ func (b *Backend) RPCBlockFromTendermintBlock( ) (map[string]any, error) { ethRPCTxs := []any{} block := resBlock.Block - - baseFeeWei, err := b.BaseFeeWei(blockRes) - if err != nil { - // handle the error for pruned node. - b.logger.Error("failed to fetch Base Fee from prunned block. Check node prunning configuration", "height", block.Height, "error", err) - } + baseFeeWei := evm.BASE_FEE_WEI msgs := b.EthMsgsFromTendermintBlock(resBlock, blockRes) for txIndex, ethMsg := range msgs { @@ -368,11 +373,10 @@ func (b *Backend) RPCBlockFromTendermintBlock( continue } - tx := ethMsg.AsTransaction() height := uint64(block.Height) //#nosec G701 -- checked for int overflow already index := uint64(txIndex) //#nosec G701 -- checked for int overflow already - rpcTx, err := rpc.NewRPCTxFromEthTx( - tx, + rpcTx, err := rpc.NewRPCTxFromMsgEthTx( + ethMsg, gethcommon.BytesToHash(block.Hash()), height, index, @@ -380,16 +384,13 @@ func (b *Backend) RPCBlockFromTendermintBlock( b.chainID, ) if err != nil { - b.logger.Debug("NewTransactionFromData for receipt failed", "hash", tx.Hash().Hex(), "error", err.Error()) + b.logger.Debug("NewTransactionFromData for receipt failed", "hash", ethMsg.Hash, "error", err.Error()) continue } ethRPCTxs = append(ethRPCTxs, rpcTx) } - bloom, err := b.BlockBloom(blockRes) - if err != nil { - b.logger.Debug("failed to query BlockBloom", "height", block.Height, "error", err.Error()) - } + bloom := b.BlockBloom(blockRes) req := &evm.QueryValidatorAccountRequest{ ConsAddress: sdk.ConsAddress(block.Header.ProposerAddress).String(), @@ -467,17 +468,8 @@ func (b *Backend) EthBlockFromTendermintBlock( blockRes *tmrpctypes.ResultBlockResults, ) (*gethcore.Block, error) { block := resBlock.Block - height := block.Height - bloom, err := b.BlockBloom(blockRes) - if err != nil { - b.logger.Debug("HeaderByNumber BlockBloom failed", "height", height) - } - - baseFeeWei, err := b.BaseFeeWei(blockRes) - if err != nil { - // handle error for pruned node and log - b.logger.Error("failed to fetch Base Fee from prunned block. Check node prunning configuration", "height", height, "error", err) - } + bloom := b.BlockBloom(blockRes) + baseFeeWei := evm.BASE_FEE_WEI ethHeader := rpc.EthHeaderFromTendermint(block.Header, bloom, baseFeeWei) msgs := b.EthMsgsFromTendermintBlock(resBlock, blockRes) diff --git a/eth/rpc/backend/blocks_test.go b/eth/rpc/backend/blocks_test.go index 4bbd084f4f..dc08ebdd9e 100644 --- a/eth/rpc/backend/blocks_test.go +++ b/eth/rpc/backend/blocks_test.go @@ -95,13 +95,15 @@ func (s *BackendSuite) TestEthBlockByNumber() { } func (s *BackendSuite) TestGetBlockTransactionCountByHash() { - txCount := s.backend.GetBlockTransactionCountByHash(*s.SuccessfulTxTransfer().BlockHash) + txCount, err := s.backend.GetBlockTransactionCountByHash(*s.SuccessfulTxTransfer().BlockHash) + s.NoError(err) s.Require().Greater((uint64)(*txCount), uint64(0)) } func (s *BackendSuite) TestGetBlockTransactionCountByNumber() { - txCount := s.backend.GetBlockTransactionCountByNumber( + txCount, err := s.backend.GetBlockTransactionCountByNumber( *s.SuccessfulTxTransfer().BlockNumberRpc) + s.NoError(err) s.Require().Greater((uint64)(*txCount), uint64(0)) } diff --git a/eth/rpc/backend/call_tx.go b/eth/rpc/backend/call_tx.go index 19b9ee4fc7..7299deb661 100644 --- a/eth/rpc/backend/call_tx.go +++ b/eth/rpc/backend/call_tx.go @@ -8,7 +8,7 @@ import ( "fmt" "math/big" - errorsmod "cosmossdk.io/errors" + sdkioerrors "cosmossdk.io/errors" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" sdk "github.com/cosmos/cosmos-sdk/types" @@ -71,7 +71,7 @@ func (b *Backend) SendRawTransaction(data hexutil.Bytes) (common.Hash, error) { syncCtx := b.clientCtx.WithBroadcastMode(flags.BroadcastSync) rsp, err := syncCtx.BroadcastTx(txBytes) if rsp != nil && rsp.Code != 0 { - err = errorsmod.ABCIError(rsp.Codespace, rsp.Code, rsp.RawLog) + err = sdkioerrors.ABCIError(rsp.Codespace, rsp.Code, rsp.RawLog) } if err != nil { b.logger.Error("failed to broadcast tx", "error", err.Error()) diff --git a/eth/rpc/backend/chain_info_test.go b/eth/rpc/backend/chain_info_test.go index 43c28b33e0..80dd7bfdcd 100644 --- a/eth/rpc/backend/chain_info_test.go +++ b/eth/rpc/backend/chain_info_test.go @@ -21,15 +21,6 @@ func (s *BackendSuite) TestChainConfig() { s.Require().Equal(int64(0), config.LondonBlock.Int64()) } -func (s *BackendSuite) TestBaseFeeWei() { - resBlock, err := s.backend.TendermintBlockResultByNumber( - s.SuccessfulTxTransfer().BlockNumberRpc.TmHeight()) - s.Require().NoError(err) - baseFeeWei, err := s.backend.BaseFeeWei(resBlock) - s.Require().NoError(err) - s.Require().Equal(evm.BASE_FEE_WEI, baseFeeWei) -} - func (s *BackendSuite) TestCurrentHeader() { currentHeader, err := s.backend.CurrentHeader() s.Require().NoError(err) diff --git a/eth/rpc/backend/tx_info.go b/eth/rpc/backend/tx_info.go index ec7ad89e5b..febec1ff77 100644 --- a/eth/rpc/backend/tx_info.go +++ b/eth/rpc/backend/tx_info.go @@ -7,7 +7,7 @@ import ( "math" "math/big" - errorsmod "cosmossdk.io/errors" + sdkioerrors "cosmossdk.io/errors" tmrpcclient "github.com/cometbft/cometbft/rpc/client" tmrpctypes "github.com/cometbft/cometbft/rpc/core/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -71,15 +71,10 @@ func (b *Backend) GetTransactionByHash(txHash gethcommon.Hash) (*rpc.EthTxJsonRP return nil, errors.New("can't find index of ethereum tx") } - baseFeeWei, err := b.BaseFeeWei(blockRes) - if err != nil { - // handle the error for pruned node. - b.logger.Error("failed to fetch Base Fee from prunned block. Check node prunning configuration", "height", blockRes.Height, "error", err) - } - + baseFeeWei := evm.BASE_FEE_WEI height := uint64(res.Height) //#nosec G701 -- checked for int overflow already index := uint64(res.EthTxIndex) //#nosec G701 -- checked for int overflow already - return rpc.NewRPCTxFromMsg( + return rpc.NewRPCTxFromMsgEthTx( msg, gethcommon.BytesToHash(block.BlockID.Hash.Bytes()), height, @@ -108,7 +103,7 @@ func (b *Backend) getTransactionByHashPending(txHash gethcommon.Hash) (*rpc.EthT if msg.Hash == hexTx { // use zero block values since it's not included in a block yet - rpctx, err := rpc.NewRPCTxFromMsg( + rpctx, err := rpc.NewRPCTxFromMsgEthTx( msg, gethcommon.Hash{}, uint64(0), @@ -283,13 +278,8 @@ func (b *Backend) GetTransactionReceipt(hash gethcommon.Hash) (*TransactionRecei } if dynamicTx, ok := txData.(*evm.DynamicFeeTx); ok { - baseFeeWei, err := b.BaseFeeWei(blockRes) - if err != nil { - // tolerate the error for pruned node. - b.logger.Error("fetch basefee failed, node is pruned?", "height", res.Height, "error", err) - } else { - receipt.EffectiveGasPrice = (*hexutil.Big)(dynamicTx.EffectiveGasPriceWeiPerGas(baseFeeWei)) - } + baseFeeWei := evm.BASE_FEE_WEI + receipt.EffectiveGasPrice = (*hexutil.Big)(dynamicTx.EffectiveGasPriceWeiPerGas(baseFeeWei)) } else { receipt.EffectiveGasPrice = (*hexutil.Big)(txData.GetGasPrice()) } @@ -349,7 +339,7 @@ func (b *Backend) GetTxByEthHash(hash gethcommon.Hash) (*eth.TxResult, error) { return txs.GetTxByHash(hash) }) if err != nil { - return nil, errorsmod.Wrapf(err, "GetTxByEthHash(%s)", hash.Hex()) + return nil, sdkioerrors.Wrapf(err, "GetTxByEthHash(%s)", hash.Hex()) } return txResult, nil } @@ -372,7 +362,7 @@ func (b *Backend) GetTxByTxIndex(height int64, index uint) (*eth.TxResult, error return txs.GetTxByTxIndex(int(index)) // #nosec G701 -- checked for int overflow already }) if err != nil { - return nil, errorsmod.Wrapf(err, "GetTxByTxIndex %d %d", height, index) + return nil, sdkioerrors.Wrapf(err, "GetTxByTxIndex %d %d", height, index) } return txResult, nil } @@ -439,15 +429,10 @@ func (b *Backend) GetTransactionByBlockAndIndex(block *tmrpctypes.ResultBlock, i msg = ethMsgs[i] } - baseFeeWei, err := b.BaseFeeWei(blockRes) - if err != nil { - // handle the error for pruned node. - b.logger.Error("failed to fetch Base Fee from prunned block. Check node prunning configuration", "height", block.Block.Height, "error", err) - } - + baseFeeWei := evm.BASE_FEE_WEI height := uint64(block.Block.Height) // #nosec G701 -- checked for int overflow already index := uint64(idx) // #nosec G701 -- checked for int overflow already - return rpc.NewRPCTxFromMsg( + return rpc.NewRPCTxFromMsgEthTx( msg, gethcommon.BytesToHash(block.Block.Hash()), height, diff --git a/eth/rpc/backend/utils.go b/eth/rpc/backend/utils.go index 3f47b5754a..4d9e2347c4 100644 --- a/eth/rpc/backend/utils.go +++ b/eth/rpc/backend/utils.go @@ -113,10 +113,7 @@ func (b *Backend) retrieveEVMTxFeesFromBlock( targetOneFeeHistory *rpc.OneFeeHistory, ) error { blockHeight := tendermintBlock.Block.Height - blockBaseFee, err := b.BaseFeeWei(tendermintBlockResult) - if err != nil { - return err - } + blockBaseFee := evm.BASE_FEE_WEI // set basefee targetOneFeeHistory.BaseFee = blockBaseFee diff --git a/eth/rpc/rpc.go b/eth/rpc/rpc.go index c35a6c896c..9dc9985578 100644 --- a/eth/rpc/rpc.go +++ b/eth/rpc/rpc.go @@ -10,18 +10,16 @@ import ( abci "github.com/cometbft/cometbft/abci/types" tmtypes "github.com/cometbft/cometbft/types" - errorsmod "cosmossdk.io/errors" + sdkioerrors "cosmossdk.io/errors" tmrpcclient "github.com/cometbft/cometbft/rpc/client" "github.com/cosmos/cosmos-sdk/client" - errortypes "github.com/cosmos/cosmos-sdk/types/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/NibiruChain/nibiru/v2/x/common/nmath" "github.com/NibiruChain/nibiru/v2/x/evm" gethcommon "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" gethcore "github.com/ethereum/go-ethereum/core/types" - gethparams "github.com/ethereum/go-ethereum/params" ) // ErrExceedBlockGasLimit defines the error message when tx execution exceeds the @@ -39,7 +37,7 @@ const ErrStateDBCommit = "failed to commit stateDB" func RawTxToEthTx(clientCtx client.Context, txBz tmtypes.Tx) ([]*evm.MsgEthereumTx, error) { tx, err := clientCtx.TxConfig.TxDecoder()(txBz) if err != nil { - return nil, errorsmod.Wrap(errortypes.ErrJSONUnmarshal, err.Error()) + return nil, sdkioerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error()) } ethTxs := make([]*evm.MsgEthereumTx, len(tx.GetMsgs())) @@ -155,42 +153,31 @@ func FormatBlock( return result } -// NewRPCTxFromMsg returns a transaction that will serialize to the RPC +// NewRPCTxFromMsgEthTx returns a transaction that will serialize to the RPC // representation, with the given location metadata set (if available). -func NewRPCTxFromMsg( - msg *evm.MsgEthereumTx, +func NewRPCTxFromMsgEthTx( + msgEthTx *evm.MsgEthereumTx, blockHash gethcommon.Hash, - blockNumber, index uint64, + blockNumber uint64, + index uint64, baseFeeWei *big.Int, chainID *big.Int, ) (*EthTxJsonRPC, error) { - tx := msg.AsTransaction() - return NewRPCTxFromEthTx(tx, blockHash, blockNumber, index, baseFeeWei, chainID) -} + var ( + tx = msgEthTx.AsTransaction() + // Determine the signer. For replay-protected transactions, use the most + // permissive signer, because we assume that signers are backwards-compatible + // with old transactions. For non-protected transactions, the homestead + // signer is used because the return value of ChainId is zero for unprotected + // transactions. + signer gethcore.Signer = gethcore.HomesteadSigner{} + v, r, s = tx.RawSignatureValues() + ) -// NewRPCTxFromEthTx returns a transaction that will serialize to the RPC -// representation, with the given location metadata set (if available). -func NewRPCTxFromEthTx( - tx *gethcore.Transaction, - blockHash gethcommon.Hash, - blockNumber, - index uint64, - baseFee *big.Int, - chainID *big.Int, -) (*EthTxJsonRPC, error) { - // Determine the signer. For replay-protected transactions, use the most - // permissive signer, because we assume that signers are backwards-compatible - // with old transactions. For non-protected transactions, the homestead - // signer is used because the return value of ChainId is zero for unprotected - // transactions. - var signer gethcore.Signer if tx.Protected() { signer = gethcore.LatestSignerForChainID(tx.ChainId()) - } else { - signer = gethcore.HomesteadSigner{} } from, _ := gethcore.Sender(signer, tx) // #nosec G703 - v, r, s := tx.RawSignatureValues() result := &EthTxJsonRPC{ Type: hexutil.Uint64(tx.Type()), From: from, @@ -211,22 +198,23 @@ func NewRPCTxFromEthTx( result.BlockNumber = (*hexutil.Big)(new(big.Int).SetUint64(blockNumber)) result.TransactionIndex = (*hexutil.Uint64)(&index) } - switch tx.Type() { + + switch txType := tx.Type(); txType { case gethcore.AccessListTxType: al := tx.AccessList() result.Accesses = &al result.ChainID = (*hexutil.Big)(tx.ChainId()) - case gethcore.DynamicFeeTxType: + case gethcore.DynamicFeeTxType, gethcore.BlobTxType: al := tx.AccessList() result.Accesses = &al result.ChainID = (*hexutil.Big)(tx.ChainId()) result.GasFeeCap = (*hexutil.Big)(tx.GasFeeCap()) result.GasTipCap = (*hexutil.Big)(tx.GasTipCap()) + // if the transaction has been mined, compute the effective gas price - if baseFee != nil && blockHash != (gethcommon.Hash{}) { + if baseFeeWei != nil && blockHash != (gethcommon.Hash{}) { // price = min(tip, gasFeeCap - baseFee) + baseFee - price := nmath.BigMin(new(big.Int).Add(tx.GasTipCap(), baseFee), tx.GasFeeCap()) - result.GasPrice = (*hexutil.Big)(price) + result.GasPrice = (*hexutil.Big)(msgEthTx.EffectiveGasPriceWeiPerGas(baseFeeWei)) } else { result.GasPrice = (*hexutil.Big)(tx.GasFeeCap()) } @@ -234,43 +222,22 @@ func NewRPCTxFromEthTx( return result, nil } -// CheckTxFee is an internal function used to check whether the fee of -// the given transaction is _reasonable_(under the cap). -func CheckTxFee(gasPrice *big.Int, gas uint64, cap float64) error { - // Short circuit if there is no cap for transaction fee at all. - if cap == 0 { - return nil - } - totalfee := new(big.Float).SetInt(new(big.Int).Mul(gasPrice, new(big.Int).SetUint64(gas))) - oneEther := new(big.Float).SetInt(big.NewInt(gethparams.Ether)) - // quo = rounded(x/y) - feeEth := new(big.Float).Quo(totalfee, oneEther) - // no need to check error from parsing - feeFloat, _ := feeEth.Float64() - if feeFloat > cap { - return fmt.Errorf("tx fee (%.2f ether) exceeds the configured cap (%.2f ether)", feeFloat, cap) - } - return nil -} - -// TxExceedBlockGasLimit returns true if the tx exceeds block gas limit. -func TxExceedBlockGasLimit(res *abci.ResponseDeliverTx) bool { - return strings.Contains(res.Log, ErrExceedBlockGasLimit) -} - -// TxStateDBCommitError returns true if the evm tx commit error. -func TxStateDBCommitError(res *abci.ResponseDeliverTx) bool { - return strings.Contains(res.Log, ErrStateDBCommit) -} - // TxIsValidEnough returns true if the transaction was successful // or if it failed with an ExceedBlockGasLimit error or TxStateDBCommitError error +// +// Include in Block: +// - Include successful tx +// - Include unsuccessful tx that exceeds block gas limit +// - Include unsuccessful tx that failed when committing changes to stateDB +// +// Exclude from Block (Not Valid Enough): +// - Exclude unsuccessful tx with any other error but ExceedBlockGasLimit func TxIsValidEnough(res *abci.ResponseDeliverTx) (condition bool, reason string) { if res.Code == 0 { return true, "tx succeeded" - } else if TxExceedBlockGasLimit(res) { + } else if strings.Contains(res.Log, ErrExceedBlockGasLimit) { return true, "tx exceeded block gas limit" - } else if TxStateDBCommitError(res) { + } else if strings.Contains(res.Log, ErrStateDBCommit) { return true, "tx state db commit error" } return false, "unexpected failure" diff --git a/eth/rpc/rpcapi/apis.go b/eth/rpc/rpcapi/apis.go index 6607f92d22..3d43cafe85 100644 --- a/eth/rpc/rpcapi/apis.go +++ b/eth/rpc/rpcapi/apis.go @@ -2,6 +2,11 @@ package rpcapi import ( + "context" + "fmt" + "reflect" + "unicode" + "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/server" @@ -134,3 +139,87 @@ func GetRPCAPIs(ctx *server.Context, return apis } + +var ( + ctxType = reflect.TypeOf((*context.Context)(nil)).Elem() + errType = reflect.TypeOf((*error)(nil)).Elem() + subscriptionType = reflect.TypeOf(Subscription{}) +) + +type MethodInfo struct { + TrueName string + GoFunc reflect.Method + IsSubscription bool +} + +// ParseAPIMethods returns all method names exposed by api, e.g. "eth_gasPrice" +func ParseAPIMethods(api rpc.API) map[string]MethodInfo { + svcType := reflect.TypeOf(api.Service) + methods := make(map[string]MethodInfo) + + for i := range svcType.NumMethod() { + m := svcType.Method(i) + if m.PkgPath != "" { + continue // unexported + } + sig := m.Type + + // 1) Detect optional context.Context arg + // Args must be: Optional([context.Context]) + zero or more args + hasCtx := sig.NumIn() > 1 && sig.In(1) == ctxType + + // 2) Validate outputs: either (error), or (T, error) + nOut := sig.NumOut() + switch nOut { + case 1: + if !sig.Out(0).Implements(errType) { + continue + } + case 2: + if !sig.Out(1).Implements(errType) { + continue + } + default: + continue + } + + // 3) detect subscriptions: ctx + (Subscription, error) + isSub := false + if hasCtx && nOut == 2 { + t0 := sig.Out(0) + // strip pointer + for t0.Kind() == reflect.Ptr { + t0 = t0.Elem() + } + if t0 == subscriptionType { + isSub = true + } + } + + // 3) name the RPC method by lower‑casing the first rune + trueName := rpcMethodName(api.Namespace, m.Name) + methods[trueName] = MethodInfo{ + TrueName: trueName, + GoFunc: m, + IsSubscription: isSub, + } + } + + return methods +} + +// Example: "TransactionByHash" -> "transactionByHash" +func rpcMethodName(namespace, funcName string) string { + return fmt.Sprintf("%v_%v", namespace, lowerFirst(funcName)) +} + +// lowerFirst returns lowercases the first letter of the input. For context, +// service methods are in the form: +// fmt.Sprintf("%v_%v", namespace, lowerFirst(methodName)) +func lowerFirst(s string) string { + r := []rune(s) + if len(r) > 0 { + r[0] = unicode.ToLower(r[0]) + } + return string(r) +} diff --git a/eth/rpc/rpcapi/debugapi/api.go b/eth/rpc/rpcapi/debugapi/api.go index 354096757f..e67dd9cd7e 100644 --- a/eth/rpc/rpcapi/debugapi/api.go +++ b/eth/rpc/rpcapi/debugapi/api.go @@ -3,7 +3,10 @@ package debugapi import ( "bytes" + "context" + "encoding/json" "errors" + "fmt" "io" "os" "runtime" // #nosec G702 @@ -16,13 +19,13 @@ import ( "github.com/NibiruChain/nibiru/v2/x/evm" - stderrors "github.com/pkg/errors" - "github.com/cosmos/cosmos-sdk/server" "github.com/cometbft/cometbft/libs/log" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + getheth "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/eth/tracers" "github.com/ethereum/go-ethereum/rlp" "github.com/NibiruChain/nibiru/v2/eth/rpc" @@ -221,7 +224,7 @@ func (a *DebugAPI) StartCPUProfile(file string) error { a.logger.Debug("cpu profiling already in use", "error", err.Error()) if err := f.Close(); err != nil { a.logger.Debug("failed to close cpu profile file") - return stderrors.Wrap(err, "failed to close cpu profile file") + return fmt.Errorf("failed to close cpu profile file: %w", err) } return err } @@ -248,7 +251,7 @@ func (a *DebugAPI) StopCPUProfile() error { pprof.StopCPUProfile() if err := a.handler.cpuFile.Close(); err != nil { a.logger.Debug("failed to close cpu file") - return stderrors.Wrap(err, "failed to close cpu file") + return fmt.Errorf("failed to close cpu file: %w", err) } a.handler.cpuFile = nil a.handler.cpuFilename = "" @@ -345,3 +348,126 @@ func (a *DebugAPI) IntermediateRoots(hash common.Hash, _ *evm.TraceConfig) ([]co a.logger.Debug("debug_intermediateRoots", "hash", hash) return ([]common.Hash)(nil), nil } + +// GetBadBlocks returns a list of the last 'bad blocks' that the client has seen +// on the network and returns them as a JSON list of block hashes. +func (a *DebugAPI) GetBadBlocks(ctx context.Context) ([]*getheth.BadBlockArgs, error) { + a.logger.Debug("debug_getBadBlocks") + return []*getheth.BadBlockArgs{}, nil +} + +func ErrNotImplemented(method string) error { + return fmt.Errorf("method is not implemented: %v", method) +} + +// GetRawBlock returns an RLP-encoded block +func (a *DebugAPI) GetRawBlock(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (hexutil.Bytes, error) { + fnName := "debug_getRawBlock" + a.logger.Debug(fnName) + return nil, ErrNotImplemented(fnName) +} + +// GetRawReceipts returns an array of EIP-2718 binary-encoded receipts +func (a *DebugAPI) GetRawReceipts( + ctx context.Context, + blockNrOrHash rpc.BlockNumberOrHash, +) ([]hexutil.Bytes, error) { + fnName := "debug_getRawReceipts" + a.logger.Debug(fnName) + return nil, ErrNotImplemented(fnName) +} + +// GetRawHeader returns an RLP-encoded block header +func (a *DebugAPI) GetRawHeader( + ctx context.Context, + blockNrOrHash rpc.BlockNumberOrHash, +) (hexutil.Bytes, error) { + fnName := "debug_getRawHeader" + a.logger.Debug(fnName) + return nil, ErrNotImplemented(fnName) +} + +// GetRawTransaction returns the bytes of the transaction for the given hash. +func (a *DebugAPI) GetRawTransaction( + ctx context.Context, + hash common.Hash, +) (hexutil.Bytes, error) { + fnName := "debug_getRawTransaction" + a.logger.Debug(fnName) + return nil, ErrNotImplemented(fnName) +} + +// StandardTraceBadBlockToFile dumps the structured logs created during the +// execution of EVM against a block pulled from the pool of bad ones to the +// local file system and returns a list of files to the caller. +func (a *DebugAPI) StandardTraceBadBlockToFile( + ctx context.Context, + hash common.Hash, + config *tracers.StdTraceConfig, +) ([]string, error) { + fnName := "debug_standardTraceBadBlockToFile" + a.logger.Debug(fnName) + return nil, ErrNotImplemented(fnName) +} + +// StandardTraceBlockToFile dumps the structured logs created during the +// execution of EVM to the local file system and returns a list of files +// to the caller. +func (a *DebugAPI) StandardTraceBlockToFile( + ctx context.Context, + hash common.Hash, + config *tracers.StdTraceConfig, +) ([]string, error) { + fnName := "debug_standardTraceBlockToFile" + a.logger.Debug(fnName) + return nil, ErrNotImplemented(fnName) +} + +// TraceBadBlock returns the structured logs created during the execution of +// EVM against a block pulled from the pool of bad ones and returns them as a JSON +// object. +func (a *DebugAPI) TraceBadBlock( + ctx context.Context, + hash common.Hash, + config *tracers.TraceConfig, +) ([]json.RawMessage, error) { + fnName := "debug_traceBadBlock" + a.logger.Debug(fnName) + return nil, ErrNotImplemented(fnName) +} + +// TraceBlock returns the structured logs created during the execution of EVM +// and returns them as a JSON object. +func (a *DebugAPI) TraceBlock( + ctx context.Context, + blob hexutil.Bytes, + config *tracers.TraceConfig, +) ([]json.RawMessage, error) { + fnName := "debug_traceBlock" + a.logger.Debug(fnName) + return nil, ErrNotImplemented(fnName) +} + +// TraceBlockFromFile returns the structured logs created during the execution of +// EVM and returns them as a JSON object. +func (a *DebugAPI) TraceBlockFromFile( + ctx context.Context, + file string, + config *tracers.TraceConfig, +) ([]json.RawMessage, error) { + fnName := "debug_traceBlockFromFile" + a.logger.Debug(fnName) + return nil, ErrNotImplemented(fnName) +} + +// TraceChain returns the structured logs created during the execution of EVM +// between two blocks (excluding start) and returns them as a JSON object. +func (a *DebugAPI) TraceChain( + ctx context.Context, + start, end rpc.BlockNumber, + config *tracers.TraceConfig, +) (subscription any, err error) { // Fetch the block interval that we want to trace + fnName := "debug_traceChain" + a.logger.Debug(fnName) + return nil, ErrNotImplemented(fnName) +} diff --git a/eth/rpc/rpcapi/debugapi/trace.go b/eth/rpc/rpcapi/debugapi/trace.go index 8dce68952d..f73d425c89 100644 --- a/eth/rpc/rpcapi/debugapi/trace.go +++ b/eth/rpc/rpcapi/debugapi/trace.go @@ -24,7 +24,7 @@ import ( "os" "runtime/trace" - stderrors "github.com/pkg/errors" + pkgerrors "github.com/pkg/errors" ) // StartGoTrace turns on tracing, writing to the given file. @@ -51,7 +51,7 @@ func (a *DebugAPI) StartGoTrace(file string) error { a.logger.Debug("Go tracing already started", "error", err.Error()) if err := f.Close(); err != nil { a.logger.Debug("failed to close trace file") - return stderrors.Wrap(err, "failed to close trace file") + return pkgerrors.Wrap(err, "failed to close trace file") } return err @@ -76,7 +76,7 @@ func (a *DebugAPI) StopGoTrace() error { a.logger.Info("Done writing Go trace", "dump", a.handler.traceFilename) if err := a.handler.traceFile.Close(); err != nil { a.logger.Debug("failed to close trace file") - return stderrors.Wrap(err, "failed to close trace file") + return pkgerrors.Wrap(err, "failed to close trace file") } a.handler.traceFile = nil a.handler.traceFilename = "" diff --git a/eth/rpc/rpcapi/eth_api.go b/eth/rpc/rpcapi/eth_api.go index 883dad86f1..dcc88aaae2 100644 --- a/eth/rpc/rpcapi/eth_api.go +++ b/eth/rpc/rpcapi/eth_api.go @@ -20,12 +20,6 @@ import ( "github.com/NibiruChain/nibiru/v2/x/evm" ) -// Ethereum API: Allows connection to a full node of the Nibiru blockchain -// network via Nibiru EVM. Developers can interact with on-chain EVM data and -// send different types of transactions to the network by utilizing the endpoints -// provided by the API. The API follows a JSON-RPC standard. If not otherwise -// specified, the interface is derived from the Alchemy Ethereum API: -// https://docs.alchemy.com/alchemy/apis/ethereum type IEthAPI interface { // Getting Blocks // @@ -33,8 +27,8 @@ type IEthAPI interface { BlockNumber() (hexutil.Uint64, error) GetBlockByNumber(ethBlockNum rpc.BlockNumber, fullTx bool) (map[string]any, error) GetBlockByHash(hash common.Hash, fullTx bool) (map[string]any, error) - GetBlockTransactionCountByHash(hash common.Hash) *hexutil.Uint - GetBlockTransactionCountByNumber(blockNum rpc.BlockNumber) *hexutil.Uint + GetBlockTransactionCountByHash(hash common.Hash) (*hexutil.Uint, error) + GetBlockTransactionCountByNumber(blockNum rpc.BlockNumber) (*hexutil.Uint, error) // Reading Transactions // @@ -47,12 +41,6 @@ type IEthAPI interface { GetTransactionByBlockNumberAndIndex(blockNum rpc.BlockNumber, idx hexutil.Uint) (*rpc.EthTxJsonRPC, error) // eth_getBlockReceipts - // Writing Transactions - // - // Allows developers to both send ETH from one address to another, write data - // on-chain, and interact with smart contracts. - SendRawTransaction(data hexutil.Bytes) (common.Hash, error) - // Account Information // // Returns information regarding an address's stored on-chain data. @@ -70,14 +58,6 @@ type IEthAPI interface { address common.Address, storageKeys []string, blockNrOrHash rpc.BlockNumberOrHash, ) (*rpc.AccountResult, error) - // EVM/Smart Contract Execution - // - // Allows developers to read data from the blockchain which includes executing - // smart contracts. However, no data is published to the Ethereum network. - Call( - args evm.JsonTxArgs, blockNrOrHash rpc.BlockNumberOrHash, _ *rpc.StateOverride, - ) (hexutil.Bytes, error) - // Chain Information // // Returns information on the Ethereum network and internal settings. @@ -118,7 +98,16 @@ type IEthAPI interface { var _ IEthAPI = (*EthAPI)(nil) -// EthAPI is the eth_ prefixed set of APIs in the Web3 JSON-RPC spec. +// EthAPI: Allows connection to a full node of the Nibiru blockchain +// network via Nibiru EVM. Developers can interact with on-chain EVM data and +// send different types of transactions to the network by utilizing the endpoints +// provided by the API. +// +// [EthAPI] contains much of the "eth_" prefixed methods in the Web3 JSON-RPC spec. +// +// The API follows a JSON-RPC standard. If not otherwise +// specified, the interface is derived from the Alchemy Ethereum API: +// https://docs.alchemy.com/alchemy/apis/ethereum type EthAPI struct { ctx context.Context logger log.Logger @@ -148,14 +137,24 @@ func (e *EthAPI) BlockNumber() (hexutil.Uint64, error) { // GetBlockByNumber returns the block identified by number. func (e *EthAPI) GetBlockByNumber(ethBlockNum rpc.BlockNumber, fullTx bool) (map[string]any, error) { - e.logger.Debug("eth_getBlockByNumber", "number", ethBlockNum, "full", fullTx) + e.logger.Debug("eth_getBlockByNumber", "blockNumber", ethBlockNum, "fullTx", fullTx) return e.backend.GetBlockByNumber(ethBlockNum, fullTx) } // GetBlockByHash returns the block identified by hash. func (e *EthAPI) GetBlockByHash(hash common.Hash, fullTx bool) (map[string]any, error) { - e.logger.Debug("eth_getBlockByHash", "hash", hash.Hex(), "full", fullTx) - return e.backend.GetBlockByHash(hash, fullTx) + methodName := "eth_getBlockByHash" + e.logger.Debug(methodName, "hash", hash.Hex(), "fullTx", fullTx) + block, err := e.backend.GetBlockByHash(hash, fullTx) + logError(e.logger, err, methodName) + return block, err +} + +// logError logs a backend error if one is present +func logError(logger log.Logger, err error, methodName string) { + if err != nil { + logger.Debug(methodName+" failed", "error", err.Error()) + } } // -------------------------------------------------------------------------- @@ -164,8 +163,11 @@ func (e *EthAPI) GetBlockByHash(hash common.Hash, fullTx bool) (map[string]any, // GetTransactionByHash returns the transaction identified by hash. func (e *EthAPI) GetTransactionByHash(hash common.Hash) (*rpc.EthTxJsonRPC, error) { - e.logger.Debug("eth_getTransactionByHash", "hash", hash.Hex()) - return e.backend.GetTransactionByHash(hash) + methodName := "eth_getTransactionByHash" + e.logger.Debug(methodName, "hash", hash.Hex()) + tx, err := e.backend.GetTransactionByHash(hash) + logError(e.logger, err, methodName) + return tx, err } // GetTransactionCount returns the number of transactions at the given address up to the given block number. @@ -190,17 +192,23 @@ func (e *EthAPI) GetTransactionReceipt( } // GetBlockTransactionCountByHash returns the number of transactions in the block identified by hash. -func (e *EthAPI) GetBlockTransactionCountByHash(hash common.Hash) *hexutil.Uint { - e.logger.Debug("eth_getBlockTransactionCountByHash", "hash", hash.Hex()) - return e.backend.GetBlockTransactionCountByHash(hash) +func (e *EthAPI) GetBlockTransactionCountByHash(hash common.Hash) (*hexutil.Uint, error) { + methodName := "eth_getBlockTransactionCountByHash" + e.logger.Debug(methodName, "hash", hash.Hex()) + txCount, err := e.backend.GetBlockTransactionCountByHash(hash) + logError(e.logger, err, methodName) + return txCount, err } // GetBlockTransactionCountByNumber returns the number of transactions in the block identified by number. func (e *EthAPI) GetBlockTransactionCountByNumber( blockNum rpc.BlockNumber, -) *hexutil.Uint { - e.logger.Debug("eth_getBlockTransactionCountByNumber", "height", blockNum.Int64()) - return e.backend.GetBlockTransactionCountByNumber(blockNum) +) (*hexutil.Uint, error) { + methodName := "eth_getBlockTransactionCountByNumber" + e.logger.Debug(methodName, "height", blockNum.Int64()) + txCount, err := e.backend.GetBlockTransactionCountByNumber(blockNum) + logError(e.logger, err, methodName) + return txCount, err } // GetTransactionByBlockHashAndIndex returns the transaction identified by hash and index. @@ -224,6 +232,8 @@ func (e *EthAPI) GetTransactionByBlockNumberAndIndex( // -------------------------------------------------------------------------- // SendRawTransaction send a raw Ethereum transaction. +// Allows developers to both send ETH from one address to another, write data +// on-chain, and interact with smart contracts. func (e *EthAPI) SendRawTransaction(data hexutil.Bytes) (common.Hash, error) { e.logger.Debug("eth_sendRawTransaction", "length", len(data)) return e.backend.SendRawTransaction(data) @@ -277,6 +287,9 @@ func (e *EthAPI) GetProof(address common.Address, // -------------------------------------------------------------------------- // Call performs a raw contract call. +// +// Allows developers to read data from the blockchain which includes executing +// smart contracts. However, no data is published to the blockchain network. func (e *EthAPI) Call(args evm.JsonTxArgs, blockNrOrHash rpc.BlockNumberOrHash, _ *rpc.StateOverride, @@ -437,6 +450,7 @@ func (e *EthAPI) GetTransactionLogs(txHash common.Hash) ([]*gethcore.Log, error) func (e *EthAPI) FillTransaction( args evm.JsonTxArgs, ) (*rpc.SignTransactionResult, error) { + e.logger.Debug("eth_fillTransaction") // Set some sanity defaults and terminate on failure args, err := e.backend.SetTxDefaults(args) if err != nil { @@ -476,7 +490,7 @@ func (e *EthAPI) GetPendingTransactions() ([]*rpc.EthTxJsonRPC, error) { break } - rpctx, err := rpc.NewRPCTxFromMsg( + rpctx, err := rpc.NewRPCTxFromMsgEthTx( ethMsg, common.Hash{}, uint64(0), diff --git a/eth/rpc/rpcapi/eth_api_test.go b/eth/rpc/rpcapi/eth_api_test.go index 8339d20969..24f3581d0e 100644 --- a/eth/rpc/rpcapi/eth_api_test.go +++ b/eth/rpc/rpcapi/eth_api_test.go @@ -3,14 +3,21 @@ package rpcapi_test import ( "context" "crypto/ecdsa" + "encoding/json" "fmt" "math/big" + "sort" "strings" "testing" "cosmossdk.io/math" + cmtlog "github.com/cometbft/cometbft/libs/log" + cmtrpcclient "github.com/cometbft/cometbft/rpc/jsonrpc/client" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/server" sdk "github.com/cosmos/cosmos-sdk/types" bank "github.com/cosmos/cosmos-sdk/x/bank/types" + geth "github.com/ethereum/go-ethereum" gethcommon "github.com/ethereum/go-ethereum/common" gethcore "github.com/ethereum/go-ethereum/core/types" @@ -55,7 +62,7 @@ type NodeSuite struct { contractData embeds.CompiledEvmContract } -func TestSuite_RunAll(t *testing.T) { +func Test(t *testing.T) { suite.Run(t, new(Suite)) testutil.RetrySuiteRunIfDbClosed(t, func() { @@ -63,6 +70,118 @@ func TestSuite_RunAll(t *testing.T) { }, 2) } +type Suite struct { + suite.Suite +} + +func (s *Suite) TestExpectedMethods() { + serverCtx := server.NewDefaultContext() + serverCtx.Logger = cmtlog.TestingLogger() + apis := rpcapi.GetRPCAPIs( + serverCtx, client.Context{}, + &cmtrpcclient.WSClient{}, + true, nil, + []string{ + rpcapi.NamespaceEth, // eth and filters services + rpcapi.NamespaceDebug, + }, + ) + s.Require().Len(apis, 3) + type WantMethod struct { + ServiceName string + Methods []string + } + testCases := []WantMethod{ + { + ServiceName: "rpcapi.EthAPI", + Methods: []string{ + "eth_accounts", + "eth_blockNumber", + "eth_call", + "eth_chainId", + "eth_estimateGas", + "eth_feeHistory", + "eth_fillTransaction", + "eth_gasPrice", + "eth_getBalance", + "eth_getBlockByHash", + "eth_getBlockByNumber", + "eth_getCode", + "eth_getPendingTransactions", + "eth_getProof", + "eth_getStorageAt", + "eth_getTransactionByBlockHashAndIndex", + "eth_getTransactionByBlockNumberAndIndex", + "eth_getTransactionByHash", + "eth_getTransactionCount", + "eth_getTransactionLogs", + "eth_getTransactionReceipt", + "eth_maxPriorityFeePerGas", + "eth_sendRawTransaction", + "eth_syncing", + }, + }, + { + ServiceName: "rpcapi.FiltersAPI", + Methods: []string{ + "eth_getFilterChanges", + "eth_getFilterLogs", + "eth_getLogs", + }, + }, + { + ServiceName: "rpcapi.DebugAPI", + // See https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-debug + Methods: []string{ + "debug_getBadBlocks", + "debug_getRawBlock", + "debug_getRawHeader", + "debug_getRawReceipts", + "debug_getRawTransaction", + "debug_intermediateRoots", + "debug_standardTraceBadBlockToFile", + "debug_standardTraceBlockToFile", + "debug_traceBadBlock", + "debug_traceBlock", + "debug_traceBlockByHash", + "debug_traceBlockByNumber", + "debug_traceBlockFromFile", + "debug_traceCall", + "debug_traceChain", + "debug_traceTransaction", + }, + }, + } + + for idx, api := range apis { + tc := testCases[idx] + testName := fmt.Sprintf("%v-%v", api.Namespace, tc.ServiceName) + s.Run(testName, func() { + gotMethods := rpcapi.ParseAPIMethods(api) + for _, wantMethod := range tc.Methods { + _, ok := gotMethods[wantMethod] + if !ok { + errMsg := fmt.Sprintf( + "Missing RPC implementation for \"%s\" : service: %s, namespace: %s", + wantMethod, tc.ServiceName, api.Namespace, + ) + s.Fail(errMsg) + } + } + + if s.T().Failed() { + gotNames := []string{} + for name := range gotMethods { + gotNames = append(gotNames, name) + } + sort.Strings(gotNames) + bz, _ := json.MarshalIndent(gotNames, "", " ") + s.T().Logf("gotMethods: %s", bz) + } + }) + } +} + // SetupSuite runs before every test in the suite. Implements the // "suite.SetupAllSuite" interface. func (s *NodeSuite) SetupSuite() { diff --git a/eth/rpc/rpcapi/event_subscriber_test.go b/eth/rpc/rpcapi/event_subscriber_test.go index dc14b092e1..ff8cf29ad8 100644 --- a/eth/rpc/rpcapi/event_subscriber_test.go +++ b/eth/rpc/rpcapi/event_subscriber_test.go @@ -8,7 +8,6 @@ import ( abci "github.com/cometbft/cometbft/abci/types" gogoproto "github.com/cosmos/gogoproto/proto" - "github.com/stretchr/testify/suite" "github.com/cometbft/cometbft/libs/log" coretypes "github.com/cometbft/cometbft/rpc/core/types" @@ -24,10 +23,6 @@ import ( "github.com/NibiruChain/nibiru/v2/x/evm/evmtest" ) -type Suite struct { - suite.Suite -} - func TestEventSubscriber(t *testing.T) { index := make(rpcapi.FilterIndex) for i := filters.UnknownSubscription; i < filters.LastIndexSubscription; i++ { @@ -52,7 +47,7 @@ func TestEventSubscriber(t *testing.T) { <-sub.Installed ch, ok := es.TopicChans[sub.Event] if !ok { - t.Error("expect topic channel exist") + t.Errorf("expect topic channel exist: event %v", sub.Event) } sub = rpcapi.MakeSubscription("2", event) @@ -60,11 +55,11 @@ func TestEventSubscriber(t *testing.T) { <-sub.Installed newCh, ok := es.TopicChans[sub.Event] if !ok { - t.Error("expect topic channel exist") + t.Errorf("expect topic channel exist: event %v", sub.Event) } if newCh != ch { - t.Error("expect topic channel unchanged") + t.Errorf("expect topic channel unchanged: event %v", sub.Event) } } diff --git a/eth/rpc/rpcapi/filters.go b/eth/rpc/rpcapi/filters.go index 850e7fdfd6..f3d4c54d34 100644 --- a/eth/rpc/rpcapi/filters.go +++ b/eth/rpc/rpcapi/filters.go @@ -115,11 +115,7 @@ func (f *Filter) Logs(_ context.Context, logLimit int, blockLimit int64) ([]*get return nil, nil } - bloom, err := f.backend.BlockBloom(blockRes) - if err != nil { - return nil, err - } - + bloom := f.backend.BlockBloom(blockRes) return f.blockLogs(blockRes, bloom) } @@ -167,10 +163,7 @@ func (f *Filter) Logs(_ context.Context, logLimit int, blockLimit int64) ([]*get return nil, nil } - bloom, err := f.backend.BlockBloom(blockRes) - if err != nil { - return nil, err - } + bloom := f.backend.BlockBloom(blockRes) filtered, err := f.blockLogs(blockRes, bloom) if err != nil { diff --git a/eth/safe_math.go b/eth/safe_math.go index d1ca9544de..4d57c15370 100644 --- a/eth/safe_math.go +++ b/eth/safe_math.go @@ -5,9 +5,9 @@ import ( math "math" "math/big" - errorsmod "cosmossdk.io/errors" + sdkioerrors "cosmossdk.io/errors" sdkmath "cosmossdk.io/math" - errortypes "github.com/cosmos/cosmos-sdk/types/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) const maxBitLen = 256 @@ -30,7 +30,7 @@ func IsValidInt256(i *big.Int) bool { // SafeInt64 checks for overflows while casting a uint64 to int64 value. func SafeInt64(value uint64) (int64, error) { if value > uint64(math.MaxInt64) { - return 0, errorsmod.Wrapf(errortypes.ErrInvalidHeight, "uint64 value %v cannot exceed %v", value, int64(math.MaxInt64)) + return 0, sdkioerrors.Wrapf(sdkerrors.ErrInvalidHeight, "uint64 value %v cannot exceed %v", value, int64(math.MaxInt64)) } return int64(value), nil // #nosec G701 -- checked for int overflow already diff --git a/evm-e2e/test/debug_queries.test.ts b/evm-e2e/test/debug_queries.test.ts index 6877adcb57..33a8bcbf93 100644 --- a/evm-e2e/test/debug_queries.test.ts +++ b/evm-e2e/test/debug_queries.test.ts @@ -90,7 +90,7 @@ describe("debug queries", () => { // ticket: https://github.com/NibiruChain/nibiru/issues/2279 it("debug_getBadBlocks", async () => { try { - const traceResult = await provider.send("debug_getBadBlocks", [txHash]) + const traceResult = await provider.send("debug_getBadBlocks", []) expect(traceResult).toBeDefined() } catch (err) { expect(err.message).toContain( diff --git a/go.mod b/go.mod index 204f30944b..6f9d100d4b 100644 --- a/go.mod +++ b/go.mod @@ -115,6 +115,7 @@ require ( github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/ledger-cosmos-go v0.12.4 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c // indirect github.com/crate-crypto/go-kzg-4844 v1.0.0 // indirect github.com/creachadair/taskgroup v0.4.2 // indirect @@ -144,6 +145,7 @@ require ( github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gofrs/flock v0.8.1 // indirect github.com/gogo/googleapis v1.4.1 // indirect + github.com/golang-jwt/jwt/v4 v4.5.1 // indirect github.com/golang/glog v1.2.4 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect @@ -159,6 +161,7 @@ require ( github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect + github.com/hashicorp/go-bexpr v0.1.10 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-getter v1.7.5 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect @@ -167,6 +170,7 @@ require ( github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hdevalence/ed25519consensus v0.1.0 // indirect + github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 // indirect github.com/holiman/bloomfilter/v2 v2.0.3 // indirect github.com/huandu/skiplist v1.2.0 // indirect github.com/huin/goupnp v1.3.0 // indirect @@ -192,6 +196,7 @@ require ( github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mitchellh/pointerstructure v1.2.0 // indirect github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/mtibben/percent v0.2.1 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect @@ -205,6 +210,7 @@ require ( github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/rogpeppe/go-internal v1.11.0 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect @@ -222,6 +228,8 @@ require ( github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect github.com/ulikunitz/xz v0.5.11 // indirect + github.com/urfave/cli/v2 v2.25.7 // indirect + github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect go.etcd.io/bbolt v1.3.8 // indirect @@ -243,6 +251,7 @@ require ( google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe // indirect gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect pgregory.net/rapid v1.1.0 // indirect diff --git a/go.sum b/go.sum index 1cc6a1f281..e125288602 100644 --- a/go.sum +++ b/go.sum @@ -927,7 +927,6 @@ github.com/cosmos/ledger-cosmos-go v0.12.4 h1:drvWt+GJP7Aiw550yeb3ON/zsrgW0jgh5s github.com/cosmos/ledger-cosmos-go v0.12.4/go.mod h1:fjfVWRf++Xkygt9wzCsjEBdjcf7wiiY35fv3ctT+k4M= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= -github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= @@ -1148,7 +1147,6 @@ github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0 github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.4.3/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= @@ -1800,7 +1798,6 @@ github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= -github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= @@ -1947,7 +1944,6 @@ github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0o github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.24.1/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= diff --git a/x/common/error.go b/x/common/error.go index de3e4acac5..d817554d8e 100644 --- a/x/common/error.go +++ b/x/common/error.go @@ -185,11 +185,3 @@ func CombineErrorsFromStrings(strs ...string) (err error) { } var ErrNilGrpcMsg = grpcstatus.Errorf(grpccodes.InvalidArgument, "nil msg") - -// ErrNotImplemented: Represents an function error value. -func ErrNotImplemented() error { return fmt.Errorf("fn not implemented yet") } - -// ErrNotImplementedGprc: Represents an unimplemented gRPC method. -func ErrNotImplementedGprc() error { - return grpcstatus.Error(grpccodes.Unimplemented, ErrNotImplemented().Error()) -}