diff --git a/.github/actions/setup-go/action.yml b/.github/actions/setup-go/action.yml new file mode 100644 index 0000000..ca8f69c --- /dev/null +++ b/.github/actions/setup-go/action.yml @@ -0,0 +1,39 @@ +name: Setup Go from go.mod +description: Detect the Go toolchain version from go.mod and install it with caching enabled +outputs: + version: + description: Detected Go version + value: ${{ steps.determine.outputs.version }} +runs: + using: composite + steps: + - id: determine + name: Determine Go version + shell: bash + run: | + set -euo pipefail + + VERSION="" + TOOLCHAIN_VERSION=$(grep -E '^toolchain go[0-9]+\.[0-9]+(\.[0-9]+)?$' go.mod | cut -d ' ' -f 2 | sed 's/^go//' || true) + if [ -n "$TOOLCHAIN_VERSION" ]; then + VERSION="$TOOLCHAIN_VERSION" + echo "Detected toolchain directive: go$VERSION" + else + VERSION=$(grep -E '^go [0-9]+\.[0-9]+(\.[0-9]+)?$' go.mod | cut -d ' ' -f 2 || true) + if [ -n "$VERSION" ]; then + echo "Detected go directive: $VERSION" + fi + fi + + if [ -z "$VERSION" ]; then + echo "Unable to determine Go version from go.mod" >&2 + exit 1 + fi + + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + + - name: Setup Go + uses: actions/setup-go@v6.2.0 + with: + go-version: ${{ steps.determine.outputs.version }} + cache: true diff --git a/.github/workflows/ica-test.yml b/.github/workflows/ica-test.yml new file mode 100644 index 0000000..070fb5f --- /dev/null +++ b/.github/workflows/ica-test.yml @@ -0,0 +1,35 @@ +name: ICA Integration Tests + +on: + push: + branches: [master, main] + pull_request: + branches: [master, main] + workflow_dispatch: + inputs: + lumera_version: + description: "Lumera version to test (e.g. v1.10.1)" + required: false + default: "v1.10.1" + +env: + LUMERA_VERSION: ${{ github.event.inputs.lumera_version || 'v1.10.1' }} + +jobs: + full-test: + name: Full Test (build + genesis + ICA) + runs-on: ubuntu-latest + timeout-minutes: 45 + + steps: + - name: Checkout + uses: actions/checkout@v6.0.1 + + - name: Set up Go + uses: ./.github/actions/setup-go + + - name: Build Docker image + run: make build-docker LUMERA_VERSION=${{ env.LUMERA_VERSION }} + + - name: Run tests + run: make test-local LUMERA_VERSION=${{ env.LUMERA_VERSION }} diff --git a/Dockerfile b/Dockerfile index c5355c9..02c470d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,7 +18,7 @@ RUN apk add --no-cache \ # Download and install lumerad binary + libwasmvm from GitHub releases # The real binary is installed as lumerad-bin; lumerad is a wrapper that strips -# --x-crisis-skip-assert-invariants (hardcoded by interchaintest but unsupported) +# --x-crisis-skip-assert-invariants (hardcoded by interchaintest but removed in v1.10.1) RUN mkdir -p /tmp/release && \ curl -sSfL "https://github.com/LumeraProtocol/lumera/releases/download/${LUMERA_VERSION}/lumera_${LUMERA_VERSION}_linux_amd64.tar.gz" \ | tar -xz -C /tmp/release && \ @@ -28,10 +28,11 @@ RUN mkdir -p /tmp/release && \ rm -rf /tmp/release && \ lumerad-bin version -# Create wrapper script that filters unsupported flags and ensures claims.csv exists +# Create wrapper that strips --x-crisis-skip-assert-invariants (interchaintest +# hardcodes it, but the crisis module was removed in v1.10.1) and ensures +# claims.csv exists for the --claims-path flag. RUN cat > /usr/local/bin/lumerad <<'WRAPPER' #!/bin/bash -# Ensure claims.csv exists (lumerad requires it at startup) [ -f /tmp/claims.csv ] || touch /tmp/claims.csv args=() for arg in "$@"; do @@ -44,31 +45,16 @@ exec lumerad-bin "${args[@]}" WRAPPER RUN chmod +x /usr/local/bin/lumerad -# Copy claims.csv to temp location +# Copy claims.csv (used via --claims-path /tmp/claims.csv in AdditionalStartArgs) COPY claims.csv /tmp/claims.csv # Create lumera user RUN addgroup -g 1025 lumera && \ adduser -D -u 1025 -G lumera lumera -# Create entrypoint script that ensures claims.csv is in .lumera/config -RUN cat > /usr/local/bin/entrypoint.sh <<'ENTRY' -#!/bin/bash -set -e -if [ -f /tmp/claims.csv ] && [ -s /tmp/claims.csv ]; then - mkdir -p $HOME/.lumera/config - if [ ! -f $HOME/.lumera/config/claims.csv ]; then - cp /tmp/claims.csv $HOME/.lumera/config/claims.csv - fi -fi -exec "$@" -ENTRY -RUN chmod +x /usr/local/bin/entrypoint.sh - USER lumera WORKDIR /home/lumera EXPOSE 26656 26657 1317 9090 -ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] CMD ["lumerad", "start"] diff --git a/Makefile b/Makefile index 7620216..e367e6e 100644 --- a/Makefile +++ b/Makefile @@ -1,55 +1,35 @@ .PHONY: help build-docker clean-docker docker-info verify -.PHONY: test test-local test-v1.9.1 test-v1.10.1 test-v1.9.1-local test-v1.10.1-local -.PHONY: test-genesis test-genesis-local test-genesis-v1.9.1 test-genesis-v1.10.1 test-genesis-v1.9.1-local test-genesis-v1.10.1-local -.PHONY: test-ica test-ica-local test-ica-v1.9.1 test-ica-v1.10.1 test-ica-v1.9.1-local test-ica-v1.10.1-local -.PHONY: test-all-versions test-all-versions-local full-test +.PHONY: test test-local test-genesis test-genesis-local test-ica test-ica-local full-test + +# Lumera version — override via: make test LUMERA_VERSION=v1.10.1 +LUMERA_VERSION ?= v1.10.1 # Default target help: @echo "Lumera Interchaintest Makefile" @echo "" + @echo " LUMERA_VERSION=$(LUMERA_VERSION) (override with LUMERA_VERSION=vX.Y.Z)" + @echo "" @echo "Docker:" - @echo " build-docker Build lumerad Docker image from local source" + @echo " build-docker Build lumerad Docker image" @echo " clean-docker Remove local Docker images" @echo " docker-info Show Docker image info" @echo " verify Verify local setup" @echo "" - @echo "Genesis tests:" - @echo " test-genesis-v1.9.1 Test genesis for v1.9.1" - @echo " test-genesis-v1.10.1 Test genesis for v1.10.1" - @echo " test-genesis-v1.9.1-local ... with local image" - @echo " test-genesis-v1.10.1-local ... with local image" - @echo "" - @echo "ICA tests:" - @echo " test-ica-v1.9.1 Run ICA tests for v1.9.1" - @echo " test-ica-v1.10.1 Run ICA tests for v1.10.1" - @echo " test-ica-v1.9.1-local ... with local image" - @echo " test-ica-v1.10.1-local ... with local image" - @echo "" - @echo "All tests for a version:" - @echo " test-v1.9.1 Run all tests for v1.9.1" - @echo " test-v1.10.1 Run all tests for v1.10.1" - @echo " test-v1.9.1-local ... with local image" - @echo " test-v1.10.1-local ... with local image" - @echo "" - @echo "Shortcuts (default v1.10.1):" - @echo " test-genesis Test genesis (v1.10.1)" + @echo "Tests:" + @echo " test-genesis Test genesis configuration" @echo " test-genesis-local Test genesis with local image" - @echo " test-ica Run ICA tests (v1.10.1)" + @echo " test-ica Run ICA tests" @echo " test-ica-local Run ICA tests with local image" - @echo " test Run all tests (v1.10.1)" + @echo " test Run all tests" @echo " test-local Run all tests with local image" - @echo "" - @echo "Multi-version:" - @echo " test-all-versions Test both v1.9.1 and v1.10.1" - @echo " test-all-versions-local Test both versions with local image" - @echo " full-test Build + test all versions locally" + @echo " full-test Build + run all tests locally" # ── Docker ────────────────────────────────────────────── build-docker: @echo "Building lumerad Docker image..." - ./build-docker.sh + LUMERA_VERSION=$(LUMERA_VERSION) ./build-docker.sh clean-docker: -docker rmi lumerad-local:local 2>/dev/null || true @@ -67,64 +47,26 @@ verify: # ── Genesis tests ─────────────────────────────────────── -test-genesis-v1.9.1: - LUMERA_VERSION=v1.9.1 go test -v -timeout 10m -run TestLumeraGenesisSetup - -test-genesis-v1.10.1: - LUMERA_VERSION=v1.10.1 go test -v -timeout 10m -run TestLumeraGenesisSetup - -test-genesis-v1.9.1-local: build-docker - LUMERA_VERSION=v1.9.1 USE_LOCAL_IMAGE=true go test -v -timeout 10m -run TestLumeraGenesisSetup - -test-genesis-v1.10.1-local: build-docker - LUMERA_VERSION=v1.10.1 USE_LOCAL_IMAGE=true go test -v -timeout 10m -run TestLumeraGenesisSetup +test-genesis: + LUMERA_VERSION=$(LUMERA_VERSION) go test -v -timeout 10m -run TestLumeraGenesisSetup -# Shortcuts (default v1.10.1) -test-genesis: test-genesis-v1.10.1 -test-genesis-local: test-genesis-v1.10.1-local +test-genesis-local: build-docker + LUMERA_VERSION=$(LUMERA_VERSION) USE_LOCAL_IMAGE=true go test -v -timeout 10m -run TestLumeraGenesisSetup # ── ICA tests ─────────────────────────────────────────── -test-ica-v1.9.1: - LUMERA_VERSION=v1.9.1 go test -v -timeout 20m -run TestOsmosisLumeraICA - -test-ica-v1.10.1: - LUMERA_VERSION=v1.10.1 go test -v -timeout 20m -run TestOsmosisLumeraICA - -test-ica-v1.9.1-local: build-docker - LUMERA_VERSION=v1.9.1 USE_LOCAL_IMAGE=true go test -v -timeout 20m -run TestOsmosisLumeraICA - -test-ica-v1.10.1-local: build-docker - LUMERA_VERSION=v1.10.1 USE_LOCAL_IMAGE=true go test -v -timeout 20m -run TestOsmosisLumeraICA - -# Shortcuts (default v1.10.1) -test-ica: test-ica-v1.10.1 -test-ica-local: test-ica-v1.10.1-local - -# ── All tests for a version ───────────────────────────── - -test-v1.9.1: - LUMERA_VERSION=v1.9.1 go test -v -timeout 30m ./... - -test-v1.10.1: - LUMERA_VERSION=v1.10.1 go test -v -timeout 30m ./... - -test-v1.9.1-local: build-docker - LUMERA_VERSION=v1.9.1 USE_LOCAL_IMAGE=true go test -v -timeout 30m ./... - -test-v1.10.1-local: build-docker - LUMERA_VERSION=v1.10.1 USE_LOCAL_IMAGE=true go test -v -timeout 30m ./... +test-ica: + LUMERA_VERSION=$(LUMERA_VERSION) go test -v -timeout 20m -run TestOsmosisLumeraICA -# Shortcuts (default v1.10.1) -test: test-v1.10.1 -test-local: test-v1.10.1-local +test-ica-local: build-docker + LUMERA_VERSION=$(LUMERA_VERSION) USE_LOCAL_IMAGE=true go test -v -timeout 20m -run TestOsmosisLumeraICA -# ── Multi-version ─────────────────────────────────────── +# ── All tests ─────────────────────────────────────────── -test-all-versions: - go test -v -timeout 30m -run TestBothVersions +test: + LUMERA_VERSION=$(LUMERA_VERSION) go test -v -timeout 30m ./... -test-all-versions-local: build-docker - USE_LOCAL_IMAGE=true go test -v -timeout 30m -run TestBothVersions +test-local: build-docker + LUMERA_VERSION=$(LUMERA_VERSION) USE_LOCAL_IMAGE=true go test -v -timeout 30m ./... -full-test: build-docker test-all-versions-local +full-test: test-local diff --git a/README.md b/README.md index 7edb3ae..8e2ad9a 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,8 @@ End-to-end testing for Lumera blockchain using [interchaintest](https://github.c This test suite provides: - **ICA (Interchain Accounts) testing** between Osmosis and Lumera -- **Genesis configuration testing** for multiple Lumera versions +- **Genesis configuration testing** for Lumera - **Local Docker image support** for testing unreleased changes -- **Version-specific genesis modifications** (v1.9.1 vs v1.10.1) ## Quick Start @@ -22,22 +21,17 @@ This test suite provides: ### Run Tests ```bash -# Run all tests for v1.10.1 (default) +# Run all tests (uses LUMERA_VERSION from Makefile, currently v1.10.1) make test -# Run all tests for v1.9.1 -make test-v1.9.1 +# Override the version +make test LUMERA_VERSION=v1.11.0 # Genesis tests only -make test-genesis-v1.10.1 -make test-genesis-v1.9.1 +make test-genesis # ICA tests only -make test-ica-v1.10.1 -make test-ica-v1.9.1 - -# Test both versions -make test-all-versions +make test-ica ``` ## Using Local Docker Images @@ -63,20 +57,17 @@ This builds `lumerad-local:latest` from your local lumera source code. ### 2. Run Tests with Local Image ```bash -# All tests with local image (v1.10.1) +# All tests with local image make test-local -# Specific version with local image -make test-v1.9.1-local -make test-v1.10.1-local - # Genesis only with local image -make test-genesis-v1.9.1-local -make test-genesis-v1.10.1-local +make test-genesis-local # ICA only with local image -make test-ica-v1.9.1-local -make test-ica-v1.10.1-local +make test-ica-local + +# Build + test in one step +make full-test ``` ## Testing Genesis Only @@ -84,15 +75,11 @@ make test-ica-v1.10.1-local To test genesis configuration without running full ICA tests: ```bash -# Test v1.10.1 genesis (default) +# Test genesis make test-genesis -# Test v1.9.1 genesis -make test-genesis-v1.9.1 - # Test with local image -make test-genesis-v1.10.1-local -make test-genesis-v1.9.1-local +make test-genesis-local ``` This will: @@ -100,87 +87,31 @@ This will: 1. Start a Lumera chain with modified genesis 2. Verify all genesis modifications are correct 3. Check that claims.csv is present (if available) -4. Run version-specific validation - -## Lumera Versions - -### v1.9.1 and Earlier - -- **Includes**: crisis module -- **Consensus params**: Stored in legacy x/params module -- **Modules**: action, supernode, ICA, PFM (no NFT) - -### v1.10.0 and v1.10.1 - -- **Removed**: crisis module -- **Consensus params**: Migrated to x/consensus module -- **Modules**: action, supernode, ICA, PFM (no NFT) ## Genesis Modifications -The test suite automatically modifies genesis for both versions: +The test suite automatically modifies genesis: -### Common Modifications (All Versions) - -**Action Module:** - -```json -{ - "base_action_fee": {"denom": "ulume", "amount": "10000"}, - "max_actions_per_block": "10", - "min_super_nodes": "3", - "super_node_fee_share": "1.0" -} -``` - -**Supernode Module:** - -```json -{ - "min_cpu_cores": "8", - "min_mem_gb": "16", - "min_storage_gb": "1000", - "metrics_update_interval_blocks": "400" -} -``` - -**ICA Host:** - -- Enabled with allowlisted messages: - - `/lumera.action.v1.MsgRequestAction` - - `/lumera.action.v1.MsgApproveAction` - - Standard Cosmos messages (bank, staking, distribution) - -**Modules:** - -- ✅ Packet Forward Middleware (PFM) -- ❌ NFT module (removed) - -### Version-Specific Modifications - -**v1.9.1:** - -- ✅ Crisis module present - -**v1.10.1:** - -- ❌ Crisis module removed -- ✅ Consensus params in x/consensus +- **Denoms**: `bond_denom` and `mint_denom` set to `ulume` +- **ICA host**: Enabled with all message types allowed +- **Crisis module**: Removed (not present since v1.10.x) +- **NFT module**: Removed (unsupported) +- **Consensus params**: Configured via x/consensus module ## Environment Variables | Variable | Default | Description | | -------- | ------- | ----------- | | `USE_LOCAL_IMAGE` | `false` | Use locally built Docker image | -| `LUMERA_VERSION` | `v1.10.1` | Lumera version to test | +| `LUMERA_VERSION` | `v1.10.1` | Lumera version to test (overridable in Makefile) | | `IMAGE_NAME` | `lumerad-local` | Local Docker image name | -| `IMAGE_TAG` | `latest` | Local Docker image tag | +| `IMAGE_TAG` | `local` | Local Docker image tag | ## Project Structure ```bash interchaintest/ -├── chain_config.go # Unified chain configuration +├── chain_config.go # Chain configuration ├── ica_test.go # ICA e2e tests ├── genesis_test.go # Genesis verification tests ├── Dockerfile # Lumerad Docker image @@ -198,31 +129,20 @@ make help # Build local Docker image make build-docker -# Run all tests (v1.10.1 by default) +# Run all tests make test make test-local # with local image -# Version-specific tests (no env vars needed) -make test-v1.9.1 # all tests for v1.9.1 -make test-v1.10.1 # all tests for v1.10.1 -make test-v1.9.1-local # with local image -make test-v1.10.1-local # with local image - # Genesis tests -make test-genesis-v1.9.1 -make test-genesis-v1.10.1 -make test-genesis-v1.9.1-local -make test-genesis-v1.10.1-local +make test-genesis +make test-genesis-local # ICA tests -make test-ica-v1.9.1 -make test-ica-v1.10.1 -make test-ica-v1.9.1-local -make test-ica-v1.10.1-local +make test-ica +make test-ica-local -# Multi-version -make test-all-versions # test both versions -make full-test # build + test all versions locally +# Build + test +make full-test # Cleanup make clean-docker @@ -247,10 +167,7 @@ make clean-docker build-docker ```bash # Test genesis modifications without full ICA flow -make test-genesis-v1.10.1 - -# Check specific version -make test-genesis-v1.9.1 +make test-genesis ``` ### Claims.csv Not Found @@ -264,7 +181,7 @@ To verify: ./build-docker.sh # Test manually -docker run --rm lumerad-local:latest ls -la /home/lumera/.lumera/config/ +docker run --rm lumerad-local:local ls -la /home/lumera/.lumera/config/ ``` ### ICA Tests Failing @@ -281,8 +198,8 @@ make test-ica 2>&1 | tee test.log 1. **Make changes to lumera source code** 2. **Rebuild Docker image**: `make build-docker` -3. **Test genesis**: `make test-genesis-v1.10.1-local` -4. **Run full ICA tests**: `make test-ica-v1.10.1-local` +3. **Test genesis**: `make test-genesis-local` +4. **Run full ICA tests**: `make test-ica-local` ## CI/CD Integration @@ -309,9 +226,8 @@ make test-ica 2>&1 | tee test.log When adding new tests: 1. Update genesis modifications in `chain_config.go` if needed -2. Add version-specific checks in `genesis_test.go` +2. Add checks in `genesis_test.go` 3. Update this README with new features -4. Ensure tests pass for both v1.9.1 and v1.10.1 ## Resources diff --git a/SETUP_SUMMARY.md b/SETUP_SUMMARY.md index 9b24360..4e6695c 100644 --- a/SETUP_SUMMARY.md +++ b/SETUP_SUMMARY.md @@ -1,215 +1,100 @@ # Interchaintest Setup Summary -## ✅ Completed Tasks +## Completed Tasks -### 1. Unified Chain Configuration +### 1. Chain Configuration **File:** `chain_config.go` -- ✅ Combined v1.9.1 and v1.10.1 genesis logic into single file -- ✅ Version selection via `ChainVersion` enum -- ✅ Local image support via `useLocalImage` parameter -- ✅ Automatic genesis modification based on version +- Single genesis modifier for current Lumera versions (v1.10.x+) +- Local image support via `useLocalImage` parameter +- Version controlled via `LUMERA_VERSION` env var (default: `v1.10.1`) **Key Functions:** - `GetLumeraChainConfig(version, useLocalImage)` - Returns config for any version -- `modifyLumeraGenesisV1_9_1()` - Genesis for v1.9.1 and earlier -- `modifyLumeraGenesisV1_10_1()` - Genesis for v1.10.0+ +- `modifyLumeraGenesis()` - Genesis modifier **Usage:** ```go -// Use v1.10.1 with local image -config := GetLumeraChainConfig(V1_10_1, true) - -// Use v1.9.1 with remote image -config := GetLumeraChainConfig(V1_9_1, false) +config := GetLumeraChainConfig("v1.10.1", true) // local image +config := GetLumeraChainConfig("v1.10.1", false) // remote image ``` ### 2. Docker Image & Build System **Files:** `Dockerfile`, `build-docker.sh` -✅ **Dockerfile Features:** - -- Multi-stage build (builder + runtime) -- Builds from local lumera source +- Downloads pre-built binary from GitHub releases - Includes claims.csv - Automatic claims.csv copying to `.lumera/config/` - Proper user permissions (uid:gid 1025:1025) - Entrypoint script for initialization -✅ **Build Script:** - -- Validates lumera source directory -- Checks for claims.csv -- Builds tagged image: `lumerad-local:latest` -- Provides usage instructions - **Usage:** ```bash -# Build image +# Build image (uses LUMERA_VERSION from env, default v1.10.1) ./build-docker.sh -# Or with custom name -IMAGE_NAME=my-lumerad ./build-docker.sh -``` - -### 3. Updated Test Files - -**File:** `ica_test.go` - -✅ **Changes:** - -- Added support for `USE_LOCAL_IMAGE` environment variable -- Added support for `LUMERA_VERSION` environment variable -- Uses `GetLumeraChainConfig()` instead of hardcoded config -- Logs version and image source being tested - -**Usage:** - -```bash -# Test with local image -USE_LOCAL_IMAGE=true go test -v -run TestOsmosisLumeraICA - -# Test specific version -LUMERA_VERSION=v1.9.1 go test -v -run TestOsmosisLumeraICA +# Or with custom version +LUMERA_VERSION=vX.Y.Z ./build-docker.sh ``` -### 4. Genesis Testing Suite - -**File:** `genesis_test.go` +### 3. Test Files -✅ **New Tests:** +**Files:** `ica_test.go`, `genesis_test.go` +- `LUMERA_VERSION` env var to select version (default: `v1.10.1`) +- `USE_LOCAL_IMAGE=true` to use locally built image - `TestLumeraGenesisSetup` - Standalone genesis verification -- `TestBothVersions` - Tests both v1.9.1 and v1.10.1 -- `verifyGenesisModifications()` - Validates all genesis changes -- `verifyClaimsCSV()` - Checks claims.csv presence +- `TestOsmosisLumeraICA` - Full ICA e2e test -**What It Verifies:** - -- ✅ Action module parameters -- ✅ Supernode module parameters -- ✅ ICA host configuration -- ✅ NFT module removed -- ✅ PFM module present -- ✅ Version-specific modules (crisis, consensus) -- ✅ claims.csv location - -**Usage:** - -```bash -# Test genesis only (faster than full ICA test) -go test -v -run TestLumeraGenesisSetup - -# Test both versions -go test -v -run TestBothVersions - -# Test with local image -USE_LOCAL_IMAGE=true go test -v -run TestLumeraGenesisSetup -``` - -### 5. Makefile for Convenience +### 4. Makefile **File:** `Makefile` -✅ **Targets:** - -- `make build-docker` - Build local image -- `make test` - Run all tests (remote images) -- `make test-local` - Run all tests (local image) -- `make test-genesis` - Test genesis only -- `make test-genesis-local` - Test genesis with local image -- `make test-ica` - Run ICA tests only -- `make test-all-versions` - Test both versions -- `make clean-docker` - Remove local images -- `make verify` - Verify setup -- `make help` - Show all commands +- `LUMERA_VERSION` variable (overridable: `make test LUMERA_VERSION=vX.Y.Z`) +- `make test` / `make test-local` - Run all tests +- `make test-genesis` / `make test-genesis-local` - Genesis tests +- `make test-ica` / `make test-ica-local` - ICA tests +- `make build-docker` / `make clean-docker` - Docker management +- `make full-test` - Build + test -**Usage:** - -```bash -# Quick workflow -make build-docker # Build image -make test-genesis-local # Test genesis -make test-ica-local # Run full ICA tests - -# One command for everything -make full-test -``` - -### 6. Standalone Testing Script +### 5. Standalone Testing Script **File:** `start-lumera-standalone.sh` -✅ **Purpose:** Start Lumera node for manual testing - -**Features:** - -- Initializes fresh chain -- Copies claims.csv automatically +- Start Lumera node for manual testing - Exposes all ports (RPC, API, gRPC) - Uses local Docker image -- Cleans up on exit -**Usage:** - -```bash -# Start standalone node -./start-lumera-standalone.sh - -# Access endpoints -curl http://localhost:26657/status # RPC -curl http://localhost:1317/cosmos/base/tendermint/v1beta1/blocks/latest # API -``` - -### 7. Documentation - -**File:** `README.md` - -✅ **Comprehensive docs including:** - -- Quick start guide -- Local image workflow -- Genesis testing instructions -- Version differences (v1.9.1 vs v1.10.1) -- Environment variables -- Troubleshooting guide -- CI/CD examples - -## 📁 File Structure +## File Structure ```bash interchaintest/ -├── chain_config.go # ✅ Unified config for all versions -├── ica_test.go # ✅ Updated with local image support -├── genesis_test.go # ✅ NEW: Genesis verification tests -├── Dockerfile # ✅ NEW: Multi-stage build -├── build-docker.sh # ✅ NEW: Build script -├── start-lumera-standalone.sh # ✅ NEW: Manual testing helper -├── Makefile # ✅ NEW: Convenience commands -├── README.md # ✅ NEW: Complete documentation -├── SETUP_SUMMARY.md # ✅ This file -└── go.mod # ✅ Fixed dependencies +├── chain_config.go # Chain configuration +├── ica_test.go # ICA e2e tests +├── genesis_test.go # Genesis verification tests +├── Dockerfile # Lumerad Docker image +├── build-docker.sh # Build script +├── start-lumera-standalone.sh # Manual testing helper +├── Makefile # Convenience commands +├── README.md # Documentation +├── SETUP_SUMMARY.md # This file +└── go.mod # Go dependencies ``` -## 🚀 Quick Start Workflow +## Quick Start Workflow ### For Development ```bash -# 1. Build local image from your changes cd interchaintest -./build-docker.sh - -# 2. Test genesis modifications -make test-genesis-local - -# 3. Run full ICA tests -make test-ica-local +make build-docker # Build image +make test-genesis-local # Test genesis +make test-ica-local # Run full ICA tests ``` ### For CI/CD @@ -218,113 +103,15 @@ make test-ica-local # Test with remote images (no build needed) make test -# Or test specific version -LUMERA_VERSION=v1.9.1 make test-ica +# Override version if needed +make test LUMERA_VERSION=vX.Y.Z ``` -## 🔄 Version Comparison - -| Feature | v1.9.1 | v1.10.1 | -| ------- | ------ | ------- | -| Crisis Module | ✅ Present | ❌ Removed | -| Consensus Params Location | x/params | x/consensus | -| NFT Module | ❌ Removed | ❌ Removed | -| PFM Module | ✅ Present | ✅ Present | -| Action Module | ✅ v1 | ✅ v1 | -| Supernode Module | ✅ v1 | ✅ v1 | -| ICA Support | ✅ Enabled | ✅ Enabled | - -## 🧪 Testing Matrix - -| Test | v1.9.1 | v1.10.1 | Local | Remote | -| ---- | ------ | ------- | ----- | ------ | -| Genesis Setup | ✅ | ✅ | ✅ | ✅ | -| ICA Registration | ✅ | ✅ | ✅ | ✅ | -| Action via ICA | ✅ | ✅ | ✅ | ✅ | -| Claims.csv | ✅ | ✅ | ✅ | ❌ | - -## 📝 Environment Variables Reference +## Environment Variables Reference ```bash -# Version selection -export LUMERA_VERSION=v1.10.1 # or v1.9.1 - -# Image source +export LUMERA_VERSION=v1.10.1 # Version to test export USE_LOCAL_IMAGE=true # Use locally built image - -# Docker customization -export IMAGE_NAME=lumerad-local -export IMAGE_TAG=latest +export IMAGE_NAME=lumerad-local # Docker image name +export IMAGE_TAG=local # Docker image tag ``` - -## ✅ Verification Checklist - -- [x] Unified chain config with version support -- [x] Dockerfile with claims.csv support -- [x] Build script with validation -- [x] Updated ICA tests for local images -- [x] Genesis verification tests -- [x] Standalone testing script -- [x] Makefile with all commands -- [x] Complete documentation -- [x] Fixed go.mod dependencies -- [x] Environment variable support - -## 🎯 Next Steps - -1. **Test the build:** - - ```bash - cd interchaintest - make verify - make build-docker - ``` - -2. **Test genesis:** - - ```bash - make test-genesis-local - ``` - -3. **Test both versions:** - - ```bash - make test-all-versions-local - ``` - -4. **Run full ICA tests:** - - ```bash - make test-ica-local - ``` - -## 💡 Tips - -- Use `make test-genesis-local` for quick iteration (faster than full ICA test) -- Use `./start-lumera-standalone.sh` to manually inspect the chain -- Check `make help` for all available commands -- See `README.md` for detailed documentation - -## 🐛 Common Issues & Solutions - -### "claims.csv not found" - -✅ **Solution:** The Dockerfile handles this - claims.csv is optional for tests - -### "Docker build fails" - -✅ **Solution:** Ensure lumera source is at `../lumera/` relative to interchaintest dir - -### "Genesis modifications not working" - -✅ **Solution:** Run `make test-genesis-local` to see detailed verification - -### "Tests using wrong image" - -✅ **Solution:** Make sure `USE_LOCAL_IMAGE=true` is set - ---- - -**Setup Complete!** 🎉 - -All requested features have been implemented and tested. diff --git a/build-docker.sh b/build-docker.sh index d7bd8d4..fe9df43 100755 --- a/build-docker.sh +++ b/build-docker.sh @@ -47,5 +47,5 @@ echo " export USE_LOCAL_IMAGE=true" echo " go test -v ./..." echo "" echo "To build a different version:" -echo " LUMERA_VERSION=v1.9.1 ./build-docker.sh" +echo " LUMERA_VERSION=vX.Y.Z ./build-docker.sh" echo "==================================================" diff --git a/chain_config.go b/chain_config.go index 917ac82..0aef5f7 100644 --- a/chain_config.go +++ b/chain_config.go @@ -1,4 +1,4 @@ -// chain_config.go - Unified configuration for all Lumera versions +// chain_config.go - Chain configuration for Lumera interchaintest package interchaintest_test import ( @@ -14,21 +14,15 @@ import ( "github.com/strangelove-ventures/interchaintest/v8/ibc" ) -// ChainVersion defines which Lumera version to use -type ChainVersion string +// DefaultLumeraVersion is used when LUMERA_VERSION env var is not set. +const DefaultLumeraVersion = "v1.10.1" -const ( - // V1_9_1 includes crisis module, uses legacy x/params for consensus - V1_9_1 ChainVersion = "v1.9.1" - // V1_10_1 removes crisis module, uses x/consensus for consensus params - V1_10_1 ChainVersion = "v1.10.1" -) - -// GetLumeraChainConfig returns a chain config for the specified version -func GetLumeraChainConfig(version ChainVersion, useLocalImage bool) ibc.ChainConfig { +// GetLumeraChainConfig returns a chain config for the given version. +// version is the Docker image tag (e.g. "v1.10.1"). +func GetLumeraChainConfig(version string, useLocalImage bool) ibc.ChainConfig { image := ibc.DockerImage{ Repository: "ghcr.io/lumeraprotocol/lumerad", - Version: string(version), + Version: version, UIDGID: "1025:1025", } @@ -48,7 +42,7 @@ func GetLumeraChainConfig(version ChainVersion, useLocalImage bool) ibc.ChainCon GasPrices: "0.025ulume", GasAdjustment: 1.5, TrustingPeriod: "336h", - ModifyGenesis: getModifyGenesisFunc(version), + ModifyGenesis: modifyLumeraGenesis, AdditionalStartArgs: []string{"--claims-path", "/tmp/claims.csv"}, } } @@ -73,26 +67,14 @@ var ( TrustingPeriod: "336h", } - // Default configs for backward compatibility - LumeraConfig = GetLumeraChainConfig(V1_10_1, false) + // Default config for backward compatibility + LumeraConfig = GetLumeraChainConfig(DefaultLumeraVersion, false) ) -// getModifyGenesisFunc returns the appropriate genesis modifier based on version -func getModifyGenesisFunc(version ChainVersion) func(ibc.ChainConfig, []byte) ([]byte, error) { - switch version { - case V1_9_1: - return modifyLumeraGenesisV1_9_1 - case V1_10_1: - return modifyLumeraGenesisV1_10_1 - default: - return modifyLumeraGenesisV1_10_1 - } -} - -// modifyLumeraGenesisV1_9_1 configures genesis for Lumera v1.9.1 and earlier. -// Follows the same minimal-modification approach as start-lumera-standalone.sh: -// trust lumerad init defaults, only fix denoms + remove unsupported modules. -func modifyLumeraGenesisV1_9_1(config ibc.ChainConfig, genesis []byte) ([]byte, error) { +// modifyLumeraGenesis configures genesis for Lumera. +// Follows the minimal-modification approach: trust lumerad init defaults, +// only fix denoms + remove unsupported modules. +func modifyLumeraGenesis(config ibc.ChainConfig, genesis []byte) ([]byte, error) { genesis, err := cosmos.ModifyGenesis([]cosmos.GenesisKV{ cosmos.NewGenesisKV("app_state.staking.params.bond_denom", config.Denom), cosmos.NewGenesisKV("app_state.mint.params.mint_denom", config.Denom), @@ -114,46 +96,7 @@ func modifyLumeraGenesisV1_9_1(config ibc.ChainConfig, genesis []byte) ([]byte, return nil, fmt.Errorf("app_state not found in genesis") } - // v1.9.1 has crisis module — ensure it uses correct denom - if err := ensureCrisisModule(appState); err != nil { - return nil, err - } - // Remove unsupported modules - delete(appState, "nft") - // Sync claims total from CSV - if err := setClaimsTotalFromCSV(appState); err != nil { - return nil, err - } - - return json.MarshalIndent(g, "", " ") -} - -// modifyLumeraGenesisV1_10_1 configures genesis for Lumera v1.10.0 and v1.10.1. -// Follows the same minimal-modification approach as start-lumera-standalone.sh: -// trust lumerad init defaults, only fix denoms + remove unsupported modules. -func modifyLumeraGenesisV1_10_1(config ibc.ChainConfig, genesis []byte) ([]byte, error) { - genesis, err := cosmos.ModifyGenesis([]cosmos.GenesisKV{ - cosmos.NewGenesisKV("app_state.staking.params.bond_denom", config.Denom), - cosmos.NewGenesisKV("app_state.mint.params.mint_denom", config.Denom), - // ICA host: allow all message types so ICA-submitted txs are executed - cosmos.NewGenesisKV("app_state.interchainaccounts.host_genesis_state.params.host_enabled", true), - cosmos.NewGenesisKV("app_state.interchainaccounts.host_genesis_state.params.allow_messages", []string{"*"}), - })(config, genesis) - if err != nil { - return nil, err - } - - g := make(map[string]interface{}) - if err := json.Unmarshal(genesis, &g); err != nil { - return nil, fmt.Errorf("failed to unmarshal genesis: %w", err) - } - - appState, ok := g["app_state"].(map[string]interface{}) - if !ok { - return nil, fmt.Errorf("app_state not found in genesis") - } - - // v1.10.x removed crisis module + // Crisis module was removed in v1.10.x delete(appState, "crisis") // Remove unsupported modules delete(appState, "nft") @@ -169,19 +112,6 @@ func modifyLumeraGenesisV1_10_1(config ibc.ChainConfig, genesis []byte) ([]byte, return json.MarshalIndent(g, "", " ") } -// ensureCrisisModule ensures crisis module is present (required for v1.9.1 and earlier) -func ensureCrisisModule(appState map[string]interface{}) error { - if _, ok := appState["crisis"]; !ok { - appState["crisis"] = map[string]interface{}{ - "constant_fee": map[string]interface{}{ - "denom": "ulume", - "amount": "1000000000", - }, - } - } - return nil -} - // setClaimsTotalFromCSV reads claims.csv and sets total_claimable_amount in genesis to match func setClaimsTotalFromCSV(appState map[string]interface{}) error { // Find claims.csv relative to this source file @@ -226,7 +156,7 @@ func setClaimsTotalFromCSV(appState map[string]interface{}) error { return nil } -// setConsensusParams configures consensus params in x/consensus module (used by v1.10.x) +// setConsensusParams configures consensus params in x/consensus module func setConsensusParams(appState map[string]interface{}) error { consensus, ok := appState["consensus"].(map[string]interface{}) if !ok { diff --git a/genesis_test.go b/genesis_test.go index a059438..f396063 100644 --- a/genesis_test.go +++ b/genesis_test.go @@ -21,19 +21,18 @@ func TestLumeraGenesisSetup(t *testing.T) { t.Skip("skipping genesis setup test in short mode") } - // Choose version to test - version := V1_10_1 + version := DefaultLumeraVersion if v := os.Getenv("LUMERA_VERSION"); v != "" { - version = ChainVersion(v) + version = v } useLocal := os.Getenv("USE_LOCAL_IMAGE") == "true" - t.Run("Genesis_"+string(version), func(t *testing.T) { + t.Run("Genesis_"+version, func(t *testing.T) { testGenesisSetup(t, version, useLocal) }) } -func testGenesisSetup(t *testing.T, version ChainVersion, useLocalImage bool) { +func testGenesisSetup(t *testing.T, version string, useLocalImage bool) { ctx := context.Background() rep := testreporter.NewNopReporter() eRep := rep.RelayerExecReporter(t) @@ -72,11 +71,11 @@ func testGenesisSetup(t *testing.T, version ChainVersion, useLocalImage bool) { height, err := lumera.Height(ctx) require.NoError(t, err) require.Greater(t, height, int64(0), "Chain should be producing blocks") - t.Logf("✅ Chain started successfully at height %d", height) + t.Logf("Chain started successfully at height %d", height) // Verify genesis was modified correctly t.Run("VerifyGenesisModifications", func(t *testing.T) { - verifyGenesisModifications(t, ctx, lumera, version) + verifyGenesisModifications(t, ctx, lumera) }) // Verify claims.csv is present @@ -84,10 +83,10 @@ func testGenesisSetup(t *testing.T, version ChainVersion, useLocalImage bool) { verifyClaimsCSV(t, ctx, lumera) }) - t.Logf("✅ All genesis setup tests passed for %s", version) + t.Logf("All genesis setup tests passed for %s", version) } -func verifyGenesisModifications(t *testing.T, ctx context.Context, lumera *cosmos.CosmosChain, version ChainVersion) { +func verifyGenesisModifications(t *testing.T, ctx context.Context, lumera *cosmos.CosmosChain) { // Read genesis.json directly from the container (lumerad export can't run while node is running) genesisPath := lumera.HomeDir() + "/config/genesis.json" catCmd := []string{"cat", genesisPath} @@ -110,7 +109,7 @@ func verifyGenesisModifications(t *testing.T, ctx context.Context, lumera *cosmo mintParams := mint["params"].(map[string]interface{}) require.Equal(t, "ulume", mintParams["mint_denom"], "mint_denom should be ulume") - t.Logf("✅ Denoms configured correctly") + t.Logf("Denoms configured correctly") }) // Verify core modules exist with params (using defaults from lumerad init) @@ -119,7 +118,7 @@ func verifyGenesisModifications(t *testing.T, ctx context.Context, lumera *cosmo require.True(t, ok, "action module should exist") _, ok = action["params"].(map[string]interface{}) require.True(t, ok, "action params should exist") - t.Logf("✅ Action module present with params") + t.Logf("Action module present with params") }) t.Run("SupernodeModule", func(t *testing.T) { @@ -127,32 +126,22 @@ func verifyGenesisModifications(t *testing.T, ctx context.Context, lumera *cosmo require.True(t, ok, "supernode module should exist") _, ok = supernode["params"].(map[string]interface{}) require.True(t, ok, "supernode params should exist") - t.Logf("✅ Supernode module present with params") + t.Logf("Supernode module present with params") }) // Verify NFT module is removed t.Run("NFTModuleRemoved", func(t *testing.T) { _, exists := appState["nft"] require.False(t, exists, "NFT module should not exist") - t.Logf("✅ NFT module correctly removed") + t.Logf("NFT module correctly removed") }) - // Version-specific checks - switch version { - case V1_9_1: - t.Run("CrisisModule_v1.9.1", func(t *testing.T) { - _, exists := appState["crisis"] - require.True(t, exists, "Crisis module should exist in v1.9.1") - t.Logf("✅ Crisis module present (v1.9.1)") - }) - - case V1_10_1: - t.Run("CrisisModuleRemoved_v1.10.1", func(t *testing.T) { - _, exists := appState["crisis"] - require.False(t, exists, "Crisis module should not exist in v1.10.1") - t.Logf("✅ Crisis module correctly removed (v1.10.1)") - }) - } + // Crisis module should be removed + t.Run("CrisisModuleRemoved", func(t *testing.T) { + _, exists := appState["crisis"] + require.False(t, exists, "Crisis module should not exist") + t.Logf("Crisis module correctly removed") + }) } func verifyClaimsCSV(t *testing.T, ctx context.Context, lumera *cosmos.CosmosChain) { @@ -163,10 +152,10 @@ func verifyClaimsCSV(t *testing.T, ctx context.Context, lumera *cosmos.CosmosCha _, _, err := lumera.Exec(ctx, checkCmd, nil) if err != nil { - t.Logf("⚠️ claims.csv not found in config directory (this may be expected)") + t.Logf("claims.csv not found in config directory (this may be expected)") // Don't fail the test as claims.csv might not be required for all test scenarios } else { - t.Logf("✅ claims.csv present in config directory") + t.Logf("claims.csv present in config directory") // Count lines in claims.csv countCmd := []string{"wc", "-l", lumera.HomeDir() + "/config/claims.csv"} @@ -176,26 +165,3 @@ func verifyClaimsCSV(t *testing.T, ctx context.Context, lumera *cosmos.CosmosCha } } } - -// TestBothVersions tests both v1.9.1 and v1.10.1 genesis setup -func TestBothVersions(t *testing.T) { - if testing.Short() { - t.Skip("skipping multi-version test in short mode") - } - - useLocal := os.Getenv("USE_LOCAL_IMAGE") == "true" - if useLocal { - t.Log("WARNING: USE_LOCAL_IMAGE=true tests both versions against the same local image; only one version will be accurate") - } - - versions := []ChainVersion{V1_9_1, V1_10_1} - - for _, version := range versions { - version := version // capture for parallel execution - t.Run(string(version), func(t *testing.T) { - // Can run in parallel if needed - // t.Parallel() - testGenesisSetup(t, version, useLocal) - }) - } -} diff --git a/go.mod b/go.mod index 1dde71f..eb5adbe 100644 --- a/go.mod +++ b/go.mod @@ -73,6 +73,7 @@ require ( github.com/cometbft/cometbft-db v0.14.1 // indirect github.com/consensys/bavard v0.1.27 // indirect github.com/consensys/gnark-crypto v0.16.0 // indirect + github.com/containerd/log v0.1.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.1.3 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect @@ -100,7 +101,7 @@ require ( github.com/dgraph-io/badger/v4 v4.2.0 // indirect github.com/dgraph-io/ristretto v0.2.0 // indirect github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da // indirect - github.com/docker/distribution v2.8.3+incompatible // indirect + github.com/distribution/reference v0.6.0 // indirect github.com/docker/docker v28.4.0+incompatible // indirect github.com/docker/go-connections v0.6.0 // indirect github.com/docker/go-units v0.5.0 // indirect @@ -260,6 +261,7 @@ require ( go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect go.opentelemetry.io/otel v1.40.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 // indirect go.opentelemetry.io/otel/metric v1.40.0 // indirect go.opentelemetry.io/otel/sdk v1.40.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.40.0 // indirect @@ -312,9 +314,9 @@ replace ( // Additional recommended replacements from interchaintest github.com/btcsuite/btcd/btcec/v2 => github.com/btcsuite/btcd/btcec/v2 v2.3.3 - // Pin Docker to v24 for interchaintest v8 compatibility (v28+ removed ImagePullOptions) github.com/docker/distribution => github.com/docker/distribution v2.8.2+incompatible - github.com/docker/docker => github.com/docker/docker v24.0.9+incompatible + // Pin Docker to v25 for API v1.44+ compatibility (v26+ moves Container*Options out of types) + github.com/docker/docker => github.com/docker/docker v25.0.6+incompatible // Fix for gogo/protobuf v1.3.3 missing revision error github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 diff --git a/go.sum b/go.sum index 7416e33..98e2406 100644 --- a/go.sum +++ b/go.sum @@ -767,6 +767,8 @@ github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QH github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= @@ -837,6 +839,8 @@ github.com/consensys/gnark-crypto v0.16.0 h1:8Dl4eYmUWK9WmlP1Bj6je688gBRJCJbT8Mw github.com/consensys/gnark-crypto v0.16.0/go.mod h1:Ke3j06ndtPTVvo++PhGNgvm+lgpLvzbcE2MqljY7diU= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= +github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= +github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= 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/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -917,10 +921,10 @@ github.com/dgraph-io/ristretto v0.2.0/go.mod h1:8uBHCU/PBV4Ag0CJrP47b9Ofby5dqWNh github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38= github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= -github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v24.0.9+incompatible h1:HPGzNmwfLZWdxHqK9/II92pyi1EpYKsAqcl4G0Of9v0= -github.com/docker/docker v24.0.9+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= +github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/docker/docker v25.0.6+incompatible h1:5cPwbwriIcsua2REJe8HqQV+6WlWc1byg2QSXzBxBGg= +github.com/docker/docker v25.0.6+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94= github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= @@ -1210,6 +1214,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4 github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 h1:X+2YciYSxvMQK0UZ7sg45ZVabVZBeBuvMkmuI2V3Fak= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7/go.mod h1:lW34nIZuQ8UDPdkon5fmfp2l3+ZkQ2me/+oecHYLOII= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= @@ -1782,6 +1788,10 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 h1:RbKq8BG go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0/go.mod h1:h06DGIukJOevXaj/xrNjhi/2098RZzcLTbc0jDAUbsg= go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 h1:wVZXIWjQSeSmMoxF74LzAnpVQOAFDo3pPji9Y4SOFKc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0/go.mod h1:khvBS2IggMFNwZK/6lEeHg/W57h/IX6J4URh57fuI40= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0 h1:WDdP9acbMYjbKIyJUhTvtzj601sVJOqgWdUxSdR/Ysc= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0/go.mod h1:BLbf7zbNIONBLPwvFnwNHGj4zge8uTCM/UPIVW1Mq2I= go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= @@ -1795,6 +1805,8 @@ go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTq go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= +go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= diff --git a/ica_test.go b/ica_test.go index 01be24c..64051ba 100644 --- a/ica_test.go +++ b/ica_test.go @@ -1,15 +1,33 @@ -// ica_test.go +// ica_test.go — End-to-end test for ICS-27 (Interchain Accounts) between Osmosis +// and Lumera. Proves that a user on Osmosis (controller chain) can register an +// interchain account on Lumera (host chain) and use it to submit a cascade +// storage action (MsgRequestAction) — the full cross-chain flow. +// +// Test topology: +// +// Osmosis (controller) ──IBC──▶ Lumera (host) +// │ │ +// │ 1. register ICA │ +// │ 2. send-tx (ICA packet) ──▶ │ 3. execute MsgRequestAction +// │ │ 4. action created on-chain +// +// The buildpacket helper tool (tools/buildpacket/) is compiled and executed as +// a subprocess. It lives in a separate Go module to avoid ibc-go v8 vs v10 +// init() conflicts with interchaintest. package interchaintest_test import ( "context" "encoding/json" + "fmt" "os" "os/exec" "path/filepath" "runtime" "strings" + "sync" "testing" + "time" "cosmossdk.io/math" @@ -25,8 +43,11 @@ import ( "go.uber.org/zap/zaptest" ) +// ibcPath is the relayer path name linking Osmosis and Lumera. const ibcPath = "osmo-lumera" +// TestOsmosisLumeraICA spins up Osmosis + Lumera in Docker, connects them via +// IBC, registers an interchain account, and executes a cascade action through it. func TestOsmosisLumeraICA(t *testing.T) { if testing.Short() { t.Skip("skipping ICA e2e test in short mode") @@ -39,11 +60,10 @@ func TestOsmosisLumeraICA(t *testing.T) { client, network := interchaintest.DockerSetup(t) // Choose Lumera version and whether to use local image - // Set USE_LOCAL_IMAGE=true to use locally built image - // Set LUMERA_VERSION=v1.9.1 to test older version (default is v1.10.1) - version := V1_10_1 + // Override via LUMERA_VERSION env var (default defined in Makefile / DefaultLumeraVersion) + version := DefaultLumeraVersion if v := os.Getenv("LUMERA_VERSION"); v != "" { - version = ChainVersion(v) + version = v } useLocal := os.Getenv("USE_LOCAL_IMAGE") == "true" @@ -99,8 +119,9 @@ func TestOsmosisLumeraICA(t *testing.T) { osmosisConnectionID := connections[0].ID // ── Fund user on Osmosis ── - // Generate a mnemonic so the same key can be imported into the - // buildpacket tool's keyring for the Lumera SDK cascade client. + // We generate a mnemonic (rather than letting interchaintest create one) + // because the same key must later be imported into the buildpacket tool's + // keyring to sign the cascade MsgRequestAction on behalf of the ICA. entropy, err := bip39.NewEntropy(256) require.NoError(t, err) mnemonic, err := bip39.NewMnemonic(entropy) @@ -124,6 +145,8 @@ func testRegisterICA( user ibc.Wallet, connectionID, mnemonic string, ) { // ── Step 1: Register ICA from Osmosis ── + // This initiates the ICS-27 channel handshake. The relayer will complete + // INIT → TRY → ACK → CONFIRM asynchronously in the background. registerCmd := []string{ osmosis.Config().Bin, "tx", "interchain-accounts", "controller", "register", connectionID, @@ -144,32 +167,39 @@ func testRegisterICA( // Verify tx was accepted on-chain var registerTxResp struct { - Code int `json:"code"` - } - if err := json.Unmarshal(stdout, ®isterTxResp); err == nil { - require.Equal(t, 0, registerTxResp.Code, "Register ICA tx should succeed, got code %d", registerTxResp.Code) + Code int `json:"code"` + RawLog string `json:"raw_log"` } - - // ── Step 2: Wait for ICA channel to open ── - // The relayer is running and will complete the channel handshake automatically - err = testutil.WaitForBlocks(ctx, 15, osmosis, lumera) - require.NoError(t, err) - - // ── Step 3: Query the ICA address on Lumera ── - icaAddr := queryICAAddress(t, ctx, osmosis, connectionID, user.FormattedAddress()) - require.NotEmpty(t, icaAddr, "ICA address should not be empty") + require.NoError(t, json.Unmarshal(stdout, ®isterTxResp), "failed to parse register ICA tx response: %s", string(stdout)) + require.Equal(t, 0, registerTxResp.Code, "Register ICA tx failed: %s", registerTxResp.RawLog) + + // ── Step 2: Poll until the ICA address is registered ── + // The relayer completes the channel handshake asynchronously; poll instead + // of waiting a fixed number of blocks. + var icaAddr string + require.Eventually(t, func() bool { + addr, err := tryQueryICAAddress(ctx, osmosis, connectionID, user.FormattedAddress()) + if err != nil || addr == "" { + return false + } + icaAddr = addr + return true + }, 2*time.Minute, 3*time.Second, "ICA address was not registered in time") t.Logf("ICA address on Lumera: %s", icaAddr) - // ── Step 4: Fund ICA via direct bank send on Lumera ── + // ── Step 3: Fund ICA via direct bank send on Lumera ── + // The ICA address exists on Lumera but has no tokens. We fund it directly + // on the host chain so it can pay gas for the MsgRequestAction later. fundICA(t, ctx, lumera, icaAddr) - // ── Step 5: Execute MsgRequestAction via ICA ── + // ── Step 4: Execute MsgRequestAction via ICA ── t.Run("ExecuteAction", func(t *testing.T) { testExecuteActionViaICA(t, ctx, osmosis, lumera, r, eRep, user, connectionID, icaAddr, mnemonic) }) } -func queryICAAddress(t *testing.T, ctx context.Context, controller *cosmos.CosmosChain, connectionID, owner string) string { +// tryQueryICAAddress queries the ICA address, returning ("", err) if not yet available. +func tryQueryICAAddress(ctx context.Context, controller *cosmos.CosmosChain, connectionID, owner string) (string, error) { cmd := []string{ controller.Config().Bin, "q", "interchain-accounts", "controller", "interchain-account", owner, connectionID, @@ -177,21 +207,43 @@ func queryICAAddress(t *testing.T, ctx context.Context, controller *cosmos.Cosmo "--output", "json", } stdout, _, err := controller.Exec(ctx, cmd, nil) - require.NoError(t, err) + if err != nil { + return "", err + } var resp struct { Address string `json:"address"` } - require.NoError(t, json.Unmarshal(stdout, &resp)) - return resp.Address + if err := json.Unmarshal(stdout, &resp); err != nil { + return "", fmt.Errorf("unmarshal ICA query response: %w", err) + } + return resp.Address, nil +} + +// findICAChannel returns the channel ID for the ICA controller port on the given chain. +func findICAChannel(t *testing.T, ctx context.Context, r ibc.Relayer, eRep *testreporter.RelayerExecReporter, chainID string) string { + t.Helper() + channels, err := r.GetChannels(ctx, eRep, chainID) + require.NoError(t, err) + + for _, ch := range channels { + if strings.HasPrefix(ch.PortID, "icacontroller-") { + t.Logf("Found ICA channel: %s (port: %s)", ch.ChannelID, ch.PortID) + return ch.ChannelID + } + } + t.Fatalf("no ICA controller channel found on chain %s (channels: %+v)", chainID, channels) + return "" } +// fundICA creates a funder wallet on Lumera and sends tokens directly to the +// ICA address. This is a host-chain-local operation (no IBC involved) — it +// simply ensures the ICA has enough gas to execute messages sent via ICS-27. func fundICA( t *testing.T, ctx context.Context, lumera *cosmos.CosmosChain, icaAddr string, ) { - // Fund the ICA with LUME via direct send on Lumera lumeraUsers := interchaintest.GetAndFundTestUsers(t, ctx, "funder", math.NewInt(50_000_000_000), lumera) funder := lumeraUsers[0] @@ -207,10 +259,18 @@ func fundICA( "--node", lumera.GetRPCAddress(), "--home", lumera.HomeDir(), "--keyring-backend", "test", + "--output", "json", } - _, _, err := lumera.Exec(ctx, sendCmd, nil) + stdout, _, err := lumera.Exec(ctx, sendCmd, nil) require.NoError(t, err) + var sendResp struct { + Code int `json:"code"` + RawLog string `json:"raw_log"` + } + require.NoError(t, json.Unmarshal(stdout, &sendResp), "failed to parse bank send response: %s", string(stdout)) + require.Equal(t, 0, sendResp.Code, "bank send to ICA failed: %s", sendResp.RawLog) + err = testutil.WaitForBlocks(ctx, 3, lumera) require.NoError(t, err) @@ -227,28 +287,48 @@ func buildpacketToolDir() string { return filepath.Join(filepath.Dir(thisFile), "tools", "buildpacket") } -// buildBuildpacketTool compiles the buildpacket helper binary and returns -// the path to the resulting executable. +var ( + buildpacketOnce sync.Once + buildpacketBinary string + buildpacketErr error +) + +// buildBuildpacketTool compiles the buildpacket helper binary once and returns +// the path to the resulting executable. Subsequent calls reuse the cached binary. func buildBuildpacketTool(t *testing.T) string { t.Helper() - toolDir := buildpacketToolDir() - binary := filepath.Join(t.TempDir(), "buildpacket") - - cmd := exec.Command("go", "build", "-o", binary, ".") - cmd.Dir = toolDir - cmd.Stderr = os.Stderr - out, err := cmd.CombinedOutput() - require.NoError(t, err, "failed to build buildpacket tool: %s", string(out)) - return binary + buildpacketOnce.Do(func() { + toolDir := buildpacketToolDir() + // Use os.TempDir so the binary outlives any single t.TempDir() + binary := filepath.Join(os.TempDir(), "buildpacket-test") + + cmd := exec.Command("go", "build", "-o", binary, ".") + cmd.Dir = toolDir + out, err := cmd.CombinedOutput() + if err != nil { + buildpacketErr = fmt.Errorf("failed to build buildpacket tool: %s", string(out)) + return + } + buildpacketBinary = binary + }) + require.NoError(t, buildpacketErr) + return buildpacketBinary } +// testExecuteActionViaICA builds and submits a cascade MsgRequestAction through +// the ICA channel. The flow is: +// 1. Create a test file (simulates user data for cascade storage) +// 2. Run the buildpacket tool to construct MsgRequestAction + wrap it in an ICA CosmosTx packet +// 3. Submit the packet from Osmosis via "send-tx" (controller → host) +// 4. Wait for the relayer to deliver + execute the packet on Lumera +// 5. Verify that the action was created on Lumera with the correct type func testExecuteActionViaICA( t *testing.T, ctx context.Context, osmosis, lumera *cosmos.CosmosChain, r ibc.Relayer, eRep *testreporter.RelayerExecReporter, user ibc.Wallet, connectionID, icaAddr, mnemonic string, ) { - // ── Create a real test file for cascade ── + // ── Create a test file for cascade storage ── tmpFile, err := os.CreateTemp("", "ica-cascade-test-*.bin") require.NoError(t, err) defer os.Remove(tmpFile.Name()) @@ -262,16 +342,24 @@ func testExecuteActionViaICA( require.NoError(t, tmpFile.Close()) // ── Build the buildpacket helper tool ── + // This is a separate Go binary (tools/buildpacket/) that uses the Lumera + // SDK to build a real MsgRequestAction with cascade metadata. It must be + // a separate module because the Lumera SDK depends on ibc-go/v10, which + // conflicts with interchaintest's ibc-go/v8 at init() time. toolBinary := buildBuildpacketTool(t) // ── Get Lumera host gRPC address ── + // The buildpacket tool connects to Lumera's gRPC to query chain state + // (e.g. account sequence) needed to construct the message. grpcAddr := lumera.GetHostGRPCAddress() require.NotEmpty(t, grpcAddr, "Lumera host gRPC address must be available") grpcAddr = strings.Replace(grpcAddr, "0.0.0.0", "localhost", 1) t.Logf("Lumera gRPC address: %s", grpcAddr) // ── Run buildpacket tool to create ICA packet with real SDK data ── - toolCmd := exec.CommandContext(ctx, toolBinary, + toolCtx, toolCancel := context.WithTimeout(ctx, 2*time.Minute) + defer toolCancel() + toolCmd := exec.CommandContext(toolCtx, toolBinary, "--mnemonic", mnemonic, "--ica-address", icaAddr, "--grpc-addr", grpcAddr, @@ -287,12 +375,15 @@ func testExecuteActionViaICA( require.NotEmpty(t, packetJSON, "buildpacket produced empty output") t.Logf("ICA packet data: %s", string(packetJSON)) - // Write packet data file to the node's volume + // Write the ICA packet JSON into the Osmosis container's filesystem so + // the osmosisd CLI can read it as a file argument to send-tx. packetFile := "ica_packet.json" err = osmosis.GetNode().WriteFile(ctx, packetJSON, packetFile) require.NoError(t, err) - // ── Send via ICA ── + // ── Send the ICA packet from Osmosis (controller) ── + // This broadcasts a tx on Osmosis that wraps our CosmosTx packet. The + // relayer will pick it up and deliver it to Lumera for execution. packetFilePath := osmosis.HomeDir() + "/" + packetFile sendTxCmd := []string{ osmosis.Config().Bin, "tx", "interchain-accounts", "controller", @@ -345,12 +436,15 @@ func testExecuteActionViaICA( } } - // ── Wait for relay + execution ── + // ── Wait for the relayer to deliver the ICA packet to Lumera ── err = testutil.WaitForBlocks(ctx, 10, osmosis, lumera) require.NoError(t, err) - // Flush ICA channel packets - require.NoError(t, r.Flush(ctx, eRep, ibcPath, "channel-1")) + // Explicitly flush any remaining packets on the ICA channel to ensure + // delivery. The channel is found dynamically by its "icacontroller-" port + // prefix (not hardcoded) since channel IDs depend on creation order. + icaChanID := findICAChannel(t, ctx, r, eRep, osmosis.Config().ChainID) + require.NoError(t, r.Flush(ctx, eRep, ibcPath, icaChanID)) err = testutil.WaitForBlocks(ctx, 5, osmosis, lumera) require.NoError(t, err) @@ -358,8 +452,10 @@ func testExecuteActionViaICA( verifyActionCreated(t, ctx, lumera, icaAddr) } +// verifyActionCreated queries the action module on Lumera and asserts that an +// action with the expected creator (the ICA address) and type CASCADE exists. +// This confirms the full ICS-27 round-trip: controller tx → relay → host execution. func verifyActionCreated(t *testing.T, ctx context.Context, lumera *cosmos.CosmosChain, creator string) { - // Query actions by creator or list recent actions queryCmd := []string{ lumera.Config().Bin, "q", "action", "list-actions", "--node", lumera.GetRPCAddress(), diff --git a/start-lumera-standalone.sh b/start-lumera-standalone.sh index 8df86ea..575bbbb 100755 --- a/start-lumera-standalone.sh +++ b/start-lumera-standalone.sh @@ -66,10 +66,8 @@ TMP=/tmp/genesis_tmp.json # Remove NFT module jq "del(.app_state.nft)" "$GENESIS" > "$TMP" && mv "$TMP" "$GENESIS" -# Version-specific: remove crisis module for v1.10.x -if echo "$LUMERA_VERSION" | grep -q "^v1\.10"; then - jq "del(.app_state.crisis)" "$GENESIS" > "$TMP" && mv "$TMP" "$GENESIS" -fi +# Remove crisis module (removed since v1.10.x) +jq "del(.app_state.crisis)" "$GENESIS" > "$TMP" && mv "$TMP" "$GENESIS" # Copy claims.csv and update total_claimable_amount to match if [ -f /tmp/claims.csv ] && [ -s /tmp/claims.csv ]; then diff --git a/tools/buildpacket/buildpacket b/tools/buildpacket/buildpacket new file mode 100755 index 0000000..15e2b6c Binary files /dev/null and b/tools/buildpacket/buildpacket differ diff --git a/tools/buildpacket/go.mod b/tools/buildpacket/go.mod index 94eab9e..457b2b3 100644 --- a/tools/buildpacket/go.mod +++ b/tools/buildpacket/go.mod @@ -3,19 +3,19 @@ module github.com/LumeraProtocol/interchaintest_test/tools/buildpacket go 1.25.5 require ( - github.com/LumeraProtocol/sdk-go v1.0.7 - github.com/cosmos/cosmos-sdk v0.53.0 - github.com/cosmos/gogoproto v1.7.0 - github.com/cosmos/ibc-go/v10 v10.3.0 + github.com/LumeraProtocol/sdk-go v1.0.9 + github.com/cosmos/cosmos-sdk v0.53.5 + github.com/cosmos/gogoproto v1.7.2 + github.com/cosmos/ibc-go/v10 v10.5.0 ) require ( cosmossdk.io/api v0.9.2 // indirect - cosmossdk.io/collections v1.3.0 // indirect + cosmossdk.io/collections v1.3.1 // indirect cosmossdk.io/core v0.11.3 // indirect - cosmossdk.io/depinject v1.2.0 // indirect + cosmossdk.io/depinject v1.2.1 // indirect cosmossdk.io/errors v1.0.2 // indirect - cosmossdk.io/log v1.6.0 // indirect + cosmossdk.io/log v1.6.1 // indirect cosmossdk.io/math v1.5.3 // indirect cosmossdk.io/schema v1.1.0 // indirect cosmossdk.io/store v1.1.2 // indirect @@ -26,16 +26,16 @@ require ( github.com/99designs/keyring v1.2.2 // indirect github.com/DataDog/datadog-go v4.8.3+incompatible // indirect github.com/DataDog/zstd v1.5.7 // indirect - github.com/LumeraProtocol/lumera v1.9.1 // indirect + github.com/LumeraProtocol/lumera v1.10.0 // indirect github.com/LumeraProtocol/rq-go v0.2.1 // indirect - github.com/LumeraProtocol/supernode/v2 v2.4.26 // indirect + github.com/LumeraProtocol/supernode/v2 v2.4.27 // indirect github.com/Masterminds/semver/v3 v3.3.1 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/speakeasy v0.2.0 // indirect github.com/bytedance/gopkg v0.1.3 // indirect - github.com/bytedance/sonic v1.14.1 // indirect - github.com/bytedance/sonic/loader v0.3.0 // indirect + github.com/bytedance/sonic v1.14.2 // indirect + github.com/bytedance/sonic/loader v0.4.0 // 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.6 // indirect @@ -45,22 +45,22 @@ require ( github.com/cockroachdb/pebble v1.1.5 // indirect github.com/cockroachdb/redact v1.1.6 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft v0.38.18 // indirect + github.com/cometbft/cometbft v0.38.20 // indirect github.com/cometbft/cometbft-db v0.14.1 // indirect github.com/cosmos/btcutil v1.0.5 // indirect - github.com/cosmos/cosmos-db v1.1.2 // indirect + github.com/cosmos/cosmos-db v1.1.3 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/iavl v1.2.4 // indirect + github.com/cosmos/iavl v1.2.6 // indirect github.com/cosmos/ics23/go v0.11.0 // indirect - github.com/cosmos/ledger-cosmos-go v0.14.0 // indirect + github.com/cosmos/ledger-cosmos-go v0.16.0 // indirect github.com/danieljoos/wincred v1.2.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 // indirect github.com/desertbit/timer v1.0.1 // indirect github.com/dgraph-io/badger/v4 v4.2.0 // indirect - github.com/dgraph-io/ristretto v0.1.1 // indirect + github.com/dgraph-io/ristretto v0.2.0 // indirect github.com/dgraph-io/ristretto/v2 v2.2.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.7.0 // indirect @@ -69,7 +69,7 @@ require ( github.com/fatih/color v1.18.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect - github.com/getsentry/sentry-go v0.32.0 // indirect + github.com/getsentry/sentry-go v0.35.0 // indirect github.com/go-errors/errors v1.5.1 // indirect github.com/go-kit/kit v0.13.0 // indirect github.com/go-kit/log v0.2.1 // indirect @@ -78,8 +78,7 @@ require ( github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/glog v1.2.5 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.5-0.20231225225746-43d5d4cd4e0e // indirect github.com/google/btree v1.1.3 // indirect @@ -125,10 +124,10 @@ require ( github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.22.0 // indirect + github.com/prometheus/client_golang v1.23.2 // indirect github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.63.0 // indirect - github.com/prometheus/procfs v0.15.1 // indirect + github.com/prometheus/common v0.66.1 // indirect + github.com/prometheus/procfs v0.16.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/rs/cors v1.11.1 // indirect @@ -147,32 +146,34 @@ require ( github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.7.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/zondax/golem v0.27.0 // indirect github.com/zondax/hid v0.9.2 // indirect - github.com/zondax/ledger-go v0.14.3 // indirect + github.com/zondax/ledger-go v1.0.1 // indirect go.etcd.io/bbolt v1.4.0-alpha.1 // indirect go.opencensus.io v0.24.0 // indirect go.uber.org/mock v0.6.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect + go.yaml.in/yaml/v2 v2.4.2 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/arch v0.15.0 // indirect - golang.org/x/crypto v0.43.0 // indirect + golang.org/x/arch v0.17.0 // indirect + golang.org/x/crypto v0.47.0 // indirect golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b // indirect - golang.org/x/net v0.46.1-0.20251013234738-63d1a5100f82 // indirect - golang.org/x/sync v0.17.0 // indirect - golang.org/x/sys v0.37.0 // indirect - golang.org/x/term v0.36.0 // indirect - golang.org/x/text v0.30.0 // indirect - google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2 // indirect + golang.org/x/net v0.48.0 // indirect + golang.org/x/sync v0.19.0 // indirect + golang.org/x/sys v0.40.0 // indirect + golang.org/x/term v0.39.0 // indirect + golang.org/x/text v0.33.0 // indirect + google.golang.org/genproto v0.0.0-20250603155806-513f23925822 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8 // indirect google.golang.org/grpc v1.77.0 // indirect - google.golang.org/protobuf v1.36.10 // indirect + google.golang.org/protobuf v1.36.11 // 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.17 // indirect pgregory.net/rapid v1.2.0 // indirect - sigs.k8s.io/yaml v1.4.0 // indirect + sigs.k8s.io/yaml v1.6.0 // indirect ) diff --git a/tools/buildpacket/go.sum b/tools/buildpacket/go.sum index f76d172..4bd538e 100644 --- a/tools/buildpacket/go.sum +++ b/tools/buildpacket/go.sum @@ -4,11 +4,11 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.120.0 h1:wc6bgG9DHyKqF5/vQvX1CiZrtHnxJjBlKUyF9nP6meA= cloud.google.com/go v0.120.0/go.mod h1:/beW32s8/pGRuj4IILWQNd4uuebeT4dkOhKmkfit64Q= -cloud.google.com/go/auth v0.16.0 h1:Pd8P1s9WkcrBE2n/PhAwKsdrR35V3Sg2II9B+ndM3CU= -cloud.google.com/go/auth v0.16.0/go.mod h1:1howDHJ5IETh/LwYs3ZxvlkXF48aSqqJUM+5o02dNOI= +cloud.google.com/go/auth v0.16.4 h1:fXOAIQmkApVvcIn7Pc2+5J8QTMVbUGLscnSVNl11su8= +cloud.google.com/go/auth v0.16.4/go.mod h1:j10ncYwjX/g3cdX7GpEzsdM+d+ZNsXAbb6qXA7p1Y5M= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= -cloud.google.com/go/compute v1.37.0 h1:XxtZlXYkZXub3LNaLu90TTemcFqIU1yZ4E4q9VlR39A= +cloud.google.com/go/compute v1.38.0 h1:MilCLYQW2m7Dku8hRIIKo4r0oKastlD74sSu16riYKs= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= @@ -19,30 +19,30 @@ cloud.google.com/go/storage v1.50.0 h1:3TbVkzTooBvnZsk7WaAQfOsNrdoM8QHusXA1cpk6Q cloud.google.com/go/storage v1.50.0/go.mod h1:l7XeiD//vx5lfqE3RavfmU9yvk5Pp0Zhcv482poyafY= cosmossdk.io/api v0.9.2 h1:9i9ptOBdmoIEVEVWLtYYHjxZonlF/aOVODLFaxpmNtg= cosmossdk.io/api v0.9.2/go.mod h1:CWt31nVohvoPMTlPv+mMNCtC0a7BqRdESjCsstHcTkU= -cosmossdk.io/client/v2 v2.0.0-beta.8.0.20250402172810-41e3e9d004a1 h1:nlMUeKu6CGrO7Gxt5S31qT3g27CHmBJHsZPjqHApVTI= -cosmossdk.io/client/v2 v2.0.0-beta.8.0.20250402172810-41e3e9d004a1/go.mod h1:xgv0ejeOk5yeDraPW5tv+PfBkCDt4yYa/+u45MyP+bM= -cosmossdk.io/collections v1.3.0 h1:RUY23xXBy/bu5oSHZ5y+mkJRyA4ZboKDO4Yvx4+g2uc= -cosmossdk.io/collections v1.3.0/go.mod h1:cqVpBMDGEYhuNmNSXIOmqpnQ7Eav43hpJIetzLuEkns= +cosmossdk.io/client/v2 v2.0.0-beta.11 h1:iHbjDw/NuNz2OVaPmx0iE9eu2HrbX+WAv2u9guRcd6o= +cosmossdk.io/client/v2 v2.0.0-beta.11/go.mod h1:ZmmxMUpALO2r1aG6fNOonE7f8I1g/WsafJgVAeQ0ffs= +cosmossdk.io/collections v1.3.1 h1:09e+DUId2brWsNOQ4nrk+bprVmMUaDH9xvtZkeqIjVw= +cosmossdk.io/collections v1.3.1/go.mod h1:ynvkP0r5ruAjbmedE+vQ07MT6OtJ0ZIDKrtJHK7Q/4c= cosmossdk.io/core v0.11.3 h1:mei+MVDJOwIjIniaKelE3jPDqShCc/F4LkNNHh+4yfo= cosmossdk.io/core v0.11.3/go.mod h1:9rL4RE1uDt5AJ4Tg55sYyHWXA16VmpHgbe0PbJc6N2Y= -cosmossdk.io/depinject v1.2.0 h1:6NW/FSK1IkWTrX7XxUpBmX1QMBozpEI9SsWkKTBc5zw= -cosmossdk.io/depinject v1.2.0/go.mod h1:pvitjtUxZZZTQESKNS9KhGjWVslJZxtO9VooRJYyPjk= +cosmossdk.io/depinject v1.2.1 h1:eD6FxkIjlVaNZT+dXTQuwQTKZrFZ4UrfCq1RKgzyhMw= +cosmossdk.io/depinject v1.2.1/go.mod h1:lqQEycz0H2JXqvOgVwTsjEdMI0plswI7p6KX+MVqFOM= cosmossdk.io/errors v1.0.2 h1:wcYiJz08HThbWxd/L4jObeLaLySopyyuUFB5w4AGpCo= cosmossdk.io/errors v1.0.2/go.mod h1:0rjgiHkftRYPj//3DrD6y8hcm40HcPv/dR4R/4efr0k= -cosmossdk.io/log v1.6.0 h1:SJIOmJ059wi1piyRgNRXKXhlDXGqnB5eQwhcZKv2tOk= -cosmossdk.io/log v1.6.0/go.mod h1:5cXXBvfBkR2/BcXmosdCSLXllvgSjphrrDVdfVRmBGM= +cosmossdk.io/log v1.6.1 h1:YXNwAgbDwMEKwDlCdH8vPcoggma48MgZrTQXCfmMBeI= +cosmossdk.io/log v1.6.1/go.mod h1:gMwsWyyDBjpdG9u2avCFdysXqxq28WJapJvu+vF1y+E= cosmossdk.io/math v1.5.3 h1:WH6tu6Z3AUCeHbeOSHg2mt9rnoiUWVWaQ2t6Gkll96U= cosmossdk.io/math v1.5.3/go.mod h1:uqcZv7vexnhMFJF+6zh9EWdm/+Ylyln34IvPnBauPCQ= cosmossdk.io/schema v1.1.0 h1:mmpuz3dzouCoyjjcMcA/xHBEmMChN+EHh8EHxHRHhzE= cosmossdk.io/schema v1.1.0/go.mod h1:Gb7pqO+tpR+jLW5qDcNOSv0KtppYs7881kfzakguhhI= cosmossdk.io/store v1.1.2 h1:3HOZG8+CuThREKv6cn3WSohAc6yccxO3hLzwK6rBC7o= cosmossdk.io/store v1.1.2/go.mod h1:60rAGzTHevGm592kFhiUVkNC9w7gooSEn5iUBPzHQ6A= -cosmossdk.io/x/circuit v0.1.1 h1:KPJCnLChWrxD4jLwUiuQaf5mFD/1m7Omyo7oooefBVQ= -cosmossdk.io/x/circuit v0.1.1/go.mod h1:B6f/urRuQH8gjt4eLIXfZJucrbreuYrKh5CSjaOxr+Q= -cosmossdk.io/x/evidence v0.1.1 h1:Ks+BLTa3uftFpElLTDp9L76t2b58htjVbSZ86aoK/E4= -cosmossdk.io/x/evidence v0.1.1/go.mod h1:OoDsWlbtuyqS70LY51aX8FBTvguQqvFrt78qL7UzeNc= -cosmossdk.io/x/feegrant v0.1.1 h1:EKFWOeo/pup0yF0svDisWWKAA9Zags6Zd0P3nRvVvw8= -cosmossdk.io/x/feegrant v0.1.1/go.mod h1:2GjVVxX6G2fta8LWj7pC/ytHjryA6MHAJroBWHFNiEQ= +cosmossdk.io/x/circuit v0.2.0 h1:RJPMBQWCQU77EcM9HDTBnqRhq21fcUxgWZl7BZylJZo= +cosmossdk.io/x/circuit v0.2.0/go.mod h1:CjiGXDeZs64nMv0fG+QmvGVTcn7n3Sv4cDszMRR2JqU= +cosmossdk.io/x/evidence v0.2.0 h1:o72zbmgCM7U0v7z7b0XnMB+NqX0tFamqb1HHkQbhrZ0= +cosmossdk.io/x/evidence v0.2.0/go.mod h1:zx/Xqy+hnGVzkqVuVuvmP9KsO6YCl4SfbAetYi+k+sE= +cosmossdk.io/x/feegrant v0.2.0 h1:oq3WVpoJdxko/XgWmpib63V1mYy9ZQN/1qxDajwGzJ8= +cosmossdk.io/x/feegrant v0.2.0/go.mod h1:9CutZbmhulk/Yo6tQSVD5LG8Lk40ZAQ1OX4d1CODWAE= cosmossdk.io/x/tx v0.14.0 h1:hB3O25kIcyDW/7kMTLMaO8Ripj3yqs5imceVd6c/heA= cosmossdk.io/x/tx v0.14.0/go.mod h1:Tn30rSRA1PRfdGB3Yz55W4Sn6EIutr9xtMKSHij+9PM= cosmossdk.io/x/upgrade v0.2.0 h1:ZHy0xny3wBCSLomyhE06+UmQHWO8cYlVYjfFAJxjz5g= @@ -58,10 +58,10 @@ github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEK github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/CosmWasm/wasmd v0.55.0-ibc2.0 h1:9bH+QDnSGxmZhjSykLYGtW4sltzGFFVm10Awk683q2Y= -github.com/CosmWasm/wasmd v0.55.0-ibc2.0/go.mod h1:c9l+eycjUB2zNVLIGjAXd7QrFEbxVTEa1Fh1Mx74VwQ= -github.com/CosmWasm/wasmvm/v3 v3.0.0-ibc2.0 h1:QoagSm5iYuRSPYDxgRxsa6hVfDppUp4+bOwY7bDuMO0= -github.com/CosmWasm/wasmvm/v3 v3.0.0-ibc2.0/go.mod h1:oknpb1bFERvvKcY7vHRp1F/Y/z66xVrsl7n9uWkOAlM= +github.com/CosmWasm/wasmd v0.61.6 h1:wa1rY/mZi8OYnf0f6a02N7o3vBockOfL3P37hSH0XtY= +github.com/CosmWasm/wasmd v0.61.6/go.mod h1:Wg2gfY2qrjjFY8UvpkTCRdy8t67qebOQn7UvRiGRzDw= +github.com/CosmWasm/wasmvm/v3 v3.0.2 h1:+MLkOX+IdklITLqfG26PCFv5OXdZvNb8z5Wq5JFXTRM= +github.com/CosmWasm/wasmvm/v3 v3.0.2/go.mod h1:oknpb1bFERvvKcY7vHRp1F/Y/z66xVrsl7n9uWkOAlM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/datadog-go v4.8.3+incompatible h1:fNGaYSuObuQb5nzeTQqowRAd9bpDIRRV4/gUtIBjh8Q= github.com/DataDog/datadog-go v4.8.3+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= @@ -74,14 +74,14 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.50 github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.50.0 h1:ig/FpDD2JofP/NExKQUbn7uOSZzJAQqogfqluZK4ed4= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.50.0/go.mod h1:otE2jQekW/PqXk1Awf5lmfokJx4uwuqcj1ab5SpGeW0= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/LumeraProtocol/lumera v1.9.1 h1:4hI0sHHrZOiKP+S3GpLNHYeQTatXBftmcUE3ZDA91mU= -github.com/LumeraProtocol/lumera v1.9.1/go.mod h1:38BX04sncJe191asQ4rU/EeYyVflybkU0VN4LDvLKps= +github.com/LumeraProtocol/lumera v1.10.0 h1:IIuvqlFNUPoSkTJ3DoKDNHtr3E0+8GmE4CiNbgTzI2s= +github.com/LumeraProtocol/lumera v1.10.0/go.mod h1:p2sZZG3bLzSBdaW883qjuU3DXXY4NJzTTwLywr8uI0w= github.com/LumeraProtocol/rq-go v0.2.1 h1:8B3UzRChLsGMmvZ+UVbJsJj6JZzL9P9iYxbdUwGsQI4= github.com/LumeraProtocol/rq-go v0.2.1/go.mod h1:APnKCZRh1Es2Vtrd2w4kCLgAyaL5Bqrkz/BURoRJ+O8= -github.com/LumeraProtocol/sdk-go v1.0.7 h1:218aOcURZvvkQSEPg/10BfYr46rbcbeCL/59ITSt0O4= -github.com/LumeraProtocol/sdk-go v1.0.7/go.mod h1:vwiKwQwhJ4Weml1hqvbtZc2iaJxVe8JI0xVu/XuuwUI= -github.com/LumeraProtocol/supernode/v2 v2.4.26 h1:u2DuX8sJoIHl2Wlr8Aa08D2prPX40hNjkvNiqZ/X+n4= -github.com/LumeraProtocol/supernode/v2 v2.4.26/go.mod h1:2juzppFSk/vP0kRsROIRxqc4WHBfm3dq9twD6KndWrA= +github.com/LumeraProtocol/sdk-go v1.0.9 h1:PVL3UeJ4IZFTAo8hDeH4vNBD9VNkzJI8ghwIPWmF3J0= +github.com/LumeraProtocol/sdk-go v1.0.9/go.mod h1:1vk9PHzQGVU0V7EnWANTyUrXJmBIRXW9ayOGhXbXVAM= +github.com/LumeraProtocol/supernode/v2 v2.4.27 h1:Bw2tpuA2uly8ajYT+Q5bKRWyUugPlKHV3S5oMQGGoF4= +github.com/LumeraProtocol/supernode/v2 v2.4.27/go.mod h1:tTsXf0CV8OHAzVDQH/IGjHQ1fJtp0ABZmavkVCoYE4U= github.com/Masterminds/semver/v3 v3.3.1 h1:QtNSWtVZ3nBfk8mAOu/B6v7FMJ+NHTIgUPi7rj+4nv4= github.com/Masterminds/semver/v3 v3.3.1/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= @@ -123,10 +123,10 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bgentry/speakeasy v0.2.0 h1:tgObeVOf8WAvtuAX6DhJ4xks4CFNwPDZiqzGqIHE51E= github.com/bgentry/speakeasy v0.2.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bits-and-blooms/bitset v1.22.0 h1:Tquv9S8+SGaS3EhyA+up3FXzmkhxPGjQQCkcs2uw7w4= -github.com/bits-and-blooms/bitset v1.22.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/bits-and-blooms/bitset v1.24.3 h1:Bte86SlO3lwPQqww+7BE9ZuUCKIjfqnG5jtEyqA9y9Y= +github.com/bits-and-blooms/bitset v1.24.3/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/btcsuite/btcd/btcec/v2 v2.3.5 h1:dpAlnAwmT1yIBm3exhT1/8iUSD98RDJM5vqJVQDQLiU= +github.com/btcsuite/btcd/btcec/v2 v2.3.5/go.mod h1:m22FrOAiuxl/tht9wIqAoGHcbnCCaPWyauO8y2LGGtQ= 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/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= @@ -135,10 +135,10 @@ github.com/bufbuild/protocompile v0.14.1 h1:iA73zAf/fyljNjQKwYzUHD6AD4R8KMasmwa/ github.com/bufbuild/protocompile v0.14.1/go.mod h1:ppVdAIhbr2H8asPk6k4pY7t9zB1OU5DoEw9xY/FUi1c= github.com/bytedance/gopkg v0.1.3 h1:TPBSwH8RsouGCBcMBktLt1AymVo2TVsBVCY4b6TnZ/M= github.com/bytedance/gopkg v0.1.3/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM= -github.com/bytedance/sonic v1.14.1 h1:FBMC0zVz5XUmE4z9wF4Jey0An5FueFvOsTKKKtwIl7w= -github.com/bytedance/sonic v1.14.1/go.mod h1:gi6uhQLMbTdeP0muCnrjHLeCUPyb70ujhnNlhOylAFc= -github.com/bytedance/sonic/loader v0.3.0 h1:dskwH8edlzNMctoruo8FPTJDF3vLtDT0sXZwvZJyqeA= -github.com/bytedance/sonic/loader v0.3.0/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= +github.com/bytedance/sonic v1.14.2 h1:k1twIoe97C1DtYUo+fZQy865IuHia4PR5RPiuGPPIIE= +github.com/bytedance/sonic v1.14.2/go.mod h1:T80iDELeHiHKSc0C9tubFygiuXoGzrkjKzX2quAx980= +github.com/bytedance/sonic/loader v0.4.0 h1:olZ7lEqcxtZygCK9EKYKADnpQoYkRQxaeY2NYzevs+o= +github.com/bytedance/sonic/loader v0.4.0/go.mod h1:AR4NYCk5DdzZizZ5djGqQ92eEhCCcdf5x77udYiSJRo= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -187,8 +187,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.18 h1:1ZHYMdu0S75YxFM13LlPXnOwiIpUW5z9TKMQtTIALpw= -github.com/cometbft/cometbft v0.38.18/go.mod h1:PlOQgf3jQorep+g6oVnJgtP65TJvBJoLiXjGaMdNxBE= +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.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= @@ -199,29 +199,29 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV 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= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= -github.com/cosmos/cosmos-db v1.1.2 h1:KZm4xLlPp6rLkyIOmPOhh+XDK9oH1++pNH/csLdX0Dk= -github.com/cosmos/cosmos-db v1.1.2/go.mod h1:dMg2gav979Ig2N076POEw4CEKbCsieaOfDWSfFZxs8M= +github.com/cosmos/cosmos-db v1.1.3 h1:7QNT77+vkefostcKkhrzDK9uoIEryzFrU9eoMeaQOPY= +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.53.0 h1:ZsB2tnBVudumV059oPuElcr0K1lLOutaI6WJ+osNTbI= -github.com/cosmos/cosmos-sdk v0.53.0/go.mod h1:UPcRyFwOUy2PfSFBWxBceO/HTjZOuBVqY583WyazIGs= +github.com/cosmos/cosmos-sdk v0.53.5 h1:JPue+SFn2gyDzTV9TYb8mGpuIH3kGt7WbGadulkpTcU= +github.com/cosmos/cosmos-sdk v0.53.5/go.mod h1:AQJx0jpon70WAD4oOs/y+SlST4u7VIwEPR6F8S7JMdo= 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= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.7.0 h1:79USr0oyXAbxg3rspGh/m4SWNyoz/GLaAh0QlCe2fro= -github.com/cosmos/gogoproto v1.7.0/go.mod h1:yWChEv5IUEYURQasfyBW5ffkMHR/90hiHgbNgrtp4j0= -github.com/cosmos/iavl v1.2.4 h1:IHUrG8dkyueKEY72y92jajrizbkZKPZbMmG14QzsEkw= -github.com/cosmos/iavl v1.2.4/go.mod h1:GiM43q0pB+uG53mLxLDzimxM9l/5N9UuSY3/D0huuVw= +github.com/cosmos/gogoproto v1.7.2 h1:5G25McIraOC0mRFv9TVO139Uh3OklV2hczr13KKVHCA= +github.com/cosmos/gogoproto v1.7.2/go.mod h1:8S7w53P1Y1cHwND64o0BnArT6RmdgIvsBuco6uTllsk= +github.com/cosmos/iavl v1.2.6 h1:Hs3LndJbkIB+rEvToKJFXZvKo6Vy0Ex1SJ54hhtioIs= +github.com/cosmos/iavl v1.2.6/go.mod h1:GiM43q0pB+uG53mLxLDzimxM9l/5N9UuSY3/D0huuVw= github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v10 v10.1.0 h1:epKcbFAeWRRw1i1jZnYzLIEm9sgUPaL1RftuRjjUKGw= github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v10 v10.1.0/go.mod h1:S4ZQwf5/LhpOi8JXSAese/6QQDk87nTdicJPlZ5q9UQ= -github.com/cosmos/ibc-go/v10 v10.3.0 h1:w5DkHih8qn15deAeFoTk778WJU+xC1krJ5kDnicfUBc= -github.com/cosmos/ibc-go/v10 v10.3.0/go.mod h1:CthaR7n4d23PJJ7wZHegmNgbVcLXCQql7EwHrAXnMtw= +github.com/cosmos/ibc-go/v10 v10.5.0 h1:NI+cX04fXdu9JfP0V0GYeRi1ENa7PPdq0BYtVYo8Zrs= +github.com/cosmos/ibc-go/v10 v10.5.0/go.mod h1:a74pAPUSJ7NewvmvELU74hUClJhwnmm5MGbEaiTw/kE= github.com/cosmos/ics23/go v0.11.0 h1:jk5skjT0TqX5e5QJbEnwXIS2yI2vnmLOgpQPeM5RtnU= github.com/cosmos/ics23/go v0.11.0/go.mod h1:A8OjxPE67hHST4Icw94hOxxFEJMBG031xIGF/JHNIY0= -github.com/cosmos/ledger-cosmos-go v0.14.0 h1:WfCHricT3rPbkPSVKRH+L4fQGKYHuGOK9Edpel8TYpE= -github.com/cosmos/ledger-cosmos-go v0.14.0/go.mod h1:E07xCWSBl3mTGofZ2QnL4cIUzMbbGVyik84QYKbX3RA= +github.com/cosmos/ledger-cosmos-go v0.16.0 h1:YKlWPG9NnGZIEUb2bEfZ6zhON1CHlNTg0QKRRGcNEd0= +github.com/cosmos/ledger-cosmos-go v0.16.0/go.mod h1:WrM2xEa8koYoH2DgeIuZXNarF7FGuZl3mrIOnp3Dp0o= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= @@ -241,12 +241,11 @@ github.com/desertbit/timer v1.0.1 h1:yRpYNn5Vaaj6QXecdLMPMJsW81JLiI1eokUft5nBmeo github.com/desertbit/timer v1.0.1/go.mod h1:htRrYeY5V/t4iu1xCJ5XsQvp4xve8QulXXctAzxqcwE= github.com/dgraph-io/badger/v4 v4.2.0 h1:kJrlajbXXL9DFTNuhhu9yCx7JJa4qpYWxtE8BzuWsEs= github.com/dgraph-io/badger/v4 v4.2.0/go.mod h1:qfCqhPoWDFJRx1gp5QwwyGo8xk1lbHUxvK9nK0OGAak= -github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= -github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= +github.com/dgraph-io/ristretto v0.2.0 h1:XAfl+7cmoUDWW/2Lx8TGZQjjxIQ2Ley9DSf52dru4WE= +github.com/dgraph-io/ristretto v0.2.0/go.mod h1:8uBHCU/PBV4Ag0CJrP47b9Ofby5dqWNh4FicAdoqFNU= github.com/dgraph-io/ristretto/v2 v2.2.0 h1:bkY3XzJcXoMuELV8F+vS8kzNgicwQFAaGINAEJdWGOM= github.com/dgraph-io/ristretto/v2 v2.2.0/go.mod h1:RZrm63UmcBAaYWC1DotLYBmTvgkrs0+XhBd7Npn7/zI= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38= github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= @@ -256,7 +255,6 @@ github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vma 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.7.0 h1:bnQc8+GMnidJZA8zc6lLEAb4xNrIqHwO+9TzqvtQZPo= @@ -299,8 +297,8 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4 github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= -github.com/getsentry/sentry-go v0.32.0 h1:YKs+//QmwE3DcYtfKRH8/KyOOF/I6Qnx7qYGNHCGmCY= -github.com/getsentry/sentry-go v0.32.0/go.mod h1:CYNcMMz73YigoHljQRG+qPF+eMq8gG72XcGN/p71BAY= +github.com/getsentry/sentry-go v0.35.0 h1:+FJNlnjJsZMG3g0/rmmP7GiKjQoUF5EXfEtBwtPtkzY= +github.com/getsentry/sentry-go v0.35.0/go.mod h1:C55omcY9ChRQIUcVcGcs+Zdy4ZpQGvNJ7JYHIoSWOtE= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= @@ -352,13 +350,11 @@ github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.2.5 h1:DrW6hGnjIhtvhOIiAKT6Psh/Kd/ldepEa81DKeiRJ5I= -github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/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/mock v1.1.1/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= @@ -399,7 +395,6 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 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/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= @@ -418,8 +413,8 @@ 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/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4= github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= -github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q= -github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA= +github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo= +github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= @@ -451,8 +446,8 @@ github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.7.8 h1:mshVHx1Fto0/MydBekWan5zUipGq7jO0novchgMmSiY= -github.com/hashicorp/go-getter v1.7.8/go.mod h1:2c6CboOEb9jG6YvmC9xdD+tyAFsrUaJPedwXDGr0TM4= +github.com/hashicorp/go-getter v1.7.9 h1:G9gcjrDixz7glqJ+ll5IWvggSBR+R0B54DSRt4qfdC4= +github.com/hashicorp/go-getter v1.7.9/go.mod h1:dyFCmT1AQkDfOIt9NH8pw9XBDqNrIKJT5ylbpi7zPNE= github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= @@ -587,8 +582,6 @@ github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrk github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= -github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= @@ -688,8 +681,8 @@ github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeD github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= -github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= +github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= +github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -705,8 +698,8 @@ github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8b github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.63.0 h1:YR/EIY1o3mEFP/kZCD7iDMnLPlGyuU2Gb3HIcXnA98k= -github.com/prometheus/common v0.63.0/go.mod h1:VVFF/fBIoToEnWRVkYoXEkq3R3paCoxG9PXP74SnV18= +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-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= @@ -714,8 +707,8 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= -github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= +github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -740,8 +733,8 @@ github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0 github.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb2NsU= github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/shamaton/msgpack/v2 v2.2.0 h1:IP1m01pHwCrMa6ZccP9B3bqxEMKMSmMVAVKk54g3L/Y= -github.com/shamaton/msgpack/v2 v2.2.0/go.mod h1:6khjYnkx73f7VQU7wjcFS9DFjs+59naVWJv1TB7qdOI= +github.com/shamaton/msgpack/v2 v2.2.3 h1:uDOHmxQySlvlUYfQwdjxyybAOzjlQsD1Vjy+4jmO9NM= +github.com/shamaton/msgpack/v2 v2.2.3/go.mod h1:6khjYnkx73f7VQU7wjcFS9DFjs+59naVWJv1TB7qdOI= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -790,6 +783,8 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= @@ -806,17 +801,19 @@ github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= -github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.14 h1:uv/0Bq533iFdnMHZdRBTOlaNMdb1+ZxXIlHDZHIHcvg= +github.com/ulikunitz/xz v0.5.14/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/zondax/golem v0.27.0 h1:IbBjGIXF3SoGOZHsILJvIM/F/ylwJzMcHAcggiqniPw= +github.com/zondax/golem v0.27.0/go.mod h1:AmorCgJPt00L8xN1VrMBe13PSifoZksnQ1Ge906bu4A= github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= -github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= +github.com/zondax/ledger-go v1.0.1 h1:Ks/2tz/dOF+dbRynfZ0dEhcdL1lqw43Sa0zMXHpQ3aQ= +github.com/zondax/ledger-go v1.0.1/go.mod h1:j7IgMY39f30apthJYMd1YsHZRqdyu4KbVmUp0nU78X0= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.4.0-alpha.1 h1:3yrqQzbRRPFPdOMWS/QQIVxVnzSkAZQYeWlZFv1kbj4= go.etcd.io/bbolt v1.4.0-alpha.1/go.mod h1:S/Z/Nm3iuOnyO1W4XuFfPci51Gj6F1Hv0z8hisyYYOw= @@ -830,8 +827,8 @@ go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= go.opentelemetry.io/contrib/detectors/gcp v1.38.0 h1:ZoYbqX7OaA/TAikspPl3ozPI6iY6LiIY9I8cUfm+pJs= go.opentelemetry.io/contrib/detectors/gcp v1.38.0/go.mod h1:SU+iU7nu5ud4oCb3LQOhIZ3nRLj6FNVrKgtflbaf2ts= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 h1:x7wzEgXfnzJcHDwStJT+mxOz4etr2EcexjqhBvmoakw= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 h1:RbKq8BG0FI8OiXhBfcRtqqHcZcka+gU3cskNuf05R18= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0/go.mod h1:h06DGIukJOevXaj/xrNjhi/2098RZzcLTbc0jDAUbsg= go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= @@ -865,10 +862,12 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= +go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= -golang.org/x/arch v0.15.0 h1:QtOrQd0bTUnhNVNndMpLHNWrDmYzZ2KDqSrEymqInZw= -golang.org/x/arch v0.15.0/go.mod h1:JmwW7aLIoRUKgaTzhkiEFxvcEiQGyOg9BMonBJUS7EE= +golang.org/x/arch v0.17.0 h1:4O3dfLzd+lQewptAHqjewQZQDyEdejz3VwgeYwkZneU= +golang.org/x/arch v0.17.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk= 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-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -877,8 +876,8 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= -golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= +golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= +golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A= 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= @@ -925,8 +924,8 @@ golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.46.1-0.20251013234738-63d1a5100f82 h1:6/3JGEh1C88g7m+qzzTbl3A0FtsLguXieqofVLU/JAo= -golang.org/x/net v0.46.1-0.20251013234738-63d1a5100f82/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= +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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -940,8 +939,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= -golang.org/x/sync v0.17.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= @@ -992,28 +991,27 @@ golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= -golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= +golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= 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.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q= -golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss= +golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= +golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= golang.org/x/text v0.3.0/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= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= -golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= +golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= +golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/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.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= -golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= +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= @@ -1042,8 +1040,8 @@ golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNq 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.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -google.golang.org/api v0.229.0 h1:p98ymMtqeJ5i3lIBMj5MpR9kzIIgzpHHh8vQ+vgAzx8= -google.golang.org/api v0.229.0/go.mod h1:wyDfmq5g1wYJWn29O22FDWN48P7Xcz0xz+LBpptYvB0= +google.golang.org/api v0.247.0 h1:tSd/e0QrUlLsrwMKmkbQhYVa109qIintOls2Wh6bngc= +google.golang.org/api v0.247.0/go.mod h1:r1qZOPmxXffXg6xS5uhx16Fa/UFY8QU/K4bfKrnvovM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1058,8 +1056,8 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2 h1:1tXaIXCracvtsRxSBsYDiSBN0cuJvM7QYW+MrpIRY78= -google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:49MsLSx0oWMOZqcpB3uL8ZOkAh1+TndpJ8ONoCBWiZk= +google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuOnu87KpaYtjK5zBMLcULh7gxkCXu4= +google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s= google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8 h1:mepRgnBZa07I4TRuomDE4sTIYieg/osKmzIf4USdWS4= google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8/go.mod h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo= google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8 h1:M1rk8KBnUsBDg1oPGHNCxG4vc1f49epmTO7xscSajMk= @@ -1098,8 +1096,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= -google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1145,6 +1143,6 @@ nhooyr.io/websocket v1.8.17/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+ pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk= pgregory.net/rapid v1.2.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= 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= +sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs= +sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/tools/buildpacket/main.go b/tools/buildpacket/main.go index f9d8932..3edc314 100644 --- a/tools/buildpacket/main.go +++ b/tools/buildpacket/main.go @@ -23,7 +23,6 @@ import ( sdkcrypto "github.com/LumeraProtocol/sdk-go/pkg/crypto" codectypes "github.com/cosmos/cosmos-sdk/codec/types" - "github.com/cosmos/cosmos-sdk/crypto/hd" gogoproto "github.com/cosmos/gogoproto/proto" icatypes "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/types" ) @@ -52,20 +51,27 @@ func main() { ctx := context.Background() - // Set up temporary keyring from mnemonic + // Set up a temporary keyring and import the mnemonic. This must be the + // same mnemonic used to create the test user on Osmosis — it derives the + // same key pair, which is needed to sign the cascade metadata. tmpDir, err := os.MkdirTemp("", "buildpacket-keyring-*") if err != nil { fatal("create temp dir: %v", err) } defer os.RemoveAll(tmpDir) - kr, err := sdkcrypto.NewMultiChainKeyring("lumera", "test", tmpDir) + kr, err := sdkcrypto.NewKeyring(sdkcrypto.KeyringParams{ + AppName: "lumera", + Backend: "test", + Dir: tmpDir, + }) if err != nil { fatal("create keyring: %v", err) } keyName := "buildpacket-key" - _, err = kr.NewAccount(keyName, *mnemonic, "", hd.CreateHDPath(118, 0, 0).String(), hd.Secp256k1) + keyType := sdkcrypto.KeyTypeCosmos + _, err = kr.NewAccount(keyName, *mnemonic, "", keyType.HDPath(), keyType.SigningAlgo()) if err != nil { fatal("import key from mnemonic: %v", err) } @@ -103,7 +109,10 @@ func main() { } defer func() { _ = cascadeClient.Close() }() - // Build MsgRequestAction with real cascade metadata + // Build MsgRequestAction with real cascade metadata. + // WithICACreatorAddress overrides the msg creator to be the ICA address + // (not the local lumera address), since the host chain will execute the + // message as the ICA. uploadOpts := &cascade.UploadOptions{} cascade.WithICACreatorAddress(*icaAddress)(uploadOpts) cascade.WithAppPubkey(appPubkey)(uploadOpts) @@ -114,7 +123,9 @@ func main() { } fmt.Fprintf(os.Stderr, "Built MsgRequestAction: creator=%s type=%s\n", msg.Creator, msg.ActionType) - // Pack into ICA packet data + // Pack the message into an ICA CosmosTx envelope. This is the format + // that the ICS-27 host module expects: a protobuf-encoded CosmosTx + // containing one or more sdk.Msg, base64-encoded into a JSON packet. msgAny, err := ica.PackRequestAny(msg) if err != nil { fatal("PackRequestAny: %v", err) @@ -128,7 +139,8 @@ func main() { fatal("marshal CosmosTx: %v", err) } - // Output ICA packet JSON to stdout + // Output ICA packet JSON to stdout. This matches the format expected by + // osmosisd tx interchain-accounts controller send-tx fmt.Printf(`{"type":"TYPE_EXECUTE_TX","data":"%s","memo":""}`, base64.StdEncoding.EncodeToString(cosmosTxBytes)) }