Skip to content

Cosmos EVM Integration#108

Open
akobrin1 wants to merge 26 commits intomasterfrom
evm
Open

Cosmos EVM Integration#108
akobrin1 wants to merge 26 commits intomasterfrom
evm

Conversation

@akobrin1
Copy link
Contributor

@akobrin1 akobrin1 commented Mar 19, 2026

Cosmos EVM Integration

Summary

First-class Cosmos EVM integration for Lumera, adding full Ethereum transaction execution, JSON-RPC, EIP-1559 fee market, ERC20/IBC middleware, custom module precompiles, and a purpose-built legacy account migration module — the most comprehensive pre-mainnet EVM integration in the Cosmos ecosystem.

Ships with ~406 EVM-related tests, 19 bugs found and fixed during integration, production-grade operational controls, and features no other Cosmos EVM chain offers: async broadcast queue (deadlock fix), CosmWasm+EVM coexistence, OpenRPC discovery, governance-controlled IBC ERC20 policy, and a full account migration module with dual-signature verification.

Full technical documentation: docs/evm-integration/main.md


New Modules

Module Purpose
x/vm (Cosmos EVM v0.6.0) Core EVM execution — Solidity/Vyper contract runtime, receipts, logs, state transitions
x/feemarket EIP-1559 dynamic base fee with min gas price floor (0.0005 ulume/gas) and ~6.25% per-block adjustment
x/precisebank 6-decimal ulume ↔ 18-decimal alume bridge: EVMBalance(a) = I(a) × 10¹² + F(a)
x/erc20 STRv2 token pair registration + IBC middleware for automatic cross-chain ERC20 mapping
x/evmigration Legacy coin-type-118 → 60 account migration with dual-signature verification and atomic 9-module state re-keying

Key Changes

