Deploy a Smart Contract on Elysium with Foundry and Hardhat
To deploy a smart contract on Elysium, point Foundry or Hardhat at the testnet RPC https://testnet-rpc.elysium.kinetiq.xyz with chain ID 99801, fund your deployer with testnet HYPE for gas, and deploy as you would on any EVM chain. Elysium runs stock ArbOS, so Solidity and Vyper compile unchanged.
This guide is for developers. It covers network settings, a minimal Foundry and Hardhat setup, verifying your deployment, and the few places where Elysium behaves differently from Ethereum. If you need background first, read Elysium's tech stack.
What are the Elysium network settings?
| Setting | Testnet | Mainnet |
|---|---|---|
| Chain ID | 99801 | 99901 |
| RPC | https://testnet-rpc.elysium.kinetiq.xyz | Official RPC to be published by Kinetiq |
| Gas token | HYPE (testnet) | HYPE |
| Explorer | elysium.kinetiq.xyz/testnet-explorer | Check Kinetiq's announcements |
| Parent chain | HyperEVM testnet (998) | HyperEVM mainnet (999) |
Community-run mainnet RPCs such as https://rpc-live.elysp.com and https://rpc-live.boxa.club are in use, but for production deployments wait for and prefer the official Kinetiq endpoint. Third-party RPCs can rate-limit or go down.
How do I get testnet HYPE?
Your deployer wallet needs testnet HYPE for gas. Follow our Elysium testnet faucet guide for the current faucet and bridging steps. Testnet gas price has been around 0.01 gwei, so a small amount covers many deployments. Add the network to your wallet with this MetaMask guide if you also want to test from a browser.
How do I deploy on Elysium with Foundry?
- Install Foundry and create a project with
forge init my-elysium-app. - Add the RPC to
foundry.tomlunder[rpc_endpoints]aselysium_testnet = "https://testnet-rpc.elysium.kinetiq.xyz". - Keep your key out of the repo. Export it in your shell as
PRIVATE_KEY, or better, import it into a Foundry keystore withcast wallet import deployer --interactive. - Check the connection:
cast chain-id --rpc-url elysium_testnetshould return99801. - Deploy:
forge create src/Counter.sol:Counter --rpc-url elysium_testnet --account deployer --broadcast. - For scripted deploys, use
forge script script/Deploy.s.sol --rpc-url elysium_testnet --account deployer --broadcast.
Forge prints the deployed address and transaction hash. Paste the hash into the testnet explorer to confirm.
How do I deploy on Elysium with Hardhat?
- Create a project with
npx hardhat init. - In
hardhat.config, add a network entry:elysiumTestnet: { url: "https://testnet-rpc.elysium.kinetiq.xyz", chainId: 99801, accounts: [process.env.PRIVATE_KEY] }. - Load the key from an environment file that is in
.gitignore, never hard-coded. - Compile with
npx hardhat compile. - Deploy with your script or Ignition module:
npx hardhat ignition deploy ./ignition/modules/Counter.js --network elysiumTestnet.
viem and ethers also work as-is. In viem, define a custom chain with id: 99801, a HYPE native currency with 18 decimals, and the RPC URL above.
What is different about Elysium for developers?
Elysium is an Arbitrum Orbit chain running stock ArbOS, so most things behave like Arbitrum. A few points catch people out:
- No observable mempool. There is a single sequencer and no public mempool. Pending-transaction filters return nothing. Do not build logic that watches pending transactions; wait for block inclusion and use receipts.
- Ordering by priority fee. Within a block, transactions are ordered by priority fee with no privileged lanes. If timing matters, set a priority fee rather than relying on submission order.
- Tracing via
debug_*only. Usedebug_traceTransactionand related calls.trace_*methods are not available, so tools that depend on them need configuring. - Gas in HYPE. Fees are paid in HYPE, bridged 1:1 from HyperEVM. Your scripts should read the native balance, not an ERC-20.
- Fast blocks. Testnet blocks arrived about every 0.25 to 0.32 s. Do not use block numbers as a stand-in for wall-clock time; use
block.timestamp. - Arbitrum-style L1 references. As on other Orbit chains,
block.numberinside a contract may not mean what you expect. Check Arbitrum's documentation on block numbers before relying on it. - Withdrawals take time. Moving assets back to HyperEVM is optimistic and finalizes after a challenge period. Design user flows with that delay in mind.
Arbitrum's own developer docs are the best reference for Orbit-specific behaviour, since Elysium does not modify ArbOS.
How do I check that my deployment worked?
- Read the code back. Run
cast code YOUR_ADDRESS --rpc-url elysium_testnet. An empty result means nothing was deployed at that address. - Call a view function. For the default counter,
cast call YOUR_ADDRESS "number()(uint256)" --rpc-url elysium_testnetshould return 0. - Check the receipt. A status of 1 means success. If it failed, trace it with
cast run TX_HASH --rpc-url elysium_testnet, which uses debug tracing under the hood. - Look it up on the explorer. The testnet explorer shows the creation transaction, gas used and any events.
If a deploy hangs, it is usually a wrong chain ID, an empty deployer balance or an RPC rate limit. Check those three before anything else.
Can I use HyperCore from my contract?
Not yet. A precompile for reading HyperCore market data and an ElysiumCoreWriter predeploy for routing trade-only orders are planned for an ArbOS upgrade about four weeks after mainnet. Wrap those calls behind an interface now and plug in the official addresses later. Our HyperCore integration guide explains the design.
How do I move to mainnet?
- Run your full test suite and a dry run on testnet first.
- Switch the chain ID to
99901and use the official mainnet RPC once Kinetiq publishes it. - Fund the deployer with real HYPE bridged from HyperEVM. See bridging HYPE to Elysium.
- Deploy, verify on the explorer, and transfer ownership to a multisig if your contract has admin roles.
Once your token or app has on-chain activity, it will show up on ElyScreener automatically. Launchpads and projects can also use embeddable charts on their own sites. Real funds mean real risk: audit what you can and never deploy untested code holding user money.
FAQ
What is the Elysium testnet chain ID?
99801. The RPC is https://testnet-rpc.elysium.kinetiq.xyz. Mainnet uses chain ID 99901.
Does Foundry work on Elysium?
Yes. Elysium runs stock ArbOS, so forge, cast and anvil-based workflows work with the Elysium RPC and no code changes.
Can I deploy Solidity contracts to Elysium without changes?
Yes. Solidity and Vyper compile unchanged. The differences are operational: no mempool, debug-only tracing and HYPE for gas.
Why does my pending transaction filter return nothing on Elysium?
Elysium has no observable public mempool. Pending filters return nothing, so rely on block inclusion and transaction receipts.
Does Elysium support trace_transaction?
No. Use debug_traceTransaction and other debug_* methods for tracing.
What do I pay gas in on Elysium?
HYPE, bridged 1:1 from HyperEVM. Testnet gas price has been around 0.01 gwei.
Open ElyScreener →