preinstalls: contract runtime bytecode placed at fixed addresses during chain initialization. This removes the bootstrap tax of deploying basic infrastructure and ensures immediate compatibility with existing wallets, SDKs, and protocol tooling.
These contracts are identical or bytecode-equivalent to widely used deployments on Ethereum and major rollups, unless otherwise noted.
Contract Directory
| Name | Address | Reference | Notes |
|---|---|---|---|
| Create2 | 0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2 | Bytecode-only in root genesis | Deterministic deployment helper |
| Multicall3 | 0xcA11bde05977b3631167028862bE2a173976CA11 | Bytecode-only in root genesis | Batched read/write calls |
| Permit2 | 0x000000000022D473030F116dDEE9F6B43aC78BA3 | Bytecode-only in root genesis | Uniswap shared approvals and permit flows |
| Safe singleton factory | 0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7 | Bytecode also appears in x/vm/types.DefaultPreinstalls | Safe canonical singleton factory |
| EIP-2935 history storage | 0x0000F90827F1C53a10cb7A02335B175320002935 | Go-ethereum params.HistoryStorageCode | Historical block hash storage |
| ERC1820 registry | 0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24 | ABI committed under preinstalls | Interface registry and pseudo-introspection |
| EIP2470 singleton factory | 0xce0042B868300000d44A59004Da54A005ffdcf9f | ABI committed under preinstalls | Deterministic singleton factory |
| CreateX | 0xba5Ed099633D3B313e4D5F7bdc1305d3c28ba5Ed | Source and ABI committed under preinstalls | Universal CREATE/CREATE2/CREATE3 deployer |
| MultiSend | 0x998739BFdAAdde7C933B942a68053933098f9EDa | Source and ABI committed under preinstalls | Safe batch executor using delegatecall |
| MultiSendCallOnly | 0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B | Source and ABI committed under preinstalls | Safe batch executor without delegatecall |
| UniversalSigValidator | 0x7dd271fa79df3a5feb99f73bebfa4395b2e4f4be | Source and ABI committed under preinstalls | EIP-6492 / ERC-1271 signature validator |
| WETH9 | 0xc8Fb80fCc03f699C70ff0CC08C09106288888888 | Bytecode-only in root genesis | Wrapped native token contract |
Source of truth
| Surface | Source |
|---|---|
| Root chain preinstall list | genesis.json |
| VM genesis schema | proto/cosmos/evm/vm/v1/genesis.proto and proto/cosmos/evm/vm/v1/evm.proto |
| Runtime registration | x/vm/keeper/preinstalls.go |
| EVM genesis initialization | x/vm/genesis.go |
| Go default preinstalls | x/vm/types/preinstall.go |
| Governance registration message | proto/cosmos/evm/vm/v1/tx.proto |
| Local contracts package | contracts/package.json |
x/vm/types.DefaultPreinstalls. Treat the root genesis as the canonical list for the current chain configuration.
Genesis and runtime behavior
ThePreinstall schema has three fields:
| Field | Meaning |
|---|---|
name | Human-readable contract name. It is not part of EVM execution. |
address | Ethereum hex address where code will be installed. 0x prefixes and mixed case are accepted. |
code | Hex-encoded deployed runtime bytecode. 0x prefixes are accepted. Empty code and empty-code hashes are rejected. |
x/vm/genesis.go calls Keeper.AddPreinstalls. For each entry the keeper converts the address, computes the Keccak-256 code hash, rejects empty or conflicting code, creates an account, stores the code hash, and stores the code bytes.
No storage is initialized for preinstalls. These contracts execute as ordinary EVM bytecode after genesis, so calls use normal EVM gas accounting and normal Solidity revert data. There is no special precompile-style gas schedule.
On genesis export, preinstalls are exported as ordinary EVM contract accounts and the preinstalls array is empty. Governance can register more preinstalls through MsgRegisterPreinstalls, but only the configured VM authority, normally the Cosmos SDK governance module account, may execute that message.
Package and import guidance
The local contracts package is namedcosmos-evm-contracts and is currently version 2.0.0, but contracts/package.json does not define main, files, exports, or types. Treat this tree as repo-local contract assets, not as a stable npm subpath API.
Do not promise npm imports like cosmos-evm-contracts/preinstalls/createx/abi/abi-createx.json unless the package is formalized later. Current consumers should vendor or copy the files they need, or import them by relative path from a checked-out repository.
The preinstall ABI JSON files are raw ABI arrays, not Hardhat artifact objects with an abi wrapper field. No generated TypeScript binding package is committed for preinstalls; consumers who want typed ethers factories should generate TypeChain bindings from the committed ABI JSON files or Solidity sources.
Tooling examples
Hardhat and ethers
viem
Foundry
Foundry can compile Solidity sources once the preinstall tree is vendored or remapped into the project:Design Considerations
- Bytecode parity — Where possible, exact on-chain bytecode from Ethereum mainnet is reused to maximize compatibility with existing tools and audits
- Stable addresses — These addresses are stable across network upgrades. Breaking changes require migration tooling
- Safety — Contracts like
MultiSendCallOnlyprovide safer defaults (no DELEGATECALL) - Versioning — Address changes, bytecode changes, removed ABI entries, changed ABI entries, or changed genesis import semantics are breaking release changes
Usage Notes
- You can assume the presence of these contracts when writing dApps and tooling for c8ntinuum
- For local development,
local_node.shcurrently leavesapp_state.evm.preinstallsempty; do not assume these ecosystem preinstalls exist on a local chain unless the script is updated - If you rely on specific behavior (gas costs, revert semantics), refer to upstream source repositories and c8ntinuum’s pinned test expectations