From 336d110dc8ba83f30a4cc29d0da81839c8ed6592 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Mon, 10 Nov 2025 11:23:44 +0100 Subject: [PATCH 01/30] feat(server): add force inclusion cmd --- server/post_tx_cmd.go | 214 +++++++++++++++++++++++++++++++++++++ server/post_tx_cmd_test.go | 39 +++++++ 2 files changed, 253 insertions(+) create mode 100644 server/post_tx_cmd.go create mode 100644 server/post_tx_cmd_test.go diff --git a/server/post_tx_cmd.go b/server/post_tx_cmd.go new file mode 100644 index 00000000..b7265792 --- /dev/null +++ b/server/post_tx_cmd.go @@ -0,0 +1,214 @@ +package server + +import ( + "context" + "encoding/hex" + "fmt" + "os" + "time" + + "github.com/rs/zerolog" + "github.com/spf13/cobra" + + "github.com/evstack/ev-node/core/da" + "github.com/evstack/ev-node/da/jsonrpc" + "github.com/evstack/ev-node/pkg/cmd" + rollconf "github.com/evstack/ev-node/pkg/config" + "github.com/evstack/ev-node/types" +) + +const ( + flagTxData = "tx" + flagNamespace = "namespace" + flagGasPrice = "gas-price" + flagTimeout = "timeout" + flagSubmitOpts = "submit-options" + + defaultTimeout = 60 * time.Second +) + +// PostTxCmd returns a command to post a signed transaction to a Celestia namespace +func PostTxCmd() *cobra.Command { + cobraCmd := &cobra.Command{ + Use: "post-tx", + Short: "Post a signed transaction to Celestia namespace", + Long: `Post a signed transaction to a Celestia namespace using the Evolve configuration. + +This command submits a raw signed transaction to the configured Celestia DA layer. +The transaction data should be provided as a hex-encoded string. + +Example: + evabcid post-tx --tx 0x1234567890abcdef --namespace 0000000000000000000000000000000000000000000001 +`, + Args: cobra.NoArgs, + RunE: postTxRunE, + } + + // Add evolve config flags + rollconf.AddFlags(cobraCmd) + + // Add command-specific flags + cobraCmd.Flags().String(flagTxData, "", "Hex-encoded signed transaction data (required)") + cobraCmd.Flags().String(flagNamespace, "", "Celestia namespace ID (if not provided, uses config namespace)") + cobraCmd.Flags().Float64(flagGasPrice, -1, "Gas price for DA submission (if not provided, uses config gas price)") + cobraCmd.Flags().Duration(flagTimeout, defaultTimeout, "Timeout for DA submission") + cobraCmd.Flags().String(flagSubmitOpts, "", "Additional submit options (if not provided, uses config submit options)") + + _ = cobraCmd.MarkFlagRequired(flagTxData) + + return cobraCmd +} + +// postTxRunE executes the post-tx command. +// It accepts hex-encoded transaction bytes via CLI (for convenience), +// decodes them to raw bytes, and submits those raw bytes to Celestia DA. +// The raw bytes are the same format that would be passed to ExecuteTxs in the ABCI adapter. +func postTxRunE(cobraCmd *cobra.Command, _ []string) error { + // Get timeout from flags + timeout, err := cobraCmd.Flags().GetDuration(flagTimeout) + if err != nil { + return fmt.Errorf("failed to get timeout flag: %w", err) + } + + ctx, cancel := context.WithTimeout(cobraCmd.Context(), timeout) + defer cancel() + + // Get transaction data (hex-encoded for CLI convenience) + txHex, err := cobraCmd.Flags().GetString(flagTxData) + if err != nil { + return fmt.Errorf("failed to get tx flag: %w", err) + } + + if txHex == "" { + return fmt.Errorf("transaction data cannot be empty") + } + + // Remove 0x prefix if present + if len(txHex) >= 2 && txHex[:2] == "0x" { + txHex = txHex[2:] + } + + // Decode hex to raw transaction bytes. + // These are the raw bytes that will be submitted to Celestia and would be + // passed to ExecuteTxs in the ABCI adapter. + txData, err := hex.DecodeString(txHex) + if err != nil { + return fmt.Errorf("failed to decode hex transaction: %w", err) + } + + if len(txData) == 0 { + return fmt.Errorf("transaction data cannot be empty") + } + + // Load evolve configuration + cfg, err := rollconf.Load(cobraCmd) + if err != nil { + return fmt.Errorf("failed to load config: %w", err) + } + + if err := cfg.Validate(); err != nil { + return fmt.Errorf("invalid config: %w", err) + } + + // Get namespace (use flag if provided, otherwise use config) + namespace, err := cobraCmd.Flags().GetString(flagNamespace) + if err != nil { + return fmt.Errorf("failed to get namespace flag: %w", err) + } + + if namespace == "" { + namespace = cfg.DA.GetNamespace() + } + + namespaceBz := da.NamespaceFromString(namespace).Bytes() + + // Get gas price (use flag if provided, otherwise use config) + gasPrice, err := cobraCmd.Flags().GetFloat64(flagGasPrice) + if err != nil { + return fmt.Errorf("failed to get gas-price flag: %w", err) + } + + if gasPrice == -1 { + gasPrice = cfg.DA.GasPrice + } + + // Get submit options (use flag if provided, otherwise use config) + submitOpts, err := cobraCmd.Flags().GetString(flagSubmitOpts) + if err != nil { + return fmt.Errorf("failed to get submit-options flag: %w", err) + } + + if submitOpts == "" { + submitOpts = cfg.DA.SubmitOptions + } + + // Setup logger + logger := zerolog.New(os.Stderr).With(). + Timestamp(). + Str("component", "post-tx"). + Logger() + + logger.Info(). + Str("namespace", namespace). + Float64("gas_price", gasPrice). + Int("tx_size", len(txData)). + Msg("posting transaction to Celestia") + + // Create DA client + submitCtx, submitCancel := context.WithTimeout(ctx, timeout) + defer submitCancel() + + daClient, err := jsonrpc.NewClient( + submitCtx, + logger, + cfg.DA.Address, + cfg.DA.AuthToken, + gasPrice, + cfg.DA.GasMultiplier, + cmd.DefaultMaxBlobSize, + ) + if err != nil { + return fmt.Errorf("failed to create DA client: %w", err) + } + + // Submit transaction to DA layer. + // The raw bytes (txData) are submitted as-is to Celestia. + logger.Info().Msg("submitting transaction to DA layer...") + + blobs := [][]byte{txData} + options := []byte(submitOpts) + + result := types.SubmitWithHelpers(submitCtx, &daClient.DA, logger, blobs, gasPrice, namespaceBz, options) + + // Check result + switch result.Code { + case da.StatusSuccess: + logger.Info().Msg("transaction successfully submitted to DA layer") + fmt.Fprintf(cobraCmd.OutOrStdout(), "\n✓ Transaction posted successfully\n\n") + fmt.Fprintf(cobraCmd.OutOrStdout(), "Namespace: %s\n", namespace) + fmt.Fprintf(cobraCmd.OutOrStdout(), "DA Height: %d\n", result.Height) + fmt.Fprintf(cobraCmd.OutOrStdout(), "Gas Price: %.2f\n", gasPrice) + fmt.Fprintf(cobraCmd.OutOrStdout(), "Data Size: %d bytes\n", len(txData)) + fmt.Fprintf(cobraCmd.OutOrStdout(), "\n") + return nil + + case da.StatusTooBig: + return fmt.Errorf("transaction too large for DA layer: %s", result.Message) + + case da.StatusNotIncludedInBlock: + return fmt.Errorf("transaction not included in DA block: %s", result.Message) + + case da.StatusAlreadyInMempool: + fmt.Fprintf(cobraCmd.OutOrStdout(), "⚠ Transaction already in mempool\n") + if result.Height > 0 { + fmt.Fprintf(cobraCmd.OutOrStdout(), " DA Height: %d\n", result.Height) + } + return nil + + case da.StatusContextCanceled: + return fmt.Errorf("submission canceled: %s", result.Message) + + default: + return fmt.Errorf("DA submission failed (code: %d): %s", result.Code, result.Message) + } +} diff --git a/server/post_tx_cmd_test.go b/server/post_tx_cmd_test.go new file mode 100644 index 00000000..613f217d --- /dev/null +++ b/server/post_tx_cmd_test.go @@ -0,0 +1,39 @@ +package server + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestPostTxCmd_NamespaceFallback(t *testing.T) { + tests := []struct { + name string + flagValue string + configValue string + expectedResult string + }{ + { + name: "use flag value when provided", + flagValue: "0000000000000000000000000000000000000000000001", + configValue: "0000000000000000000000000000000000000000000002", + expectedResult: "0000000000000000000000000000000000000000000001", + }, + { + name: "use config value when flag is empty", + flagValue: "", + configValue: "0000000000000000000000000000000000000000000002", + expectedResult: "0000000000000000000000000000000000000000000002", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + namespace := tt.flagValue + if namespace == "" { + namespace = tt.configValue + } + assert.Equal(t, tt.expectedResult, namespace) + }) + } +} From d409bc2bd9fbb7dedfb2d1ed109c9ef14d2b9a67 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Mon, 10 Nov 2025 11:25:23 +0100 Subject: [PATCH 02/30] ai readme --- server/POST_TX_COMMAND.md | 348 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 348 insertions(+) create mode 100644 server/POST_TX_COMMAND.md diff --git a/server/POST_TX_COMMAND.md b/server/POST_TX_COMMAND.md new file mode 100644 index 00000000..f5d15630 --- /dev/null +++ b/server/POST_TX_COMMAND.md @@ -0,0 +1,348 @@ +# Post Transaction Command + +The `post-tx` command allows you to post a signed transaction directly to a Celestia namespace using the Evolve node's DA configuration. + +## Overview + +This command submits raw transaction bytes to the configured Celestia Data Availability (DA) layer. The transaction bytes are the same format that would be passed to `ExecuteTxs` in the ABCI adapter. + +It's useful for: + +- Testing DA submission without running a full node +- Manually posting transaction data to specific namespaces +- Debugging DA layer connectivity and configuration +- Submitting raw transaction bytes from external sources + +## Usage + +```bash +evabcid post-tx --tx [flags] +``` + +## Required Flags + +- `--tx`: Hex-encoded raw transaction bytes (required) + - The hex string represents the raw transaction bytes that will be submitted to Celestia + - These are the same bytes that would be passed to `ExecuteTxs` in the ABCI adapter + - Hex encoding is only for CLI convenience; raw bytes are decoded and submitted + +## Optional Flags + +### Transaction-Specific Flags + +- `--namespace`: Celestia namespace ID to post to + - If not provided, uses the namespace from config (`evnode.da.namespace`) + - Format: 58-character hex string representing the namespace +- `--gas-price`: Gas price for DA submission + - Default: `-1` (uses config value) + - If set to `-1`, uses `evnode.da.gas_price` from config + - If config also uses auto pricing, DA layer determines the price + +- `--timeout`: Timeout duration for the submission + - Default: `60s` (1 minute) + - Examples: `30s`, `2m`, `1m30s` + +- `--submit-options`: Additional submit options for DA layer + - If not provided, uses `evnode.da.submit_options` from config + +### Configuration Flags + +The command also accepts all Evolve configuration flags (prefixed with `--evnode.`): + +- `--evnode.da.address`: DA layer RPC address (default: `http://localhost:7980`) +- `--evnode.da.auth_token`: Authentication token for DA layer +- `--evnode.da.block_time`: DA chain block time (default: `6s`) +- `--evnode.da.gas_multiplier`: Gas price multiplier for retries +- And many more... (see `--help` for complete list) + +## Examples + +### Basic Usage + +Post a transaction using config defaults: + +```bash +evabcid post-tx --tx deadbeef1234567890abcdef +``` + +### With Custom Namespace + +Post to a specific Celestia namespace: + +```bash +evabcid post-tx \ + --tx 0xdeadbeef1234567890abcdef \ + --namespace 0000000000000000000000000000000000000000000001 +``` + +### With Custom Gas Price + +Post with explicit gas price: + +```bash +evabcid post-tx \ + --tx deadbeef1234567890abcdef \ + --gas-price 0.025 +``` + +### With DA Configuration Override + +Post using a specific DA endpoint: + +```bash +evabcid post-tx \ + --tx deadbeef1234567890abcdef \ + --evnode.da.address http://celestia-node:7980 \ + --evnode.da.auth_token my-secret-token +``` + +### With Custom Timeout + +Post with extended timeout: + +```bash +evabcid post-tx \ + --tx deadbeef1234567890abcdef \ + --timeout 5m +``` + +## Transaction Data Format + +The transaction data (`--tx` flag) must be provided as a hex-encoded string for CLI convenience. The command will: + +1. Decode the hex string to raw bytes +2. Submit those raw bytes to Celestia as a blob +3. These bytes are the same format that `ExecuteTxs` expects in the ABCI adapter + +Requirements: + +- With or without `0x` prefix: Both `0xdeadbeef` and `deadbeef` are accepted +- Must be valid hexadecimal characters (0-9, a-f, A-F) +- Cannot be empty after decoding +- The decoded bytes should be valid transaction data in your chain's format + +## Output + +### Success + +On successful submission, the command outputs: + +``` +✓ Transaction posted successfully + +Namespace: 0000000000000000000000000000000000000000000001 +DA Height: 12345 +Gas Price: 0.02 +Data Size: 256 bytes +``` + +Where: + +- **Namespace**: The Celestia namespace where the transaction was posted +- **DA Height**: The height of the DA block containing the transaction +- **Gas Price**: The gas price used for the submission +- **Data Size**: Size of the submitted transaction data in bytes + +### Already in Mempool + +If the transaction is already in the mempool: + +``` +⚠ Transaction already in mempool + DA Height: 12345 +``` + +### Errors + +Common error cases: + +1. **Invalid hex encoding**: + + ``` + Error: failed to decode hex transaction: encoding/hex: invalid byte: U+006E 'n' + ``` + +2. **Transaction too large**: + + ``` + Error: transaction too large for DA layer: blob size exceeds maximum + ``` + +3. **Connection failure**: + + ``` + Error: failed to create DA client: dial tcp: connection refused + ``` + +4. **Timeout**: + ``` + Error: submission canceled: context deadline exceeded + ``` + +## Configuration File + +The command reads configuration from `~/.evabci/config/evnode.yaml` by default. You can override the location with the `--home` flag: + +```bash +evabcid post-tx --tx deadbeef --home /custom/path +``` + +Example `evnode.yaml` configuration: + +```yaml +da: + address: "http://localhost:7980" + auth_token: "your-token-here" + namespace: "M21eldetxV" + gas_price: 0.025 + gas_multiplier: 1.1 + block_time: 6s + submit_options: "" +``` + +## Return Codes + +- `0`: Success - transaction posted successfully +- `1`: Error - invalid input, configuration error, or DA submission failure + +## Technical Details + +### DA Submission Flow + +1. Parse hex-encoded input from CLI +2. Decode hex to raw transaction bytes +3. Load Evolve configuration +4. Create DA client with configured parameters +5. Submit raw bytes as a blob to Celestia +6. Return submission result with DA height + +**Note**: The raw bytes submitted are exactly what would be passed to `ExecuteTxs` in the ABCI adapter. Hex encoding is only used for CLI input convenience. + +### Retry Behavior + +The command uses the DA client's built-in retry logic: + +- Retries on transient failures (network issues, mempool full) +- Increases gas price on retries (based on `gas_multiplier`) +- Respects the configured `max_submit_attempts` +- Backs off exponentially between retries + +### Blob Size Limits + +The maximum blob size is determined by the DA layer (Celestia). Currently: + +- Default max blob size: ~1.5 MB +- If transaction exceeds this, you'll receive a `StatusTooBig` error + +## Use Cases + +### 1. Testing DA Connectivity + +Quickly verify your DA configuration works: + +```bash +# Convert raw text to hex and submit +echo -n "test" | xxd -p | evabcid post-tx --tx $(cat -) + +# Or submit any raw bytes +evabcid post-tx --tx $(echo "test data" | xxd -p -c 0) +``` + +### 2. Manual Transaction Submission + +Submit raw transaction bytes from a file: + +```bash +# If you have hex-encoded transaction +TX_HEX=$(cat transaction.hex) +evabcid post-tx --tx $TX_HEX --namespace + +# If you have raw bytes, encode to hex first +TX_HEX=$(xxd -p -c 0 transaction.bin) +evabcid post-tx --tx $TX_HEX --namespace +``` + +### 3. CI/CD Integration + +Automate transaction posting in scripts: + +```bash +#!/bin/bash +TX_HEX="deadbeef1234567890" +if evabcid post-tx --tx $TX_HEX; then + echo "Transaction posted successfully" + exit 0 +else + echo "Failed to post transaction" + exit 1 +fi +``` + +### 4. Posting Arbitrary Data + +Post any raw data to Celestia: + +```bash +# Convert any file to hex and post +FILE_HEX=$(xxd -p -c 0 data.bin) +evabcid post-tx --tx $FILE_HEX --namespace + +# Post JSON data +JSON_HEX=$(echo '{"key":"value"}' | xxd -p -c 0) +evabcid post-tx --tx $JSON_HEX --namespace +``` + +## Troubleshooting + +### "required flag(s) 'tx' not set" + +You must provide the `--tx` flag with hex-encoded transaction bytes. + +### "failed to decode hex transaction" + +Ensure your input is valid hexadecimal: + +- Remove any spaces, newlines, or non-hex characters +- Valid characters: 0-9, a-f, A-F +- Optional `0x` prefix is accepted + +If you have raw bytes in a file, encode them to hex first: + +```bash +xxd -p -c 0 transaction.bin +``` + +### "failed to load config" + +Verify that: + +1. The config file exists at `~/.evabci/config/evnode.yaml` +2. The YAML syntax is valid +3. You have read permissions + +### "invalid config: namespace cannot be empty" + +Set the namespace either via: + +- `--namespace` flag +- `evnode.da.namespace` in config file + +### "failed to create DA client: connection refused" + +Check that: + +1. The DA node is running +2. The address in config is correct +3. Firewall allows the connection + +## Related Commands + +- `evabcid init`: Initialize Evolve configuration +- `evabcid start`: Start the Evolve node (includes DA submission) +- `evabcid evolve-migrate`: Migrate from CometBFT to Evolve + +## See Also + +- [Evolve Documentation](https://docs.evstack.org) +- [Celestia Documentation](https://docs.celestia.org) +- [ev-node DA Submitter](https://github.com/evstack/ev-node/tree/main/block/internal/submitting) From 5c782296501fdd3757cebbb1dd173264c1e1b69c Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Mon, 10 Nov 2025 17:07:07 +0100 Subject: [PATCH 03/30] updates --- server/post_tx_cmd.go | 133 ++++++++++---- server/post_tx_cmd_test.go | 358 ++++++++++++++++++++++++++++++++++++- 2 files changed, 452 insertions(+), 39 deletions(-) diff --git a/server/post_tx_cmd.go b/server/post_tx_cmd.go index b7265792..eb45e798 100644 --- a/server/post_tx_cmd.go +++ b/server/post_tx_cmd.go @@ -2,11 +2,14 @@ package server import ( "context" - "encoding/hex" + "encoding/json" "fmt" "os" "time" + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" "github.com/rs/zerolog" "github.com/spf13/cobra" @@ -15,10 +18,13 @@ import ( "github.com/evstack/ev-node/pkg/cmd" rollconf "github.com/evstack/ev-node/pkg/config" "github.com/evstack/ev-node/types" + + migrationtypes "github.com/evstack/ev-abci/modules/migrationmngr/types" + networktypes "github.com/evstack/ev-abci/modules/network/types" ) const ( - flagTxData = "tx" + flagTx = "tx" flagNamespace = "namespace" flagGasPrice = "gas-price" flagTimeout = "timeout" @@ -34,11 +40,20 @@ func PostTxCmd() *cobra.Command { Short: "Post a signed transaction to Celestia namespace", Long: `Post a signed transaction to a Celestia namespace using the Evolve configuration. -This command submits a raw signed transaction to the configured Celestia DA layer. -The transaction data should be provided as a hex-encoded string. +This command submits a signed transaction to the configured Celestia DA layer. +The transaction is provided via the --tx flag, which accepts either: + 1. A path to a JSON file containing the transaction + 2. A JSON string directly + +The command automatically detects whether the input is a file path or JSON string. +The JSON format must match the Cosmos SDK transaction JSON format. -Example: - evabcid post-tx --tx 0x1234567890abcdef --namespace 0000000000000000000000000000000000000000000001 +Examples: + # From JSON file + evabcid post-tx --tx tx.json + + # From JSON string + evabcid post-tx --tx '{"body":{...},"auth_info":{...},"signatures":[...]}' `, Args: cobra.NoArgs, RunE: postTxRunE, @@ -48,23 +63,19 @@ Example: rollconf.AddFlags(cobraCmd) // Add command-specific flags - cobraCmd.Flags().String(flagTxData, "", "Hex-encoded signed transaction data (required)") + cobraCmd.Flags().String(flagTx, "", "Transaction as JSON file path or JSON string (required)") cobraCmd.Flags().String(flagNamespace, "", "Celestia namespace ID (if not provided, uses config namespace)") cobraCmd.Flags().Float64(flagGasPrice, -1, "Gas price for DA submission (if not provided, uses config gas price)") cobraCmd.Flags().Duration(flagTimeout, defaultTimeout, "Timeout for DA submission") cobraCmd.Flags().String(flagSubmitOpts, "", "Additional submit options (if not provided, uses config submit options)") - _ = cobraCmd.MarkFlagRequired(flagTxData) + _ = cobraCmd.MarkFlagRequired(flagTx) return cobraCmd } -// postTxRunE executes the post-tx command. -// It accepts hex-encoded transaction bytes via CLI (for convenience), -// decodes them to raw bytes, and submits those raw bytes to Celestia DA. -// The raw bytes are the same format that would be passed to ExecuteTxs in the ABCI adapter. +// postTxRunE executes the post-tx command func postTxRunE(cobraCmd *cobra.Command, _ []string) error { - // Get timeout from flags timeout, err := cobraCmd.Flags().GetDuration(flagTimeout) if err != nil { return fmt.Errorf("failed to get timeout flag: %w", err) @@ -73,27 +84,29 @@ func postTxRunE(cobraCmd *cobra.Command, _ []string) error { ctx, cancel := context.WithTimeout(cobraCmd.Context(), timeout) defer cancel() - // Get transaction data (hex-encoded for CLI convenience) - txHex, err := cobraCmd.Flags().GetString(flagTxData) + // Get transaction input + txInput, err := cobraCmd.Flags().GetString(flagTx) if err != nil { return fmt.Errorf("failed to get tx flag: %w", err) } - if txHex == "" { - return fmt.Errorf("transaction data cannot be empty") + if txInput == "" { + return fmt.Errorf("transaction cannot be empty") } - // Remove 0x prefix if present - if len(txHex) >= 2 && txHex[:2] == "0x" { - txHex = txHex[2:] - } - - // Decode hex to raw transaction bytes. - // These are the raw bytes that will be submitted to Celestia and would be - // passed to ExecuteTxs in the ABCI adapter. - txData, err := hex.DecodeString(txHex) - if err != nil { - return fmt.Errorf("failed to decode hex transaction: %w", err) + var txData []byte + if _, err := os.Stat(txInput); err == nil { + // Input is a file path + txData, err = decodeTxFromFile(txInput) + if err != nil { + return fmt.Errorf("failed to decode transaction from file: %w", err) + } + } else { + // Input is a JSON string + txData, err = decodeTxFromJSON(txInput) + if err != nil { + return fmt.Errorf("failed to decode transaction from JSON: %w", err) + } } if len(txData) == 0 { @@ -171,8 +184,7 @@ func postTxRunE(cobraCmd *cobra.Command, _ []string) error { return fmt.Errorf("failed to create DA client: %w", err) } - // Submit transaction to DA layer. - // The raw bytes (txData) are submitted as-is to Celestia. + // Submit transaction to DA layer logger.Info().Msg("submitting transaction to DA layer...") blobs := [][]byte{txData} @@ -184,12 +196,12 @@ func postTxRunE(cobraCmd *cobra.Command, _ []string) error { switch result.Code { case da.StatusSuccess: logger.Info().Msg("transaction successfully submitted to DA layer") - fmt.Fprintf(cobraCmd.OutOrStdout(), "\n✓ Transaction posted successfully\n\n") - fmt.Fprintf(cobraCmd.OutOrStdout(), "Namespace: %s\n", namespace) - fmt.Fprintf(cobraCmd.OutOrStdout(), "DA Height: %d\n", result.Height) - fmt.Fprintf(cobraCmd.OutOrStdout(), "Gas Price: %.2f\n", gasPrice) - fmt.Fprintf(cobraCmd.OutOrStdout(), "Data Size: %d bytes\n", len(txData)) - fmt.Fprintf(cobraCmd.OutOrStdout(), "\n") + cobraCmd.Printf("\n✓ Transaction posted successfully\n\n") + cobraCmd.Printf("Namespace: %s\n", namespace) + cobraCmd.Printf("DA Height: %d\n", result.Height) + cobraCmd.Printf("Gas Price: %.2f\n", gasPrice) + cobraCmd.Printf("Data Size: %d bytes\n", len(txData)) + cobraCmd.Printf("\n") return nil case da.StatusTooBig: @@ -199,9 +211,9 @@ func postTxRunE(cobraCmd *cobra.Command, _ []string) error { return fmt.Errorf("transaction not included in DA block: %s", result.Message) case da.StatusAlreadyInMempool: - fmt.Fprintf(cobraCmd.OutOrStdout(), "⚠ Transaction already in mempool\n") + cobraCmd.Printf("⚠ Transaction already in mempool\n") if result.Height > 0 { - fmt.Fprintf(cobraCmd.OutOrStdout(), " DA Height: %d\n", result.Height) + cobraCmd.Printf(" DA Height: %d\n", result.Height) } return nil @@ -212,3 +224,48 @@ func postTxRunE(cobraCmd *cobra.Command, _ []string) error { return fmt.Errorf("DA submission failed (code: %d): %s", result.Code, result.Message) } } + +// decodeTxFromFile reads a JSON transaction from a file and decodes it to bytes +func decodeTxFromFile(filePath string) ([]byte, error) { + jsonData, err := os.ReadFile(filePath) + if err != nil { + return nil, fmt.Errorf("reading file: %w", err) + } + + return decodeTxFromJSON(string(jsonData)) +} + +// decodeTxFromJSON decodes a JSON transaction string to bytes +func decodeTxFromJSON(jsonStr string) ([]byte, error) { + // Create interface registry and codec + interfaceRegistry := codectypes.NewInterfaceRegistry() + + // Register interfaces for modules + migrationtypes.RegisterInterfaces(interfaceRegistry) + networktypes.RegisterInterfaces(interfaceRegistry) + + protoCodec := codec.NewProtoCodec(interfaceRegistry) + txConfig := authtx.NewTxConfig(protoCodec, authtx.DefaultSignModes) + + // First try to decode as a Cosmos SDK transaction JSON + var txJSON map[string]interface{} + if err := json.Unmarshal([]byte(jsonStr), &txJSON); err != nil { + return nil, fmt.Errorf("parsing JSON: %w", err) + } + + // Use the SDK's JSON decoder + txJSONDecoder := txConfig.TxJSONDecoder() + tx, err := txJSONDecoder([]byte(jsonStr)) + if err != nil { + return nil, fmt.Errorf("decoding transaction JSON: %w", err) + } + + // Encode the transaction to bytes + txEncoder := txConfig.TxEncoder() + txBytes, err := txEncoder(tx) + if err != nil { + return nil, fmt.Errorf("encoding transaction: %w", err) + } + + return txBytes, nil +} diff --git a/server/post_tx_cmd_test.go b/server/post_tx_cmd_test.go index 613f217d..7892875a 100644 --- a/server/post_tx_cmd_test.go +++ b/server/post_tx_cmd_test.go @@ -1,11 +1,367 @@ package server import ( + "os" + "path/filepath" "testing" - "github.com/stretchr/testify/assert" + "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" + "gotest.tools/v3/assert" + + migrationtypes "github.com/evstack/ev-abci/modules/migrationmngr/types" + networktypes "github.com/evstack/ev-abci/modules/network/types" ) +func TestDecodeTxFromJSON(t *testing.T) { + tests := []struct { + name string + jsonStr string + wantErr bool + }{ + { + name: "valid empty transaction", + jsonStr: `{ + "body": { + "messages": [], + "memo": "", + "timeout_height": "0", + "extension_options": [], + "non_critical_extension_options": [] + }, + "auth_info": { + "signer_infos": [], + "fee": { + "amount": [], + "gas_limit": "200000", + "payer": "", + "granter": "" + } + }, + "signatures": [] + }`, + wantErr: false, + }, + { + name: "invalid json", + jsonStr: `{invalid}`, + wantErr: true, + }, + { + name: "empty string", + jsonStr: "", + wantErr: true, + }, + { + name: "transaction with fee", + jsonStr: `{ + "body": { + "messages": [], + "memo": "test memo", + "timeout_height": "0", + "extension_options": [], + "non_critical_extension_options": [] + }, + "auth_info": { + "signer_infos": [], + "fee": { + "amount": [{"denom": "stake", "amount": "200"}], + "gas_limit": "200000", + "payer": "", + "granter": "" + } + }, + "signatures": [] + }`, + wantErr: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + txBytes, err := decodeTxFromJSON(tt.jsonStr) + + if tt.wantErr { + assert.Assert(t, err != nil, "expected error but got none") + return + } + + assert.NilError(t, err) + assert.Assert(t, len(txBytes) > 0, "expected non-empty transaction bytes") + + // Verify we can decode the bytes back + interfaceRegistry := codectypes.NewInterfaceRegistry() + migrationtypes.RegisterInterfaces(interfaceRegistry) + networktypes.RegisterInterfaces(interfaceRegistry) + protoCodec := codec.NewProtoCodec(interfaceRegistry) + txConfig := authtx.NewTxConfig(protoCodec, authtx.DefaultSignModes) + + decodedTx, err := txConfig.TxDecoder()(txBytes) + assert.NilError(t, err) + assert.Assert(t, decodedTx != nil) + }) + } +} + +func TestDecodeTxFromFile(t *testing.T) { + // Create a temporary directory + tmpDir := t.TempDir() + + validTxJSON := `{ + "body": { + "messages": [], + "memo": "test from file", + "timeout_height": "0", + "extension_options": [], + "non_critical_extension_options": [] + }, + "auth_info": { + "signer_infos": [], + "fee": { + "amount": [], + "gas_limit": "200000", + "payer": "", + "granter": "" + } + }, + "signatures": [] + }` + + tests := []struct { + name string + setupFile func() string + wantErr bool + errContains string + }{ + { + name: "valid transaction file", + setupFile: func() string { + filePath := filepath.Join(tmpDir, "valid_tx.json") + err := os.WriteFile(filePath, []byte(validTxJSON), 0644) + assert.NilError(t, err) + return filePath + }, + wantErr: false, + }, + { + name: "non-existent file", + setupFile: func() string { + return filepath.Join(tmpDir, "nonexistent.json") + }, + wantErr: true, + errContains: "reading file", + }, + { + name: "invalid json in file", + setupFile: func() string { + filePath := filepath.Join(tmpDir, "invalid.json") + err := os.WriteFile(filePath, []byte(`{invalid json}`), 0644) + assert.NilError(t, err) + return filePath + }, + wantErr: true, + errContains: "parsing JSON", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + filePath := tt.setupFile() + txBytes, err := decodeTxFromFile(filePath) + + if tt.wantErr { + assert.Assert(t, err != nil, "expected error but got none") + if tt.errContains != "" { + assert.ErrorContains(t, err, tt.errContains) + } + return + } + + assert.NilError(t, err) + assert.Assert(t, len(txBytes) > 0, "expected non-empty transaction bytes") + }) + } +} + +func TestCreateClientContext(t *testing.T) { + clientCtx, err := createClientContext() + assert.NilError(t, err) + assert.Assert(t, clientCtx.TxConfig != nil, "TxConfig should not be nil") + assert.Assert(t, clientCtx.InterfaceRegistry != nil, "InterfaceRegistry should not be nil") + assert.Assert(t, clientCtx.Codec != nil, "Codec should not be nil") +} + +func TestRoundTripEncodeDecode(t *testing.T) { + // Create a simple transaction + interfaceRegistry := codectypes.NewInterfaceRegistry() + migrationtypes.RegisterInterfaces(interfaceRegistry) + networktypes.RegisterInterfaces(interfaceRegistry) + protoCodec := codec.NewProtoCodec(interfaceRegistry) + txConfig := authtx.NewTxConfig(protoCodec, authtx.DefaultSignModes) + + txBuilder := txConfig.NewTxBuilder() + txBuilder.SetMemo("test round trip") + txBuilder.SetGasLimit(200000) + txBuilder.SetFeeAmount(sdk.NewCoins(sdk.NewCoin("stake", math.NewInt(200)))) + + // Encode to bytes + txEncoder := txConfig.TxEncoder() + txBytes, err := txEncoder(txBuilder.GetTx()) + assert.NilError(t, err) + + // Encode to JSON + txJSONEncoder := txConfig.TxJSONEncoder() + txJSON, err := txJSONEncoder(txBuilder.GetTx()) + assert.NilError(t, err) + + // Decode from JSON back to bytes using our function + decodedBytes, err := decodeTxFromJSON(string(txJSON)) + assert.NilError(t, err) + + // Verify the bytes match + assert.DeepEqual(t, txBytes, decodedBytes) + + // Verify we can decode back to transaction + txDecoder := txConfig.TxDecoder() + decodedTx, err := txDecoder(decodedBytes) + assert.NilError(t, err) + + // Verify memo matches + txWithMemo, ok := decodedTx.(sdk.TxWithMemo) + assert.Assert(t, ok, "transaction should implement TxWithMemo") + assert.Equal(t, "test round trip", txWithMemo.GetMemo()) +} + +func TestAutoDetectFileVsJSON(t *testing.T) { + tmpDir := t.TempDir() + + validTxJSON := `{ + "body": { + "messages": [], + "memo": "auto-detect test", + "timeout_height": "0", + "extension_options": [], + "non_critical_extension_options": [] + }, + "auth_info": { + "signer_infos": [], + "fee": { + "amount": [], + "gas_limit": "200000", + "payer": "", + "granter": "" + } + }, + "signatures": [] + }` + + // Create a test file + filePath := filepath.Join(tmpDir, "test_tx.json") + err := os.WriteFile(filePath, []byte(validTxJSON), 0644) + assert.NilError(t, err) + + tests := []struct { + name string + input string + wantErr bool + }{ + { + name: "detect file path", + input: filePath, + wantErr: false, + }, + { + name: "detect JSON string", + input: validTxJSON, + wantErr: false, + }, + { + name: "non-existent file treated as invalid JSON", + input: "/nonexistent/path/to/file.json", + wantErr: true, + }, + { + name: "invalid JSON string", + input: "{invalid json}", + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + var txData []byte + var err error + + // Simulate the auto-detect logic from postTxRunE + if _, statErr := os.Stat(tt.input); statErr == nil { + // Input is a file path + txData, err = decodeTxFromFile(tt.input) + } else { + // Input is a JSON string + txData, err = decodeTxFromJSON(tt.input) + } + + if tt.wantErr { + assert.Assert(t, err != nil, "expected error but got none") + return + } + + assert.NilError(t, err) + assert.Assert(t, len(txData) > 0, "expected non-empty transaction bytes") + }) + } +} + +func TestTransactionJSONStructure(t *testing.T) { + // Test that we can properly marshal and unmarshal transaction JSON + txJSON := `{ + "body": { + "messages": [], + "memo": "structure test", + "timeout_height": "100", + "extension_options": [], + "non_critical_extension_options": [] + }, + "auth_info": { + "signer_infos": [], + "fee": { + "amount": [{"denom": "stake", "amount": "1000"}], + "gas_limit": "300000", + "payer": "", + "granter": "" + } + }, + "signatures": [] + }` + + // Decode to bytes + txBytes, err := decodeTxFromJSON(txJSON) + assert.NilError(t, err) + + // Decode bytes to transaction + interfaceRegistry := codectypes.NewInterfaceRegistry() + migrationtypes.RegisterInterfaces(interfaceRegistry) + networktypes.RegisterInterfaces(interfaceRegistry) + protoCodec := codec.NewProtoCodec(interfaceRegistry) + txConfig := authtx.NewTxConfig(protoCodec, authtx.DefaultSignModes) + + decodedTx, err := txConfig.TxDecoder()(txBytes) + assert.NilError(t, err) + + // Verify structure + txWithMemo, ok := decodedTx.(sdk.TxWithMemo) + assert.Assert(t, ok) + assert.Equal(t, "structure test", txWithMemo.GetMemo()) + + feeTx, ok := decodedTx.(sdk.FeeTx) + assert.Assert(t, ok) + assert.Equal(t, uint64(300000), feeTx.GetGas()) + assert.Equal(t, "1000stake", feeTx.GetFee().String()) +} + func TestPostTxCmd_NamespaceFallback(t *testing.T) { tests := []struct { name string From 8adf4942c441b5f3b0923c92339883e3a04aec4e Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Mon, 10 Nov 2025 17:10:15 +0100 Subject: [PATCH 04/30] updates --- server/POST_TX_COMMAND.md | 348 --------------------- server/docs/POST_TX_COMMAND.md | 548 +++++++++++++++++++++++++++++++++ server/post_tx_cmd_test.go | 8 - 3 files changed, 548 insertions(+), 356 deletions(-) delete mode 100644 server/POST_TX_COMMAND.md create mode 100644 server/docs/POST_TX_COMMAND.md diff --git a/server/POST_TX_COMMAND.md b/server/POST_TX_COMMAND.md deleted file mode 100644 index f5d15630..00000000 --- a/server/POST_TX_COMMAND.md +++ /dev/null @@ -1,348 +0,0 @@ -# Post Transaction Command - -The `post-tx` command allows you to post a signed transaction directly to a Celestia namespace using the Evolve node's DA configuration. - -## Overview - -This command submits raw transaction bytes to the configured Celestia Data Availability (DA) layer. The transaction bytes are the same format that would be passed to `ExecuteTxs` in the ABCI adapter. - -It's useful for: - -- Testing DA submission without running a full node -- Manually posting transaction data to specific namespaces -- Debugging DA layer connectivity and configuration -- Submitting raw transaction bytes from external sources - -## Usage - -```bash -evabcid post-tx --tx [flags] -``` - -## Required Flags - -- `--tx`: Hex-encoded raw transaction bytes (required) - - The hex string represents the raw transaction bytes that will be submitted to Celestia - - These are the same bytes that would be passed to `ExecuteTxs` in the ABCI adapter - - Hex encoding is only for CLI convenience; raw bytes are decoded and submitted - -## Optional Flags - -### Transaction-Specific Flags - -- `--namespace`: Celestia namespace ID to post to - - If not provided, uses the namespace from config (`evnode.da.namespace`) - - Format: 58-character hex string representing the namespace -- `--gas-price`: Gas price for DA submission - - Default: `-1` (uses config value) - - If set to `-1`, uses `evnode.da.gas_price` from config - - If config also uses auto pricing, DA layer determines the price - -- `--timeout`: Timeout duration for the submission - - Default: `60s` (1 minute) - - Examples: `30s`, `2m`, `1m30s` - -- `--submit-options`: Additional submit options for DA layer - - If not provided, uses `evnode.da.submit_options` from config - -### Configuration Flags - -The command also accepts all Evolve configuration flags (prefixed with `--evnode.`): - -- `--evnode.da.address`: DA layer RPC address (default: `http://localhost:7980`) -- `--evnode.da.auth_token`: Authentication token for DA layer -- `--evnode.da.block_time`: DA chain block time (default: `6s`) -- `--evnode.da.gas_multiplier`: Gas price multiplier for retries -- And many more... (see `--help` for complete list) - -## Examples - -### Basic Usage - -Post a transaction using config defaults: - -```bash -evabcid post-tx --tx deadbeef1234567890abcdef -``` - -### With Custom Namespace - -Post to a specific Celestia namespace: - -```bash -evabcid post-tx \ - --tx 0xdeadbeef1234567890abcdef \ - --namespace 0000000000000000000000000000000000000000000001 -``` - -### With Custom Gas Price - -Post with explicit gas price: - -```bash -evabcid post-tx \ - --tx deadbeef1234567890abcdef \ - --gas-price 0.025 -``` - -### With DA Configuration Override - -Post using a specific DA endpoint: - -```bash -evabcid post-tx \ - --tx deadbeef1234567890abcdef \ - --evnode.da.address http://celestia-node:7980 \ - --evnode.da.auth_token my-secret-token -``` - -### With Custom Timeout - -Post with extended timeout: - -```bash -evabcid post-tx \ - --tx deadbeef1234567890abcdef \ - --timeout 5m -``` - -## Transaction Data Format - -The transaction data (`--tx` flag) must be provided as a hex-encoded string for CLI convenience. The command will: - -1. Decode the hex string to raw bytes -2. Submit those raw bytes to Celestia as a blob -3. These bytes are the same format that `ExecuteTxs` expects in the ABCI adapter - -Requirements: - -- With or without `0x` prefix: Both `0xdeadbeef` and `deadbeef` are accepted -- Must be valid hexadecimal characters (0-9, a-f, A-F) -- Cannot be empty after decoding -- The decoded bytes should be valid transaction data in your chain's format - -## Output - -### Success - -On successful submission, the command outputs: - -``` -✓ Transaction posted successfully - -Namespace: 0000000000000000000000000000000000000000000001 -DA Height: 12345 -Gas Price: 0.02 -Data Size: 256 bytes -``` - -Where: - -- **Namespace**: The Celestia namespace where the transaction was posted -- **DA Height**: The height of the DA block containing the transaction -- **Gas Price**: The gas price used for the submission -- **Data Size**: Size of the submitted transaction data in bytes - -### Already in Mempool - -If the transaction is already in the mempool: - -``` -⚠ Transaction already in mempool - DA Height: 12345 -``` - -### Errors - -Common error cases: - -1. **Invalid hex encoding**: - - ``` - Error: failed to decode hex transaction: encoding/hex: invalid byte: U+006E 'n' - ``` - -2. **Transaction too large**: - - ``` - Error: transaction too large for DA layer: blob size exceeds maximum - ``` - -3. **Connection failure**: - - ``` - Error: failed to create DA client: dial tcp: connection refused - ``` - -4. **Timeout**: - ``` - Error: submission canceled: context deadline exceeded - ``` - -## Configuration File - -The command reads configuration from `~/.evabci/config/evnode.yaml` by default. You can override the location with the `--home` flag: - -```bash -evabcid post-tx --tx deadbeef --home /custom/path -``` - -Example `evnode.yaml` configuration: - -```yaml -da: - address: "http://localhost:7980" - auth_token: "your-token-here" - namespace: "M21eldetxV" - gas_price: 0.025 - gas_multiplier: 1.1 - block_time: 6s - submit_options: "" -``` - -## Return Codes - -- `0`: Success - transaction posted successfully -- `1`: Error - invalid input, configuration error, or DA submission failure - -## Technical Details - -### DA Submission Flow - -1. Parse hex-encoded input from CLI -2. Decode hex to raw transaction bytes -3. Load Evolve configuration -4. Create DA client with configured parameters -5. Submit raw bytes as a blob to Celestia -6. Return submission result with DA height - -**Note**: The raw bytes submitted are exactly what would be passed to `ExecuteTxs` in the ABCI adapter. Hex encoding is only used for CLI input convenience. - -### Retry Behavior - -The command uses the DA client's built-in retry logic: - -- Retries on transient failures (network issues, mempool full) -- Increases gas price on retries (based on `gas_multiplier`) -- Respects the configured `max_submit_attempts` -- Backs off exponentially between retries - -### Blob Size Limits - -The maximum blob size is determined by the DA layer (Celestia). Currently: - -- Default max blob size: ~1.5 MB -- If transaction exceeds this, you'll receive a `StatusTooBig` error - -## Use Cases - -### 1. Testing DA Connectivity - -Quickly verify your DA configuration works: - -```bash -# Convert raw text to hex and submit -echo -n "test" | xxd -p | evabcid post-tx --tx $(cat -) - -# Or submit any raw bytes -evabcid post-tx --tx $(echo "test data" | xxd -p -c 0) -``` - -### 2. Manual Transaction Submission - -Submit raw transaction bytes from a file: - -```bash -# If you have hex-encoded transaction -TX_HEX=$(cat transaction.hex) -evabcid post-tx --tx $TX_HEX --namespace - -# If you have raw bytes, encode to hex first -TX_HEX=$(xxd -p -c 0 transaction.bin) -evabcid post-tx --tx $TX_HEX --namespace -``` - -### 3. CI/CD Integration - -Automate transaction posting in scripts: - -```bash -#!/bin/bash -TX_HEX="deadbeef1234567890" -if evabcid post-tx --tx $TX_HEX; then - echo "Transaction posted successfully" - exit 0 -else - echo "Failed to post transaction" - exit 1 -fi -``` - -### 4. Posting Arbitrary Data - -Post any raw data to Celestia: - -```bash -# Convert any file to hex and post -FILE_HEX=$(xxd -p -c 0 data.bin) -evabcid post-tx --tx $FILE_HEX --namespace - -# Post JSON data -JSON_HEX=$(echo '{"key":"value"}' | xxd -p -c 0) -evabcid post-tx --tx $JSON_HEX --namespace -``` - -## Troubleshooting - -### "required flag(s) 'tx' not set" - -You must provide the `--tx` flag with hex-encoded transaction bytes. - -### "failed to decode hex transaction" - -Ensure your input is valid hexadecimal: - -- Remove any spaces, newlines, or non-hex characters -- Valid characters: 0-9, a-f, A-F -- Optional `0x` prefix is accepted - -If you have raw bytes in a file, encode them to hex first: - -```bash -xxd -p -c 0 transaction.bin -``` - -### "failed to load config" - -Verify that: - -1. The config file exists at `~/.evabci/config/evnode.yaml` -2. The YAML syntax is valid -3. You have read permissions - -### "invalid config: namespace cannot be empty" - -Set the namespace either via: - -- `--namespace` flag -- `evnode.da.namespace` in config file - -### "failed to create DA client: connection refused" - -Check that: - -1. The DA node is running -2. The address in config is correct -3. Firewall allows the connection - -## Related Commands - -- `evabcid init`: Initialize Evolve configuration -- `evabcid start`: Start the Evolve node (includes DA submission) -- `evabcid evolve-migrate`: Migrate from CometBFT to Evolve - -## See Also - -- [Evolve Documentation](https://docs.evstack.org) -- [Celestia Documentation](https://docs.celestia.org) -- [ev-node DA Submitter](https://github.com/evstack/ev-node/tree/main/block/internal/submitting) diff --git a/server/docs/POST_TX_COMMAND.md b/server/docs/POST_TX_COMMAND.md new file mode 100644 index 00000000..a319302d --- /dev/null +++ b/server/docs/POST_TX_COMMAND.md @@ -0,0 +1,548 @@ +# Post Transaction Command + +The `post-tx` command allows you to post a signed transaction directly to a Celestia namespace using the Evolve node's DA configuration. + +## Overview + +This command submits signed transactions in JSON format to the configured Celestia Data Availability (DA) layer. The transaction is automatically decoded from JSON to bytes before submission. + +It's useful for: + +- Testing DA submission without running a full node +- Manually posting transaction data to specific namespaces +- Debugging DA layer connectivity and configuration +- Submitting signed transactions from external sources + +## Usage + +```bash +evabcid post-tx --tx [flags] +``` + +## Required Flags + +- `--tx`: Transaction as JSON file path or JSON string (required) + - Accepts either a path to a JSON file containing the transaction + - Or a JSON string directly + - The command automatically detects whether input is a file or JSON string + - JSON must follow Cosmos SDK transaction format + +## Optional Flags + +### Transaction-Specific Flags + +- `--namespace`: Celestia namespace ID to post to + - If not provided, uses the namespace from config (`evnode.da.namespace`) + - Format: 58-character hex string representing the namespace + +- `--gas-price`: Gas price for DA submission + - Default: `-1` (uses config value) + - If set to `-1`, uses `evnode.da.gas_price` from config + - If config also uses auto pricing, DA layer determines the price + +- `--timeout`: Timeout duration for the submission + - Default: `60s` (1 minute) + - Examples: `30s`, `2m`, `1m30s` + +- `--submit-options`: Additional submit options for DA layer + - If not provided, uses `evnode.da.submit_options` from config + +### Configuration Flags + +The command also accepts all Evolve configuration flags (prefixed with `--evnode.`): + +- `--evnode.da.address`: DA layer RPC address (default: `http://localhost:7980`) +- `--evnode.da.auth_token`: Authentication token for DA layer +- `--evnode.da.block_time`: DA chain block time (default: `6s`) +- `--evnode.da.gas_multiplier`: Gas price multiplier for retries +- And many more... (see `--help` for complete list) + +## Examples + +### Basic Usage (File) + +Post a transaction from a JSON file: + +```bash +evabcid post-tx --tx transaction.json +``` + +### Basic Usage (JSON String) + +Post a transaction from a JSON string: + +```bash +evabcid post-tx --tx '{ + "body": { + "messages": [], + "memo": "test transaction", + "timeout_height": "0", + "extension_options": [], + "non_critical_extension_options": [] + }, + "auth_info": { + "signer_infos": [], + "fee": { + "amount": [{"denom": "stake", "amount": "200"}], + "gas_limit": "200000", + "payer": "", + "granter": "" + } + }, + "signatures": [] +}' +``` + +### With Custom Namespace + +Post to a specific Celestia namespace: + +```bash +evabcid post-tx \ + --tx signed_tx.json \ + --namespace 0000000000000000000000000000000000000000000001 +``` + +### With Custom Gas Price + +Post with explicit gas price: + +```bash +evabcid post-tx \ + --tx signed_tx.json \ + --gas-price 0.025 +``` + +### With DA Configuration Override + +Post using a specific DA endpoint: + +```bash +evabcid post-tx \ + --tx signed_tx.json \ + --evnode.da.address http://celestia-node:7980 \ + --evnode.da.auth_token my-secret-token +``` + +### With Custom Timeout + +Post with extended timeout: + +```bash +evabcid post-tx \ + --tx signed_tx.json \ + --timeout 5m +``` + +### Complete Example + +```bash +evabcid post-tx \ + --tx signed_tx.json \ + --namespace 0000000000000000000000000000000000000000000001 \ + --gas-price 0.025 \ + --timeout 120s +``` + +## Transaction JSON Format + +The transaction data must be provided in Cosmos SDK transaction JSON format: + +```json +{ + "body": { + "messages": [ + { + "@type": "/evstack.network.v1.MsgAttest", + "authority": "evstack1...", + "consensus_address": "evstackvalcons1...", + "height": "100", + "vote": "base64-encoded-vote" + } + ], + "memo": "Optional memo text", + "timeout_height": "0", + "extension_options": [], + "non_critical_extension_options": [] + }, + "auth_info": { + "signer_infos": [ + { + "public_key": { + "@type": "/cosmos.crypto.secp256k1.PubKey", + "key": "base64-encoded-pubkey" + }, + "mode_info": { + "single": { + "mode": "SIGN_MODE_DIRECT" + } + }, + "sequence": "0" + } + ], + "fee": { + "amount": [ + { + "denom": "stake", + "amount": "200" + } + ], + "gas_limit": "200000", + "payer": "", + "granter": "" + } + }, + "signatures": ["base64-encoded-signature"] +} +``` + +### Auto-Detection + +The command automatically detects whether `--tx` is a file path or JSON string: + +1. Check if the value is a valid file path that exists +2. If yes → read file contents and decode as JSON +3. If no → treat value as JSON string and decode directly + +## Output + +### Success + +On successful submission, the command outputs: + +``` +✓ Transaction posted successfully + +Namespace: 0000000000000000000000000000000000000000000001 +DA Height: 12345 +Gas Price: 0.02 +Data Size: 256 bytes +``` + +Where: + +- **Namespace**: The Celestia namespace where the transaction was posted +- **DA Height**: The height of the DA block containing the transaction +- **Gas Price**: The gas price used for the submission +- **Data Size**: Size of the submitted transaction data in bytes + +### Already in Mempool + +If the transaction is already in the mempool: + +``` +⚠ Transaction already in mempool + DA Height: 12345 +``` + +### Errors + +Common error cases: + +1. **Invalid JSON syntax**: + + ``` + Error: failed to decode transaction from JSON: parsing JSON: invalid character... + ``` + +2. **File not found**: + + ``` + Error: failed to decode transaction from file: reading file: no such file or directory + ``` + +3. **Transaction too large**: + + ``` + Error: transaction too large for DA layer: blob size exceeds maximum + ``` + +4. **Connection failure**: + + ``` + Error: failed to create DA client: dial tcp: connection refused + ``` + +5. **Timeout**: + + ``` + Error: submission canceled: context deadline exceeded + ``` + +6. **Empty transaction**: + ``` + Error: transaction cannot be empty + ``` + +## Configuration File + +The command reads configuration from `~/.evabci/config/evnode.yaml` by default. You can override the location with the `--home` flag: + +```bash +evabcid post-tx --tx transaction.json --home /custom/path +``` + +Example `evnode.yaml` configuration: + +```yaml +da: + address: "http://localhost:7980" + auth_token: "your-token-here" + namespace: "M21eldetxV" + gas_price: 0.025 + gas_multiplier: 1.1 + block_time: 6s + submit_options: "" +``` + +## Return Codes + +- `0`: Success - transaction posted successfully +- `1`: Error - invalid input, configuration error, or DA submission failure + +## Technical Details + +### DA Submission Flow + +1. Parse `--tx` flag value +2. Check if value is an existing file path +3. If file: read and decode JSON; if not: decode value as JSON +4. Encode transaction from JSON to bytes using Cosmos SDK encoder +5. Load Evolve configuration +6. Create DA client with configured parameters +7. Submit bytes as a blob to Celestia +8. Return submission result with DA height + +### Interface Registration + +The command registers the following module interfaces for proper transaction decoding: + +- Migration Manager module types (`migrationmngr`) +- Network module types (`network`) +- Standard Cosmos SDK types + +### Retry Behavior + +The command uses the DA client's built-in retry logic: + +- Retries on transient failures (network issues, mempool full) +- Increases gas price on retries (based on `gas_multiplier`) +- Respects the configured `max_submit_attempts` +- Backs off exponentially between retries + +### Blob Size Limits + +The maximum blob size is determined by the DA layer (Celestia). Currently: + +- Default max blob size: ~1.5 MB +- If transaction exceeds this, you'll receive a `StatusTooBig` error + +## Workflow + +### Creating and Submitting a Transaction + +1. **Create unsigned transaction**: + + ```bash + mychaind tx bank send alice bob 100stake \ + --generate-only \ + --chain-id mychain \ + > unsigned_tx.json + ``` + +2. **Sign the transaction**: + + ```bash + mychaind tx sign unsigned_tx.json \ + --from alice \ + --chain-id mychain \ + > signed_tx.json + ``` + +3. **Submit to DA layer**: + ```bash + evabcid post-tx --tx signed_tx.json + ``` + +## Use Cases + +### 1. Testing DA Connectivity + +Quickly verify your DA configuration works: + +```bash +# Create a simple test transaction +cat > test_tx.json < Date: Tue, 11 Nov 2025 16:51:43 +0100 Subject: [PATCH 05/30] wire both sequencers --- go.mod | 9 ++++- go.sum | 12 +++---- server/post_tx_cmd.go | 25 +++++--------- server/start.go | 79 ++++++++++++++++++++++++++++++++++++------- 4 files changed, 88 insertions(+), 37 deletions(-) diff --git a/go.mod b/go.mod index 501775ba..ef8b85d9 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,13 @@ go 1.24.6 replace github.com/celestiaorg/go-header => github.com/julienrbrt/go-header v0.0.0-20251008134330-747c8c192fa8 // TODO: to remove after https://github.com/celestiaorg/go-header/pull/347 +// TODO: remove after https://github.com/evstack/ev-node/pull/2797 +replace ( + github.com/evstack/ev-node => github.com/evstack/ev-node v1.0.0-beta.9.0.20251111144303-272027d0e3cd + github.com/evstack/ev-node/core => github.com/evstack/ev-node/core v1.0.0-beta.4.0.20251111144303-272027d0e3cd + github.com/evstack/ev-node/sequencers/single => github.com/evstack/ev-node/sequencers/single v1.0.0-beta.3.0.20251111144303-272027d0e3cd +) + replace ( github.com/btcsuite/btcd => github.com/btcsuite/btcd v0.22.0-beta github.com/cosmos/cosmos-sdk => github.com/cosmos/cosmos-sdk v0.50.14 @@ -49,6 +56,7 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 google.golang.org/grpc v1.76.0 google.golang.org/protobuf v1.36.10 + gotest.tools/v3 v3.5.2 ) require ( @@ -335,7 +343,6 @@ require ( google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - gotest.tools/v3 v3.5.2 // indirect lukechampine.com/blake3 v1.4.1 // indirect nhooyr.io/websocket v1.8.6 // indirect pgregory.net/rapid v1.2.0 // indirect diff --git a/go.sum b/go.sum index 3bdebdd3..7c3a902c 100644 --- a/go.sum +++ b/go.sum @@ -290,14 +290,14 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evstack/ev-node v1.0.0-beta.9 h1:9hRfT+EECIxrimhshjfAhER7x8wItFuytznC5jqRHrI= -github.com/evstack/ev-node v1.0.0-beta.9/go.mod h1:+gJ1h9OF6r1rM557emHq7OrMxSI+73gNtKbzMFPK9zU= -github.com/evstack/ev-node/core v1.0.0-beta.4 h1:F/rqHCrZ+ViUY4I6RuoBVvkhYfosD68yo/6gCdGRdmo= -github.com/evstack/ev-node/core v1.0.0-beta.4/go.mod h1:n2w/LhYQTPsi48m6lMj16YiIqsaQw6gxwjyJvR+B3sY= +github.com/evstack/ev-node v1.0.0-beta.9.0.20251111144303-272027d0e3cd h1:iVnzZLjMQIJnTb2pq+ATQ7wwhC+OnLBNsFWy1NblMtQ= +github.com/evstack/ev-node v1.0.0-beta.9.0.20251111144303-272027d0e3cd/go.mod h1:tGTY9jnfqTcyv9ZUuI1mTd62NxCx/98+4yiVlbUzU/w= +github.com/evstack/ev-node/core v1.0.0-beta.4.0.20251111144303-272027d0e3cd h1:i6JnzrcUm46b9XPuE2vjFLoh0RSdTBi4gaVTs7Zrfng= +github.com/evstack/ev-node/core v1.0.0-beta.4.0.20251111144303-272027d0e3cd/go.mod h1:n2w/LhYQTPsi48m6lMj16YiIqsaQw6gxwjyJvR+B3sY= github.com/evstack/ev-node/da v1.0.0-beta.4 h1:6W+UsQrsEdBbAnyy8j+lYNo2VQvJUaoSNkToMFThtVU= github.com/evstack/ev-node/da v1.0.0-beta.4/go.mod h1:O3Lbx4/WFN0DIUOHdTihmyRnGmQwVXdswH19RW/KyG4= -github.com/evstack/ev-node/sequencers/single v1.0.0-beta.2 h1:UlQd3WL2p6bBtGMYYok8PUGxUEQJ74rf2XHlCqJF7Z8= -github.com/evstack/ev-node/sequencers/single v1.0.0-beta.2/go.mod h1:df5iQYNItmXgJlEJnW+nRlfWzsgwOtRwIEsh2c2wwu4= +github.com/evstack/ev-node/sequencers/single v1.0.0-beta.3.0.20251111144303-272027d0e3cd h1:Pm16K5PK8NqFm6Gndxg6O8x5MuVtdKEegLOXHsNUvcU= +github.com/evstack/ev-node/sequencers/single v1.0.0-beta.3.0.20251111144303-272027d0e3cd/go.mod h1:8PYxjhJBS0wJgxR3DoszBkMwsV3jwOa7cV8X0lkxsyM= 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.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= diff --git a/server/post_tx_cmd.go b/server/post_tx_cmd.go index eb45e798..8ea75513 100644 --- a/server/post_tx_cmd.go +++ b/server/post_tx_cmd.go @@ -24,7 +24,6 @@ import ( ) const ( - flagTx = "tx" flagNamespace = "namespace" flagGasPrice = "gas-price" flagTimeout = "timeout" @@ -37,11 +36,11 @@ const ( func PostTxCmd() *cobra.Command { cobraCmd := &cobra.Command{ Use: "post-tx", - Short: "Post a signed transaction to Celestia namespace", + Short: "Post a signed transaction to a Celestia namespace", Long: `Post a signed transaction to a Celestia namespace using the Evolve configuration. This command submits a signed transaction to the configured Celestia DA layer. -The transaction is provided via the --tx flag, which accepts either: +The transaction is provided as argument, which accepts either: 1. A path to a JSON file containing the transaction 2. A JSON string directly @@ -50,12 +49,12 @@ The JSON format must match the Cosmos SDK transaction JSON format. Examples: # From JSON file - evabcid post-tx --tx tx.json + evabcid post-tx tx.json # From JSON string - evabcid post-tx --tx '{"body":{...},"auth_info":{...},"signatures":[...]}' + evabcid post-tx '{"body":{...},"auth_info":{...},"signatures":[...]}' `, - Args: cobra.NoArgs, + Args: cobra.ExactArgs(1), RunE: postTxRunE, } @@ -63,19 +62,16 @@ Examples: rollconf.AddFlags(cobraCmd) // Add command-specific flags - cobraCmd.Flags().String(flagTx, "", "Transaction as JSON file path or JSON string (required)") cobraCmd.Flags().String(flagNamespace, "", "Celestia namespace ID (if not provided, uses config namespace)") cobraCmd.Flags().Float64(flagGasPrice, -1, "Gas price for DA submission (if not provided, uses config gas price)") cobraCmd.Flags().Duration(flagTimeout, defaultTimeout, "Timeout for DA submission") cobraCmd.Flags().String(flagSubmitOpts, "", "Additional submit options (if not provided, uses config submit options)") - _ = cobraCmd.MarkFlagRequired(flagTx) - return cobraCmd } // postTxRunE executes the post-tx command -func postTxRunE(cobraCmd *cobra.Command, _ []string) error { +func postTxRunE(cobraCmd *cobra.Command, args []string) error { timeout, err := cobraCmd.Flags().GetDuration(flagTimeout) if err != nil { return fmt.Errorf("failed to get timeout flag: %w", err) @@ -84,11 +80,7 @@ func postTxRunE(cobraCmd *cobra.Command, _ []string) error { ctx, cancel := context.WithTimeout(cobraCmd.Context(), timeout) defer cancel() - // Get transaction input - txInput, err := cobraCmd.Flags().GetString(flagTx) - if err != nil { - return fmt.Errorf("failed to get tx flag: %w", err) - } + txInput := args[0] if txInput == "" { return fmt.Errorf("transaction cannot be empty") @@ -130,9 +122,8 @@ func postTxRunE(cobraCmd *cobra.Command, _ []string) error { } if namespace == "" { - namespace = cfg.DA.GetNamespace() + namespace = cfg.DA.GetForcedInclusionNamespace() } - namespaceBz := da.NamespaceFromString(namespace).Bytes() // Get gas price (use flag if provided, otherwise use config) diff --git a/server/start.go b/server/start.go index 4076e963..c36bc48c 100644 --- a/server/start.go +++ b/server/start.go @@ -35,6 +35,7 @@ import ( "github.com/cosmos/cosmos-sdk/version" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" "github.com/hashicorp/go-metrics" + "github.com/ipfs/go-datastore" ds "github.com/ipfs/go-datastore" "github.com/libp2p/go-libp2p/core/crypto" "github.com/rs/zerolog" @@ -43,6 +44,8 @@ import ( "google.golang.org/grpc/credentials/insecure" evblock "github.com/evstack/ev-node/block" + "github.com/evstack/ev-node/core/da" + coresequencer "github.com/evstack/ev-node/core/sequencer" "github.com/evstack/ev-node/da/jsonrpc" "github.com/evstack/ev-node/node" "github.com/evstack/ev-node/pkg/cmd" @@ -52,7 +55,8 @@ import ( "github.com/evstack/ev-node/pkg/p2p/key" "github.com/evstack/ev-node/pkg/signer" "github.com/evstack/ev-node/pkg/store" - "github.com/evstack/ev-node/sequencers/single" + basedsequencer "github.com/evstack/ev-node/sequencers/based" + singlesequencer "github.com/evstack/ev-node/sequencers/single" rollkittypes "github.com/evstack/ev-node/types" "github.com/evstack/ev-abci/pkg/adapter" @@ -467,28 +471,19 @@ func setupNodeAndExecutor( return nil, nil, cleanupFn, fmt.Errorf("failed to create DA client: %w", err) } - singleMetrics, err := single.NopMetrics() + singleMetrics, err := singlesequencer.NopMetrics() if err != nil { return nil, nil, cleanupFn, err } if evcfg.Instrumentation.IsPrometheusEnabled() { - singleMetrics, err = single.PrometheusMetrics(config.DefaultInstrumentationConfig().Namespace, "chain_id", evGenesis.ChainID) + singleMetrics, err = singlesequencer.PrometheusMetrics(config.DefaultInstrumentationConfig().Namespace, "chain_id", evGenesis.ChainID) if err != nil { return nil, nil, cleanupFn, err } } - sequencer, err := single.NewSequencer( - ctx, - *evLogger, - database, - &daClient.DA, - []byte(evGenesis.ChainID), - evcfg.Node.BlockTime.Duration, - singleMetrics, - evcfg.Node.Aggregator, - ) + sequencer, err := createSequencer(ctx, *evLogger, database, &daClient.DA, evcfg, *evGenesis, singleMetrics) if err != nil { return nil, nil, cleanupFn, err } @@ -570,6 +565,64 @@ func setupNodeAndExecutor( return rolllkitNode, executor, cleanupFn, nil } +// createSequencer creates a sequencer based on the configuration. +// If BasedSequencer is enabled, it creates a based sequencer that fetches transactions from DA. +// Otherwise, it creates a single (traditional) sequencer. +func createSequencer( + ctx context.Context, + logger zerolog.Logger, + datastore datastore.Batching, + da da.DA, + nodeConfig config.Config, + genesis genesis.Genesis, + singleMetrics *singlesequencer.Metrics, +) (coresequencer.Sequencer, error) { + daRetriever, err := evblock.NewDARetriever(da, nodeConfig, genesis, logger) + if err != nil { + return nil, fmt.Errorf("failed to create DA retriever: %w", err) + } + + if nodeConfig.Node.BasedSequencer { + // Based sequencer mode - fetch transactions only from DA + if !nodeConfig.Node.Aggregator { + return nil, fmt.Errorf("based sequencer mode requires aggregator mode to be enabled") + } + + basedSeq := basedsequencer.NewBasedSequencer(daRetriever, da, nodeConfig, genesis, logger) + + logger.Info(). + Str("forced_inclusion_namespace", nodeConfig.DA.GetForcedInclusionNamespace()). + Uint64("da_epoch", genesis.DAEpochForcedInclusion). + Msg("based sequencer initialized") + + return basedSeq, nil + } + + sequencer, err := singlesequencer.NewSequencer( + ctx, + logger, + datastore, + da, + []byte(genesis.ChainID), + nodeConfig.Node.BlockTime.Duration, + singleMetrics, + nodeConfig.Node.Aggregator, + 1000, + daRetriever, + genesis, + ) + if err != nil { + return nil, fmt.Errorf("failed to create single sequencer: %w", err) + } + + logger.Info(). + Bool("forced_inclusion_enabled", daRetriever != nil). + Str("forced_inclusion_namespace", nodeConfig.DA.GetForcedInclusionNamespace()). + Msg("single sequencer initialized") + + return sequencer, nil +} + func createAndStartEventBus(logger log.Logger) (*cmttypes.EventBus, error) { eventBus := cmttypes.NewEventBus() eventBus.SetLogger(servercmtlog.CometLoggerWrapper{Logger: logger}.With("module", "events")) From cafcefee09de509e1f885f1468e7247105818b20 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Tue, 11 Nov 2025 17:04:21 +0100 Subject: [PATCH 06/30] use correct client context --- server/post_tx_cmd.go | 33 ++++++++++----------------------- server/post_tx_cmd_test.go | 28 ++++++++++++++++++++++------ 2 files changed, 32 insertions(+), 29 deletions(-) diff --git a/server/post_tx_cmd.go b/server/post_tx_cmd.go index 8ea75513..7b34c9f3 100644 --- a/server/post_tx_cmd.go +++ b/server/post_tx_cmd.go @@ -7,9 +7,7 @@ import ( "os" "time" - "github.com/cosmos/cosmos-sdk/codec" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" - authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" + "github.com/cosmos/cosmos-sdk/client" "github.com/rs/zerolog" "github.com/spf13/cobra" @@ -18,9 +16,6 @@ import ( "github.com/evstack/ev-node/pkg/cmd" rollconf "github.com/evstack/ev-node/pkg/config" "github.com/evstack/ev-node/types" - - migrationtypes "github.com/evstack/ev-abci/modules/migrationmngr/types" - networktypes "github.com/evstack/ev-abci/modules/network/types" ) const ( @@ -72,6 +67,8 @@ Examples: // postTxRunE executes the post-tx command func postTxRunE(cobraCmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cobraCmd) + timeout, err := cobraCmd.Flags().GetDuration(flagTimeout) if err != nil { return fmt.Errorf("failed to get timeout flag: %w", err) @@ -89,13 +86,13 @@ func postTxRunE(cobraCmd *cobra.Command, args []string) error { var txData []byte if _, err := os.Stat(txInput); err == nil { // Input is a file path - txData, err = decodeTxFromFile(txInput) + txData, err = decodeTxFromFile(clientCtx, txInput) if err != nil { return fmt.Errorf("failed to decode transaction from file: %w", err) } } else { // Input is a JSON string - txData, err = decodeTxFromJSON(txInput) + txData, err = decodeTxFromJSON(clientCtx, txInput) if err != nil { return fmt.Errorf("failed to decode transaction from JSON: %w", err) } @@ -217,27 +214,17 @@ func postTxRunE(cobraCmd *cobra.Command, args []string) error { } // decodeTxFromFile reads a JSON transaction from a file and decodes it to bytes -func decodeTxFromFile(filePath string) ([]byte, error) { +func decodeTxFromFile(clientCtx client.Context, filePath string) ([]byte, error) { jsonData, err := os.ReadFile(filePath) if err != nil { return nil, fmt.Errorf("reading file: %w", err) } - return decodeTxFromJSON(string(jsonData)) + return decodeTxFromJSON(clientCtx, string(jsonData)) } // decodeTxFromJSON decodes a JSON transaction string to bytes -func decodeTxFromJSON(jsonStr string) ([]byte, error) { - // Create interface registry and codec - interfaceRegistry := codectypes.NewInterfaceRegistry() - - // Register interfaces for modules - migrationtypes.RegisterInterfaces(interfaceRegistry) - networktypes.RegisterInterfaces(interfaceRegistry) - - protoCodec := codec.NewProtoCodec(interfaceRegistry) - txConfig := authtx.NewTxConfig(protoCodec, authtx.DefaultSignModes) - +func decodeTxFromJSON(clientCtx client.Context, jsonStr string) ([]byte, error) { // First try to decode as a Cosmos SDK transaction JSON var txJSON map[string]interface{} if err := json.Unmarshal([]byte(jsonStr), &txJSON); err != nil { @@ -245,14 +232,14 @@ func decodeTxFromJSON(jsonStr string) ([]byte, error) { } // Use the SDK's JSON decoder - txJSONDecoder := txConfig.TxJSONDecoder() + txJSONDecoder := clientCtx.TxConfig.TxJSONDecoder() tx, err := txJSONDecoder([]byte(jsonStr)) if err != nil { return nil, fmt.Errorf("decoding transaction JSON: %w", err) } // Encode the transaction to bytes - txEncoder := txConfig.TxEncoder() + txEncoder := clientCtx.TxConfig.TxEncoder() txBytes, err := txEncoder(tx) if err != nil { return nil, fmt.Errorf("encoding transaction: %w", err) diff --git a/server/post_tx_cmd_test.go b/server/post_tx_cmd_test.go index b12de7e0..2dbe1ca7 100644 --- a/server/post_tx_cmd_test.go +++ b/server/post_tx_cmd_test.go @@ -6,6 +6,7 @@ import ( "testing" "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -16,6 +17,21 @@ import ( networktypes "github.com/evstack/ev-abci/modules/network/types" ) +func createClientContext(t *testing.T) client.Context { + t.Helper() + // Create interface registry and codec + interfaceRegistry := codectypes.NewInterfaceRegistry() + + // Register interfaces for modules + migrationtypes.RegisterInterfaces(interfaceRegistry) + networktypes.RegisterInterfaces(interfaceRegistry) + + protoCodec := codec.NewProtoCodec(interfaceRegistry) + txConfig := authtx.NewTxConfig(protoCodec, authtx.DefaultSignModes) + + return client.Context{}.WithTxConfig(txConfig) +} + func TestDecodeTxFromJSON(t *testing.T) { tests := []struct { name string @@ -82,7 +98,7 @@ func TestDecodeTxFromJSON(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - txBytes, err := decodeTxFromJSON(tt.jsonStr) + txBytes, err := decodeTxFromJSON(createClientContext(t), tt.jsonStr) if tt.wantErr { assert.Assert(t, err != nil, "expected error but got none") @@ -170,7 +186,7 @@ func TestDecodeTxFromFile(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { filePath := tt.setupFile() - txBytes, err := decodeTxFromFile(filePath) + txBytes, err := decodeTxFromFile(createClientContext(t), filePath) if tt.wantErr { assert.Assert(t, err != nil, "expected error but got none") @@ -210,7 +226,7 @@ func TestRoundTripEncodeDecode(t *testing.T) { assert.NilError(t, err) // Decode from JSON back to bytes using our function - decodedBytes, err := decodeTxFromJSON(string(txJSON)) + decodedBytes, err := decodeTxFromJSON(createClientContext(t), string(txJSON)) assert.NilError(t, err) // Verify the bytes match @@ -290,10 +306,10 @@ func TestAutoDetectFileVsJSON(t *testing.T) { // Simulate the auto-detect logic from postTxRunE if _, statErr := os.Stat(tt.input); statErr == nil { // Input is a file path - txData, err = decodeTxFromFile(tt.input) + txData, err = decodeTxFromFile(createClientContext(t), tt.input) } else { // Input is a JSON string - txData, err = decodeTxFromJSON(tt.input) + txData, err = decodeTxFromJSON(createClientContext(t), tt.input) } if tt.wantErr { @@ -330,7 +346,7 @@ func TestTransactionJSONStructure(t *testing.T) { }` // Decode to bytes - txBytes, err := decodeTxFromJSON(txJSON) + txBytes, err := decodeTxFromJSON(createClientContext(t), txJSON) assert.NilError(t, err) // Decode bytes to transaction From ec90d410aa6a08ffe09aacc2510f535f9b85b4ef Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Tue, 11 Nov 2025 17:11:38 +0100 Subject: [PATCH 07/30] fix logger --- server/post_tx_cmd.go | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/server/post_tx_cmd.go b/server/post_tx_cmd.go index 7b34c9f3..342456d2 100644 --- a/server/post_tx_cmd.go +++ b/server/post_tx_cmd.go @@ -8,6 +8,7 @@ import ( "time" "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/server" "github.com/rs/zerolog" "github.com/spf13/cobra" @@ -68,6 +69,7 @@ Examples: // postTxRunE executes the post-tx command func postTxRunE(cobraCmd *cobra.Command, args []string) error { clientCtx := client.GetClientContextFromCmd(cobraCmd) + serverCtx := server.GetServerContextFromCmd(cobraCmd) timeout, err := cobraCmd.Flags().GetDuration(flagTimeout) if err != nil { @@ -144,16 +146,14 @@ func postTxRunE(cobraCmd *cobra.Command, args []string) error { } // Setup logger - logger := zerolog.New(os.Stderr).With(). - Timestamp(). - Str("component", "post-tx"). - Logger() + logger := serverCtx.Logger + zlLogger, ok := logger.Impl().(*zerolog.Logger) + if !ok { + znop := zerolog.Nop() + zlLogger = &znop + } - logger.Info(). - Str("namespace", namespace). - Float64("gas_price", gasPrice). - Int("tx_size", len(txData)). - Msg("posting transaction to Celestia") + logger.Info("posting transaction to Celestia", "namespace", namespace, "gas_price", gasPrice, "tx_size", len(txData)) // Create DA client submitCtx, submitCancel := context.WithTimeout(ctx, timeout) @@ -161,7 +161,7 @@ func postTxRunE(cobraCmd *cobra.Command, args []string) error { daClient, err := jsonrpc.NewClient( submitCtx, - logger, + *zlLogger, cfg.DA.Address, cfg.DA.AuthToken, gasPrice, @@ -173,17 +173,17 @@ func postTxRunE(cobraCmd *cobra.Command, args []string) error { } // Submit transaction to DA layer - logger.Info().Msg("submitting transaction to DA layer...") + logger.Info("submitting transaction to DA layer...") blobs := [][]byte{txData} options := []byte(submitOpts) - result := types.SubmitWithHelpers(submitCtx, &daClient.DA, logger, blobs, gasPrice, namespaceBz, options) + result := types.SubmitWithHelpers(submitCtx, &daClient.DA, *zlLogger, blobs, gasPrice, namespaceBz, options) // Check result switch result.Code { case da.StatusSuccess: - logger.Info().Msg("transaction successfully submitted to DA layer") + logger.Info("transaction successfully submitted to DA layer") cobraCmd.Printf("\n✓ Transaction posted successfully\n\n") cobraCmd.Printf("Namespace: %s\n", namespace) cobraCmd.Printf("DA Height: %d\n", result.Height) From 52e3faf7a3ec92f49fe62898df3e035c6b7faf4b Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Tue, 11 Nov 2025 17:18:12 +0100 Subject: [PATCH 08/30] updates --- server/docs/POST_TX_COMMAND.md | 213 ++------------------------------- 1 file changed, 9 insertions(+), 204 deletions(-) diff --git a/server/docs/POST_TX_COMMAND.md b/server/docs/POST_TX_COMMAND.md index a319302d..8a0c951f 100644 --- a/server/docs/POST_TX_COMMAND.md +++ b/server/docs/POST_TX_COMMAND.md @@ -16,12 +16,10 @@ It's useful for: ## Usage ```bash -evabcid post-tx --tx [flags] +evabcid post-tx [flags] ``` -## Required Flags - -- `--tx`: Transaction as JSON file path or JSON string (required) +- The first argument contains a transaction as JSON file path or JSON string (required) - Accepts either a path to a JSON file containing the transaction - Or a JSON string directly - The command automatically detects whether input is a file or JSON string @@ -64,7 +62,7 @@ The command also accepts all Evolve configuration flags (prefixed with `--evnode Post a transaction from a JSON file: ```bash -evabcid post-tx --tx transaction.json +evabcid post-tx transaction.json ``` ### Basic Usage (JSON String) @@ -72,7 +70,7 @@ evabcid post-tx --tx transaction.json Post a transaction from a JSON string: ```bash -evabcid post-tx --tx '{ +evabcid post-tx '{ "body": { "messages": [], "memo": "test transaction", @@ -99,7 +97,7 @@ Post to a specific Celestia namespace: ```bash evabcid post-tx \ - --tx signed_tx.json \ + signed_tx.json \ --namespace 0000000000000000000000000000000000000000000001 ``` @@ -109,7 +107,7 @@ Post with explicit gas price: ```bash evabcid post-tx \ - --tx signed_tx.json \ + signed_tx.json \ --gas-price 0.025 ``` @@ -119,7 +117,7 @@ Post using a specific DA endpoint: ```bash evabcid post-tx \ - --tx signed_tx.json \ + signed_tx.json \ --evnode.da.address http://celestia-node:7980 \ --evnode.da.auth_token my-secret-token ``` @@ -130,20 +128,10 @@ Post with extended timeout: ```bash evabcid post-tx \ - --tx signed_tx.json \ + signed_tx.json \ --timeout 5m ``` -### Complete Example - -```bash -evabcid post-tx \ - --tx signed_tx.json \ - --namespace 0000000000000000000000000000000000000000000001 \ - --gas-price 0.025 \ - --timeout 120s -``` - ## Transaction JSON Format The transaction data must be provided in Cosmos SDK transaction JSON format: @@ -198,7 +186,7 @@ The transaction data must be provided in Cosmos SDK transaction JSON format: ### Auto-Detection -The command automatically detects whether `--tx` is a file path or JSON string: +The command automatically detects whether arg is a file path or JSON string: 1. Check if the value is a valid file path that exists 2. If yes → read file contents and decode as JSON @@ -363,186 +351,3 @@ The maximum blob size is determined by the DA layer (Celestia). Currently: ```bash evabcid post-tx --tx signed_tx.json ``` - -## Use Cases - -### 1. Testing DA Connectivity - -Quickly verify your DA configuration works: - -```bash -# Create a simple test transaction -cat > test_tx.json < Date: Tue, 11 Nov 2025 17:18:46 +0100 Subject: [PATCH 09/30] renaming --- server/docs/{POST_TX_COMMAND.md => post_tx_cmd.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename server/docs/{POST_TX_COMMAND.md => post_tx_cmd.md} (100%) diff --git a/server/docs/POST_TX_COMMAND.md b/server/docs/post_tx_cmd.md similarity index 100% rename from server/docs/POST_TX_COMMAND.md rename to server/docs/post_tx_cmd.md From 89d0c7b6791a7f97a22f63ae2dc6f8b0a2ae0aa4 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Tue, 11 Nov 2025 17:25:51 +0100 Subject: [PATCH 10/30] linting --- server/start.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/server/start.go b/server/start.go index c36bc48c..65b025c3 100644 --- a/server/start.go +++ b/server/start.go @@ -35,7 +35,6 @@ import ( "github.com/cosmos/cosmos-sdk/version" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" "github.com/hashicorp/go-metrics" - "github.com/ipfs/go-datastore" ds "github.com/ipfs/go-datastore" "github.com/libp2p/go-libp2p/core/crypto" "github.com/rs/zerolog" @@ -571,7 +570,7 @@ func setupNodeAndExecutor( func createSequencer( ctx context.Context, logger zerolog.Logger, - datastore datastore.Batching, + datastore ds.Batching, da da.DA, nodeConfig config.Config, genesis genesis.Genesis, From cda32365e436206b6a4feb3e75c8d9623b277c25 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Thu, 13 Nov 2025 13:47:28 +0100 Subject: [PATCH 11/30] improve UX --- go.mod | 9 +++---- go.sum | 18 ++++++-------- server/post_tx_cmd.go | 51 ++++++++++++++++++++++++++++++++------ server/post_tx_cmd_test.go | 32 ------------------------ server/start.go | 18 ++++++-------- server/start_test.go | 2 +- 6 files changed, 65 insertions(+), 65 deletions(-) diff --git a/go.mod b/go.mod index ef8b85d9..f6f4fd2e 100644 --- a/go.mod +++ b/go.mod @@ -6,9 +6,9 @@ replace github.com/celestiaorg/go-header => github.com/julienrbrt/go-header v0.0 // TODO: remove after https://github.com/evstack/ev-node/pull/2797 replace ( - github.com/evstack/ev-node => github.com/evstack/ev-node v1.0.0-beta.9.0.20251111144303-272027d0e3cd - github.com/evstack/ev-node/core => github.com/evstack/ev-node/core v1.0.0-beta.4.0.20251111144303-272027d0e3cd - github.com/evstack/ev-node/sequencers/single => github.com/evstack/ev-node/sequencers/single v1.0.0-beta.3.0.20251111144303-272027d0e3cd + github.com/evstack/ev-node => github.com/evstack/ev-node v1.0.0-beta.9.0.20251113110405-0d790efaf5b7 + github.com/evstack/ev-node/core => github.com/evstack/ev-node/core v1.0.0-beta.4.0.20251113110405-0d790efaf5b7 + github.com/evstack/ev-node/da => github.com/evstack/ev-node/da v1.0.0-beta.4.0.20251113110405-0d790efaf5b7 ) replace ( @@ -37,7 +37,6 @@ require ( github.com/evstack/ev-node v1.0.0-beta.9 github.com/evstack/ev-node/core v1.0.0-beta.4 github.com/evstack/ev-node/da v1.0.0-beta.4 - github.com/evstack/ev-node/sequencers/single v1.0.0-beta.2 github.com/go-kit/kit v0.13.0 github.com/golang/protobuf v1.5.4 github.com/grpc-ecosystem/grpc-gateway v1.16.0 @@ -134,7 +133,7 @@ require ( github.com/fatih/color v1.15.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/filecoin-project/go-clock v0.1.0 // indirect - github.com/filecoin-project/go-jsonrpc v0.8.0 // indirect + github.com/filecoin-project/go-jsonrpc v0.9.0 // indirect github.com/flynn/noise v1.1.0 // indirect github.com/francoispqt/gojay v1.2.13 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect diff --git a/go.sum b/go.sum index 7c3a902c..ae4819f4 100644 --- a/go.sum +++ b/go.sum @@ -290,14 +290,12 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evstack/ev-node v1.0.0-beta.9.0.20251111144303-272027d0e3cd h1:iVnzZLjMQIJnTb2pq+ATQ7wwhC+OnLBNsFWy1NblMtQ= -github.com/evstack/ev-node v1.0.0-beta.9.0.20251111144303-272027d0e3cd/go.mod h1:tGTY9jnfqTcyv9ZUuI1mTd62NxCx/98+4yiVlbUzU/w= -github.com/evstack/ev-node/core v1.0.0-beta.4.0.20251111144303-272027d0e3cd h1:i6JnzrcUm46b9XPuE2vjFLoh0RSdTBi4gaVTs7Zrfng= -github.com/evstack/ev-node/core v1.0.0-beta.4.0.20251111144303-272027d0e3cd/go.mod h1:n2w/LhYQTPsi48m6lMj16YiIqsaQw6gxwjyJvR+B3sY= -github.com/evstack/ev-node/da v1.0.0-beta.4 h1:6W+UsQrsEdBbAnyy8j+lYNo2VQvJUaoSNkToMFThtVU= -github.com/evstack/ev-node/da v1.0.0-beta.4/go.mod h1:O3Lbx4/WFN0DIUOHdTihmyRnGmQwVXdswH19RW/KyG4= -github.com/evstack/ev-node/sequencers/single v1.0.0-beta.3.0.20251111144303-272027d0e3cd h1:Pm16K5PK8NqFm6Gndxg6O8x5MuVtdKEegLOXHsNUvcU= -github.com/evstack/ev-node/sequencers/single v1.0.0-beta.3.0.20251111144303-272027d0e3cd/go.mod h1:8PYxjhJBS0wJgxR3DoszBkMwsV3jwOa7cV8X0lkxsyM= +github.com/evstack/ev-node v1.0.0-beta.9.0.20251113110405-0d790efaf5b7 h1:08B+4sb3irCyunco1U6/xuBnKApibFksJ8Sl56wvPt4= +github.com/evstack/ev-node v1.0.0-beta.9.0.20251113110405-0d790efaf5b7/go.mod h1:1Ix63G85AflAogtP1LrgloFNR2YEMG3NrDpWNulJ65o= +github.com/evstack/ev-node/core v1.0.0-beta.4.0.20251113110405-0d790efaf5b7 h1:9MqYaRQ8VYzyE1l1w52fsMKtmhRI20V9911mweKbDN0= +github.com/evstack/ev-node/core v1.0.0-beta.4.0.20251113110405-0d790efaf5b7/go.mod h1:n2w/LhYQTPsi48m6lMj16YiIqsaQw6gxwjyJvR+B3sY= +github.com/evstack/ev-node/da v1.0.0-beta.4.0.20251113110405-0d790efaf5b7 h1:OKU9EAyVuFVhjG6Or1jNW6+WTs8pzj3kTmUaXVlA6hc= +github.com/evstack/ev-node/da v1.0.0-beta.4.0.20251113110405-0d790efaf5b7/go.mod h1:US5U6Pm8WzuzpS2ZyLj/b/6Ajs8whA+2DTGd+OfSEyA= 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.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= @@ -306,8 +304,8 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/filecoin-project/go-clock v0.1.0 h1:SFbYIM75M8NnFm1yMHhN9Ahy3W5bEZV9gd6MPfXbKVU= github.com/filecoin-project/go-clock v0.1.0/go.mod h1:4uB/O4PvOjlx1VCMdZ9MyDZXRm//gkj1ELEbxfI1AZs= -github.com/filecoin-project/go-jsonrpc v0.8.0 h1:2yqlN3Vd8Gx5UtA3fib7tQu2aW1cSOJt253LEBWExo4= -github.com/filecoin-project/go-jsonrpc v0.8.0/go.mod h1:p8WGOwQGYbFugSdK7qKIGhhb1VVcQ2rtBLdEiik1QWI= +github.com/filecoin-project/go-jsonrpc v0.9.0 h1:G47qEF52w7GholpI21vPSTVBFvsrip6geIoqNiqyZtQ= +github.com/filecoin-project/go-jsonrpc v0.9.0/go.mod h1:OG7kVBVh/AbDFHIwx7Kw0l9ARmKOS6gGOr0LbdBpbLc= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/flynn/noise v1.1.0 h1:KjPQoQCEFdZDiP03phOvGi11+SVVhBG2wOWAorLsstg= github.com/flynn/noise v1.1.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= diff --git a/server/post_tx_cmd.go b/server/post_tx_cmd.go index 342456d2..2c91358c 100644 --- a/server/post_tx_cmd.go +++ b/server/post_tx_cmd.go @@ -1,12 +1,15 @@ package server import ( + "bufio" "context" "encoding/json" "fmt" "os" + "path/filepath" "time" + cmtcfg "github.com/cometbft/cometbft/config" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/server" "github.com/rs/zerolog" @@ -131,10 +134,6 @@ func postTxRunE(cobraCmd *cobra.Command, args []string) error { return fmt.Errorf("failed to get gas-price flag: %w", err) } - if gasPrice == -1 { - gasPrice = cfg.DA.GasPrice - } - // Get submit options (use flag if provided, otherwise use config) submitOpts, err := cobraCmd.Flags().GetString(flagSubmitOpts) if err != nil { @@ -164,8 +163,6 @@ func postTxRunE(cobraCmd *cobra.Command, args []string) error { *zlLogger, cfg.DA.Address, cfg.DA.AuthToken, - gasPrice, - cfg.DA.GasMultiplier, cmd.DefaultMaxBlobSize, ) if err != nil { @@ -187,8 +184,27 @@ func postTxRunE(cobraCmd *cobra.Command, args []string) error { cobraCmd.Printf("\n✓ Transaction posted successfully\n\n") cobraCmd.Printf("Namespace: %s\n", namespace) cobraCmd.Printf("DA Height: %d\n", result.Height) - cobraCmd.Printf("Gas Price: %.2f\n", gasPrice) cobraCmd.Printf("Data Size: %d bytes\n", len(txData)) + + // Calculate when transaction will be included based on DA epochs + daStartHeight, err := getDaStartHeight(serverCtx.Config) + if err != nil { + cobraCmd.Printf("Failed to get DA start height: %v\n", err) + daStartHeight = 0 + } + epochSize, err := getDaEpoch(serverCtx.Config) + if err != nil { + cobraCmd.Printf("Failed to get DA epoch size: %v\n", err) + epochSize = 0 + } + + _, epochEnd := types.CalculateEpochBoundaries(result.Height, daStartHeight, epochSize) + cobraCmd.Printf( + "DA Blocks until inclusion: %d (at DA height %d)\n", + epochEnd-(result.Height+1), + epochEnd+1, + ) + cobraCmd.Printf("\n") return nil @@ -247,3 +263,24 @@ func decodeTxFromJSON(clientCtx client.Context, jsonStr string) ([]byte, error) return txBytes, nil } + +// getDaEpoch parses the da_start_height from the genesis file. +func getDaEpoch(cfg *cmtcfg.Config) (uint64, error) { + const daEpochFieldName = "da_epoch_forced_inclusion" + + genFile, err := os.Open(filepath.Clean(cfg.GenesisFile())) + if err != nil { + return 0, fmt.Errorf("failed to open genesis file %s: %w", cfg.GenesisFile(), err) + } + + daStartHeight, err := parseFieldFromGenesis(bufio.NewReader(genFile), daEpochFieldName) + if err != nil { + return 0, err + } + + if err := genFile.Close(); err != nil { + return 0, fmt.Errorf("failed to close genesis file %s: %v", genFile.Name(), err) + } + + return daStartHeight, nil +} diff --git a/server/post_tx_cmd_test.go b/server/post_tx_cmd_test.go index 2dbe1ca7..3c081dbd 100644 --- a/server/post_tx_cmd_test.go +++ b/server/post_tx_cmd_test.go @@ -369,35 +369,3 @@ func TestTransactionJSONStructure(t *testing.T) { assert.Equal(t, uint64(300000), feeTx.GetGas()) assert.Equal(t, "1000stake", feeTx.GetFee().String()) } - -func TestPostTxCmd_NamespaceFallback(t *testing.T) { - tests := []struct { - name string - flagValue string - configValue string - expectedResult string - }{ - { - name: "use flag value when provided", - flagValue: "0000000000000000000000000000000000000000000001", - configValue: "0000000000000000000000000000000000000000000002", - expectedResult: "0000000000000000000000000000000000000000000001", - }, - { - name: "use config value when flag is empty", - flagValue: "", - configValue: "0000000000000000000000000000000000000000000002", - expectedResult: "0000000000000000000000000000000000000000000002", - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - namespace := tt.flagValue - if namespace == "" { - namespace = tt.configValue - } - assert.Equal(t, tt.expectedResult, namespace) - }) - } -} diff --git a/server/start.go b/server/start.go index 65b025c3..502bb35d 100644 --- a/server/start.go +++ b/server/start.go @@ -462,8 +462,6 @@ func setupNodeAndExecutor( *evLogger, evcfg.DA.Address, evcfg.DA.AuthToken, - evcfg.DA.GasPrice, - evcfg.DA.GasMultiplier, cmd.DefaultMaxBlobSize, ) if err != nil { @@ -676,12 +674,14 @@ func getAppGenesis(cfg *cmtcfg.Config) (*genutiltypes.AppGenesis, error) { // getDaStartHeight parses the da_start_height from the genesis file. func getDaStartHeight(cfg *cmtcfg.Config) (uint64, error) { + const dAStartHeightFieldName = "da_start_height" + genFile, err := os.Open(filepath.Clean(cfg.GenesisFile())) if err != nil { return 0, fmt.Errorf("failed to open genesis file %s: %w", cfg.GenesisFile(), err) } - daStartHeight, err := parseDAStartHeightFromGenesis(bufio.NewReader(genFile)) + daStartHeight, err := parseFieldFromGenesis(bufio.NewReader(genFile), dAStartHeightFieldName) if err != nil { return 0, err } @@ -693,13 +693,11 @@ func getDaStartHeight(cfg *cmtcfg.Config) (uint64, error) { return daStartHeight, nil } -// parseDAStartHeightFromGenesis parses the `da_start_height` from a genesis JSON file, aborting early after finding the `da_start_height`. -// For efficiency, it's recommended to place the `da_start_height` field before any large entries in the JSON file. -// Returns no error when the `da_start_height` field is not found. +// parseFieldFromGenesis parses given fields from a genesis JSON file, aborting early after finding the field. +// For efficiency, it's recommended to place the field before any large entries in the JSON file. +// Returns no error when the field is not found. // Logic based on https://github.com/cosmos/cosmos-sdk/blob/v0.50.14/x/genutil/types/chain_id.go#L18. -func parseDAStartHeightFromGenesis(r io.Reader) (uint64, error) { - const dAStartHeightFieldName = "da_start_height" - +func parseFieldFromGenesis(r io.Reader, fieldName string) (uint64, error) { dec := json.NewDecoder(r) t, err := dec.Token() @@ -720,7 +718,7 @@ func parseDAStartHeightFromGenesis(r io.Reader) (uint64, error) { return 0, fmt.Errorf("expected string for the key type, got %s", t) } - if key == dAStartHeightFieldName { + if key == fieldName { var chainID uint64 if err := dec.Decode(&chainID); err != nil { return 0, err diff --git a/server/start_test.go b/server/start_test.go index 56fddb0c..c0fbe46e 100644 --- a/server/start_test.go +++ b/server/start_test.go @@ -72,7 +72,7 @@ func TestParseDAStartHeightFromGenesis(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - chainID, err := parseDAStartHeightFromGenesis(strings.NewReader(tc.json)) + chainID, err := parseFieldFromGenesis(strings.NewReader(tc.json), "da_start_height") if len(tc.expError) > 0 { require.Error(t, err) require.Contains(t, err.Error(), tc.expError) From 559a61db5971b85c38e412a6ec9f5db58d2e1312 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 19 Nov 2025 11:10:21 +0100 Subject: [PATCH 12/30] chore: bump to latest ev-node --- go.mod | 6 +++--- go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index ea983e45..4316d424 100644 --- a/go.mod +++ b/go.mod @@ -6,9 +6,9 @@ replace github.com/celestiaorg/go-header => github.com/julienrbrt/go-header v0.0 // TODO: remove after https://github.com/evstack/ev-node/pull/2797 replace ( - github.com/evstack/ev-node => github.com/evstack/ev-node v1.0.0-beta.9.0.20251113110405-0d790efaf5b7 - github.com/evstack/ev-node/core => github.com/evstack/ev-node/core v1.0.0-beta.4.0.20251113110405-0d790efaf5b7 - github.com/evstack/ev-node/da => github.com/evstack/ev-node/da v1.0.0-beta.4.0.20251113110405-0d790efaf5b7 + github.com/evstack/ev-node => github.com/evstack/ev-node v1.0.0-beta.9.0.20251117194831-a076cb95854e + github.com/evstack/ev-node/core => github.com/evstack/ev-node/core v1.0.0-beta.4.0.20251117194831-a076cb95854e + github.com/evstack/ev-node/da => github.com/evstack/ev-node/da v1.0.0-beta.5.0.20251117194831-a076cb95854e ) replace ( diff --git a/go.sum b/go.sum index f92a1faf..ea670c38 100644 --- a/go.sum +++ b/go.sum @@ -290,12 +290,12 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evstack/ev-node v1.0.0-beta.9.0.20251113110405-0d790efaf5b7 h1:08B+4sb3irCyunco1U6/xuBnKApibFksJ8Sl56wvPt4= -github.com/evstack/ev-node v1.0.0-beta.9.0.20251113110405-0d790efaf5b7/go.mod h1:1Ix63G85AflAogtP1LrgloFNR2YEMG3NrDpWNulJ65o= -github.com/evstack/ev-node/core v1.0.0-beta.4.0.20251113110405-0d790efaf5b7 h1:9MqYaRQ8VYzyE1l1w52fsMKtmhRI20V9911mweKbDN0= -github.com/evstack/ev-node/core v1.0.0-beta.4.0.20251113110405-0d790efaf5b7/go.mod h1:n2w/LhYQTPsi48m6lMj16YiIqsaQw6gxwjyJvR+B3sY= -github.com/evstack/ev-node/da v1.0.0-beta.4.0.20251113110405-0d790efaf5b7 h1:OKU9EAyVuFVhjG6Or1jNW6+WTs8pzj3kTmUaXVlA6hc= -github.com/evstack/ev-node/da v1.0.0-beta.4.0.20251113110405-0d790efaf5b7/go.mod h1:US5U6Pm8WzuzpS2ZyLj/b/6Ajs8whA+2DTGd+OfSEyA= +github.com/evstack/ev-node v1.0.0-beta.9.0.20251117194831-a076cb95854e h1:vKEZCMHPa2hvm9MLBVv4aaMoXWtLmGMztmxLjpXhsQU= +github.com/evstack/ev-node v1.0.0-beta.9.0.20251117194831-a076cb95854e/go.mod h1:1p0txb+GCky+cmOFgP4AZKhgSt3BAqce+8NfBblMWCg= +github.com/evstack/ev-node/core v1.0.0-beta.4.0.20251117194831-a076cb95854e h1:IePcUNqmnu7jjUV4OlZY3UN+u+vQcHxRTRl4MYe9s0g= +github.com/evstack/ev-node/core v1.0.0-beta.4.0.20251117194831-a076cb95854e/go.mod h1:n2w/LhYQTPsi48m6lMj16YiIqsaQw6gxwjyJvR+B3sY= +github.com/evstack/ev-node/da v1.0.0-beta.5.0.20251117194831-a076cb95854e h1:UJjfVzF4QMxTnfWb7yJypAVZFyzwcDvKGT37eOmmsb4= +github.com/evstack/ev-node/da v1.0.0-beta.5.0.20251117194831-a076cb95854e/go.mod h1:US5U6Pm8WzuzpS2ZyLj/b/6Ajs8whA+2DTGd+OfSEyA= 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.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= From 3c67c6f213b4e992f9b8ea3a0ffe55837740bf44 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 19 Nov 2025 11:48:33 +0100 Subject: [PATCH 13/30] fix commands --- server/post_tx_cmd.go | 59 +++++-------------------------------------- server/start.go | 49 +++++++++++++++++++++++++++-------- 2 files changed, 45 insertions(+), 63 deletions(-) diff --git a/server/post_tx_cmd.go b/server/post_tx_cmd.go index 2c91358c..1ea96340 100644 --- a/server/post_tx_cmd.go +++ b/server/post_tx_cmd.go @@ -1,34 +1,27 @@ package server import ( - "bufio" - "context" "encoding/json" "fmt" "os" - "path/filepath" - "time" - cmtcfg "github.com/cometbft/cometbft/config" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/server" "github.com/rs/zerolog" "github.com/spf13/cobra" + evblock "github.com/evstack/ev-node/block" "github.com/evstack/ev-node/core/da" "github.com/evstack/ev-node/da/jsonrpc" - "github.com/evstack/ev-node/pkg/cmd" rollconf "github.com/evstack/ev-node/pkg/config" + seqcommon "github.com/evstack/ev-node/sequencers/common" "github.com/evstack/ev-node/types" ) const ( flagNamespace = "namespace" flagGasPrice = "gas-price" - flagTimeout = "timeout" flagSubmitOpts = "submit-options" - - defaultTimeout = 60 * time.Second ) // PostTxCmd returns a command to post a signed transaction to a Celestia namespace @@ -63,7 +56,6 @@ Examples: // Add command-specific flags cobraCmd.Flags().String(flagNamespace, "", "Celestia namespace ID (if not provided, uses config namespace)") cobraCmd.Flags().Float64(flagGasPrice, -1, "Gas price for DA submission (if not provided, uses config gas price)") - cobraCmd.Flags().Duration(flagTimeout, defaultTimeout, "Timeout for DA submission") cobraCmd.Flags().String(flagSubmitOpts, "", "Additional submit options (if not provided, uses config submit options)") return cobraCmd @@ -74,16 +66,7 @@ func postTxRunE(cobraCmd *cobra.Command, args []string) error { clientCtx := client.GetClientContextFromCmd(cobraCmd) serverCtx := server.GetServerContextFromCmd(cobraCmd) - timeout, err := cobraCmd.Flags().GetDuration(flagTimeout) - if err != nil { - return fmt.Errorf("failed to get timeout flag: %w", err) - } - - ctx, cancel := context.WithTimeout(cobraCmd.Context(), timeout) - defer cancel() - txInput := args[0] - if txInput == "" { return fmt.Errorf("transaction cannot be empty") } @@ -118,11 +101,7 @@ func postTxRunE(cobraCmd *cobra.Command, args []string) error { } // Get namespace (use flag if provided, otherwise use config) - namespace, err := cobraCmd.Flags().GetString(flagNamespace) - if err != nil { - return fmt.Errorf("failed to get namespace flag: %w", err) - } - + namespace, _ := cobraCmd.Flags().GetString(flagNamespace) if namespace == "" { namespace = cfg.DA.GetForcedInclusionNamespace() } @@ -154,16 +133,12 @@ func postTxRunE(cobraCmd *cobra.Command, args []string) error { logger.Info("posting transaction to Celestia", "namespace", namespace, "gas_price", gasPrice, "tx_size", len(txData)) - // Create DA client - submitCtx, submitCancel := context.WithTimeout(ctx, timeout) - defer submitCancel() - daClient, err := jsonrpc.NewClient( - submitCtx, + cobraCmd.Context(), *zlLogger, cfg.DA.Address, cfg.DA.AuthToken, - cmd.DefaultMaxBlobSize, + seqcommon.AbsoluteMaxBlobSize, ) if err != nil { return fmt.Errorf("failed to create DA client: %w", err) @@ -175,7 +150,8 @@ func postTxRunE(cobraCmd *cobra.Command, args []string) error { blobs := [][]byte{txData} options := []byte(submitOpts) - result := types.SubmitWithHelpers(submitCtx, &daClient.DA, *zlLogger, blobs, gasPrice, namespaceBz, options) + dac := evblock.NewDAClient(&daClient.DA, cfg, *zlLogger) + result := dac.Submit(cobraCmd.Context(), blobs, gasPrice, namespaceBz, options) // Check result switch result.Code { @@ -263,24 +239,3 @@ func decodeTxFromJSON(clientCtx client.Context, jsonStr string) ([]byte, error) return txBytes, nil } - -// getDaEpoch parses the da_start_height from the genesis file. -func getDaEpoch(cfg *cmtcfg.Config) (uint64, error) { - const daEpochFieldName = "da_epoch_forced_inclusion" - - genFile, err := os.Open(filepath.Clean(cfg.GenesisFile())) - if err != nil { - return 0, fmt.Errorf("failed to open genesis file %s: %w", cfg.GenesisFile(), err) - } - - daStartHeight, err := parseFieldFromGenesis(bufio.NewReader(genFile), daEpochFieldName) - if err != nil { - return 0, err - } - - if err := genFile.Close(); err != nil { - return 0, fmt.Errorf("failed to close genesis file %s: %v", genFile.Name(), err) - } - - return daStartHeight, nil -} diff --git a/server/start.go b/server/start.go index 502bb35d..60413043 100644 --- a/server/start.go +++ b/server/start.go @@ -47,7 +47,6 @@ import ( coresequencer "github.com/evstack/ev-node/core/sequencer" "github.com/evstack/ev-node/da/jsonrpc" "github.com/evstack/ev-node/node" - "github.com/evstack/ev-node/pkg/cmd" "github.com/evstack/ev-node/pkg/config" "github.com/evstack/ev-node/pkg/genesis" "github.com/evstack/ev-node/pkg/p2p" @@ -55,6 +54,7 @@ import ( "github.com/evstack/ev-node/pkg/signer" "github.com/evstack/ev-node/pkg/store" basedsequencer "github.com/evstack/ev-node/sequencers/based" + seqcommon "github.com/evstack/ev-node/sequencers/common" singlesequencer "github.com/evstack/ev-node/sequencers/single" rollkittypes "github.com/evstack/ev-node/types" @@ -394,12 +394,17 @@ func setupNodeAndExecutor( return nil, nil, cleanupFn, err } + daEpochSize, err := getDaEpoch(cfg) + if err != nil { + return nil, nil, cleanupFn, err + } + cmtGenDoc, err := appGenesis.ToGenesisDoc() if err != nil { return nil, nil, cleanupFn, err } - evGenesis = createEvolveGenesisFromCometBFT(cmtGenDoc, daStartHeight) + evGenesis = createEvolveGenesisFromCometBFT(cmtGenDoc, daStartHeight, daEpochSize) sdkLogger.Info("created evolve genesis from cometbft genesis", "chain_id", cmtGenDoc.ChainID, @@ -462,7 +467,7 @@ func setupNodeAndExecutor( *evLogger, evcfg.DA.Address, evcfg.DA.AuthToken, - cmd.DefaultMaxBlobSize, + seqcommon.AbsoluteMaxBlobSize, ) if err != nil { return nil, nil, cleanupFn, fmt.Errorf("failed to create DA client: %w", err) @@ -574,10 +579,8 @@ func createSequencer( genesis genesis.Genesis, singleMetrics *singlesequencer.Metrics, ) (coresequencer.Sequencer, error) { - daRetriever, err := evblock.NewDARetriever(da, nodeConfig, genesis, logger) - if err != nil { - return nil, fmt.Errorf("failed to create DA retriever: %w", err) - } + daClient := evblock.NewDAClient(da, nodeConfig, logger) + fiRetriever := evblock.NewForcedInclusionRetriever(daClient, genesis, logger) if nodeConfig.Node.BasedSequencer { // Based sequencer mode - fetch transactions only from DA @@ -585,7 +588,7 @@ func createSequencer( return nil, fmt.Errorf("based sequencer mode requires aggregator mode to be enabled") } - basedSeq := basedsequencer.NewBasedSequencer(daRetriever, da, nodeConfig, genesis, logger) + basedSeq := basedsequencer.NewBasedSequencer(fiRetriever, da, nodeConfig, genesis, logger) logger.Info(). Str("forced_inclusion_namespace", nodeConfig.DA.GetForcedInclusionNamespace()). @@ -605,7 +608,7 @@ func createSequencer( singleMetrics, nodeConfig.Node.Aggregator, 1000, - daRetriever, + fiRetriever, genesis, ) if err != nil { @@ -613,7 +616,6 @@ func createSequencer( } logger.Info(). - Bool("forced_inclusion_enabled", daRetriever != nil). Str("forced_inclusion_namespace", nodeConfig.DA.GetForcedInclusionNamespace()). Msg("single sequencer initialized") @@ -693,6 +695,27 @@ func getDaStartHeight(cfg *cmtcfg.Config) (uint64, error) { return daStartHeight, nil } +// getDaEpoch parses the da_start_height from the genesis file. +func getDaEpoch(cfg *cmtcfg.Config) (uint64, error) { + const daEpochFieldName = "da_epoch_forced_inclusion" + + genFile, err := os.Open(filepath.Clean(cfg.GenesisFile())) + if err != nil { + return 0, fmt.Errorf("failed to open genesis file %s: %w", cfg.GenesisFile(), err) + } + + daEpochSize, err := parseFieldFromGenesis(bufio.NewReader(genFile), daEpochFieldName) + if err != nil { + return 0, err + } + + if err := genFile.Close(); err != nil { + return 0, fmt.Errorf("failed to close genesis file %s: %v", genFile.Name(), err) + } + + return daEpochSize, nil +} + // parseFieldFromGenesis parses given fields from a genesis JSON file, aborting early after finding the field. // For efficiency, it's recommended to place the field before any large entries in the JSON file. // Returns no error when the field is not found. @@ -844,7 +867,7 @@ func loadEvolveMigrationGenesis(rootDir string) (*evolveMigrationGenesis, error) // createEvolveGenesisFromCometBFT creates a evolve genesis from cometbft genesis. // This is used for normal startup scenarios where a full cometbft genesis document // is available and contains all the necessary information. -func createEvolveGenesisFromCometBFT(cmtGenDoc *cmttypes.GenesisDoc, daStartHeight uint64) *genesis.Genesis { +func createEvolveGenesisFromCometBFT(cmtGenDoc *cmttypes.GenesisDoc, daStartHeight, forcedInclusionEpochSize uint64) *genesis.Genesis { gen := genesis.NewGenesis( cmtGenDoc.ChainID, uint64(cmtGenDoc.InitialHeight), @@ -856,6 +879,10 @@ func createEvolveGenesisFromCometBFT(cmtGenDoc *cmttypes.GenesisDoc, daStartHeig gen.DAStartHeight = daStartHeight } + if forcedInclusionEpochSize > 0 { + gen.DAEpochForcedInclusion = forcedInclusionEpochSize + } + return &gen } From 47f6eb1652122fdfc9045e170b79c4f4584edd84 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 19 Nov 2025 12:00:57 +0100 Subject: [PATCH 14/30] future proof genesis field handling --- server/genesis_helpers.go | 186 ++++++++++++++++++++++++++++++++++++++ server/start.go | 145 ----------------------------- server/start_test.go | 47 ++++++++++ 3 files changed, 233 insertions(+), 145 deletions(-) create mode 100644 server/genesis_helpers.go diff --git a/server/genesis_helpers.go b/server/genesis_helpers.go new file mode 100644 index 00000000..469e28c4 --- /dev/null +++ b/server/genesis_helpers.go @@ -0,0 +1,186 @@ +package server + +import ( + "bufio" + "encoding/json" + "fmt" + "io" + "os" + "path/filepath" + "reflect" + "strings" + + cmtcfg "github.com/cometbft/cometbft/config" + cmtjson "github.com/cometbft/cometbft/libs/json" + cmttypes "github.com/cometbft/cometbft/types" + genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" + "github.com/evstack/ev-node/pkg/genesis" +) + +// getAppGenesis returns the app genesis based on its location in the config. +func getAppGenesis(cfg *cmtcfg.Config) (*genutiltypes.AppGenesis, error) { + appGenesis, err := genutiltypes.AppGenesisFromFile(cfg.GenesisFile()) + if err != nil { + return nil, fmt.Errorf("failed to read genesis from file %s: %w", cfg.GenesisFile(), err) + } + + return appGenesis, nil +} + +const evolveGenesisFilename = "ev_genesis.json" + +// loadEvolveMigrationGenesis loads a minimal evolve genesis from a migration genesis file. +// Returns nil if no migration genesis is found (normal startup scenario). +func loadEvolveMigrationGenesis(rootDir string) (*evolveMigrationGenesis, error) { + genesisPath := filepath.Join(rootDir, evolveGenesisFilename) + if _, err := os.Stat(genesisPath); os.IsNotExist(err) { + return nil, nil // no migration genesis found + } + + genesisBytes, err := os.ReadFile(genesisPath) + if err != nil { + return nil, fmt.Errorf("failed to read evolve migration genesis: %w", err) + } + + var migrationGenesis evolveMigrationGenesis + // using cmtjson for unmarshalling to ensure compatibility with cometbft genesis format + if err := cmtjson.Unmarshal(genesisBytes, &migrationGenesis); err != nil { + return nil, fmt.Errorf("failed to unmarshal evolve migration genesis: %w", err) + } + + return &migrationGenesis, nil +} + +// createEvolveGenesisFromCometBFT creates a evolve genesis from cometbft genesis. +// This is used for normal startup scenarios where a full cometbft genesis document +// is available and contains all the necessary information. +func createEvolveGenesisFromCometBFT(cmtGenDoc *cmttypes.GenesisDoc, daStartHeight, forcedInclusionEpochSize uint64) *genesis.Genesis { + gen := genesis.NewGenesis( + cmtGenDoc.ChainID, + uint64(cmtGenDoc.InitialHeight), + cmtGenDoc.GenesisTime, + cmtGenDoc.Validators[0].Address.Bytes(), // use the first validator as sequencer + ) + + if daStartHeight > 0 { + gen.DAStartHeight = daStartHeight + } + + if forcedInclusionEpochSize > 0 { + gen.DAEpochForcedInclusion = forcedInclusionEpochSize + } + + return &gen +} + +// getJSONTag extracts the JSON tag value for a given field name using reflection. +func getJSONTag(v interface{}, fieldName string) (string, error) { + t := reflect.TypeOf(v) + field, ok := t.FieldByName(fieldName) + if !ok { + return "", fmt.Errorf("field %s not found in type %s", fieldName, t.Name()) + } + + jsonTag := field.Tag.Get("json") + if jsonTag == "" { + return "", fmt.Errorf("field %s does not have a json tag", fieldName) + } + + // Handle tags like "field_name,omitempty" by taking only the first part + if idx := strings.Index(jsonTag, ","); idx != -1 { + jsonTag = jsonTag[:idx] + } + + return jsonTag, nil +} + +// getDaStartHeight parses the da_start_height from the genesis file. +func getDaStartHeight(cfg *cmtcfg.Config) (uint64, error) { + fieldTag, err := getJSONTag(genesis.Genesis{}, "DAStartHeight") + if err != nil { + return 0, fmt.Errorf("failed to get JSON tag for DAStartHeight: %w", err) + } + + genFile, err := os.Open(filepath.Clean(cfg.GenesisFile())) + if err != nil { + return 0, fmt.Errorf("failed to open genesis file %s: %w", cfg.GenesisFile(), err) + } + + daStartHeight, err := parseFieldFromGenesis(bufio.NewReader(genFile), fieldTag) + if err != nil { + return 0, err + } + + if err := genFile.Close(); err != nil { + return 0, fmt.Errorf("failed to close genesis file %s: %v", genFile.Name(), err) + } + + return daStartHeight, nil +} + +// getDaEpoch parses the da_epoch_forced_inclusion from the genesis file. +func getDaEpoch(cfg *cmtcfg.Config) (uint64, error) { + fieldTag, err := getJSONTag(genesis.Genesis{}, "DAEpochForcedInclusion") + if err != nil { + return 0, fmt.Errorf("failed to get JSON tag for DAEpochForcedInclusion: %w", err) + } + + genFile, err := os.Open(filepath.Clean(cfg.GenesisFile())) + if err != nil { + return 0, fmt.Errorf("failed to open genesis file %s: %w", cfg.GenesisFile(), err) + } + + daEpochSize, err := parseFieldFromGenesis(bufio.NewReader(genFile), fieldTag) + if err != nil { + return 0, err + } + + if err := genFile.Close(); err != nil { + return 0, fmt.Errorf("failed to close genesis file %s: %v", genFile.Name(), err) + } + + return daEpochSize, nil +} + +// parseFieldFromGenesis parses given fields from a genesis JSON file, aborting early after finding the field. +// For efficiency, it's recommended to place the field before any large entries in the JSON file. +// Returns no error when the field is not found. +// Logic based on https://github.com/cosmos/cosmos-sdk/blob/v0.50.14/x/genutil/types/chain_id.go#L18. +func parseFieldFromGenesis(r io.Reader, fieldName string) (uint64, error) { + dec := json.NewDecoder(r) + + t, err := dec.Token() + if err != nil { + return 0, err + } + if t != json.Delim('{') { + return 0, fmt.Errorf("expected {, got %s", t) + } + + for dec.More() { + t, err = dec.Token() + if err != nil { + return 0, err + } + key, ok := t.(string) + if !ok { + return 0, fmt.Errorf("expected string for the key type, got %s", t) + } + + if key == fieldName { + var chainID uint64 + if err := dec.Decode(&chainID); err != nil { + return 0, err + } + return chainID, nil + } + + // skip the value + var value json.RawMessage + if err := dec.Decode(&value); err != nil { + return 0, err + } + } + + return 0, nil +} diff --git a/server/start.go b/server/start.go index 60413043..e283cb63 100644 --- a/server/start.go +++ b/server/start.go @@ -1,20 +1,16 @@ package server import ( - "bufio" "context" - "encoding/json" "errors" "fmt" "io" "net" "os" - "path/filepath" "time" "cosmossdk.io/log" cmtcfg "github.com/cometbft/cometbft/config" - cmtjson "github.com/cometbft/cometbft/libs/json" "github.com/cometbft/cometbft/mempool" cmtp2p "github.com/cometbft/cometbft/p2p" pvm "github.com/cometbft/cometbft/privval" @@ -664,101 +660,6 @@ func createAndStartIndexerService( return indexerService, txIndexer, blockIndexer, nil } -// getAppGenesis returns the app genesis based on its location in the config. -func getAppGenesis(cfg *cmtcfg.Config) (*genutiltypes.AppGenesis, error) { - appGenesis, err := genutiltypes.AppGenesisFromFile(cfg.GenesisFile()) - if err != nil { - return nil, fmt.Errorf("failed to read genesis from file %s: %w", cfg.GenesisFile(), err) - } - - return appGenesis, nil -} - -// getDaStartHeight parses the da_start_height from the genesis file. -func getDaStartHeight(cfg *cmtcfg.Config) (uint64, error) { - const dAStartHeightFieldName = "da_start_height" - - genFile, err := os.Open(filepath.Clean(cfg.GenesisFile())) - if err != nil { - return 0, fmt.Errorf("failed to open genesis file %s: %w", cfg.GenesisFile(), err) - } - - daStartHeight, err := parseFieldFromGenesis(bufio.NewReader(genFile), dAStartHeightFieldName) - if err != nil { - return 0, err - } - - if err := genFile.Close(); err != nil { - return 0, fmt.Errorf("failed to close genesis file %s: %v", genFile.Name(), err) - } - - return daStartHeight, nil -} - -// getDaEpoch parses the da_start_height from the genesis file. -func getDaEpoch(cfg *cmtcfg.Config) (uint64, error) { - const daEpochFieldName = "da_epoch_forced_inclusion" - - genFile, err := os.Open(filepath.Clean(cfg.GenesisFile())) - if err != nil { - return 0, fmt.Errorf("failed to open genesis file %s: %w", cfg.GenesisFile(), err) - } - - daEpochSize, err := parseFieldFromGenesis(bufio.NewReader(genFile), daEpochFieldName) - if err != nil { - return 0, err - } - - if err := genFile.Close(); err != nil { - return 0, fmt.Errorf("failed to close genesis file %s: %v", genFile.Name(), err) - } - - return daEpochSize, nil -} - -// parseFieldFromGenesis parses given fields from a genesis JSON file, aborting early after finding the field. -// For efficiency, it's recommended to place the field before any large entries in the JSON file. -// Returns no error when the field is not found. -// Logic based on https://github.com/cosmos/cosmos-sdk/blob/v0.50.14/x/genutil/types/chain_id.go#L18. -func parseFieldFromGenesis(r io.Reader, fieldName string) (uint64, error) { - dec := json.NewDecoder(r) - - t, err := dec.Token() - if err != nil { - return 0, err - } - if t != json.Delim('{') { - return 0, fmt.Errorf("expected {, got %s", t) - } - - for dec.More() { - t, err = dec.Token() - if err != nil { - return 0, err - } - key, ok := t.(string) - if !ok { - return 0, fmt.Errorf("expected string for the key type, got %s", t) - } - - if key == fieldName { - var chainID uint64 - if err := dec.Decode(&chainID); err != nil { - return 0, err - } - return chainID, nil - } - - // skip the value - var value json.RawMessage - if err := dec.Decode(&value); err != nil { - return 0, err - } - } - - return 0, nil -} - func getAndValidateConfig(svrCtx *server.Context) (serverconfig.Config, error) { config, err := serverconfig.GetConfig(svrCtx.Viper) if err != nil { @@ -840,52 +741,6 @@ func initProxyApp(clientCreator proxy.ClientCreator, logger log.Logger, metrics return proxyApp, nil } -const evolveGenesisFilename = "ev_genesis.json" - -// loadEvolveMigrationGenesis loads a minimal evolve genesis from a migration genesis file. -// Returns nil if no migration genesis is found (normal startup scenario). -func loadEvolveMigrationGenesis(rootDir string) (*evolveMigrationGenesis, error) { - genesisPath := filepath.Join(rootDir, evolveGenesisFilename) - if _, err := os.Stat(genesisPath); os.IsNotExist(err) { - return nil, nil // no migration genesis found - } - - genesisBytes, err := os.ReadFile(genesisPath) - if err != nil { - return nil, fmt.Errorf("failed to read evolve migration genesis: %w", err) - } - - var migrationGenesis evolveMigrationGenesis - // using cmtjson for unmarshalling to ensure compatibility with cometbft genesis format - if err := cmtjson.Unmarshal(genesisBytes, &migrationGenesis); err != nil { - return nil, fmt.Errorf("failed to unmarshal evolve migration genesis: %w", err) - } - - return &migrationGenesis, nil -} - -// createEvolveGenesisFromCometBFT creates a evolve genesis from cometbft genesis. -// This is used for normal startup scenarios where a full cometbft genesis document -// is available and contains all the necessary information. -func createEvolveGenesisFromCometBFT(cmtGenDoc *cmttypes.GenesisDoc, daStartHeight, forcedInclusionEpochSize uint64) *genesis.Genesis { - gen := genesis.NewGenesis( - cmtGenDoc.ChainID, - uint64(cmtGenDoc.InitialHeight), - cmtGenDoc.GenesisTime, - cmtGenDoc.Validators[0].Address.Bytes(), // use the first validator as sequencer - ) - - if daStartHeight > 0 { - gen.DAStartHeight = daStartHeight - } - - if forcedInclusionEpochSize > 0 { - gen.DAEpochForcedInclusion = forcedInclusionEpochSize - } - - return &gen -} - func openRawEvolveDB(rootDir string) (ds.Batching, error) { database, err := store.NewDefaultKVStore(rootDir, "data", "evolve") if err != nil { diff --git a/server/start_test.go b/server/start_test.go index c0fbe46e..25a2253e 100644 --- a/server/start_test.go +++ b/server/start_test.go @@ -5,6 +5,7 @@ import ( "strings" "testing" + "github.com/evstack/ev-node/pkg/genesis" "github.com/stretchr/testify/require" ) @@ -83,3 +84,49 @@ func TestParseDAStartHeightFromGenesis(t *testing.T) { }) } } + +func TestGetJSONTag(t *testing.T) { + testCases := []struct { + name string + fieldName string + expTag string + expError bool + }{ + { + name: "DAStartHeight field", + fieldName: "DAStartHeight", + expTag: "da_start_height", + expError: false, + }, + { + name: "DAEpochForcedInclusion field", + fieldName: "DAEpochForcedInclusion", + expTag: "da_epoch_forced_inclusion", + expError: false, + }, + { + name: "ChainID field", + fieldName: "ChainID", + expTag: "chain_id", + expError: false, + }, + { + name: "non-existent field", + fieldName: "NonExistentField", + expTag: "", + expError: true, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + tag, err := getJSONTag(genesis.Genesis{}, tc.fieldName) + if tc.expError { + require.Error(t, err) + } else { + require.NoError(t, err) + require.Equal(t, tc.expTag, tag) + } + }) + } +} From 8d4916b7f2b24a138e8a5b576647e77a694bd183 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Thu, 11 Dec 2025 15:24:08 +0100 Subject: [PATCH 15/30] fixes --- go.mod | 36 +++++++++++----------- go.sum | 71 +++++++++++++++++++++++++------------------ server/post_tx_cmd.go | 15 ++++----- server/start.go | 21 +++---------- 4 files changed, 72 insertions(+), 71 deletions(-) diff --git a/go.mod b/go.mod index 4316d424..4ae43d10 100644 --- a/go.mod +++ b/go.mod @@ -6,9 +6,9 @@ replace github.com/celestiaorg/go-header => github.com/julienrbrt/go-header v0.0 // TODO: remove after https://github.com/evstack/ev-node/pull/2797 replace ( - github.com/evstack/ev-node => github.com/evstack/ev-node v1.0.0-beta.9.0.20251117194831-a076cb95854e - github.com/evstack/ev-node/core => github.com/evstack/ev-node/core v1.0.0-beta.4.0.20251117194831-a076cb95854e - github.com/evstack/ev-node/da => github.com/evstack/ev-node/da v1.0.0-beta.5.0.20251117194831-a076cb95854e + github.com/evstack/ev-node => github.com/evstack/ev-node v1.0.0-beta.10.0.20251211085135-8b2b8d6d29e5 + github.com/evstack/ev-node/core => github.com/evstack/ev-node/core v1.0.0-beta.5.0.20251211085135-8b2b8d6d29e5 + github.com/evstack/ev-node/da => github.com/evstack/ev-node/da v1.0.0-beta.6.0.20251211085135-8b2b8d6d29e5 ) replace ( @@ -27,7 +27,7 @@ require ( cosmossdk.io/log v1.6.1 cosmossdk.io/math v1.5.3 cosmossdk.io/store v1.1.2 - github.com/celestiaorg/go-header v0.7.3 + github.com/celestiaorg/go-header v0.7.4 github.com/cometbft/cometbft v0.38.19 github.com/cometbft/cometbft-db v0.14.1 github.com/cosmos/cosmos-db v1.1.3 @@ -35,14 +35,14 @@ require ( github.com/cosmos/cosmos-sdk v0.50.14 github.com/cosmos/gogoproto v1.7.2 github.com/evstack/ev-node v1.0.0-beta.9 - github.com/evstack/ev-node/core v1.0.0-beta.4 + github.com/evstack/ev-node/core v1.0.0-beta.5 github.com/evstack/ev-node/da v1.0.0-beta.5 github.com/go-kit/kit v0.13.0 github.com/golang/protobuf v1.5.4 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/hashicorp/go-metrics v0.5.4 github.com/ipfs/go-datastore v0.9.0 - github.com/libp2p/go-libp2p v0.43.0 + github.com/libp2p/go-libp2p v0.45.0 github.com/libp2p/go-libp2p-pubsub v0.15.0 github.com/multiformats/go-multiaddr v0.16.1 github.com/prometheus/client_golang v1.23.2 @@ -94,7 +94,9 @@ require ( github.com/bytedance/sonic v1.14.0 // indirect github.com/bytedance/sonic/loader v0.3.0 // indirect github.com/celestiaorg/go-libp2p-messenger v0.2.2 // indirect + github.com/celestiaorg/go-square/merkle v0.0.0-20240627094109-7d01436067a3 // indirect github.com/celestiaorg/go-square/v3 v3.0.2 // indirect + github.com/celestiaorg/nmt v0.24.2 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cloudwego/base64x v0.1.5 // indirect @@ -145,7 +147,7 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-viper/mapstructure/v2 v2.4.0 // indirect - github.com/goccy/go-yaml v1.18.0 // indirect + github.com/goccy/go-yaml v1.19.0 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gofrs/flock v0.12.1 // indirect github.com/gogo/googleapis v1.4.1 // indirect @@ -153,7 +155,7 @@ require ( github.com/golang/glog v1.2.5 // indirect github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/golang/mock v1.6.0 // indirect - github.com/golang/snappy v0.0.4 // indirect + github.com/golang/snappy v0.0.5-0.20231225225746-43d5d4cd4e0e // indirect github.com/google/btree v1.1.3 // indirect github.com/google/cel-go v0.25.0 // indirect github.com/google/flatbuffers v24.12.23+incompatible // indirect @@ -179,10 +181,10 @@ require ( github.com/iancoleman/strcase v0.3.0 // indirect github.com/improbable-eng/grpc-web v0.15.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/ipfs/boxo v0.35.0 // indirect - github.com/ipfs/go-cid v0.5.0 // indirect + github.com/ipfs/boxo v0.35.2 // indirect + github.com/ipfs/go-cid v0.6.0 // indirect github.com/ipfs/go-ds-badger4 v0.1.8 // indirect - github.com/ipfs/go-log/v2 v2.8.1 // indirect + github.com/ipfs/go-log/v2 v2.9.0 // indirect github.com/ipld/go-ipld-prime v0.21.0 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect @@ -199,12 +201,12 @@ require ( github.com/libp2p/go-cidranger v1.1.0 // indirect github.com/libp2p/go-flow-metrics v0.3.0 // indirect github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect - github.com/libp2p/go-libp2p-kad-dht v0.35.1 // indirect + github.com/libp2p/go-libp2p-kad-dht v0.36.0 // indirect github.com/libp2p/go-libp2p-kbucket v0.8.0 // indirect github.com/libp2p/go-libp2p-record v0.3.1 // indirect github.com/libp2p/go-libp2p-routing-helpers v0.7.5 // indirect github.com/libp2p/go-msgio v0.3.0 // indirect - github.com/libp2p/go-netroute v0.2.2 // indirect + github.com/libp2p/go-netroute v0.3.0 // indirect github.com/libp2p/go-reuseport v0.4.0 // indirect github.com/libp2p/go-yamux/v5 v5.0.1 // indirect github.com/linxGnu/grocksdb v1.8.14 // indirect @@ -238,7 +240,7 @@ require ( github.com/multiformats/go-multiaddr-dns v0.4.1 // indirect github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect github.com/multiformats/go-multibase v0.2.0 // indirect - github.com/multiformats/go-multicodec v0.9.2 // indirect + github.com/multiformats/go-multicodec v0.10.0 // indirect github.com/multiformats/go-multihash v0.2.3 // indirect github.com/multiformats/go-multistream v0.6.1 // indirect github.com/multiformats/go-varint v0.1.0 // indirect @@ -278,7 +280,7 @@ require ( github.com/prometheus/common v0.66.1 // indirect github.com/prometheus/procfs v0.17.0 // indirect github.com/quic-go/qpack v0.5.1 // indirect - github.com/quic-go/quic-go v0.54.1 // indirect + github.com/quic-go/quic-go v0.55.0 // indirect github.com/quic-go/webtransport-go v0.9.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect @@ -327,8 +329,8 @@ require ( go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/arch v0.17.0 // indirect - golang.org/x/crypto v0.44.0 // indirect - golang.org/x/exp v0.0.0-20250911091902-df9299821621 // indirect + golang.org/x/crypto v0.45.0 // indirect + golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 // indirect golang.org/x/mod v0.29.0 // indirect golang.org/x/sys v0.38.0 // indirect golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8 // indirect diff --git a/go.sum b/go.sum index ea670c38..d60867b8 100644 --- a/go.sum +++ b/go.sum @@ -139,8 +139,12 @@ github.com/bytedance/sonic/loader v0.3.0/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFos github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/celestiaorg/go-libp2p-messenger v0.2.2 h1:osoUfqjss7vWTIZrrDSy953RjQz+ps/vBFE7bychLEc= github.com/celestiaorg/go-libp2p-messenger v0.2.2/go.mod h1:oTCRV5TfdO7V/k6nkx7QjQzGrWuJbupv+0o1cgnY2i4= +github.com/celestiaorg/go-square/merkle v0.0.0-20240627094109-7d01436067a3 h1:wP84mtwOCVNOTfS3zErICjxKLnh74Z1uf+tdrlSFjVM= +github.com/celestiaorg/go-square/merkle v0.0.0-20240627094109-7d01436067a3/go.mod h1:86qIYnEhmn/hfW+xvw98NOI3zGaDEB3x8JGjYo2FqLs= github.com/celestiaorg/go-square/v3 v3.0.2 h1:eSQOgNII8inK9IhiBZ+6GADQeWbRq4HYY72BOgcduA4= github.com/celestiaorg/go-square/v3 v3.0.2/go.mod h1:oFReMLsSDMRs82ICFEeFQFCqNvwdsbIM1BzCcb0f7dM= +github.com/celestiaorg/nmt v0.24.2 h1:LlpJSPOd6/Lw1Ig6HUhZuqiINHLka/ZSRTBzlNJpchg= +github.com/celestiaorg/nmt v0.24.2/go.mod h1:vgLBpWBi8F5KLxTdXSwb7AU4NhiIQ1AQRGa+PzdcLEA= github.com/celestiaorg/utils v0.1.0 h1:WsP3O8jF7jKRgLNFmlDCwdThwOFMFxg0MnqhkLFVxPo= github.com/celestiaorg/utils v0.1.0/go.mod h1:vQTh7MHnvpIeCQZ2/Ph+w7K1R2UerDheZbgJEJD2hSU= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= @@ -290,12 +294,12 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evstack/ev-node v1.0.0-beta.9.0.20251117194831-a076cb95854e h1:vKEZCMHPa2hvm9MLBVv4aaMoXWtLmGMztmxLjpXhsQU= -github.com/evstack/ev-node v1.0.0-beta.9.0.20251117194831-a076cb95854e/go.mod h1:1p0txb+GCky+cmOFgP4AZKhgSt3BAqce+8NfBblMWCg= -github.com/evstack/ev-node/core v1.0.0-beta.4.0.20251117194831-a076cb95854e h1:IePcUNqmnu7jjUV4OlZY3UN+u+vQcHxRTRl4MYe9s0g= -github.com/evstack/ev-node/core v1.0.0-beta.4.0.20251117194831-a076cb95854e/go.mod h1:n2w/LhYQTPsi48m6lMj16YiIqsaQw6gxwjyJvR+B3sY= -github.com/evstack/ev-node/da v1.0.0-beta.5.0.20251117194831-a076cb95854e h1:UJjfVzF4QMxTnfWb7yJypAVZFyzwcDvKGT37eOmmsb4= -github.com/evstack/ev-node/da v1.0.0-beta.5.0.20251117194831-a076cb95854e/go.mod h1:US5U6Pm8WzuzpS2ZyLj/b/6Ajs8whA+2DTGd+OfSEyA= +github.com/evstack/ev-node v1.0.0-beta.10.0.20251211085135-8b2b8d6d29e5 h1:eCuDm3wx0maU/3sK6oUNmP95MH+hV/Vom/r9zSm0KTk= +github.com/evstack/ev-node v1.0.0-beta.10.0.20251211085135-8b2b8d6d29e5/go.mod h1:kZ2kJkVX89ymBFNC3SulF92YFlEhhAi+ULYFAQb9uIQ= +github.com/evstack/ev-node/core v1.0.0-beta.5.0.20251211085135-8b2b8d6d29e5 h1:eAKCP+BegXDnBk+R+2JH8rRSpn1VF5B5SCdwXjX1wOQ= +github.com/evstack/ev-node/core v1.0.0-beta.5.0.20251211085135-8b2b8d6d29e5/go.mod h1:n2w/LhYQTPsi48m6lMj16YiIqsaQw6gxwjyJvR+B3sY= +github.com/evstack/ev-node/da v1.0.0-beta.6.0.20251211085135-8b2b8d6d29e5 h1:20qiOYfcK2VojqSb7nIU8uGCyQyRPMHFzntqy1OwMfw= +github.com/evstack/ev-node/da v1.0.0-beta.6.0.20251211085135-8b2b8d6d29e5/go.mod h1:7kONtkX6iWT6337HtceUCI2mTSuisUOCGP8X3D/MZcQ= 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.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= @@ -374,8 +378,8 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw= -github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= +github.com/goccy/go-yaml v1.19.0 h1:EmkZ9RIsX+Uq4DYFowegAuJo8+xdX3T/2dwNPXbxEYE= +github.com/goccy/go-yaml v1.19.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= 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= @@ -423,8 +427,9 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu 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.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.5-0.20231225225746-43d5d4cd4e0e h1:4bw4WeyTYPp0smaXiJZCNnLrvVBqirQVreixayXezGc= +github.com/golang/snappy v0.0.5-0.20231225225746-43d5d4cd4e0e/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= @@ -551,20 +556,20 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/ipfs/boxo v0.35.0 h1:3Mku5arSbAZz0dvb4goXRsQuZkFkPrGr5yYdu0YM1pY= -github.com/ipfs/boxo v0.35.0/go.mod h1:uhaF0DGnbgEiXDTmD249jCGbxVkMm6+Ew85q6Uub7lo= +github.com/ipfs/boxo v0.35.2 h1:0QZJJh6qrak28abENOi5OA8NjBnZM4p52SxeuIDqNf8= +github.com/ipfs/boxo v0.35.2/go.mod h1:bZn02OFWwJtY8dDW9XLHaki59EC5o+TGDECXEbe1w8U= github.com/ipfs/go-block-format v0.2.3 h1:mpCuDaNXJ4wrBJLrtEaGFGXkferrw5eqVvzaHhtFKQk= github.com/ipfs/go-block-format v0.2.3/go.mod h1:WJaQmPAKhD3LspLixqlqNFxiZ3BZ3xgqxxoSR/76pnA= -github.com/ipfs/go-cid v0.5.0 h1:goEKKhaGm0ul11IHA7I6p1GmKz8kEYniqFopaB5Otwg= -github.com/ipfs/go-cid v0.5.0/go.mod h1:0L7vmeNXpQpUS9vt+yEARkJ8rOg43DF3iPgn4GIN0mk= +github.com/ipfs/go-cid v0.6.0 h1:DlOReBV1xhHBhhfy/gBNNTSyfOM6rLiIx9J7A4DGf30= +github.com/ipfs/go-cid v0.6.0/go.mod h1:NC4kS1LZjzfhK40UGmpXv5/qD2kcMzACYJNntCUiDhQ= github.com/ipfs/go-datastore v0.9.0 h1:WocriPOayqalEsueHv6SdD4nPVl4rYMfYGLD4bqCZ+w= github.com/ipfs/go-datastore v0.9.0/go.mod h1:uT77w/XEGrvJWwHgdrMr8bqCN6ZTW9gzmi+3uK+ouHg= github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= github.com/ipfs/go-ds-badger4 v0.1.8 h1:frNczf5CjCVm62RJ5mW5tD/oLQY/9IKAUpKviRV9QAI= github.com/ipfs/go-ds-badger4 v0.1.8/go.mod h1:FdqSLA5TMsyqooENB/Hf4xzYE/iH0z/ErLD6ogtfMrA= -github.com/ipfs/go-log/v2 v2.8.1 h1:Y/X36z7ASoLJaYIJAL4xITXgwf7RVeqb1+/25aq/Xk0= -github.com/ipfs/go-log/v2 v2.8.1/go.mod h1:NyhTBcZmh2Y55eWVjOeKf8M7e4pnJYM3yDZNxQBWEEY= +github.com/ipfs/go-log/v2 v2.9.0 h1:l4b06AwVXwldIzbVPZy5z7sKp9lHFTX0KWfTBCtHaOk= +github.com/ipfs/go-log/v2 v2.9.0/go.mod h1:UhIYAwMV7Nb4ZmihUxfIRM2Istw/y9cAk3xaK+4Zs2c= github.com/ipfs/go-test v0.2.3 h1:Z/jXNAReQFtCYyn7bsv/ZqUwS6E7iIcSpJ2CuzCvnrc= github.com/ipfs/go-test v0.2.3/go.mod h1:QW8vSKkwYvWFwIZQLGQXdkt9Ud76eQXRQ9Ao2H+cA1o= github.com/ipld/go-ipld-prime v0.21.0 h1:n4JmcpOlPDIxBcY037SVfpd1G+Sj1nKZah0m6QH9C2E= @@ -640,12 +645,12 @@ github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38y github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= github.com/libp2p/go-flow-metrics v0.3.0 h1:q31zcHUvHnwDO0SHaukewPYgwOBSxtt830uJtUx6784= github.com/libp2p/go-flow-metrics v0.3.0/go.mod h1:nuhlreIwEguM1IvHAew3ij7A8BMlyHQJ279ao24eZZo= -github.com/libp2p/go-libp2p v0.43.0 h1:b2bg2cRNmY4HpLK8VHYQXLX2d3iND95OjodLFymvqXU= -github.com/libp2p/go-libp2p v0.43.0/go.mod h1:IiSqAXDyP2sWH+J2gs43pNmB/y4FOi2XQPbsb+8qvzc= +github.com/libp2p/go-libp2p v0.45.0 h1:Pdhr2HsFXaYjtfiNcBP4CcRUONvbMFdH3puM9vV4Tiw= +github.com/libp2p/go-libp2p v0.45.0/go.mod h1:NovCojezAt4dnDd4fH048K7PKEqH0UFYYqJRjIIu8zc= github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94= github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8= -github.com/libp2p/go-libp2p-kad-dht v0.35.1 h1:RQglhc9OxqDwlFFdhQMwKxIPBIBfGsleROnK5hqVsoE= -github.com/libp2p/go-libp2p-kad-dht v0.35.1/go.mod h1:1oCXzkkBiYh3d5cMWLpInSOZ6am2AlpC4G+GDcZFcE0= +github.com/libp2p/go-libp2p-kad-dht v0.36.0 h1:7QuXhV36+Vyj+L6A7mrYkn2sYLrbRcbjvsYDu/gXhn8= +github.com/libp2p/go-libp2p-kad-dht v0.36.0/go.mod h1:O24LxTH9Rt3I5XU8nmiA9VynS4TrTwAyj+zBJKB05vQ= github.com/libp2p/go-libp2p-kbucket v0.8.0 h1:QAK7RzKJpYe+EuSEATAaaHYMYLkPDGC18m9jxPLnU8s= github.com/libp2p/go-libp2p-kbucket v0.8.0/go.mod h1:JMlxqcEyKwO6ox716eyC0hmiduSWZZl6JY93mGaaqc4= github.com/libp2p/go-libp2p-pubsub v0.15.0 h1:cG7Cng2BT82WttmPFMi50gDNV+58K626m/wR00vGL1o= @@ -658,8 +663,8 @@ github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUI github.com/libp2p/go-libp2p-testing v0.12.0/go.mod h1:KcGDRXyN7sQCllucn1cOOS+Dmm7ujhfEyXQL5lvkcPg= github.com/libp2p/go-msgio v0.3.0 h1:mf3Z8B1xcFN314sWX+2vOTShIE0Mmn2TXn3YCUQGNj0= github.com/libp2p/go-msgio v0.3.0/go.mod h1:nyRM819GmVaF9LX3l03RMh10QdOroF++NBbxAb0mmDM= -github.com/libp2p/go-netroute v0.2.2 h1:Dejd8cQ47Qx2kRABg6lPwknU7+nBnFRpko45/fFPuZ8= -github.com/libp2p/go-netroute v0.2.2/go.mod h1:Rntq6jUAH0l9Gg17w5bFGhcC9a+vk4KNXs6s7IljKYE= +github.com/libp2p/go-netroute v0.3.0 h1:nqPCXHmeNmgTJnktosJ/sIef9hvwYCrsLxXmfNks/oc= +github.com/libp2p/go-netroute v0.3.0/go.mod h1:Nkd5ShYgSMS5MUKy/MU2T57xFoOKvvLR92Lic48LEyA= github.com/libp2p/go-reuseport v0.4.0 h1:nR5KU7hD0WxXCJbmw7r2rhRYruNRl2koHw8fQscQm2s= github.com/libp2p/go-reuseport v0.4.0/go.mod h1:ZtI03j/wO5hZVDFo2jKywN6bYKWLOy8Se6DrI2E1cLU= github.com/libp2p/go-yamux/v5 v5.0.1 h1:f0WoX/bEF2E8SbE4c/k1Mo+/9z0O4oC/hWEA+nfYRSg= @@ -675,6 +680,8 @@ github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3v github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= +github.com/marcopolo/simnet v0.0.1 h1:rSMslhPz6q9IvJeFWDoMGxMIrlsbXau3NkuIXHGJxfg= +github.com/marcopolo/simnet v0.0.1/go.mod h1:WDaQkgLAjqDUEBAOXz22+1j6wXKfGlC5sD5XWt3ddOs= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -771,8 +778,8 @@ github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/e github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= -github.com/multiformats/go-multicodec v0.9.2 h1:YrlXCuqxjqm3bXl+vBq5LKz5pz4mvAsugdqy78k0pXQ= -github.com/multiformats/go-multicodec v0.9.2/go.mod h1:LLWNMtyV5ithSBUo3vFIMaeDy+h3EbkMTek1m+Fybbo= +github.com/multiformats/go-multicodec v0.10.0 h1:UpP223cig/Cx8J76jWt91njpK3GTAO1w02sdcjZDSuc= +github.com/multiformats/go-multicodec v0.10.0/go.mod h1:wg88pM+s2kZJEQfRCKBNU+g32F5aWBEjyFHXvZLTcLI= github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U= github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM= @@ -952,8 +959,8 @@ github.com/prometheus/procfs v0.17.0 h1:FuLQ+05u4ZI+SS/w9+BWEM2TXiHKsUQ9TADiRH7D github.com/prometheus/procfs v0.17.0/go.mod h1:oPQLaDAMRbA+u8H5Pbfq+dl3VDAvHxMUOVhe0wYB2zw= github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= -github.com/quic-go/quic-go v0.54.1 h1:4ZAWm0AhCb6+hE+l5Q1NAL0iRn/ZrMwqHRGQiFwj2eg= -github.com/quic-go/quic-go v0.54.1/go.mod h1:e68ZEaCdyviluZmy44P6Iey98v/Wfz6HCjQEm+l8zTY= +github.com/quic-go/quic-go v0.55.0 h1:zccPQIqYCXDt5NmcEabyYvOnomjs8Tlwl7tISjJh9Mk= +github.com/quic-go/quic-go v0.55.0/go.mod h1:DR51ilwU1uE164KuWXhinFcKWGlEjzys2l8zUl5Ss1U= github.com/quic-go/webtransport-go v0.9.0 h1:jgys+7/wm6JarGDrW+lD/r9BGqBAmqY/ssklE09bA70= github.com/quic-go/webtransport-go v0.9.0/go.mod h1:4FUYIiUc75XSsF6HShcLeXXYZJ9AGwo/xh3L8M/P1ao= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -1080,6 +1087,12 @@ github.com/tetratelabs/wazero v1.9.0 h1:IcZ56OuxrtaEz8UYNRHBrUa9bYeX9oVY93KspZZB github.com/tetratelabs/wazero v1.9.0/go.mod h1:TSbcXCfFP0L2FGkRPxHphadXPjo1T6W+CseNNY7EkjM= github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= +github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= +github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= +github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= @@ -1201,13 +1214,13 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU= -golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc= +golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= +golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8tUK/Qs5IsmBtrc+FtgU= -golang.org/x/exp v0.0.0-20250911091902-df9299821621/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk= +golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 h1:mgKeJMpvi0yx/sU5GsxQ7p6s2wtOnGAHZWCHUM4KGzY= +golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= diff --git a/server/post_tx_cmd.go b/server/post_tx_cmd.go index 1ea96340..21e98ccc 100644 --- a/server/post_tx_cmd.go +++ b/server/post_tx_cmd.go @@ -156,25 +156,22 @@ func postTxRunE(cobraCmd *cobra.Command, args []string) error { // Check result switch result.Code { case da.StatusSuccess: - logger.Info("transaction successfully submitted to DA layer") cobraCmd.Printf("\n✓ Transaction posted successfully\n\n") cobraCmd.Printf("Namespace: %s\n", namespace) cobraCmd.Printf("DA Height: %d\n", result.Height) cobraCmd.Printf("Data Size: %d bytes\n", len(txData)) - // Calculate when transaction will be included based on DA epochs daStartHeight, err := getDaStartHeight(serverCtx.Config) if err != nil { - cobraCmd.Printf("Failed to get DA start height: %v\n", err) - daStartHeight = 0 + return fmt.Errorf("failed to get DA start height: %w", err) } - epochSize, err := getDaEpoch(serverCtx.Config) + + daEpochForcedInclusion, err := getDaEpoch(serverCtx.Config) if err != nil { - cobraCmd.Printf("Failed to get DA epoch size: %v\n", err) - epochSize = 0 + return fmt.Errorf("failed to get DA epoch forced inclusion: %w", err) } - _, epochEnd := types.CalculateEpochBoundaries(result.Height, daStartHeight, epochSize) + _, epochEnd, _ := types.CalculateEpochBoundaries(result.Height, daStartHeight, daEpochForcedInclusion) cobraCmd.Printf( "DA Blocks until inclusion: %d (at DA height %d)\n", epochEnd-(result.Height+1), @@ -218,7 +215,7 @@ func decodeTxFromFile(clientCtx client.Context, filePath string) ([]byte, error) // decodeTxFromJSON decodes a JSON transaction string to bytes func decodeTxFromJSON(clientCtx client.Context, jsonStr string) ([]byte, error) { // First try to decode as a Cosmos SDK transaction JSON - var txJSON map[string]interface{} + var txJSON map[string]any if err := json.Unmarshal([]byte(jsonStr), &txJSON); err != nil { return nil, fmt.Errorf("parsing JSON: %w", err) } diff --git a/server/start.go b/server/start.go index e283cb63..4775f2fa 100644 --- a/server/start.go +++ b/server/start.go @@ -469,19 +469,7 @@ func setupNodeAndExecutor( return nil, nil, cleanupFn, fmt.Errorf("failed to create DA client: %w", err) } - singleMetrics, err := singlesequencer.NopMetrics() - if err != nil { - return nil, nil, cleanupFn, err - } - - if evcfg.Instrumentation.IsPrometheusEnabled() { - singleMetrics, err = singlesequencer.PrometheusMetrics(config.DefaultInstrumentationConfig().Namespace, "chain_id", evGenesis.ChainID) - if err != nil { - return nil, nil, cleanupFn, err - } - } - - sequencer, err := createSequencer(ctx, *evLogger, database, &daClient.DA, evcfg, *evGenesis, singleMetrics) + sequencer, err := createSequencer(ctx, *evLogger, database, &daClient.DA, evcfg, *evGenesis) if err != nil { return nil, nil, cleanupFn, err } @@ -573,7 +561,6 @@ func createSequencer( da da.DA, nodeConfig config.Config, genesis genesis.Genesis, - singleMetrics *singlesequencer.Metrics, ) (coresequencer.Sequencer, error) { daClient := evblock.NewDAClient(da, nodeConfig, logger) fiRetriever := evblock.NewForcedInclusionRetriever(daClient, genesis, logger) @@ -584,7 +571,10 @@ func createSequencer( return nil, fmt.Errorf("based sequencer mode requires aggregator mode to be enabled") } - basedSeq := basedsequencer.NewBasedSequencer(fiRetriever, da, nodeConfig, genesis, logger) + basedSeq, err := basedsequencer.NewBasedSequencer(ctx, fiRetriever, datastore, genesis, logger) + if err != nil { + return nil, fmt.Errorf("failed to create based sequencer: %w", err) + } logger.Info(). Str("forced_inclusion_namespace", nodeConfig.DA.GetForcedInclusionNamespace()). @@ -601,7 +591,6 @@ func createSequencer( da, []byte(genesis.ChainID), nodeConfig.Node.BlockTime.Duration, - singleMetrics, nodeConfig.Node.Aggregator, 1000, fiRetriever, From 5c4bc32bdb8da202747ac5d77be7f4ed2954cee8 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Thu, 11 Dec 2025 15:36:06 +0100 Subject: [PATCH 16/30] lint --- server/genesis_helpers.go | 1 + server/start_test.go | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/server/genesis_helpers.go b/server/genesis_helpers.go index 469e28c4..0885c034 100644 --- a/server/genesis_helpers.go +++ b/server/genesis_helpers.go @@ -14,6 +14,7 @@ import ( cmtjson "github.com/cometbft/cometbft/libs/json" cmttypes "github.com/cometbft/cometbft/types" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" + "github.com/evstack/ev-node/pkg/genesis" ) diff --git a/server/start_test.go b/server/start_test.go index 25a2253e..69bcf214 100644 --- a/server/start_test.go +++ b/server/start_test.go @@ -5,8 +5,9 @@ import ( "strings" "testing" - "github.com/evstack/ev-node/pkg/genesis" "github.com/stretchr/testify/require" + + "github.com/evstack/ev-node/pkg/genesis" ) func TestParseDAStartHeightFromGenesis(t *testing.T) { From 93ba0bddfa456568b548e90aec0d4b41526b05f0 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 17 Dec 2025 10:00:17 +0100 Subject: [PATCH 17/30] update to latest --- .github/workflows/integration_test.yml | 6 +- Dockerfile | 5 + README.md | 2 +- go.mod | 35 +++--- go.sum | 161 +++++-------------------- server/post_tx_cmd.go | 12 +- server/start.go | 20 ++- tests/integration/docker/Dockerfile.gm | 1 - 8 files changed, 69 insertions(+), 173 deletions(-) diff --git a/.github/workflows/integration_test.yml b/.github/workflows/integration_test.yml index 04fcd7f9..201a6f9a 100644 --- a/.github/workflows/integration_test.yml +++ b/.github/workflows/integration_test.yml @@ -144,7 +144,7 @@ jobs: run: | cd gm # start the local da in the background - go tool github.com/evstack/ev-node/da/cmd/local-da & + go tool github.com/evstack/ev-node/tools/local-da & # capture the background process PID echo "DA_PID=$!" >> $GITHUB_ENV # give it a moment to start @@ -360,9 +360,9 @@ jobs: cd /tmp/da-tool go mod init temp go mod edit -replace github.com/evstack/ev-node=github.com/evstack/ev-node@$EVNODE_VERSION - go get github.com/evstack/ev-node/da/cmd/local-da + go get github.com/evstack/ev-node/tools/local-da # start the local da in the background - go tool github.com/evstack/ev-node/da/cmd/local-da & + go tool github.com/evstack/ev-node/tools/local-da & # capture the background process PID echo "DA_PID=$!" >> $GITHUB_ENV # give it a moment to start diff --git a/Dockerfile b/Dockerfile index f4c4502a..11f0b78f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,7 +28,12 @@ RUN ignite app install github.com/ignite/apps/evolve@${IGNITE_EVOLVE_APP_VERSION RUN go mod edit -replace github.com/evstack/ev-node=github.com/evstack/ev-node@${EVNODE_VERSION} && \ go mod edit -replace github.com/evstack/ev-abci=/workspace/ev-abci && \ +<<<<<<< Updated upstream go mod tidy +======= + go mod tidy && \ + go mod download +>>>>>>> Stashed changes # TODO: replace this with proper ignite flag to skip IBC registration when available # Patch out IBC registration (comment out the call and its error handling) diff --git a/README.md b/README.md index d6ed4a2c..e5f8fc95 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ ignite app install -g github.com/ignite/apps/evolve@latest ignite evolve add ignite chain build --skip-proto ignite evolve init -go tool github.com/evstack/ev-node/da/cmd/local-da & +go tool github.com/evstack/ev-node/tools/local-da & gmd start --rollkit.node.aggregator ``` diff --git a/go.mod b/go.mod index 4ae43d10..a1e8f632 100644 --- a/go.mod +++ b/go.mod @@ -6,9 +6,8 @@ replace github.com/celestiaorg/go-header => github.com/julienrbrt/go-header v0.0 // TODO: remove after https://github.com/evstack/ev-node/pull/2797 replace ( - github.com/evstack/ev-node => github.com/evstack/ev-node v1.0.0-beta.10.0.20251211085135-8b2b8d6d29e5 - github.com/evstack/ev-node/core => github.com/evstack/ev-node/core v1.0.0-beta.5.0.20251211085135-8b2b8d6d29e5 - github.com/evstack/ev-node/da => github.com/evstack/ev-node/da v1.0.0-beta.6.0.20251211085135-8b2b8d6d29e5 + github.com/evstack/ev-node => github.com/evstack/ev-node v1.0.0-beta.10.0.20251216132820-afcd6bd9b354 + github.com/evstack/ev-node/core => github.com/evstack/ev-node/core v1.0.0-beta.5.0.20251216132820-afcd6bd9b354 ) replace ( @@ -34,24 +33,23 @@ require ( github.com/cosmos/cosmos-proto v1.0.0-beta.5 github.com/cosmos/cosmos-sdk v0.50.14 github.com/cosmos/gogoproto v1.7.2 - github.com/evstack/ev-node v1.0.0-beta.9 + github.com/evstack/ev-node v1.0.0-beta.10 github.com/evstack/ev-node/core v1.0.0-beta.5 - github.com/evstack/ev-node/da v1.0.0-beta.5 github.com/go-kit/kit v0.13.0 github.com/golang/protobuf v1.5.4 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/hashicorp/go-metrics v0.5.4 github.com/ipfs/go-datastore v0.9.0 - github.com/libp2p/go-libp2p v0.45.0 + github.com/libp2p/go-libp2p v0.46.0 github.com/libp2p/go-libp2p-pubsub v0.15.0 github.com/multiformats/go-multiaddr v0.16.1 github.com/prometheus/client_golang v1.23.2 github.com/rs/cors v1.11.1 github.com/rs/zerolog v1.34.0 - github.com/spf13/cobra v1.10.1 + github.com/spf13/cobra v1.10.2 github.com/stretchr/testify v1.11.1 - golang.org/x/net v0.47.0 - golang.org/x/sync v0.18.0 + golang.org/x/net v0.48.0 + golang.org/x/sync v0.19.0 google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 google.golang.org/grpc v1.76.0 google.golang.org/protobuf v1.36.10 @@ -137,7 +135,6 @@ require ( github.com/filecoin-project/go-clock v0.1.0 // indirect github.com/filecoin-project/go-jsonrpc v0.9.0 // indirect github.com/flynn/noise v1.1.0 // indirect - github.com/francoispqt/gojay v1.2.13 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/getsentry/sentry-go v0.33.0 // indirect github.com/ghodss/yaml v1.0.0 // indirect @@ -279,8 +276,8 @@ require ( github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/common v0.66.1 // indirect github.com/prometheus/procfs v0.17.0 // indirect - github.com/quic-go/qpack v0.5.1 // indirect - github.com/quic-go/quic-go v0.55.0 // indirect + github.com/quic-go/qpack v0.6.0 // indirect + github.com/quic-go/quic-go v0.57.1 // indirect github.com/quic-go/webtransport-go v0.9.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect @@ -329,15 +326,15 @@ require ( go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/arch v0.17.0 // indirect - golang.org/x/crypto v0.45.0 // indirect + golang.org/x/crypto v0.46.0 // indirect golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 // indirect - golang.org/x/mod v0.29.0 // indirect - golang.org/x/sys v0.38.0 // indirect - golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8 // indirect - golang.org/x/term v0.37.0 // indirect - golang.org/x/text v0.31.0 // indirect + golang.org/x/mod v0.30.0 // indirect + golang.org/x/sys v0.39.0 // indirect + golang.org/x/telemetry v0.0.0-20251111182119-bc8e575c7b54 // indirect + golang.org/x/term v0.38.0 // indirect + golang.org/x/text v0.32.0 // indirect golang.org/x/time v0.12.0 // indirect - golang.org/x/tools v0.38.0 // indirect + golang.org/x/tools v0.39.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect gonum.org/v1/gonum v0.16.0 // indirect google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 // indirect diff --git a/go.sum b/go.sum index d60867b8..31a03182 100644 --- a/go.sum +++ b/go.sum @@ -25,9 +25,7 @@ buf.build/go/standard v0.1.0/go.mod h1:PiqpHz/7ZFq+kqvYhc/SK3lxFIB9N/aiH2CFC2JHI cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= connectrpc.com/connect v1.19.1 h1:R5M57z05+90EfEvCY1b7hBxDVOUl45PrtXtAV2fOC14= connectrpc.com/connect v1.19.1/go.mod h1:tN20fjdGlewnSFeZxLKb0xwIZ6ozc3OQs2hTXy4du9w= connectrpc.com/grpcreflect v1.3.0 h1:Y4V+ACf8/vOb1XOc251Qun7jMB75gCUNw6llvB9csXc= @@ -54,14 +52,9 @@ cosmossdk.io/store v1.1.2 h1:3HOZG8+CuThREKv6cn3WSohAc6yccxO3hLzwK6rBC7o= cosmossdk.io/store v1.1.2/go.mod h1:60rAGzTHevGm592kFhiUVkNC9w7gooSEn5iUBPzHQ6A= cosmossdk.io/x/tx v0.14.0 h1:hB3O25kIcyDW/7kMTLMaO8Ripj3yqs5imceVd6c/heA= cosmossdk.io/x/tx v0.14.0/go.mod h1:Tn30rSRA1PRfdGB3Yz55W4Sn6EIutr9xtMKSHij+9PM= -dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= -dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= -dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= -git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= 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= @@ -93,7 +86,6 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ= github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw= @@ -119,7 +111,6 @@ github.com/bgentry/speakeasy v0.2.0 h1:tgObeVOf8WAvtuAX6DhJ4xks4CFNwPDZiqzGqIHE5 github.com/bgentry/speakeasy v0.2.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bits-and-blooms/bitset v1.8.0 h1:FD+XqgOZDUxxZ8hzoBFuV9+cGWY9CslN6d5MS5JVb4c= github.com/bits-and-blooms/bitset v1.8.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ= github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c= @@ -130,7 +121,6 @@ github.com/bufbuild/protocompile v0.14.1 h1:iA73zAf/fyljNjQKwYzUHD6AD4R8KMasmwa/ github.com/bufbuild/protocompile v0.14.1/go.mod h1:ppVdAIhbr2H8asPk6k4pY7t9zB1OU5DoEw9xY/FUi1c= github.com/bufbuild/protoplugin v0.0.0-20250218205857-750e09ce93e1 h1:V1xulAoqLqVg44rY97xOR+mQpD2N+GzhMHVwJ030WEU= github.com/bufbuild/protoplugin v0.0.0-20250218205857-750e09ce93e1/go.mod h1:c5D8gWRIZ2HLWO3gXYTtUfw/hbJyD8xikv2ooPxnklQ= -github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= github.com/bytedance/sonic v1.14.0 h1:/OfKt8HFw0kh2rj8N0F6C/qPGRESq0BbaNZgcNXXzQQ= github.com/bytedance/sonic v1.14.0/go.mod h1:WoEbx8WTcFJfzCe0hbmyTGrfjt8PzNEBdxlNUO24NhA= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= @@ -207,7 +197,6 @@ github.com/containerd/stargz-snapshotter/estargz v0.16.3 h1:7evrXtoh1mSbGj/pfRcc github.com/containerd/stargz-snapshotter/estargz v0.16.3/go.mod h1:uyr4BfYfOj3G9WBVE8cOlQmXAbPN9VEQpBBeJIuOipU= 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-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= @@ -275,7 +264,6 @@ github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6 github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/dvsekhvalnov/jose2go v1.6.0 h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY= @@ -294,12 +282,10 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evstack/ev-node v1.0.0-beta.10.0.20251211085135-8b2b8d6d29e5 h1:eCuDm3wx0maU/3sK6oUNmP95MH+hV/Vom/r9zSm0KTk= -github.com/evstack/ev-node v1.0.0-beta.10.0.20251211085135-8b2b8d6d29e5/go.mod h1:kZ2kJkVX89ymBFNC3SulF92YFlEhhAi+ULYFAQb9uIQ= -github.com/evstack/ev-node/core v1.0.0-beta.5.0.20251211085135-8b2b8d6d29e5 h1:eAKCP+BegXDnBk+R+2JH8rRSpn1VF5B5SCdwXjX1wOQ= -github.com/evstack/ev-node/core v1.0.0-beta.5.0.20251211085135-8b2b8d6d29e5/go.mod h1:n2w/LhYQTPsi48m6lMj16YiIqsaQw6gxwjyJvR+B3sY= -github.com/evstack/ev-node/da v1.0.0-beta.6.0.20251211085135-8b2b8d6d29e5 h1:20qiOYfcK2VojqSb7nIU8uGCyQyRPMHFzntqy1OwMfw= -github.com/evstack/ev-node/da v1.0.0-beta.6.0.20251211085135-8b2b8d6d29e5/go.mod h1:7kONtkX6iWT6337HtceUCI2mTSuisUOCGP8X3D/MZcQ= +github.com/evstack/ev-node v1.0.0-beta.10.0.20251216132820-afcd6bd9b354 h1:KT4rm4DvZ0v1kWaCTYgiJNw4neI03HBxWTERp73rs18= +github.com/evstack/ev-node v1.0.0-beta.10.0.20251216132820-afcd6bd9b354/go.mod h1:ND2OqaaSPulfplFLynk3ynXyilORRjBXp6YEpeKHOH8= +github.com/evstack/ev-node/core v1.0.0-beta.5.0.20251216132820-afcd6bd9b354 h1:OxOxcl277IkpkZ1tmm/FWfdy72xrjOOOzLGyXzL5z2A= +github.com/evstack/ev-node/core v1.0.0-beta.5.0.20251216132820-afcd6bd9b354/go.mod h1:n2w/LhYQTPsi48m6lMj16YiIqsaQw6gxwjyJvR+B3sY= 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.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= @@ -310,13 +296,10 @@ github.com/filecoin-project/go-clock v0.1.0 h1:SFbYIM75M8NnFm1yMHhN9Ahy3W5bEZV9g github.com/filecoin-project/go-clock v0.1.0/go.mod h1:4uB/O4PvOjlx1VCMdZ9MyDZXRm//gkj1ELEbxfI1AZs= github.com/filecoin-project/go-jsonrpc v0.9.0 h1:G47qEF52w7GholpI21vPSTVBFvsrip6geIoqNiqyZtQ= github.com/filecoin-project/go-jsonrpc v0.9.0/go.mod h1:OG7kVBVh/AbDFHIwx7Kw0l9ARmKOS6gGOr0LbdBpbLc= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/flynn/noise v1.1.0 h1:KjPQoQCEFdZDiP03phOvGi11+SVVhBG2wOWAorLsstg= github.com/flynn/noise v1.1.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= -github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -334,10 +317,8 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-chi/chi/v5 v5.2.2 h1:CMwsvRVTbXVytCk1Wd72Zy1LAsAh9GxMmSNWLHCG618= github.com/go-chi/chi/v5 v5.2.2/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops= -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-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -403,9 +384,7 @@ github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4er github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -452,26 +431,20 @@ github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/go-containerregistry v0.20.3 h1:oNx7IdTI936V8CQRveCjaxOiegWwvM7kqkbXTpyiovI= github.com/google/go-containerregistry v0.20.3/go.mod h1:w00pIgBRDVUDFM6bq+Qx8lwNWK+cxgCuX1vd3PIBDNI= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f h1:KMlcu9X58lhTA/KrfX8Bi1LQSO4pzoVjTiL3h4Jk+Zk= github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -486,13 +459,11 @@ github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= 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= @@ -580,7 +551,6 @@ github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABo github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= github.com/jdx/go-netrc v1.0.0 h1:QbLMLyCZGj0NA8glAhxUpf1zDg6cxnWgMBbjq40W0gQ= github.com/jdx/go-netrc v1.0.0/go.mod h1:Gh9eFQJnoTNIRHXl2j5bJXA1u84hQWJWgGh569zF3v8= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= github.com/jhump/protoreflect v1.15.3 h1:6SFRuqU45u9hIZPJAoZ8c28T3nK64BNdp9w6jFonzls= github.com/jhump/protoreflect v1.15.3/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k= github.com/jhump/protoreflect/v2 v2.0.0-beta.2 h1:qZU+rEZUOYTz1Bnhi3xbwn+VxdXkLVeEpAeZzVXLY88= @@ -598,7 +568,6 @@ github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/ 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/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienrbrt/go-header v0.0.0-20251008134330-747c8c192fa8 h1:F+gOiipBxG43s+Ho+ri9T8IwumjWjp1XUon4DLWjxfQ= @@ -629,7 +598,6 @@ github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/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= @@ -645,8 +613,8 @@ github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38y github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= github.com/libp2p/go-flow-metrics v0.3.0 h1:q31zcHUvHnwDO0SHaukewPYgwOBSxtt830uJtUx6784= github.com/libp2p/go-flow-metrics v0.3.0/go.mod h1:nuhlreIwEguM1IvHAew3ij7A8BMlyHQJ279ao24eZZo= -github.com/libp2p/go-libp2p v0.45.0 h1:Pdhr2HsFXaYjtfiNcBP4CcRUONvbMFdH3puM9vV4Tiw= -github.com/libp2p/go-libp2p v0.45.0/go.mod h1:NovCojezAt4dnDd4fH048K7PKEqH0UFYYqJRjIIu8zc= +github.com/libp2p/go-libp2p v0.46.0 h1:0T2yvIKpZ3DVYCuPOFxPD1layhRU486pj9rSlGWYnDM= +github.com/libp2p/go-libp2p v0.46.0/go.mod h1:TbIDnpDjBLa7isdgYpbxozIVPBTmM/7qKOJP4SFySrQ= github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94= github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8= github.com/libp2p/go-libp2p-kad-dht v0.36.0 h1:7QuXhV36+Vyj+L6A7mrYkn2sYLrbRcbjvsYDu/gXhn8= @@ -673,11 +641,9 @@ github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-b github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/linxGnu/grocksdb v1.8.14 h1:HTgyYalNwBSG/1qCQUIott44wU5b2Y9Kr3z7SK5OfGQ= github.com/linxGnu/grocksdb v1.8.14/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= -github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= github.com/marcopolo/simnet v0.0.1 h1:rSMslhPz6q9IvJeFWDoMGxMIrlsbXau3NkuIXHGJxfg= @@ -700,7 +666,6 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE 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/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.68 h1:jsSRkNozw7G/mnmXULynzMNIsgY2dHC8LO6U6Ij2JEA= github.com/miekg/dns v1.1.68/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps= @@ -800,8 +765,6 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= -github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= @@ -841,7 +804,6 @@ github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKw github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= @@ -919,7 +881,6 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH github.com/polydawn/refmt v0.89.0 h1:ADJTApkvkeBZsN0tBTx8QjpD9JkmxbKp0cxfr9qszm4= github.com/polydawn/refmt v0.89.0/go.mod h1:/zvteZs/GwLtCgZ4BL6CBsk9IKIlexP43ObX9AxTqTw= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= @@ -937,7 +898,6 @@ github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= @@ -947,7 +907,6 @@ github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16 github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9ZoGs= github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA= -github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -957,10 +916,10 @@ github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.17.0 h1:FuLQ+05u4ZI+SS/w9+BWEM2TXiHKsUQ9TADiRH7DuK0= github.com/prometheus/procfs v0.17.0/go.mod h1:oPQLaDAMRbA+u8H5Pbfq+dl3VDAvHxMUOVhe0wYB2zw= -github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= -github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= -github.com/quic-go/quic-go v0.55.0 h1:zccPQIqYCXDt5NmcEabyYvOnomjs8Tlwl7tISjJh9Mk= -github.com/quic-go/quic-go v0.55.0/go.mod h1:DR51ilwU1uE164KuWXhinFcKWGlEjzys2l8zUl5Ss1U= +github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8= +github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII= +github.com/quic-go/quic-go v0.57.1 h1:25KAAR9QR8KZrCZRThWMKVAwGoiHIrNbT72ULHTuI10= +github.com/quic-go/quic-go v0.57.1/go.mod h1:ly4QBAjHA2VhdnxhojRsCUOeJwKYg+taDlos92xb1+s= github.com/quic-go/webtransport-go v0.9.0 h1:jgys+7/wm6JarGDrW+lD/r9BGqBAmqY/ssklE09bA70= github.com/quic-go/webtransport-go v0.9.0/go.mod h1:4FUYIiUc75XSsF6HShcLeXXYZJ9AGwo/xh3L8M/P1ao= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -978,7 +937,6 @@ github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -993,30 +951,7 @@ github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys= github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= github.com/segmentio/encoding v0.4.1 h1:KLGaLSW0jrmhB58Nn4+98spfvPvmo4Ci1P/WIQ9wn7w= github.com/segmentio/encoding v0.4.1/go.mod h1:/d03Cd8PoaDeceuhUUUQWjU0KhWjrmYrWPgtJHYZSnI= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= -github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= -github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= -github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= -github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= -github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= -github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= -github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= -github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= -github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= -github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= -github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= -github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= -github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= -github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= -github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= -github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= -github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= github.com/sirupsen/logrus v1.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= @@ -1031,10 +966,8 @@ github.com/smartystreets/goconvey v1.7.2 h1:9RBaZCeXEQ3UselpuwUQHltGVXvdwm6cv1hg github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3Pg9vgXWeJpQFMM= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw= github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= -github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= 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.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= @@ -1042,8 +975,8 @@ github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8 github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s= -github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0= +github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= +github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= @@ -1080,7 +1013,6 @@ github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8 github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= 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/tetratelabs/wazero v1.9.0 h1:IcZ56OuxrtaEz8UYNRHBrUa9bYeX9oVY93KspZZBf/I= @@ -1106,8 +1038,6 @@ github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtX github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/vbatts/tar-split v0.12.1 h1:CqKoORW7BUWBe7UL/iqTVvkTBOF8UvOMKOIZykxnnbo= github.com/vbatts/tar-split v0.12.1/go.mod h1:eF6B6i6ftWQcDqEn3/iGFRFRo8cBIMSJVOpnNdfTMFA= -github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= -github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0 h1:GDDkbFiaK8jsSDJfjId/PEGEShv6ugrt4kYsC5UIDaQ= github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 h1:EKhdznlJHPMoKr0XTrX+IlJs1LH3lyx2nfr1dOlZ79k= @@ -1136,7 +1066,6 @@ go.lsp.dev/protocol v0.12.0 h1:tNprUI9klQW5FAFVM4Sa+AbPFuVQByWhP1ttNUAjIWg= go.lsp.dev/protocol v0.12.0/go.mod h1:Qb11/HgZQ72qQbeyPfJbu3hZBH23s1sr4st8czGeDMQ= go.lsp.dev/uri v0.3.0 h1:KcZJmh6nFIBeJzTugn5JTU6OOyG0lDOo3R9KwTxTYbo= go.lsp.dev/uri v0.3.0/go.mod h1:P5sbO1IQR+qySTWOCnhnK7phBx+W3zbLqSMDJNTw88I= -go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1193,15 +1122,11 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= -go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= golang.org/x/arch v0.17.0 h1:4O3dfLzd+lQewptAHqjewQZQDyEdejz3VwgeYwkZneU= golang.org/x/arch v0.17.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk= -golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -1214,8 +1139,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= -golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= +golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU= +golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= @@ -1223,7 +1148,6 @@ golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 h1:mgKeJMpvi0yx/sU5GsxQ7p6s2 golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 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= @@ -1239,14 +1163,12 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= -golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= +golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk= +golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1254,7 +1176,6 @@ 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-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1280,14 +1201,11 @@ 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.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= -golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= +golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= +golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1299,20 +1217,18 @@ 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-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= -golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1366,10 +1282,10 @@ 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.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= -golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8 h1:LvzTn0GQhWuvKH/kVRS3R3bVAsdQWI7hvfLHGgh9+lU= -golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8/go.mod h1:Pi4ztBfryZoJEkyFTI5/Ocsu2jXyDr6iSdgJiYE/uwE= +golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= +golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/telemetry v0.0.0-20251111182119-bc8e575c7b54 h1:E2/AqCUMZGgd73TQkxUMcMla25GB9i/5HOdLr+uH7Vo= +golang.org/x/telemetry v0.0.0-20251111182119-bc8e575c7b54/go.mod h1:hKdjCMrbv9skySur+Nek8Hd0uJ0GuxJIoIX2payrIdQ= 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.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -1377,10 +1293,9 @@ 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.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= -golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= -golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= +golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q= +golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -1390,17 +1305,15 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= -golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= +golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= +golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= 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-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/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-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -1422,8 +1335,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= -golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= +golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= +golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= 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= @@ -1433,19 +1346,12 @@ golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhS golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/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-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= -google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= @@ -1461,8 +1367,6 @@ google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 h1: google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5/go.mod h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE= google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE= google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1510,7 +1414,6 @@ gopkg.in/cheggaaa/pb.v1 v1.0.25/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/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= 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= @@ -1531,10 +1434,8 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= lukechampine.com/blake3 v1.4.1 h1:I3Smz7gso8w4/TunLKec6K2fn+kyKtDxr/xcQEN84Wg= @@ -1550,5 +1451,3 @@ sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= -sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= -sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/server/post_tx_cmd.go b/server/post_tx_cmd.go index 21e98ccc..35d672b7 100644 --- a/server/post_tx_cmd.go +++ b/server/post_tx_cmd.go @@ -11,10 +11,9 @@ import ( "github.com/spf13/cobra" evblock "github.com/evstack/ev-node/block" - "github.com/evstack/ev-node/core/da" - "github.com/evstack/ev-node/da/jsonrpc" rollconf "github.com/evstack/ev-node/pkg/config" - seqcommon "github.com/evstack/ev-node/sequencers/common" + "github.com/evstack/ev-node/pkg/da/jsonrpc" + da "github.com/evstack/ev-node/pkg/da/types" "github.com/evstack/ev-node/types" ) @@ -133,12 +132,11 @@ func postTxRunE(cobraCmd *cobra.Command, args []string) error { logger.Info("posting transaction to Celestia", "namespace", namespace, "gas_price", gasPrice, "tx_size", len(txData)) - daClient, err := jsonrpc.NewClient( + daJsonRpc, err := jsonrpc.NewClient( cobraCmd.Context(), - *zlLogger, cfg.DA.Address, cfg.DA.AuthToken, - seqcommon.AbsoluteMaxBlobSize, + "", ) if err != nil { return fmt.Errorf("failed to create DA client: %w", err) @@ -150,7 +148,7 @@ func postTxRunE(cobraCmd *cobra.Command, args []string) error { blobs := [][]byte{txData} options := []byte(submitOpts) - dac := evblock.NewDAClient(&daClient.DA, cfg, *zlLogger) + dac := evblock.NewDAClient(daJsonRpc, cfg, *zlLogger) result := dac.Submit(cobraCmd.Context(), blobs, gasPrice, namespaceBz, options) // Check result diff --git a/server/start.go b/server/start.go index 4775f2fa..bab08959 100644 --- a/server/start.go +++ b/server/start.go @@ -39,18 +39,16 @@ import ( "google.golang.org/grpc/credentials/insecure" evblock "github.com/evstack/ev-node/block" - "github.com/evstack/ev-node/core/da" coresequencer "github.com/evstack/ev-node/core/sequencer" - "github.com/evstack/ev-node/da/jsonrpc" "github.com/evstack/ev-node/node" "github.com/evstack/ev-node/pkg/config" + "github.com/evstack/ev-node/pkg/da/jsonrpc" "github.com/evstack/ev-node/pkg/genesis" "github.com/evstack/ev-node/pkg/p2p" "github.com/evstack/ev-node/pkg/p2p/key" "github.com/evstack/ev-node/pkg/signer" "github.com/evstack/ev-node/pkg/store" basedsequencer "github.com/evstack/ev-node/sequencers/based" - seqcommon "github.com/evstack/ev-node/sequencers/common" singlesequencer "github.com/evstack/ev-node/sequencers/single" rollkittypes "github.com/evstack/ev-node/types" @@ -458,18 +456,19 @@ func setupNodeAndExecutor( executor.SetMempool(mempool) // create the DA client - daClient, err := jsonrpc.NewClient( + daJsonRPC, err := jsonrpc.NewClient( ctx, - *evLogger, evcfg.DA.Address, evcfg.DA.AuthToken, - seqcommon.AbsoluteMaxBlobSize, + "", ) if err != nil { return nil, nil, cleanupFn, fmt.Errorf("failed to create DA client: %w", err) } - sequencer, err := createSequencer(ctx, *evLogger, database, &daClient.DA, evcfg, *evGenesis) + daClient := evblock.NewDAClient(daJsonRPC, evcfg, *evLogger) + + sequencer, err := createSequencer(ctx, *evLogger, database, daClient, evcfg, *evGenesis) if err != nil { return nil, nil, cleanupFn, err } @@ -491,7 +490,7 @@ func setupNodeAndExecutor( evcfg, executor, sequencer, - &daClient.DA, + daClient, signer, p2pClient, *evGenesis, @@ -558,11 +557,10 @@ func createSequencer( ctx context.Context, logger zerolog.Logger, datastore ds.Batching, - da da.DA, + daClient evblock.FullDAClient, nodeConfig config.Config, genesis genesis.Genesis, ) (coresequencer.Sequencer, error) { - daClient := evblock.NewDAClient(da, nodeConfig, logger) fiRetriever := evblock.NewForcedInclusionRetriever(daClient, genesis, logger) if nodeConfig.Node.BasedSequencer { @@ -588,7 +586,7 @@ func createSequencer( ctx, logger, datastore, - da, + daClient, []byte(genesis.ChainID), nodeConfig.Node.BlockTime.Duration, nodeConfig.Node.Aggregator, diff --git a/tests/integration/docker/Dockerfile.gm b/tests/integration/docker/Dockerfile.gm index 2d5cd391..846c1e9d 100644 --- a/tests/integration/docker/Dockerfile.gm +++ b/tests/integration/docker/Dockerfile.gm @@ -31,7 +31,6 @@ RUN chmod +x /workspace/patch-app-wiring.sh && \ echo "===== Running network module patch =====" && \ bash /workspace/patch-app-wiring.sh - # Align module versions like in CI RUN go mod edit -replace github.com/evstack/ev-node=github.com/evstack/ev-node@${EVNODE_VERSION} \ && go mod edit -replace github.com/evstack/ev-abci=../ev-abci \ From f1c64330e0c6e14f58de83e9c3d305f7b0e49622 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 17 Dec 2025 10:02:04 +0100 Subject: [PATCH 18/30] fixes --- .github/workflows/integration_test.yml | 8 ++++---- .github/workflows/migration_test.yml | 2 +- Dockerfile | 4 ---- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/.github/workflows/integration_test.yml b/.github/workflows/integration_test.yml index 201a6f9a..1645f572 100644 --- a/.github/workflows/integration_test.yml +++ b/.github/workflows/integration_test.yml @@ -22,7 +22,7 @@ jobs: image_tag: ${{ steps.tag.outputs.tag }} env: IGNITE_VERSION: v29.3.0 # the gm build script depends on some annotations - IGNITE_EVOLVE_APP_VERSION: main + IGNITE_EVOLVE_APP_VERSION: "27619e8c9b45a3027003260018bb69972d250e8a" # use tagged when apps has tagged (blocked on things) EVNODE_VERSION: v1.0.0-beta.9 steps: - uses: actions/checkout@v5 @@ -65,7 +65,7 @@ jobs: env: EVNODE_VERSION: "v1.0.0-beta.9" IGNITE_VERSION: "v29.6.1" - IGNITE_EVOLVE_APP_VERSION: "main" # use tagged when apps has tagged (blocked on things) + IGNITE_EVOLVE_APP_VERSION: "27619e8c9b45a3027003260018bb69972d250e8a" # use tagged when apps has tagged (blocked on things) EVOLVE_IMAGE_REPO: "evolve-gm" EVOLVE_IMAGE_TAG: "latest" @@ -108,7 +108,7 @@ jobs: DO_NOT_TRACK: true EVNODE_VERSION: "v1.0.0-beta.9" IGNITE_VERSION: "v29.6.1" - IGNITE_EVOLVE_APP_VERSION: "main" # use tagged when apps has tagged (blocked on things) + IGNITE_EVOLVE_APP_VERSION: "27619e8c9b45a3027003260018bb69972d250e8a" # use tagged when apps has tagged (blocked on things) outputs: carol_mnemonic: ${{ steps.save_mnemonic.outputs.carol_mnemonic }} gmd_home: ${{ steps.paths.outputs.GMD_HOME }} @@ -542,7 +542,7 @@ jobs: DO_NOT_TRACK: true EVNODE_VERSION: "v1.0.0-beta.9" IGNITE_VERSION: "v29.6.1" - IGNITE_EVOLVE_APP_VERSION: "main" + IGNITE_EVOLVE_APP_VERSION: "27619e8c9b45a3027003260018bb69972d250e8a" # use tagged when apps has tagged (blocked on things) GAIA_VERSION: "v25.1.0" EVOLVE_IMAGE_REPO: "evabci/gm" EVOLVE_IMAGE_TAG: "local" diff --git a/.github/workflows/migration_test.yml b/.github/workflows/migration_test.yml index 14efa0db..eb9de8ba 100644 --- a/.github/workflows/migration_test.yml +++ b/.github/workflows/migration_test.yml @@ -14,7 +14,7 @@ permissions: env: EVNODE_VERSION: "v1.0.0-beta.9" IGNITE_VERSION: "v29.6.1" - IGNITE_EVOLVE_APP_VERSION: "main" # use tagged when apps has tagged (blocked on things) + IGNITE_EVOLVE_APP_VERSION: "27619e8c9b45a3027003260018bb69972d250e8a" # use tagged when apps has tagged (blocked on things) EVOLVE_IMAGE_REPO: "ghcr.io/evstack/evolve-abci-gm" COSMOS_SDK_IMAGE_REPO: "ghcr.io/evstack/cosmos-sdk-gm" diff --git a/Dockerfile b/Dockerfile index 11f0b78f..97ea1c6b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,12 +28,8 @@ RUN ignite app install github.com/ignite/apps/evolve@${IGNITE_EVOLVE_APP_VERSION RUN go mod edit -replace github.com/evstack/ev-node=github.com/evstack/ev-node@${EVNODE_VERSION} && \ go mod edit -replace github.com/evstack/ev-abci=/workspace/ev-abci && \ -<<<<<<< Updated upstream - go mod tidy -======= go mod tidy && \ go mod download ->>>>>>> Stashed changes # TODO: replace this with proper ignite flag to skip IBC registration when available # Patch out IBC registration (comment out the call and its error handling) From e0199ea1da83e2f7056af6e4c8ea8482971074fb Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 17 Dec 2025 10:04:23 +0100 Subject: [PATCH 19/30] go mod tidy --- go.sum | 109 ++++----------------------------------------------------- 1 file changed, 6 insertions(+), 103 deletions(-) diff --git a/go.sum b/go.sum index 5a9bb577..31a03182 100644 --- a/go.sum +++ b/go.sum @@ -25,9 +25,7 @@ buf.build/go/standard v0.1.0/go.mod h1:PiqpHz/7ZFq+kqvYhc/SK3lxFIB9N/aiH2CFC2JHI cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= connectrpc.com/connect v1.19.1 h1:R5M57z05+90EfEvCY1b7hBxDVOUl45PrtXtAV2fOC14= connectrpc.com/connect v1.19.1/go.mod h1:tN20fjdGlewnSFeZxLKb0xwIZ6ozc3OQs2hTXy4du9w= connectrpc.com/grpcreflect v1.3.0 h1:Y4V+ACf8/vOb1XOc251Qun7jMB75gCUNw6llvB9csXc= @@ -54,14 +52,9 @@ cosmossdk.io/store v1.1.2 h1:3HOZG8+CuThREKv6cn3WSohAc6yccxO3hLzwK6rBC7o= cosmossdk.io/store v1.1.2/go.mod h1:60rAGzTHevGm592kFhiUVkNC9w7gooSEn5iUBPzHQ6A= cosmossdk.io/x/tx v0.14.0 h1:hB3O25kIcyDW/7kMTLMaO8Ripj3yqs5imceVd6c/heA= cosmossdk.io/x/tx v0.14.0/go.mod h1:Tn30rSRA1PRfdGB3Yz55W4Sn6EIutr9xtMKSHij+9PM= -dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= -dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= -dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= -git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= 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= @@ -93,7 +86,6 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ= github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw= @@ -119,7 +111,6 @@ github.com/bgentry/speakeasy v0.2.0 h1:tgObeVOf8WAvtuAX6DhJ4xks4CFNwPDZiqzGqIHE5 github.com/bgentry/speakeasy v0.2.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bits-and-blooms/bitset v1.8.0 h1:FD+XqgOZDUxxZ8hzoBFuV9+cGWY9CslN6d5MS5JVb4c= github.com/bits-and-blooms/bitset v1.8.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ= github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c= @@ -130,7 +121,6 @@ github.com/bufbuild/protocompile v0.14.1 h1:iA73zAf/fyljNjQKwYzUHD6AD4R8KMasmwa/ github.com/bufbuild/protocompile v0.14.1/go.mod h1:ppVdAIhbr2H8asPk6k4pY7t9zB1OU5DoEw9xY/FUi1c= github.com/bufbuild/protoplugin v0.0.0-20250218205857-750e09ce93e1 h1:V1xulAoqLqVg44rY97xOR+mQpD2N+GzhMHVwJ030WEU= github.com/bufbuild/protoplugin v0.0.0-20250218205857-750e09ce93e1/go.mod h1:c5D8gWRIZ2HLWO3gXYTtUfw/hbJyD8xikv2ooPxnklQ= -github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= github.com/bytedance/sonic v1.14.0 h1:/OfKt8HFw0kh2rj8N0F6C/qPGRESq0BbaNZgcNXXzQQ= github.com/bytedance/sonic v1.14.0/go.mod h1:WoEbx8WTcFJfzCe0hbmyTGrfjt8PzNEBdxlNUO24NhA= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= @@ -207,7 +197,6 @@ github.com/containerd/stargz-snapshotter/estargz v0.16.3 h1:7evrXtoh1mSbGj/pfRcc github.com/containerd/stargz-snapshotter/estargz v0.16.3/go.mod h1:uyr4BfYfOj3G9WBVE8cOlQmXAbPN9VEQpBBeJIuOipU= 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-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= @@ -275,7 +264,6 @@ github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6 github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/dvsekhvalnov/jose2go v1.6.0 h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY= @@ -308,13 +296,10 @@ github.com/filecoin-project/go-clock v0.1.0 h1:SFbYIM75M8NnFm1yMHhN9Ahy3W5bEZV9g github.com/filecoin-project/go-clock v0.1.0/go.mod h1:4uB/O4PvOjlx1VCMdZ9MyDZXRm//gkj1ELEbxfI1AZs= github.com/filecoin-project/go-jsonrpc v0.9.0 h1:G47qEF52w7GholpI21vPSTVBFvsrip6geIoqNiqyZtQ= github.com/filecoin-project/go-jsonrpc v0.9.0/go.mod h1:OG7kVBVh/AbDFHIwx7Kw0l9ARmKOS6gGOr0LbdBpbLc= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/flynn/noise v1.1.0 h1:KjPQoQCEFdZDiP03phOvGi11+SVVhBG2wOWAorLsstg= github.com/flynn/noise v1.1.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= -github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -332,10 +317,8 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-chi/chi/v5 v5.2.2 h1:CMwsvRVTbXVytCk1Wd72Zy1LAsAh9GxMmSNWLHCG618= github.com/go-chi/chi/v5 v5.2.2/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops= -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-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -401,9 +384,7 @@ github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4er github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -450,26 +431,20 @@ github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/go-containerregistry v0.20.3 h1:oNx7IdTI936V8CQRveCjaxOiegWwvM7kqkbXTpyiovI= github.com/google/go-containerregistry v0.20.3/go.mod h1:w00pIgBRDVUDFM6bq+Qx8lwNWK+cxgCuX1vd3PIBDNI= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f h1:KMlcu9X58lhTA/KrfX8Bi1LQSO4pzoVjTiL3h4Jk+Zk= github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -484,13 +459,11 @@ github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= 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= @@ -578,7 +551,6 @@ github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABo github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= github.com/jdx/go-netrc v1.0.0 h1:QbLMLyCZGj0NA8glAhxUpf1zDg6cxnWgMBbjq40W0gQ= github.com/jdx/go-netrc v1.0.0/go.mod h1:Gh9eFQJnoTNIRHXl2j5bJXA1u84hQWJWgGh569zF3v8= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= github.com/jhump/protoreflect v1.15.3 h1:6SFRuqU45u9hIZPJAoZ8c28T3nK64BNdp9w6jFonzls= github.com/jhump/protoreflect v1.15.3/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k= github.com/jhump/protoreflect/v2 v2.0.0-beta.2 h1:qZU+rEZUOYTz1Bnhi3xbwn+VxdXkLVeEpAeZzVXLY88= @@ -596,7 +568,6 @@ github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/ 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/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienrbrt/go-header v0.0.0-20251008134330-747c8c192fa8 h1:F+gOiipBxG43s+Ho+ri9T8IwumjWjp1XUon4DLWjxfQ= @@ -627,7 +598,6 @@ github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/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= @@ -643,8 +613,8 @@ github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38y github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= github.com/libp2p/go-flow-metrics v0.3.0 h1:q31zcHUvHnwDO0SHaukewPYgwOBSxtt830uJtUx6784= github.com/libp2p/go-flow-metrics v0.3.0/go.mod h1:nuhlreIwEguM1IvHAew3ij7A8BMlyHQJ279ao24eZZo= -github.com/libp2p/go-libp2p v0.43.0 h1:b2bg2cRNmY4HpLK8VHYQXLX2d3iND95OjodLFymvqXU= -github.com/libp2p/go-libp2p v0.43.0/go.mod h1:IiSqAXDyP2sWH+J2gs43pNmB/y4FOi2XQPbsb+8qvzc= +github.com/libp2p/go-libp2p v0.46.0 h1:0T2yvIKpZ3DVYCuPOFxPD1layhRU486pj9rSlGWYnDM= +github.com/libp2p/go-libp2p v0.46.0/go.mod h1:TbIDnpDjBLa7isdgYpbxozIVPBTmM/7qKOJP4SFySrQ= github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94= github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8= github.com/libp2p/go-libp2p-kad-dht v0.36.0 h1:7QuXhV36+Vyj+L6A7mrYkn2sYLrbRcbjvsYDu/gXhn8= @@ -671,13 +641,13 @@ github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-b github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/linxGnu/grocksdb v1.8.14 h1:HTgyYalNwBSG/1qCQUIott44wU5b2Y9Kr3z7SK5OfGQ= github.com/linxGnu/grocksdb v1.8.14/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= -github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= +github.com/marcopolo/simnet v0.0.1 h1:rSMslhPz6q9IvJeFWDoMGxMIrlsbXau3NkuIXHGJxfg= +github.com/marcopolo/simnet v0.0.1/go.mod h1:WDaQkgLAjqDUEBAOXz22+1j6wXKfGlC5sD5XWt3ddOs= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -696,7 +666,6 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE 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/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.68 h1:jsSRkNozw7G/mnmXULynzMNIsgY2dHC8LO6U6Ij2JEA= github.com/miekg/dns v1.1.68/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps= @@ -796,8 +765,6 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= -github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= @@ -837,7 +804,6 @@ github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKw github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= @@ -915,7 +881,6 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH github.com/polydawn/refmt v0.89.0 h1:ADJTApkvkeBZsN0tBTx8QjpD9JkmxbKp0cxfr9qszm4= github.com/polydawn/refmt v0.89.0/go.mod h1:/zvteZs/GwLtCgZ4BL6CBsk9IKIlexP43ObX9AxTqTw= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= @@ -933,7 +898,6 @@ github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= @@ -943,7 +907,6 @@ github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16 github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9ZoGs= github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA= -github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -955,8 +918,8 @@ github.com/prometheus/procfs v0.17.0 h1:FuLQ+05u4ZI+SS/w9+BWEM2TXiHKsUQ9TADiRH7D github.com/prometheus/procfs v0.17.0/go.mod h1:oPQLaDAMRbA+u8H5Pbfq+dl3VDAvHxMUOVhe0wYB2zw= github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8= github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII= -github.com/quic-go/quic-go v0.54.1 h1:4ZAWm0AhCb6+hE+l5Q1NAL0iRn/ZrMwqHRGQiFwj2eg= -github.com/quic-go/quic-go v0.54.1/go.mod h1:e68ZEaCdyviluZmy44P6Iey98v/Wfz6HCjQEm+l8zTY= +github.com/quic-go/quic-go v0.57.1 h1:25KAAR9QR8KZrCZRThWMKVAwGoiHIrNbT72ULHTuI10= +github.com/quic-go/quic-go v0.57.1/go.mod h1:ly4QBAjHA2VhdnxhojRsCUOeJwKYg+taDlos92xb1+s= github.com/quic-go/webtransport-go v0.9.0 h1:jgys+7/wm6JarGDrW+lD/r9BGqBAmqY/ssklE09bA70= github.com/quic-go/webtransport-go v0.9.0/go.mod h1:4FUYIiUc75XSsF6HShcLeXXYZJ9AGwo/xh3L8M/P1ao= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -974,7 +937,6 @@ github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -989,30 +951,7 @@ github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys= github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= github.com/segmentio/encoding v0.4.1 h1:KLGaLSW0jrmhB58Nn4+98spfvPvmo4Ci1P/WIQ9wn7w= github.com/segmentio/encoding v0.4.1/go.mod h1:/d03Cd8PoaDeceuhUUUQWjU0KhWjrmYrWPgtJHYZSnI= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= -github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= -github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= -github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= -github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= -github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= -github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= -github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= -github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= -github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= -github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= -github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= -github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= -github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= -github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= -github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= -github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= -github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= github.com/sirupsen/logrus v1.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= @@ -1027,10 +966,8 @@ github.com/smartystreets/goconvey v1.7.2 h1:9RBaZCeXEQ3UselpuwUQHltGVXvdwm6cv1hg github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3Pg9vgXWeJpQFMM= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw= github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= -github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= 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.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= @@ -1076,7 +1013,6 @@ github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8 github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= 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/tetratelabs/wazero v1.9.0 h1:IcZ56OuxrtaEz8UYNRHBrUa9bYeX9oVY93KspZZBf/I= @@ -1102,8 +1038,6 @@ github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtX github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/vbatts/tar-split v0.12.1 h1:CqKoORW7BUWBe7UL/iqTVvkTBOF8UvOMKOIZykxnnbo= github.com/vbatts/tar-split v0.12.1/go.mod h1:eF6B6i6ftWQcDqEn3/iGFRFRo8cBIMSJVOpnNdfTMFA= -github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= -github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0 h1:GDDkbFiaK8jsSDJfjId/PEGEShv6ugrt4kYsC5UIDaQ= github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 h1:EKhdznlJHPMoKr0XTrX+IlJs1LH3lyx2nfr1dOlZ79k= @@ -1132,7 +1066,6 @@ go.lsp.dev/protocol v0.12.0 h1:tNprUI9klQW5FAFVM4Sa+AbPFuVQByWhP1ttNUAjIWg= go.lsp.dev/protocol v0.12.0/go.mod h1:Qb11/HgZQ72qQbeyPfJbu3hZBH23s1sr4st8czGeDMQ= go.lsp.dev/uri v0.3.0 h1:KcZJmh6nFIBeJzTugn5JTU6OOyG0lDOo3R9KwTxTYbo= go.lsp.dev/uri v0.3.0/go.mod h1:P5sbO1IQR+qySTWOCnhnK7phBx+W3zbLqSMDJNTw88I= -go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1189,15 +1122,11 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= -go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= golang.org/x/arch v0.17.0 h1:4O3dfLzd+lQewptAHqjewQZQDyEdejz3VwgeYwkZneU= golang.org/x/arch v0.17.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk= -golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -1219,7 +1148,6 @@ golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 h1:mgKeJMpvi0yx/sU5GsxQ7p6s2 golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 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= @@ -1241,8 +1169,6 @@ golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1250,7 +1176,6 @@ 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-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1279,11 +1204,8 @@ golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1302,13 +1224,11 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1376,7 +1296,6 @@ golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q= golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -1389,14 +1308,12 @@ golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= 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-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/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-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -1429,19 +1346,12 @@ golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhS golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/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-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= -google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= @@ -1457,8 +1367,6 @@ google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 h1: google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5/go.mod h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE= google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE= google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1506,7 +1414,6 @@ gopkg.in/cheggaaa/pb.v1 v1.0.25/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/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= 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= @@ -1527,10 +1434,8 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= lukechampine.com/blake3 v1.4.1 h1:I3Smz7gso8w4/TunLKec6K2fn+kyKtDxr/xcQEN84Wg= @@ -1546,5 +1451,3 @@ sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= -sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= -sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= From 72299555653fa7a019616e4b94effc76f81990d3 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 17 Dec 2025 10:09:55 +0100 Subject: [PATCH 20/30] bump ev-node in tests --- .github/workflows/integration_test.yml | 10 +++++----- .github/workflows/migration_test.yml | 2 +- go.mod | 13 ++++--------- go.sum | 12 ++++++------ 4 files changed, 16 insertions(+), 21 deletions(-) diff --git a/.github/workflows/integration_test.yml b/.github/workflows/integration_test.yml index 7ef6ff35..ac3ce01c 100644 --- a/.github/workflows/integration_test.yml +++ b/.github/workflows/integration_test.yml @@ -23,7 +23,7 @@ jobs: env: IGNITE_VERSION: v29.3.0 # the gm build script depends on some annotations IGNITE_EVOLVE_APP_VERSION: "27619e8c9b45a3027003260018bb69972d250e8a" # use tagged when apps has tagged (blocked on things) - EVNODE_VERSION: v1.0.0-beta.9 + EVNODE_VERSION: v1.0.0-beta.10.0.20251216132820-afcd6bd9b354 steps: - uses: actions/checkout@v5 @@ -63,7 +63,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 30 env: - EVNODE_VERSION: "v1.0.0-beta.9" + EVNODE_VERSION: "v1.0.0-beta.10.0.20251216132820-afcd6bd9b354" IGNITE_VERSION: "v29.6.1" IGNITE_EVOLVE_APP_VERSION: "27619e8c9b45a3027003260018bb69972d250e8a" # use tagged when apps has tagged (blocked on things) EVOLVE_IMAGE_REPO: "evolve-gm" @@ -106,7 +106,7 @@ jobs: timeout-minutes: 30 env: DO_NOT_TRACK: true - EVNODE_VERSION: "v1.0.0-beta.9" + EVNODE_VERSION: "v1.0.0-beta.10.0.20251216132820-afcd6bd9b354" IGNITE_VERSION: "v29.6.1" IGNITE_EVOLVE_APP_VERSION: "27619e8c9b45a3027003260018bb69972d250e8a" # use tagged when apps has tagged (blocked on things) outputs: @@ -321,7 +321,7 @@ jobs: GMD_HOME: ${{ needs.liveness.outputs.gmd_home }} HERMES_VERSION: "v1.13.1" GAIA_VERSION: "v25.1.0" - EVNODE_VERSION: "v1.0.0-beta.9" + EVNODE_VERSION: "v1.0.0-beta.10.0.20251216132820-afcd6bd9b354" steps: - name: Set up Go uses: actions/setup-go@v6 @@ -548,7 +548,7 @@ jobs: timeout-minutes: 30 env: DO_NOT_TRACK: true - EVNODE_VERSION: "v1.0.0-beta.9" + EVNODE_VERSION: "v1.0.0-beta.10.0.20251216132820-afcd6bd9b354" IGNITE_VERSION: "v29.6.1" IGNITE_EVOLVE_APP_VERSION: "27619e8c9b45a3027003260018bb69972d250e8a" # use tagged when apps has tagged (blocked on things) GAIA_VERSION: "v25.1.0" diff --git a/.github/workflows/migration_test.yml b/.github/workflows/migration_test.yml index eb9de8ba..cfa80e55 100644 --- a/.github/workflows/migration_test.yml +++ b/.github/workflows/migration_test.yml @@ -12,7 +12,7 @@ permissions: actions: write env: - EVNODE_VERSION: "v1.0.0-beta.9" + EVNODE_VERSION: "v1.0.0-beta.10.0.20251216132820-afcd6bd9b354" IGNITE_VERSION: "v29.6.1" IGNITE_EVOLVE_APP_VERSION: "27619e8c9b45a3027003260018bb69972d250e8a" # use tagged when apps has tagged (blocked on things) EVOLVE_IMAGE_REPO: "ghcr.io/evstack/evolve-abci-gm" diff --git a/go.mod b/go.mod index a1e8f632..52756d68 100644 --- a/go.mod +++ b/go.mod @@ -10,13 +10,6 @@ replace ( github.com/evstack/ev-node/core => github.com/evstack/ev-node/core v1.0.0-beta.5.0.20251216132820-afcd6bd9b354 ) -replace ( - github.com/btcsuite/btcd => github.com/btcsuite/btcd v0.22.0-beta - github.com/cosmos/cosmos-sdk => github.com/cosmos/cosmos-sdk v0.50.14 -) - -exclude github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 - require ( cosmossdk.io/api v0.9.2 cosmossdk.io/collections v1.3.1 @@ -27,11 +20,11 @@ require ( cosmossdk.io/math v1.5.3 cosmossdk.io/store v1.1.2 github.com/celestiaorg/go-header v0.7.4 - github.com/cometbft/cometbft v0.38.19 + github.com/cometbft/cometbft v0.38.20 github.com/cometbft/cometbft-db v0.14.1 github.com/cosmos/cosmos-db v1.1.3 github.com/cosmos/cosmos-proto v1.0.0-beta.5 - github.com/cosmos/cosmos-sdk v0.50.14 + github.com/cosmos/cosmos-sdk v0.50.15 github.com/cosmos/gogoproto v1.7.2 github.com/evstack/ev-node v1.0.0-beta.10 github.com/evstack/ev-node/core v1.0.0-beta.5 @@ -348,6 +341,8 @@ require ( sigs.k8s.io/yaml v1.4.0 // indirect ) +exclude github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 + tool ( github.com/bufbuild/buf/cmd/buf github.com/cosmos/gogoproto/protoc-gen-gocosmos diff --git a/go.sum b/go.sum index 31a03182..044bacb2 100644 --- a/go.sum +++ b/go.sum @@ -111,8 +111,8 @@ github.com/bgentry/speakeasy v0.2.0 h1:tgObeVOf8WAvtuAX6DhJ4xks4CFNwPDZiqzGqIHE5 github.com/bgentry/speakeasy v0.2.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bits-and-blooms/bitset v1.8.0 h1:FD+XqgOZDUxxZ8hzoBFuV9+cGWY9CslN6d5MS5JVb4c= github.com/bits-and-blooms/bitset v1.8.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ= -github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= +github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c= github.com/btcsuite/btcd/btcutil v1.1.6/go.mod h1:9dFymx8HpuLqBnsPELrImQeTQfKBQqzqGbbV3jK55aE= github.com/bufbuild/buf v1.54.0 h1:0kjSRNNkrDZ1wSKXjcCn05IMeRq9aCUcwrORwH24x1c= @@ -185,8 +185,8 @@ github.com/cockroachdb/redact v1.1.6/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZ github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/cometbft/cometbft v0.38.19 h1:vNdtCkvhuwUlrcLPAyigV7lQpmmo+tAq8CsB8gZjEYw= -github.com/cometbft/cometbft v0.38.19/go.mod h1:UCu8dlHqvkAsmAFmWDRWNZJPlu6ya2fTWZlDrWsivwo= +github.com/cometbft/cometbft v0.38.20 h1:i9v9rvh3Z4CZvGSWrByAOpiqNq5WLkat3r/tE/B49RU= +github.com/cometbft/cometbft v0.38.20/go.mod h1:UCu8dlHqvkAsmAFmWDRWNZJPlu6ya2fTWZlDrWsivwo= github.com/cometbft/cometbft-db v0.14.1 h1:SxoamPghqICBAIcGpleHbmoPqy+crij/++eZz3DlerQ= github.com/cometbft/cometbft-db v0.14.1/go.mod h1:KHP1YghilyGV/xjD5DP3+2hyigWx0WTp9X+0Gnx0RxQ= github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4= @@ -205,8 +205,8 @@ github.com/cosmos/cosmos-db v1.1.3 h1:7QNT77+vkefostcKkhrzDK9uoIEryzFrU9eoMeaQOP github.com/cosmos/cosmos-db v1.1.3/go.mod h1:kN+wGsnwUJZYn8Sy5Q2O0vCYA99MJllkKASbs6Unb9U= github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= -github.com/cosmos/cosmos-sdk v0.50.14 h1:G8CtGHFWbExa+ZpVOVAb4kFmko/R30igsYOwyzRMtgY= -github.com/cosmos/cosmos-sdk v0.50.14/go.mod h1:hrWEFMU1eoXqLJeE6VVESpJDQH67FS1nnMrQIjO2daw= +github.com/cosmos/cosmos-sdk v0.50.15 h1:3gkZV0fCH34j8G5TKY21bkSyhMuro4vLnSGAOkMvoWw= +github.com/cosmos/cosmos-sdk v0.50.15/go.mod h1:/dinzXHi7qK0dEPZjS3LI5gMHueKQdqyjbB9chwswo0= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= From 6804481fe6032a2596d2a76733626d26ab1d557e Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 17 Dec 2025 10:25:54 +0100 Subject: [PATCH 21/30] bump dockerfile --- Dockerfile | 4 ++-- tests/integration/docker/Dockerfile.gm | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 97ea1c6b..9879968a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,9 +8,9 @@ RUN apk add --no-cache \ bash # Set environment variables -ENV EVNODE_VERSION=v1.0.0-beta.9 +ENV EVNODE_VERSION=v1.0.0-beta.10.0.20251216132820-afcd6bd9b354 ENV IGNITE_VERSION=v29.6.1 -ENV IGNITE_EVOLVE_APP_VERSION=main +ENV IGNITE_EVOLVE_APP_VERSION=27619e8c9b45a3027003260018bb69972d250e8a RUN curl -sSL https://get.ignite.com/cli@${IGNITE_VERSION}! | bash diff --git a/tests/integration/docker/Dockerfile.gm b/tests/integration/docker/Dockerfile.gm index 846c1e9d..2915ddf9 100644 --- a/tests/integration/docker/Dockerfile.gm +++ b/tests/integration/docker/Dockerfile.gm @@ -4,8 +4,8 @@ FROM golang:1.24-bookworm AS builder ARG IGNITE_VERSION=v29.3.1 -ARG IGNITE_EVOLVE_APP_VERSION=main -ARG EVNODE_VERSION=v1.0.0-beta.9 +ARG IGNITE_EVOLVE_APP_VERSION=27619e8c9b45a3027003260018bb69972d250e8a +ARG EVNODE_VERSION=v1.0.0-beta.10.0.20251216132820-afcd6bd9b354 RUN apt-get update && apt-get install -y --no-install-recommends \ git curl bash ca-certificates make gcc musl-dev && \ From a9fe82d007a60a01b343b548f3e1dcc286f83177 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 17 Dec 2025 10:35:45 +0100 Subject: [PATCH 22/30] continue fixing docker --- .github/workflows/integration_test.yml | 2 ++ Dockerfile | 1 + Makefile | 18 ------------------ tests/integration/docker/Dockerfile.gm | 1 + 4 files changed, 4 insertions(+), 18 deletions(-) diff --git a/.github/workflows/integration_test.yml b/.github/workflows/integration_test.yml index ac3ce01c..5b2d9cce 100644 --- a/.github/workflows/integration_test.yml +++ b/.github/workflows/integration_test.yml @@ -161,6 +161,7 @@ jobs: # replace the github.com/evstack/ev-node module with tagged version go mod edit -replace github.com/evstack/ev-node=github.com/evstack/ev-node@$EVNODE_VERSION + go mod edit -replace github.com/evstack/ev-node/core=github.com/evstack/ev-node/core@${EVNODE_VERSION} # TODO REMOVE AFTER TAG # replace the github.com/evstack/ev-abci module with the local version go mod edit -replace github.com/evstack/ev-abci=$GO_EXECUTION_ABCI_DIR @@ -368,6 +369,7 @@ jobs: cd /tmp/da-tool go mod init temp go mod edit -replace github.com/evstack/ev-node=github.com/evstack/ev-node@$EVNODE_VERSION + go mod edit -replace github.com/evstack/ev-node/core=github.com/evstack/ev-node/core@${EVNODE_VERSION} # TODO REMOVE AFTER TAG go get github.com/evstack/ev-node/tools/local-da # start the local da in the background go tool github.com/evstack/ev-node/tools/local-da & diff --git a/Dockerfile b/Dockerfile index 9879968a..8279e83b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,6 +27,7 @@ RUN ignite app install github.com/ignite/apps/evolve@${IGNITE_EVOLVE_APP_VERSION ignite evolve add-migrate RUN go mod edit -replace github.com/evstack/ev-node=github.com/evstack/ev-node@${EVNODE_VERSION} && \ + go mod edit -replace github.com/evstack/ev-node/core=github.com/evstack/ev-node/core@${EVNODE_VERSION} && \ go mod edit -replace github.com/evstack/ev-abci=/workspace/ev-abci && \ go mod tidy && \ go mod download diff --git a/Makefile b/Makefile index 7ddc8186..568d54fe 100644 --- a/Makefile +++ b/Makefile @@ -4,10 +4,6 @@ pkgs := $(shell go list ./...) run := . count := 1 -IGNITE_VERSION ?= v29.3.1 -IGNITE_EVOLVE_APP_VERSION ?= main -EVNODE_VERSION ?= v1.0.0-beta.9 - ## help: Show this help message help: Makefile @echo " Choose a command run in "$(PROJECTNAME)":" @@ -81,17 +77,3 @@ proto-gen: @rm -r modules/github.com .PHONY: proto-gen - - -## build-attester-docker-image: Build Docker images for the GM chain and attester integration tests -build-attester-docker-image: - @echo "--> Building GM integration Docker image" - @docker build \ - -f tests/integration/docker/Dockerfile.gm \ - --build-arg IGNITE_VERSION=$(IGNITE_VERSION) \ - --build-arg IGNITE_EVOLVE_APP_VERSION=$(IGNITE_EVOLVE_APP_VERSION) \ - --build-arg EVNODE_VERSION=$(EVNODE_VERSION) \ - -t evabci/gm:local \ - . - -.PHONY: build-attester-docker-image diff --git a/tests/integration/docker/Dockerfile.gm b/tests/integration/docker/Dockerfile.gm index 2915ddf9..f5fe457b 100644 --- a/tests/integration/docker/Dockerfile.gm +++ b/tests/integration/docker/Dockerfile.gm @@ -33,6 +33,7 @@ RUN chmod +x /workspace/patch-app-wiring.sh && \ # Align module versions like in CI RUN go mod edit -replace github.com/evstack/ev-node=github.com/evstack/ev-node@${EVNODE_VERSION} \ + && go mod edit -replace github.com/evstack/ev-node/core=github.com/evstack/ev-node/core@${EVNODE_VERSION} \ && go mod edit -replace github.com/evstack/ev-abci=../ev-abci \ && go mod tidy From 087eeacff999ce29c7eb2bc6cb7894fa2810ddbc Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 17 Dec 2025 11:14:41 +0100 Subject: [PATCH 23/30] updates --- .github/workflows/integration_test.yml | 4 ++-- Dockerfile | 2 +- tests/integration/docker/Dockerfile.gm | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/integration_test.yml b/.github/workflows/integration_test.yml index 5b2d9cce..32dfd34e 100644 --- a/.github/workflows/integration_test.yml +++ b/.github/workflows/integration_test.yml @@ -161,7 +161,7 @@ jobs: # replace the github.com/evstack/ev-node module with tagged version go mod edit -replace github.com/evstack/ev-node=github.com/evstack/ev-node@$EVNODE_VERSION - go mod edit -replace github.com/evstack/ev-node/core=github.com/evstack/ev-node/core@${EVNODE_VERSION} # TODO REMOVE AFTER TAG + go mod edit -replace github.com/evstack/ev-node/core=github.com/evstack/ev-node/core@v1.0.0-beta.5.0.20251216132820-afcd6bd9b354 # TODO REMOVE AFTER TAG # replace the github.com/evstack/ev-abci module with the local version go mod edit -replace github.com/evstack/ev-abci=$GO_EXECUTION_ABCI_DIR @@ -369,7 +369,7 @@ jobs: cd /tmp/da-tool go mod init temp go mod edit -replace github.com/evstack/ev-node=github.com/evstack/ev-node@$EVNODE_VERSION - go mod edit -replace github.com/evstack/ev-node/core=github.com/evstack/ev-node/core@${EVNODE_VERSION} # TODO REMOVE AFTER TAG + go mod edit -replace github.com/evstack/ev-node/core=github.com/evstack/ev-node/core@v1.0.0-beta.5.0.20251216132820-afcd6bd9b354 # TODO REMOVE AFTER TAG go get github.com/evstack/ev-node/tools/local-da # start the local da in the background go tool github.com/evstack/ev-node/tools/local-da & diff --git a/Dockerfile b/Dockerfile index 8279e83b..6f983505 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,7 +27,7 @@ RUN ignite app install github.com/ignite/apps/evolve@${IGNITE_EVOLVE_APP_VERSION ignite evolve add-migrate RUN go mod edit -replace github.com/evstack/ev-node=github.com/evstack/ev-node@${EVNODE_VERSION} && \ - go mod edit -replace github.com/evstack/ev-node/core=github.com/evstack/ev-node/core@${EVNODE_VERSION} && \ + go mod edit -replace github.com/evstack/ev-node/core=github.com/evstack/ev-node/core@v1.0.0-beta.5.0.20251216132820-afcd6bd9b354 && \ go mod edit -replace github.com/evstack/ev-abci=/workspace/ev-abci && \ go mod tidy && \ go mod download diff --git a/tests/integration/docker/Dockerfile.gm b/tests/integration/docker/Dockerfile.gm index f5fe457b..d6f730d4 100644 --- a/tests/integration/docker/Dockerfile.gm +++ b/tests/integration/docker/Dockerfile.gm @@ -33,7 +33,7 @@ RUN chmod +x /workspace/patch-app-wiring.sh && \ # Align module versions like in CI RUN go mod edit -replace github.com/evstack/ev-node=github.com/evstack/ev-node@${EVNODE_VERSION} \ - && go mod edit -replace github.com/evstack/ev-node/core=github.com/evstack/ev-node/core@${EVNODE_VERSION} \ + && go mod edit -replace github.com/evstack/ev-node/core=github.com/evstack/ev-node/core@v1.0.0-beta.5.0.20251216132820-afcd6bd9b354 \ && go mod edit -replace github.com/evstack/ev-abci=../ev-abci \ && go mod tidy From 873a366d0195f61f40a94be56952a01bfecb00cc Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 17 Dec 2025 12:13:19 +0100 Subject: [PATCH 24/30] fixes --- server/docs/post_tx_cmd.md | 45 ------------------------ tests/integration/gm_gaia_health_test.go | 1 - tests/integration/migration_test.go | 2 -- tests/integration/testsuite_test.go | 2 -- 4 files changed, 50 deletions(-) diff --git a/server/docs/post_tx_cmd.md b/server/docs/post_tx_cmd.md index 8a0c951f..d04becf3 100644 --- a/server/docs/post_tx_cmd.md +++ b/server/docs/post_tx_cmd.md @@ -35,7 +35,6 @@ evabcid post-tx [flags] - `--gas-price`: Gas price for DA submission - Default: `-1` (uses config value) - - If set to `-1`, uses `evnode.da.gas_price` from config - If config also uses auto pricing, DA layer determines the price - `--timeout`: Timeout duration for the submission @@ -52,7 +51,6 @@ The command also accepts all Evolve configuration flags (prefixed with `--evnode - `--evnode.da.address`: DA layer RPC address (default: `http://localhost:7980`) - `--evnode.da.auth_token`: Authentication token for DA layer - `--evnode.da.block_time`: DA chain block time (default: `6s`) -- `--evnode.da.gas_multiplier`: Gas price multiplier for retries - And many more... (see `--help` for complete list) ## Examples @@ -278,53 +276,10 @@ da: auth_token: "your-token-here" namespace: "M21eldetxV" gas_price: 0.025 - gas_multiplier: 1.1 block_time: 6s submit_options: "" ``` -## Return Codes - -- `0`: Success - transaction posted successfully -- `1`: Error - invalid input, configuration error, or DA submission failure - -## Technical Details - -### DA Submission Flow - -1. Parse `--tx` flag value -2. Check if value is an existing file path -3. If file: read and decode JSON; if not: decode value as JSON -4. Encode transaction from JSON to bytes using Cosmos SDK encoder -5. Load Evolve configuration -6. Create DA client with configured parameters -7. Submit bytes as a blob to Celestia -8. Return submission result with DA height - -### Interface Registration - -The command registers the following module interfaces for proper transaction decoding: - -- Migration Manager module types (`migrationmngr`) -- Network module types (`network`) -- Standard Cosmos SDK types - -### Retry Behavior - -The command uses the DA client's built-in retry logic: - -- Retries on transient failures (network issues, mempool full) -- Increases gas price on retries (based on `gas_multiplier`) -- Respects the configured `max_submit_attempts` -- Backs off exponentially between retries - -### Blob Size Limits - -The maximum blob size is determined by the DA layer (Celestia). Currently: - -- Default max blob size: ~1.5 MB -- If transaction exceeds this, you'll receive a `StatusTooBig` error - ## Workflow ### Creating and Submitting a Transaction diff --git a/tests/integration/gm_gaia_health_test.go b/tests/integration/gm_gaia_health_test.go index 54484b7e..243ab1e5 100644 --- a/tests/integration/gm_gaia_health_test.go +++ b/tests/integration/gm_gaia_health_test.go @@ -243,7 +243,6 @@ func (s *DockerIntegrationTestSuite) getGmChain(ctx context.Context) *cosmos.Cha "--evnode.node.aggregator", "--evnode.signer.passphrase_file", fmt.Sprintf("/var/cosmos-chain/gm/%s", passphraseFile), "--evnode.da.address", daAddress, - "--evnode.da.gas_price", "0.000001", "--evnode.da.auth_token", authToken, "--evnode.rpc.address", "0.0.0.0:7331", "--evnode.da.namespace", "ev-header", diff --git a/tests/integration/migration_test.go b/tests/integration/migration_test.go index de6e4eac..93d18d1a 100644 --- a/tests/integration/migration_test.go +++ b/tests/integration/migration_test.go @@ -432,7 +432,6 @@ func (s *MigrationTestSuite) createEvolveChain(ctx context.Context, authToken, d // the filepath is determined based on the name in the chain builder. "--evnode.signer.passphrase_file", fmt.Sprintf("/var/cosmos-chain/evolve/%s", passphraseFile), "--evnode.da.address", daAddress, - "--evnode.da.gas_price", "0.000001", "--evnode.da.auth_token", authToken, "--evnode.rpc.address", "0.0.0.0:7331", "--evnode.da.namespace", "ev-header", @@ -446,7 +445,6 @@ func (s *MigrationTestSuite) createEvolveChain(ctx context.Context, authToken, d for i := 1; i < numNodes; i++ { nodeConfigs = append(nodeConfigs, cosmos.NewChainNodeConfigBuilder().WithAdditionalStartArgs( "--evnode.da.address", daAddress, - "--evnode.da.gas_price", "0.000001", "--evnode.da.auth_token", authToken, "--evnode.rpc.address", "0.0.0.0:7331", "--evnode.da.namespace", "ev-header", diff --git a/tests/integration/testsuite_test.go b/tests/integration/testsuite_test.go index a9f2af2e..b4b0f1d8 100644 --- a/tests/integration/testsuite_test.go +++ b/tests/integration/testsuite_test.go @@ -225,7 +225,6 @@ func (s *DockerIntegrationTestSuite) CreateEvolveChain(ctx context.Context) *cos "--evnode.node.aggregator", "--evnode.signer.passphrase_file", "/var/cosmos-chain/evolve/passhrase.txt", "--evnode.da.address", daAddress, - "--evnode.da.gas_price", "0.000001", "--evnode.da.auth_token", authToken, "--evnode.rpc.address", "0.0.0.0:7331", "--evnode.da.namespace", "ev-header", @@ -313,7 +312,6 @@ func (s *DockerIntegrationTestSuite) addFollowerNode(ctx context.Context, evolve err := evolveChain.AddNode(ctx, cosmos.NewChainNodeConfigBuilder(). WithAdditionalStartArgs( "--evnode.da.address", daAddress, - "--evnode.da.gas_price", "0.000001", "--evnode.da.auth_token", authToken, "--evnode.rpc.address", "0.0.0.0:7331", "--evnode.da.namespace", "ev-header", From e2e0fa4e83359e02e7fc5e937a4904912afcc45d Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 17 Dec 2025 12:22:30 +0100 Subject: [PATCH 25/30] remove pin --- .github/workflows/integration_test.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.github/workflows/integration_test.yml b/.github/workflows/integration_test.yml index 32dfd34e..5ed8af45 100644 --- a/.github/workflows/integration_test.yml +++ b/.github/workflows/integration_test.yml @@ -166,14 +166,6 @@ jobs: # replace the github.com/evstack/ev-abci module with the local version go mod edit -replace github.com/evstack/ev-abci=$GO_EXECUTION_ABCI_DIR - # pin dependency versions to avoid compatibility issues - go mod edit -replace github.com/libp2p/go-libp2p-quic-transport=github.com/libp2p/go-libp2p-quic-transport@v0.33.1 - go mod edit -replace github.com/libp2p/go-libp2p=github.com/libp2p/go-libp2p@v0.43.0 - go mod edit -replace github.com/quic-go/quic-go=github.com/quic-go/quic-go@v0.54.1 - go mod edit -replace github.com/quic-go/webtransport-go=github.com/quic-go/webtransport-go@v0.9.0 - go mod edit -replace github.com/multiformats/go-multiaddr=github.com/multiformats/go-multiaddr@v0.16.1 - go mod edit -replace buf.build/go/protovalidate=buf.build/go/protovalidate@v0.12.0 - # download dependencies and update go.mod/go.sum go mod tidy From 8db49177ab7bd1b3c7483b4fdab41e360eb671e0 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 17 Dec 2025 12:32:08 +0100 Subject: [PATCH 26/30] bump ignite app --- .github/workflows/integration_test.yml | 8 ++++---- .github/workflows/migration_test.yml | 2 +- Dockerfile | 2 +- tests/integration/docker/Dockerfile.gm | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/integration_test.yml b/.github/workflows/integration_test.yml index 5ed8af45..0f69d0a0 100644 --- a/.github/workflows/integration_test.yml +++ b/.github/workflows/integration_test.yml @@ -22,7 +22,7 @@ jobs: image_tag: ${{ steps.tag.outputs.tag }} env: IGNITE_VERSION: v29.3.0 # the gm build script depends on some annotations - IGNITE_EVOLVE_APP_VERSION: "27619e8c9b45a3027003260018bb69972d250e8a" # use tagged when apps has tagged (blocked on things) + IGNITE_EVOLVE_APP_VERSION: "9ec7626d9f93863985eed04360a2dee91f91b434" # use tagged when apps has tagged (blocked on things) EVNODE_VERSION: v1.0.0-beta.10.0.20251216132820-afcd6bd9b354 steps: - uses: actions/checkout@v5 @@ -65,7 +65,7 @@ jobs: env: EVNODE_VERSION: "v1.0.0-beta.10.0.20251216132820-afcd6bd9b354" IGNITE_VERSION: "v29.6.1" - IGNITE_EVOLVE_APP_VERSION: "27619e8c9b45a3027003260018bb69972d250e8a" # use tagged when apps has tagged (blocked on things) + IGNITE_EVOLVE_APP_VERSION: "9ec7626d9f93863985eed04360a2dee91f91b434" # use tagged when apps has tagged (blocked on things) EVOLVE_IMAGE_REPO: "evolve-gm" EVOLVE_IMAGE_TAG: "latest" @@ -108,7 +108,7 @@ jobs: DO_NOT_TRACK: true EVNODE_VERSION: "v1.0.0-beta.10.0.20251216132820-afcd6bd9b354" IGNITE_VERSION: "v29.6.1" - IGNITE_EVOLVE_APP_VERSION: "27619e8c9b45a3027003260018bb69972d250e8a" # use tagged when apps has tagged (blocked on things) + IGNITE_EVOLVE_APP_VERSION: "9ec7626d9f93863985eed04360a2dee91f91b434" # use tagged when apps has tagged (blocked on things) outputs: carol_mnemonic: ${{ steps.save_mnemonic.outputs.carol_mnemonic }} gmd_home: ${{ steps.paths.outputs.GMD_HOME }} @@ -544,7 +544,7 @@ jobs: DO_NOT_TRACK: true EVNODE_VERSION: "v1.0.0-beta.10.0.20251216132820-afcd6bd9b354" IGNITE_VERSION: "v29.6.1" - IGNITE_EVOLVE_APP_VERSION: "27619e8c9b45a3027003260018bb69972d250e8a" # use tagged when apps has tagged (blocked on things) + IGNITE_EVOLVE_APP_VERSION: "9ec7626d9f93863985eed04360a2dee91f91b434" # use tagged when apps has tagged (blocked on things) GAIA_VERSION: "v25.1.0" EVOLVE_IMAGE_REPO: "evabci/gm" EVOLVE_IMAGE_TAG: "local" diff --git a/.github/workflows/migration_test.yml b/.github/workflows/migration_test.yml index cfa80e55..4a499cfb 100644 --- a/.github/workflows/migration_test.yml +++ b/.github/workflows/migration_test.yml @@ -14,7 +14,7 @@ permissions: env: EVNODE_VERSION: "v1.0.0-beta.10.0.20251216132820-afcd6bd9b354" IGNITE_VERSION: "v29.6.1" - IGNITE_EVOLVE_APP_VERSION: "27619e8c9b45a3027003260018bb69972d250e8a" # use tagged when apps has tagged (blocked on things) + IGNITE_EVOLVE_APP_VERSION: "9ec7626d9f93863985eed04360a2dee91f91b434" # use tagged when apps has tagged (blocked on things) EVOLVE_IMAGE_REPO: "ghcr.io/evstack/evolve-abci-gm" COSMOS_SDK_IMAGE_REPO: "ghcr.io/evstack/cosmos-sdk-gm" diff --git a/Dockerfile b/Dockerfile index 6f983505..129fb05e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,7 @@ RUN apk add --no-cache \ # Set environment variables ENV EVNODE_VERSION=v1.0.0-beta.10.0.20251216132820-afcd6bd9b354 ENV IGNITE_VERSION=v29.6.1 -ENV IGNITE_EVOLVE_APP_VERSION=27619e8c9b45a3027003260018bb69972d250e8a +ENV IGNITE_EVOLVE_APP_VERSION=9ec7626d9f93863985eed04360a2dee91f91b434 RUN curl -sSL https://get.ignite.com/cli@${IGNITE_VERSION}! | bash diff --git a/tests/integration/docker/Dockerfile.gm b/tests/integration/docker/Dockerfile.gm index d6f730d4..1e249131 100644 --- a/tests/integration/docker/Dockerfile.gm +++ b/tests/integration/docker/Dockerfile.gm @@ -4,7 +4,7 @@ FROM golang:1.24-bookworm AS builder ARG IGNITE_VERSION=v29.3.1 -ARG IGNITE_EVOLVE_APP_VERSION=27619e8c9b45a3027003260018bb69972d250e8a +ARG IGNITE_EVOLVE_APP_VERSION=9ec7626d9f93863985eed04360a2dee91f91b434 ARG EVNODE_VERSION=v1.0.0-beta.10.0.20251216132820-afcd6bd9b354 RUN apt-get update && apt-get install -y --no-install-recommends \ From e079d146a776c051fafeaceeea7c1caadb8faba8 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 17 Dec 2025 12:47:34 +0100 Subject: [PATCH 27/30] bump ignite app again --- .github/workflows/integration_test.yml | 8 ++++---- .github/workflows/migration_test.yml | 3 ++- Dockerfile | 2 +- tests/integration/docker/Dockerfile.gm | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/integration_test.yml b/.github/workflows/integration_test.yml index 0f69d0a0..e506632f 100644 --- a/.github/workflows/integration_test.yml +++ b/.github/workflows/integration_test.yml @@ -22,7 +22,7 @@ jobs: image_tag: ${{ steps.tag.outputs.tag }} env: IGNITE_VERSION: v29.3.0 # the gm build script depends on some annotations - IGNITE_EVOLVE_APP_VERSION: "9ec7626d9f93863985eed04360a2dee91f91b434" # use tagged when apps has tagged (blocked on things) + IGNITE_EVOLVE_APP_VERSION: "d02e4975a7030d0cd4a15680d534ee51b1952950" # use tagged when apps has tagged (blocked on things) EVNODE_VERSION: v1.0.0-beta.10.0.20251216132820-afcd6bd9b354 steps: - uses: actions/checkout@v5 @@ -65,7 +65,7 @@ jobs: env: EVNODE_VERSION: "v1.0.0-beta.10.0.20251216132820-afcd6bd9b354" IGNITE_VERSION: "v29.6.1" - IGNITE_EVOLVE_APP_VERSION: "9ec7626d9f93863985eed04360a2dee91f91b434" # use tagged when apps has tagged (blocked on things) + IGNITE_EVOLVE_APP_VERSION: "d02e4975a7030d0cd4a15680d534ee51b1952950" # use tagged when apps has tagged (blocked on things) EVOLVE_IMAGE_REPO: "evolve-gm" EVOLVE_IMAGE_TAG: "latest" @@ -108,7 +108,7 @@ jobs: DO_NOT_TRACK: true EVNODE_VERSION: "v1.0.0-beta.10.0.20251216132820-afcd6bd9b354" IGNITE_VERSION: "v29.6.1" - IGNITE_EVOLVE_APP_VERSION: "9ec7626d9f93863985eed04360a2dee91f91b434" # use tagged when apps has tagged (blocked on things) + IGNITE_EVOLVE_APP_VERSION: "d02e4975a7030d0cd4a15680d534ee51b1952950" # use tagged when apps has tagged (blocked on things) outputs: carol_mnemonic: ${{ steps.save_mnemonic.outputs.carol_mnemonic }} gmd_home: ${{ steps.paths.outputs.GMD_HOME }} @@ -544,7 +544,7 @@ jobs: DO_NOT_TRACK: true EVNODE_VERSION: "v1.0.0-beta.10.0.20251216132820-afcd6bd9b354" IGNITE_VERSION: "v29.6.1" - IGNITE_EVOLVE_APP_VERSION: "9ec7626d9f93863985eed04360a2dee91f91b434" # use tagged when apps has tagged (blocked on things) + IGNITE_EVOLVE_APP_VERSION: "d02e4975a7030d0cd4a15680d534ee51b1952950" # use tagged when apps has tagged (blocked on things) GAIA_VERSION: "v25.1.0" EVOLVE_IMAGE_REPO: "evabci/gm" EVOLVE_IMAGE_TAG: "local" diff --git a/.github/workflows/migration_test.yml b/.github/workflows/migration_test.yml index 4a499cfb..c375611c 100644 --- a/.github/workflows/migration_test.yml +++ b/.github/workflows/migration_test.yml @@ -14,7 +14,7 @@ permissions: env: EVNODE_VERSION: "v1.0.0-beta.10.0.20251216132820-afcd6bd9b354" IGNITE_VERSION: "v29.6.1" - IGNITE_EVOLVE_APP_VERSION: "9ec7626d9f93863985eed04360a2dee91f91b434" # use tagged when apps has tagged (blocked on things) + IGNITE_EVOLVE_APP_VERSION: "d02e4975a7030d0cd4a15680d534ee51b1952950" # use tagged when apps has tagged (blocked on things) EVOLVE_IMAGE_REPO: "ghcr.io/evstack/evolve-abci-gm" COSMOS_SDK_IMAGE_REPO: "ghcr.io/evstack/cosmos-sdk-gm" @@ -84,6 +84,7 @@ jobs: build-args: | IGNITE_VERSION=${{ env.IGNITE_VERSION }} ENABLE_IBC=${{ matrix.enable_ibc }} + IGNITE_EVOLVE_APP_VERSION=${{ env.IGNITE_EVOLVE_APP_VERSION }} push: true tags: ${{ env.COSMOS_SDK_IMAGE_REPO }}:${{ needs.determine-tag.outputs.image_tag }}${{ matrix.tag_suffix }} cache-from: type=gha diff --git a/Dockerfile b/Dockerfile index 129fb05e..4d4e7e7c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,7 @@ RUN apk add --no-cache \ # Set environment variables ENV EVNODE_VERSION=v1.0.0-beta.10.0.20251216132820-afcd6bd9b354 ENV IGNITE_VERSION=v29.6.1 -ENV IGNITE_EVOLVE_APP_VERSION=9ec7626d9f93863985eed04360a2dee91f91b434 +ENV IGNITE_EVOLVE_APP_VERSION=d02e4975a7030d0cd4a15680d534ee51b1952950 RUN curl -sSL https://get.ignite.com/cli@${IGNITE_VERSION}! | bash diff --git a/tests/integration/docker/Dockerfile.gm b/tests/integration/docker/Dockerfile.gm index 1e249131..80b24f08 100644 --- a/tests/integration/docker/Dockerfile.gm +++ b/tests/integration/docker/Dockerfile.gm @@ -4,7 +4,7 @@ FROM golang:1.24-bookworm AS builder ARG IGNITE_VERSION=v29.3.1 -ARG IGNITE_EVOLVE_APP_VERSION=9ec7626d9f93863985eed04360a2dee91f91b434 +ARG IGNITE_EVOLVE_APP_VERSION=d02e4975a7030d0cd4a15680d534ee51b1952950 ARG EVNODE_VERSION=v1.0.0-beta.10.0.20251216132820-afcd6bd9b354 RUN apt-get update && apt-get install -y --no-install-recommends \ From bfb62e2b1e79b0428931dfa3b96ee93eb98720e3 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 17 Dec 2025 12:51:30 +0100 Subject: [PATCH 28/30] fix dockerfile --- Dockerfile.cosmos-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile.cosmos-sdk b/Dockerfile.cosmos-sdk index 3fa68fcc..35ebb334 100644 --- a/Dockerfile.cosmos-sdk +++ b/Dockerfile.cosmos-sdk @@ -20,7 +20,7 @@ RUN ignite scaffold chain gm --no-module --skip-git --address-prefix gm WORKDIR /workspace/gm -RUN ignite app install -g github.com/ignite/apps/evolve@main +RUN ignite app install -g github.com/ignite/apps/evolve@${IGNITE_EVOLVE_APP_VERSION} # Add only the evolve migrate command (do not scaffold full evolve integration) RUN ignite evolve add-migrate From b457064728218b66a6c8cda36e4e6d7a37b353af Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 17 Dec 2025 14:15:51 +0100 Subject: [PATCH 29/30] set env --- Dockerfile.cosmos-sdk | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile.cosmos-sdk b/Dockerfile.cosmos-sdk index 35ebb334..79c2c6b0 100644 --- a/Dockerfile.cosmos-sdk +++ b/Dockerfile.cosmos-sdk @@ -10,6 +10,7 @@ RUN apk add --no-cache \ # Set environment variables ENV IGNITE_VERSION=v29.5.0 +ENV IGNITE_EVOLVE_APP_VERSION=d02e4975a7030d0cd4a15680d534ee51b1952950 RUN curl -sSL https://get.ignite.com/cli@${IGNITE_VERSION}! | bash From 8699178e474028765bd73da29466b4918a22c493 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 17 Dec 2025 14:33:51 +0100 Subject: [PATCH 30/30] add replaces --- .github/workflows/migration_test.yml | 1 - Dockerfile.cosmos-sdk | 16 ++++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/.github/workflows/migration_test.yml b/.github/workflows/migration_test.yml index c375611c..2938e958 100644 --- a/.github/workflows/migration_test.yml +++ b/.github/workflows/migration_test.yml @@ -84,7 +84,6 @@ jobs: build-args: | IGNITE_VERSION=${{ env.IGNITE_VERSION }} ENABLE_IBC=${{ matrix.enable_ibc }} - IGNITE_EVOLVE_APP_VERSION=${{ env.IGNITE_EVOLVE_APP_VERSION }} push: true tags: ${{ env.COSMOS_SDK_IMAGE_REPO }}:${{ needs.determine-tag.outputs.image_tag }}${{ matrix.tag_suffix }} cache-from: type=gha diff --git a/Dockerfile.cosmos-sdk b/Dockerfile.cosmos-sdk index 79c2c6b0..f6c44532 100644 --- a/Dockerfile.cosmos-sdk +++ b/Dockerfile.cosmos-sdk @@ -10,7 +10,6 @@ RUN apk add --no-cache \ # Set environment variables ENV IGNITE_VERSION=v29.5.0 -ENV IGNITE_EVOLVE_APP_VERSION=d02e4975a7030d0cd4a15680d534ee51b1952950 RUN curl -sSL https://get.ignite.com/cli@${IGNITE_VERSION}! | bash @@ -21,7 +20,7 @@ RUN ignite scaffold chain gm --no-module --skip-git --address-prefix gm WORKDIR /workspace/gm -RUN ignite app install -g github.com/ignite/apps/evolve@${IGNITE_EVOLVE_APP_VERSION} +RUN ignite app install -g github.com/ignite/apps/evolve@main # Add only the evolve migrate command (do not scaffold full evolve integration) RUN ignite evolve add-migrate @@ -36,6 +35,19 @@ RUN if [ "$ENABLE_IBC" = "false" ]; then \ echo "IBC enabled, leaving registration intact."; \ fi +# Pin dependency versions to avoid compatibility issues +RUN go mod edit -replace github.com/libp2p/go-libp2p-quic-transport=github.com/libp2p/go-libp2p-quic-transport@v0.33.1 && \ + go mod edit -replace github.com/libp2p/go-libp2p=github.com/libp2p/go-libp2p@v0.43.0 && \ + go mod edit -replace github.com/quic-go/quic-go=github.com/quic-go/quic-go@v0.54.1 && \ + go mod edit -replace github.com/quic-go/webtransport-go=github.com/quic-go/webtransport-go@v0.9.0 && \ + go mod edit -replace github.com/multiformats/go-multiaddr=github.com/multiformats/go-multiaddr@v0.16.1 && \ + go mod edit -replace buf.build/go/protovalidate=buf.build/go/protovalidate@v0.12.0 && \ + go mod tidy && \ + go mod download + +# Verify pinned module versions are effective in build context +RUN go list -m all | grep -E 'github.com/libp2p/go-libp2p|github.com/multiformats/go-multiaddr' + # Build the Cosmos SDK binary RUN ignite chain build --skip-proto