Contract Addresses
Precompiles, program IDs, and per-chain deployed contract addresses.
Precompile addresses are built into the Rome EVM program and are identical on every chain. Per-chain deployed contracts are canonical in the Rome registry. The Hadrian and Martius tables below list the headline contracts that the registry (release v0.2.0) marks live; the registry is the single source of truth, and a contract can be redeployed after this page was written. See Reading the contracts list for how to pick the live address in code.
Precompiles (all chains)
Standard Ethereum precompiles, with mainnet-equivalent semantics:
ecrecover
0x0000000000000000000000000000000000000001
SHA-256
0x0000000000000000000000000000000000000002
RIPEMD-160
0x0000000000000000000000000000000000000003
identity
0x0000000000000000000000000000000000000004
modexp
0x0000000000000000000000000000000000000005
BN254 add
0x0000000000000000000000000000000000000006
BN254 mul
0x0000000000000000000000000000000000000007
BN254 pairing
0x0000000000000000000000000000000000000008
blake2f
0x0000000000000000000000000000000000000009
Rome non-EVM precompiles, for reaching into Solana (interfaces in rome-solidity/contracts/interface.sol):
System
0xFF00000000000000000000000000000000000007
ISystemProgram
PDA derivation, base58 conversion
CpiProgram
0xFF00000000000000000000000000000000000008
ICrossProgramInvocation
Arbitrary CPI + cross-state reads
HelperProgram
0xFF00000000000000000000000000000000000009
IHelperProgram
ATA/PDA creation, SPL transfers, gas↔lamports
Withdraw
0x4200000000000000000000000000000000000016
IWithdraw
Withdraw SOL/SPL from EVM to Solana
SystemCached
0xFF00000000000000000000000000000000000004
ISystemCached
Cached-track System helpers
SplCached
0xFF00000000000000000000000000000000000005
ISplCached
Cached-track SPL operations
ASplCached
0xFF00000000000000000000000000000000000006
IAssociatedSplCached
Cached-track ATA operations
WithdrawCached
0xFF0000000000000000000000000000000000000b
IWithdrawCached
Cached-track withdraw
A contract uses one track — legacy (SplCached off) or cached — consistently; the two are not mixed within a call.
Program IDs
rome-evm programs (the Solana program that runs the EVM), per Rome network:
devnet (hosts Hadrian)
RPTWwELXAY4KC9ZPHhaxp7Sq1hHtU3HNEgLbSegCcWf
testnet (hosts Martius)
RomeTaTNPJNBxtB3Wong9geVTtkEFJfUqgktQVq3iSX
mainnet
RomePq9X3iAoTr813HR7uRarafFDUJty6GdiEceYpzX
Well-known Solana programs (same as anywhere on Solana):
SPL Token
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
SPL Token-2022
TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
Associated Token
ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL
System Program
11111111111111111111111111111111
Metaplex Token Metadata
metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s
Rome ZK EVM on Solana devnet
These v0.3.0 programs are shared by operator-run ZK EVM chains on Solana devnet. The tagged program list is the source for these IDs.
zk-inbox
28948c2Qt1QtG2XJA823ytzCfj7U5cNNm3FuM2KoXsAa
zk-settlement
8anSjJZu5vgfNbESPLoKudVBNEraDZASwKJnkDLTCaGo
veritas
2cLGd9FKC7TiZrEHCvpw291AwXNcGgP9nDT4W3PHLe5k
zk-bridge
27TbMDUyVynpFpqeKygpUMcDzWKHfW4k9aRN5yCysLEQ
Node image: ghcr.io/rome-protocol/rome-zk-evm:v0.3.0.
Deployed contracts — Hadrian (devnet, 200010)
Headline contracts, taken from the live entries of the registry (v0.2.0). The full set (SPL wrappers, Uniswap V2/V3/V4, Aave, oracle feeds) is in the registry.
ERC20SPLFactory
0x37c13e4ff21fb914eb24014dcbd0f8dbeaa31078
Multicall3
0xb7180d3c46632b582b99d9af3daae394fab9ae4c
OracleAdapterFactory
0x52b008771fc95b4674a4f3533570b3d223f27f68
BatchReader
0x2869f0a96572e7fb15036656e9a32fd17346499b
RomeBridgeWithdraw
0x6eeacb4e6006b7a29c8141f69b6c75346dedec73
MeteoraDAMMv1Factory
0xd68b355f62643de0ec40243cba8f699f959ea3c4
UniswapV3Factory
0xD9E323088561D40267767b52252595ea9cF1D5bD
UniswapV4PoolManager
0x8a281Be9B5173B2F52328437eAa0d272791707f7
Deployed contracts — Rubicon (mainnet, 7531)
Headline contracts (the public registry publishes the Hadrian and Martius sets today; the Rubicon set is listed here). Wrappers: wUSDC 0x0952d233b0c254cd375f3bfb3e5869c1a906f9b3, wETH 0x01e8b3573da1d4b7b4b1ce0932cf07c8af0c92e9, wSOL 0xc4e29e0f726a906e93277cbbc37bf27a9848a113.
ERC20SPLFactory
0x4068aa7482dc15e9f78e22fbe0f884531c83ae6e
Multicall3
0xd6e0b13ea70aea0d44db083544f01d8b7693a759
OracleAdapterFactory
0x6a1340dd86c3951b6f13d9001b3951d56a2fe581
BatchReader
0x580dc0ecb226530ee8a90b57e0f0cd2555fb4f0f
RomeBridgeWithdraw
0xceea191761cdba2fc589996d7dd096e57db29c84
WETH9
0x8dc8bf908efa4511f71a9e2ed95f46a70507f1ae
UniswapV2Factory
0x23af4d2065d24b42a1a17f22b963c9216d0a1dc2
UniswapV2Router
0x445d7af7888db44a4904b63336cc43446dfb37f7
UniswapV3Factory
0x02aed7762fdc8bae826e7ee0ac2d2e1f754ba025
SwapRouter (V3)
0x680b7645c63421e33584a02aca91be6642d3d034
NonfungiblePositionManager (V3)
0xfb132adf6b7d811408f3639e91c8f638bddd6123
QuoterV2 (V3)
0x1d68d09dcc3a8c1b9aa8f0e2b138205c04bad4a7
Deployed contracts — Martius (testnet, 121214)
Headline contracts, taken from the live entries of the registry (v0.2.0). The full set is in the registry.
ERC20SPLFactory
0x405ded76ebae104ebe8345a649c6cbbf37efff00
Multicall3
0x549afb8019a29ece3ba3b3d9c13208c441a309ea
OracleAdapterFactory
0x8c92fd70360df63246cd0c8247119c79234b26ae
BatchReader
0xab10948dc8b5bdaea0b31266b663022e7492e9cd
RomeBridgeWithdraw
0x306cb6b1a072af9ac5752a2be49bc52b02a20a52
MeteoraDAMMv1Factory
0xdfe655f64325f93abef8b429387928ef16ba4c5d
UniswapV3Factory
0x7fbe0271395c57c12761a3d6db80ef1c315c63f8
SPL_ERC20_USDC (gas token)
0xd3201dc0f6fd1fe12c1fc297fb2b35927ad483b0
Reading the contracts list
Each chain folder in the registry has a contracts.json. It is a list of contracts. Every entry has a name and a versions[] list, and each version has an address, a version and a status of live, deprecated or retired. A contract that was redeployed keeps its old versions in the list, so the first or the last item is not necessarily the one to use. Pick the version whose status is "live". A few entries (Hadrian's Aave contracts) have more than one live version, so filter on status and choose on purpose rather than taking the first match.
getContracts(chainId) returns the list for that chain, or null if the chain is not published. Some entries have no live version at all (Hadrian's RomeswapMinimalRouter is one), so check that the find found something before reading .address. The registry package is installed from GitHub, not npm: npm install github:rome-protocol/rome-registry#v0.2.0.
Environments
Rubicon (mainnet)
7531
rubicon.mainnet.romeprotocol.xyz
Live
Martius (testnet)
121214
martius.testnet.romeprotocol.xyz
Live
Hadrian (devnet)
200010
hadrian.testnet.romeprotocol.xyz
Live
Last updated
Was this helpful?