Layer model
| Layer | Role | Developer-facing surface |
|---|---|---|
| EVM execution | Runs Solidity bytecode, Ethereum transaction types, logs, receipts, and contract standards. | JSON-RPC, wallets, Foundry, Hardhat, Remix, ethers, viem |
| Cosmos-native modules | Maintain chain-native state for bank, staking, distribution, governance, slashing, IBC, and custom policy modules. | Cosmos SDK messages, queries, REST/gRPC, module keepers |
| Precompile bridge | Exposes selected native module and cryptographic capabilities to Solidity at stable addresses. | Fixed-address or token-pair precompiles called from EVM contracts |
| Interoperability | Verifies and transports cross-chain state and packets through IBC and light-client semantics. | ICS02 and ICS20 precompiles, IBC modules, relayer-facing flows |
Request flow
| Flow | Path through the system | Output |
|---|---|---|
| Standard contract call | EVM JSON-RPC -> EVM execution -> state update | Ethereum-compatible receipt and logs |
| Native module call from Solidity | EVM transaction -> precompile -> Cosmos module keeper -> state update | Ethereum-compatible receipt plus native module effects |
| Cosmos SDK transaction | Cosmos transaction path -> ante/validation -> module keeper -> state update | Cosmos transaction response and indexed events |
| IBC transfer from Solidity | EVM transaction -> ICS20 precompile -> IBC transfer keeper -> packet lifecycle | EVM receipt plus IBC packet handling |
Trust boundaries
- EVM bytecode follows Ethereum execution semantics for contract logic, gas metering, logs, and receipts.
- Native modules own their own state and validation rules; precompiles expose controlled entry points into that state.
- Cross-chain safety depends on source-chain consensus, light-client verification, packet commitments, acknowledgements, and timeout handling.
- Operational controls such as the circuit breaker and IBC breaker are native modules with defined enforcement scope.
What this means for app developers
- Existing EVM applications can start with the standard EVM surface and only use precompiles when they need native functionality.
- Contracts that call precompiles should treat them as system interfaces with versioned behavior, not ordinary deployable contracts.
- Integrations that read historical state should decide whether JSON-RPC, an indexer, or an archive node is the right source.
- Cross-chain applications should design around packet acknowledgement and timeout paths, not only the happy path.