Runtime & Execution

  • Dual-route ante handler (app/evm/ante.go): deterministic tx routing based on ExtensionOptions[0].TypeUrl — Ethereum extension txs route to EVM path (EVMMonoDecorator + pending tx listener), Cosmos txs route through Lumera + EVM-aware Cosmos decorator chain, with build-tag-guarded production isolation (//go:build !test in defaults_prod.go)
  • App-side EVM mempool (app/evm_mempool.go): Ethereum-like sender ordering, nonce-gap handling, same-nonce replacement with bump rules, max_txs=5000 enabled by default
  • Async broadcast queue (app/evm_broadcast.go): decouples txpool runReorg promotion from CometBFT CheckTx via bounded channel + single background worker, preventing mutex re-entry deadlock — a novel fix no other Cosmos EVM chain has publicly addressed
  • RegisterTxService override (app/evm_runtime.go): captures the local CometBFT client for the broadcast worker, replacing the stale HTTP client from pre-CometBFT SetClientCtx
  • Depinject signer wiring: custom GetSigners for MsgEthereumTx + safe early-RPC keeper coin info initialization (SetKeeperDefaults) to prevent panics before genesis
  • CosmWasm coexistence: wasmd v0.61.6 and EVM run in the same runtime — Lumera is the only Cosmos chain shipping both simultaneously

Chain Configuration

  • EVM chain ID: 76857769
  • Key type: eth_secp256k1 (default), BIP44 coin type 60 — MetaMask/Ledger compatible out of the box
  • Fee market: base fee 0.0025 ulume/gas, min gas price floor 0.0005 ulume/gas (prevents zero-fee spam that hit Evmos), change denominator 16 (~6.25%/block vs upstream 8 at ~12.5%)
  • Consensus max gas: 25,000,000
  • Centralized denom metadata (config/bank_metadata.go): ulume/lume/alume metadata + RegisterExtraInterfaces for eth_secp256k1 crypto across all SDK+EVM paths
  • Automatic config migration (cmd/lumera/cmd/config_migrate.go): pre-EVM app.toml files auto-gain [evm], [json-rpc], and [evm.mempool] sections with correct chain ID on first startup — no manual intervention

Precompiles (10 static)

Standard (8): P256, Bech32, Staking, Distribution, ICS20, Bank, Gov, Slashing

Action module (0x0000000000000000000000000000000000000901):

Method Type Description
requestCascade tx Submit cascade action with dataHash, signatures, price, fileSizeKbs → actionId
finalizeCascade tx Finalize cascade with result IDs → bool (checks final state, no false success)
requestSense tx Submit sense action with dataHash, fingerprints → actionId
finalizeSense tx Finalize sense with result IDs and signatures → bool
approveAction tx Approve pending action → bool
getAction query Retrieve action by ID → ActionInfo struct
getActionFee query Calculate fee for data size → (baseFee, perKbFee, totalFee)
getParams query Module params → (baseActionFee, feePerKbyte, maxActionsPerBlock, ...)
getActionsByState query Paginated by state (max 100/call) → (actions[], total)
getActionsByCreator query Paginated by creator → (actions[], total)
getActionsBySuperNode query Paginated by supernode → (actions[], total)

Supernode module (0x0000000000000000000000000000000000000902):

Method Type Description
registerSupernode tx Register with validator, IP, account, p2p port → bool
deregisterSupernode tx Deregister by validator address → bool
startSupernode / stopSupernode tx State transitions → bool
updateSupernode tx Update IP, note, account, port → bool
reportMetrics tx Report CPU/mem/disk/peers → (compliant bool, issues[] string)
getSuperNode query By validator address → SuperNodeInfo
getSuperNodeByAccount query By supernode account (secondary index) → SuperNodeInfo
listSuperNodes query Paginated (max 100/call) → (nodes[], total)
getTopSuperNodesForBlock query XOR distance ranking for block → nodes[]
getMetrics query Latest metrics → (metrics, reportCount, lastReportHeight)
getParams query Module params → (minimumStake, minCpuCores, minMemGb, ...)

Precompile protections: blocked-address send restrictions on all 10 precompile addresses + module accounts

IBC & Cross-Chain

  • IBC ERC20 middleware wired on both v1 and v2 transfer stacks:

  • v1: EVMTransferKeeper → ERC20IBCMiddleware → CallbacksMiddleware → PFM

  • v2: TransferV2Module → CallbacksV2Middleware → ERC20IBCMiddlewareV2

  • Governance-controlled registration policy via MsgSetRegistrationPolicy: 3 modes (all/allowlist default/none) with channel-independent base-denom allowlisting (default: uatom, uosmo, uusdc)

JSON-RPC & Tooling

  • JSON-RPC server enabled by default: eth, net, web3, txpool, debug, personal, miner namespaces; mainnet auto-blocks debug/personal/admin via jsonrpc_policy.go
  • Indexer enabled by default: receipt persistence, tx hash lookup, log indexing, historical state queries (pruning-dependent)
  • Per-IP rate limiting (app/evm_jsonrpc_ratelimit.go): token bucket proxy — requests-per-second=50, burst=100, entry-ttl=5m, HTTP 429 with JSON-RPC -32005 on limit, stale entries GC'd every 60s
  • EVM tracing: runtime-configurable via app.toml [evm] tracerjson, struct, access_list, markdown; enables debug_traceTransaction, debug_traceBlockByNumber, debug_traceBlockByHash, debug_traceCall
  • OpenRPC discovery: rpc_discover JSON-RPC method (port 8545) + GET/POST /openrpc.json HTTP endpoint (port 1317) with CORS; gzip-compressed spec embedded in binary (315 KB → 20 KB); build-time generation via tools/openrpcgen with Go reflection + AST parsing; POST /openrpc.json proxies to JSON-RPC server enabling OpenRPC Playground "Try It" directly; spec version from go.mod via runtime/debug.ReadBuildInfo()
  • Playground URL: https://playground.open-rpc.org/?url=http://<node>:1317/openrpc.json

Account Migration (x/evmigration)

  • MsgClaimLegacyAccount: signed by new eth_secp256k1 address; legacy signature = secp256k1_sign(SHA256("lumera-evm-migration:<legacy_address>:<new_address>"))
  • Atomic 9-module migration in single tx: auth (vesting-aware) → bank → staking (delegations + unbonding + redelegations + UnbondingID indexes) → distribution (reward withdrawal) → authz (grant re-keying) → feegrant (allowance re-keying) → supernode → action → claim
  • MsgMigrateValidator: re-keys validator record + all associated module state including delegator references
  • Fee waiving (ante/evmigration_fee_decorator.go): zero-fee migration txs since new address has no balance
  • Governance params: enable_migration, migration_end_time, max_migrations_per_block=50, max_validator_delegations=2000
  • Queries: MigrationRecord, MigrationRecords, MigrationEstimate (dry-run), MigrationStats, LegacyAccounts, MigratedAccounts

Upgrade & Ops

  • v1.12.0 upgrade handler: store additions for feemarket, precisebank, vm, erc20, evmigration; post-migration finalization sets Lumera EVM params + coin info, feemarket params, ERC20 defaults (EnableErc20=true, PermissionlessRegistration=true)
  • Adaptive store upgrade manager updated for missing stores in dev/test skip-upgrade flows
  • Node operator config guide: docs/evm-integration/node-evm-config-guide.mdapp.toml tuning, [evm]/[json-rpc]/[evm.mempool] sections, RPC exposure, tracer config, rate limiting, security policies

Devnet

  • EVM-aware devnet with EVM genesis template (devnet/default-config/devnet-genesis-evm.json)
  • Devnet port mapping: validators 1–5 map JSON-RPC to 8545/8555/8565/8575/8585; REST API to 1327/1337/1347/1357/1367
  • Hermes IBC relayer updated for EVM-era chains with auto-detection scripts
  • EVM devnet tests (devnet/tests/validator/evm_test.go): fee market, cross-peer tx visibility, mixed Cosmos+EVM blocks
  • Remix IDE guide: docs/evm-integration/remix-guide.md — MetaMask network config, contract deployment, interaction, event querying, troubleshooting

Bugs Found & Fixed (19 issues)

Documented in docs/evm-integration/bugs.md


Test Coverage (~406 tests)

Area Unit Integration Devnet Highlights
Dual-route ante handler 28 3 Both EVM and Cosmos paths verified separately
App-side mempool 12 Ordering, nonce gaps, replacement, capacity, WS subscriptions
Async broadcast queue 4 Deadlock prevention, deduplication, queue-full handling
JSON-RPC 23 Batch requests, persistence across restart, mixed blocks
ERC20/IBC middleware 14 7 Policy modes (all/allowlist/none), v1+v2 stacks
Precisebank 39 6 Mint/burn parity, fractional remainder, 6↔18 bridge
Feemarket (EIP-1559) 9 8 Multi-block progression, min floor, dynamic adjustment
Precompiles 29 All 10 precompiles + gas metering + Action + Supernode
Account migration 102 14 All 9 module migrations, vesting, validator, edge cases
OpenRPC 15 2 Spec sync, HTTP serving, CORS, playground proxy
WebSocket subscriptions 4 newHeads, logs, pendingTransactions
Devnet multi-validator 12+ Cross-validator propagation, fee market, IBC
Devnet evmigration tool 7 modes prepare → estimate → migrate → migrate-validator → migrate-all → verify → cleanup

Devnet evmigration pipeline (make devnet-evm-upgrade): boots v1.11.0 devnet → prepares legacy state (5 legacy + 5 extra accounts with delegations, unbonding, redelegations, authz, feegrant, supernode, action across all validators) → governance upgrade to v1.12.0 → estimate all accounts → migrate validators → migrate accounts → verify clean state. Idempotent and rerunnable.


Documentation Added

Document Description
main.md Full integration architecture, semantics, gap analysis, cross-chain comparison (934 lines)
tests.md Complete test inventory with per-area coverage assessment and gap analysis
bugs.md 19 bugs: symptom, root cause, fix, tests added
roadmap.md 15-phase roadmap, 155/163 items complete (95%)
node-evm-config-guide.md Node operator guide: app.toml tuning, security policies, rate limiting
openrpc-playground.md OpenRPC discovery access methods, devnet ports, playground setup
remix-guide.md Remix IDE + MetaMask testing guide with troubleshooting
action-precompile.md Action precompile (0x0901) ABI reference, 11 methods, design notes
supernode-precompile.md Supernode precompile (0x0902) ABI reference, 12 methods, design notes
devnet-tests.md Devnet test catalog and evmigration tool modes
lumera-ports.md Full port mapping reference for all node services

What Makes This Different

Capability Lumera Other Cosmos EVM chains at launch
CosmWasm + EVM coexistence Yes (wasmd v0.61.6 + Cosmos EVM v0.6.0) No chain has both
OpenRPC discovery rpc_discover + /openrpc.json + playground proxy No chain has this
Async broadcast queue Deadlock-free mempool promotion Not publicly addressed
Min gas price floor 0.0005 ulume/gas (prevents decay to zero) Evmos launched without → spam attack
IBC v2 ERC20 middleware Both v1 and v2 transfer stacks Most only v1
IBC ERC20 registration policy Governance-controlled all/allowlist/none Not standard
Custom module precompiles Action (0x0901) + Supernode (0x0902) at launch Usually post-launch
Account migration module Dual-sig, 9-module atomic, validator support No comparable mechanism
Pre-mainnet test coverage ~406 tests (244 unit + 125 integration + 12+ devnet) Typically <100
Bugs fixed pre-launch 19 issues found and resolved Usually found post-mainnet
Automatic config migration config_migrate.go adds [evm] section on startup Manual operator action
JSON-RPC rate limiting Built-in per-IP token bucket at app layer External infra or post-launch

Gas Configuration

Parameter Lumera Evmos Kava Cronos
Default base fee 0.0025 ulume (2.5 gwei equiv) ~10 gwei ~0.25 ukava Variable
Min gas price floor 0.0005 ulume 0 (no floor) N/A N/A
Base fee change denominator 16 (~6.25%/block) 8 (~12.5%) 8 8
Consensus max gas 25,000,000 30M–40M 25,000,000 25,000,000

Roadmap Status

155/163 items complete (95%) across 15 phases.

Status Phases
Complete Core EVM Runtime, Ante Handler, Feemarket, Mempool & Broadcast, JSON-RPC & Indexer, Static Precompiles, IBC+ERC20, OpenRPC, Store Upgrades, Account Migration, Testing, Custom Precompiles
In Progress Production Hardening (3/8 — security audit, monitoring runbook pending), Ecosystem & Tooling (2/7 — block explorer, Hardhat guide pending)
TODO CosmWasm + EVM Interaction (0/4 — design needed first)

Breaking Changes

Change Before After Impact
Key type secp256k1 eth_secp256k1 keys add defaults to Ethereum-compatible keys
BIP44 coin type 118 60 Same mnemonic derives different addresses
Fee behavior Flat gas price EIP-1559 dynamic base fee Wallets must support type-2 txs for optimal UX
New stores feemarket, precisebank, vm, erc20, evmigration v1.12.0 upgrade handler required
Config No [evm] section [evm], [json-rpc], [evm.mempool] in app.toml Auto-migrated on startup via config_migrate.go

Test Plan

  • Devnet full lifecycle: make devnet-new — boots 3-validator EVM devnet, processes mixed Cosmos+EVM blocks
  • Devnet EVM upgrade pipeline: make devnet-evm-upgrade — v1.11.0 → v1.12.0 with full evmigration cycle (prepare → estimate → migrate-validator → migrate → verify)
  • MetaMask connects via JSON-RPC (chain ID 76857769), sends EVM tx, tx confirmed on-chain
  • OpenRPC Playground accessible at /openrpc.json, rpc_discover returns full spec
  • Remix IDE: deploy Solidity contract, call functions, verify receipts
  • Action precompile (0x0901): requestCascadeapproveActionfinalizeCascade round-trip
  • Supernode precompile (0x0902): registerSupernodereportMetricsgetSuperNode round-trip

@roomote-v0
Copy link

roomote-v0 bot commented Mar 19, 2026

Rooviewer Clock   See task

Reviewed 109ca1c (removed redundant buf generate from build target). Clean build optimization -- proto files are committed and a dedicated build-proto target exists. All 9 previously identified issues remain resolved. No new issues found. Approved.

Issues

# Severity File Description Fix
1 Critical x/evmigration/keeper/msg_server_migrate_validator.go Validator migration skips operator's own delegations to other validators -- distribution and staking state for those delegations is never re-keyed Resolved in 4c46bf1
2 Medium app/evm_jsonrpc_ratelimit.go extractIP() trusts spoofable X-Forwarded-For / X-Real-IP headers, allowing rate-limit bypass Resolved in a4c786e
3 Low app/openrpc/http.go OpenRPC POST proxy uses http.DefaultClient with no timeout -- a slow upstream can pin goroutines indefinitely Resolved in 4c46bf1
4 Medium app/evm_broadcast.go broadcastBatch returns on first BroadcastTxSync failure, silently dropping all remaining transactions in the batch Resolved in 4c46bf1
5 Low x/evmigration/keeper/migrate_staking.go migrateActiveDelegations reads GetDelegatorStartingInfo after the same key was already deleted, making lines 68-77 dead code Resolved in 4c46bf1
6 Medium .github/workflows/build.yml make openrpc added to integration-tests but missing from system-tests and build jobs that also compile the full binary via ignite chain build -- //go:embed openrpc.json.gz will fail Resolved in 19a2bdb
7 Low x/evmigration/keeper/migrate_staking.go migrateWithdrawAddress doc comment has two overlapping comments spliced together -- first one cut off mid-sentence Resolved in 11a85cb
8 Low tools/openrpcgen/schema.go structProperties iterates requiredSet map without sorting, producing non-deterministic required arrays in the OpenRPC spec -- causes noisy diffs on every regeneration Resolved in 52b099a
9 Low Makefile BUILD_LDFLAGS includes -X ...cmd.ChainID=$(CHAIN_ID) but no var ChainID exists in cmd/lumera/cmd -- the linker silently ignores it, so the chain ID from config.yml is never injected into the binary Resolved in 19a2bdb
Previous reviews

Mention @roomote in a comment to request specific changes to this pull request or fix all unresolved issues.

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2d4527beaf

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

roomote-v0[bot]
roomote-v0 bot previously approved these changes Mar 20, 2026
@akobrin1 akobrin1 requested a review from Copilot March 20, 2026 03:34
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds first-class Cosmos EVM integration support across Lumera’s node runtime, CLI, devnet tooling, upgrade handlers, JSON-RPC/OpenRPC, and CI pipelines.

Changes:

  • Introduces EVM chain configuration/constants (chain ID, fee market defaults, denom metadata) and wires EVM modules into app/CLI/startup paths.
  • Expands devnet + Hermes automation (upgrade flow, version/key-style detection, JSON-RPC ports, log archiving, test binary distribution).
  • Adds extensive EVM-focused unit/integration tests and updates build/test/lint/release automation (OpenRPC generation, golangci-lint v2 config, workflows).

Reviewed changes

Copilot reviewed 141 out of 516 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
devnet/tests/evmigration/README.md Adds devnet evmigration test tool README
devnet/scripts/wait-for-height.sh Improves height wait UX + upgrade-halt detection
devnet/scripts/upgrade.sh Adds idempotent upgrade flow + version checks
devnet/scripts/upgrade-binaries.sh Verifies binary version + improves compose restart robustness
devnet/scripts/start.sh Archives logs + optional claims CSV start flags
devnet/scripts/restart.sh Archives logs + optional claims CSV start flags
devnet/scripts/configure.sh Improves host-side shared volume/binary setup
devnet/main.go Import ordering tweak
devnet/hermes/scripts/hermes-start.sh Auto-detects key style based on chain version
devnet/hermes/scripts/hermes-configure.sh Hermes address_type derivation based on key style
devnet/hermes/scripts/hermes-channel.sh Uses eth HD path for EVM-era keys
devnet/hermes/config.toml Devnet Hermes tuning (misbehaviour, clear interval)
devnet/hermes/Dockerfile Updates Go base image + IBC-Go version arg
devnet/generators/docker-compose.go Adds chain version detection + JSON-RPC port bindings
devnet/generators/config.go Adds JSON-RPC default ports constants
devnet/dockerfile Sets bash shell + installs ripgrep
devnet/default-config/devnet-genesis.json Adds audit/evmigration genesis params + updates claim end time/amount
devnet/config/validators.json Restructures supernode config + adds per-validator JSON-RPC ports
devnet/config/config.json Adds evm_from_version, JSON-RPC config, and mnemonic lists
devnet/config/config.go Extends devnet config schema (version, JSON-RPC, mnemonics)
devnet/.gitignore Ignores generated compose/bin/logs
config/evm.go Adds EVM chain constants (IDs, fees, gas)
config/config.go Updates chain denom metadata + delegates Bech32/BIP44 setup
config/codec.go Registers SDK + EVM crypto interfaces
config/bip44.go Sets coin type to EVM (60)
config/bech32.go Centralizes Bech32 prefix constants/helpers
config/bank_metadata.go Provides/upserts canonical bank metadata for ulume/lume/alume
cmd/lumera/main.go Treats context cancellation as graceful shutdown
cmd/lumera/cmd/root_test.go Adds CLI wiring tests for EVM flags + key type defaults
cmd/lumera/cmd/root.go Adds EVM modules to CLI basics + keyring options + config migration hook
cmd/lumera/cmd/jsonrpc_policy_test.go Adds mainnet JSON-RPC namespace policy tests
cmd/lumera/cmd/jsonrpc_policy.go Enforces disallowed JSON-RPC namespaces on mainnet
cmd/lumera/cmd/config_test.go Verifies app config EVM/JSON-RPC defaults
cmd/lumera/cmd/config.go Extends app.toml template/config with EVM/JSON-RPC/TLS/Lumera sections
claiming_faucet/main.go Uses EVM keyring options + registers EVM crypto interfaces
app/wasm.go Removes wasm-specific ante/posthandler setup from wasm registration
app/vm_preinstalls_test.go Adds EVM preinstall validation matrix test
app/upgrades/v1_12_0/upgrade_test.go Tests ERC20 params init when InitGenesis skipped
app/upgrades/v1_12_0/upgrade.go Adds v1.12.0 EVM store upgrades + manual params finalization
app/upgrades/upgrades_test.go Adds v1.12.0 to upgrade registry tests
app/upgrades/upgrades.go Registers v1.12.0 upgrade config
app/upgrades/store_upgrade_manager_test.go Adds adaptive store upgrade test for missing EVM stores
app/upgrades/store_upgrade_manager.go Uses shared EnvBool helper
app/upgrades/params/params.go Extends upgrade params with EVM-related keepers
app/test_support.go Import ordering tweak
app/test_helpers.go Adds EVM test-tag guard + denom metadata in genesis + disables fastnode in tests
app/statedb_events_test.go Adds StateDB snapshot/event revert invariant test
app/proto_bridge_test.go Tests proto enum bridge registrations
app/proto_bridge.go Registers Cosmos SDK + EVM enums in proto bridge
app/precisebank_mint_burn_parity_test.go Adds precisebank mint/burn parity tests
app/precisebank_fractional_test.go Adds precisebank fractional balance matrix tests
app/pending_tx_listener_test.go Tests pending tx listener fanout + offline broadcaster error
app/openrpc/spec.go Embeds and serves gzipped OpenRPC spec
app/openrpc/rpc_api.go Exposes rpc.discover service
app/openrpc/register.go Registers rpc namespace on JSON-RPC server
app/openrpc/openrpc_test.go Validates embedded OpenRPC doc and helpers
app/ibc_erc20_middleware_test.go Tests ERC20 IBC middleware wiring (v1/v2)
app/ibc.go Wires ERC20 middleware into IBC transfer stacks
app/evm_test.go Tests EVM module genesis + ordering + module account perms
app/evm_static_precompiles_test.go Tests static precompile registration
app/evm_runtime.go Captures clientCtx via RegisterTxService + shuts down background workers
app/evm_mempool_test.go Tests EVM mempool wiring
app/evm_mempool.go Configures app-side EVM mempool + signer extraction
app/evm_jsonrpc_alias.go Adds JSON-RPC alias reverse proxy + method rewrite
app/evm_erc20_policy_msg.go Implements governance msg server for ERC20 IBC policy
app/evm/testtag_guard.go Adds guard helpers for missing -tags=test
app/evm/reset_testbuild.go Resets EVM global config in test builds
app/evm/reset.go Panics with guidance in non-test builds under testing
app/evm/prod_guard_test.go Documents guard behavior in !test builds
app/evm/precompiles.go Defines Lumera static precompile address list
app/evm/modules.go Registers EVM modules for CLI default genesis generation
app/evm/genesis.go Defines Lumera EVM/feemarket genesis overrides
app/evm/defaults_testbuild.go No-op keeper defaults in test builds
app/evm/defaults_prod.go Sets keeper default coin info in production builds
app/evm/config_modules_genesis_test.go Tests EVM config helpers + genesis overrides + module registration
app/evm/config.go Adds custom signer provider helper
app/evm/ante_sigverify_test.go Tests signature gas consumer matrix
app/evm/ante_nonce_test.go Tests EVM nonce increment matrix
app/evm/ante_internal_test.go Tests genesis-skip decorator behavior
app/evm/ante_gas_wanted_test.go Tests EVM gas-wanted decorator behavior
app/evm/ante_evmigration_fee_test.go Tests reduced ante path for migration-only txs
app/encoding.go Uses EVM test-tag guard when building encoding config in tests
app/blocked_addresses_test.go Tests blocked module/precompile addresses and send restriction
app/params/proto.go Removes legacy encoding config helper
app/amino_codec_test.go Adds legacy amino codec regression test for eth_secp256k1
app/amino_codec.go Registers eth_secp256k1 amino types + syncs legacy codec
ante/evmigration_validate_basic_decorator_test.go Tests ValidateBasic suppression for migration-only txs
ante/evmigration_validate_basic_decorator.go Allows ErrNoSignatures for migration-only txs
ante/evmigration_fee_decorator_test.go Tests fee waiving for migration-only txs
ante/evmigration_fee_decorator.go Clears min-gas-prices for migration-only txs
ante/delayed_claim_fee_decorator.go Removes disabled decorator block comment
Makefile Adds OpenRPC generation, updates lint tool path, adjusts test targets
CHANGELOG.md Adds v1.12.0 changelog entry + fixes formatting issue
.vscode/settings.json Adds terminal tool auto-approve entry
.vscode/launch.json Adds integration test debug configuration
.markdownlint.json Adds markdownlint overrides
.golangci.yml Adds golangci-lint v2 configuration
.github/workflows/test.yml Switches to make targets + reusable ignite action
.github/workflows/systemtests.yml Adds systemtests workflow using shared actions/make targets
.github/workflows/systemtests.yaml Removes old systemtests workflow
.github/workflows/release.yml Simplifies release workflow to reuse build workflow
.github/workflows/lint.yml Adds a dedicated golangci-lint workflow
.github/workflows/build.yml Adds build workflow orchestrating lint/tests/build+artifacts
.github/actions/install-ignite/action.yml Sets default Ignite version input

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

roomote-v0[bot]
roomote-v0 bot previously approved these changes Mar 20, 2026
Copy link

@roomote-v0 roomote-v0 bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All 9 previously identified issues are resolved. The three security audit findings (rate-limit proxy bypass, redelegation undercount, chain ID domain separation) have been addressed correctly with well-structured code and comprehensive tests. No new issues found.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants