99801, HYPE as the gas token, and a Blockscout API for contract verification.
Chain configuration
Chainstack serves Elysium Testnet. Kinetiq has not published the Elysium Mainnet network details yet.
Elysium’s HYPE comes from HyperEVM through a 1:1 bridge, so you can fund an Elysium Testnet account from the faucet or by bridging testnet HYPE from HyperEVM Testnet.
See Elysium methods for per-method availability.
MetaMask
Add Elysium Testnet as a custom network. On Chainstack, get your Elysium endpoint, then in MetaMask select Add a custom network and fill in:- Network name — Elysium Testnet
- Default RPC URL — your Chainstack Elysium endpoint
- Chain ID —
99801 - Currency symbol — HYPE
- Block explorer URL —
https://explorer-elysium-testnet.t.conduit.xyz
<explorer URL>/tx/<hash>, and this explorer serves that path. The Kinetiq explorer at elysium.kinetiq.xyz/testnet-explorer shows the same chain but serves transactions at /transaction/<hash>.
ethers.js
Install ethers.js:viem
Elysium is not in viem’s bundled chain list, so define it withdefineChain:
multicall3 entry lets client.multicall batch contract reads into a single eth_call.
web3.py
Install web3.py:web3.py rejects lowercase addresses with
InvalidAddress. Wrap any address you did not get from the library itself in Web3.to_checksum_address(), as in the main.py example.Foundry
Install Foundry and pass your Chainstack endpoint with--rpc-url.
Read chain data with cast:
forge create. Without --broadcast, forge create only simulates the deployment.
forge verify-contract prints leaves out the /testnet-explorer path. Open the verified contract at https://elysium.kinetiq.xyz/testnet-explorer/address/DEPLOYED_CONTRACT_ADDRESS.
Hardhat
In a Hardhat 3 project that uses@nomicfoundation/hardhat-toolbox-viem, add Elysium Testnet to hardhat.config.ts. The chainDescriptors entry gives hardhat verify the address of the Elysium Testnet Blockscout API.
configVariable reads ELYSIUM_RPC_URL and ELYSIUM_PRIVATE_KEY from environment variables or the Hardhat keystore, which keeps the endpoint and the key out of the config file.
Deploy with an Ignition module, for example ignition/modules/Counter.ts:
Elysium behaviors that affect tooling
A HYPE transfer needs more than 21,000 gas. Nitro adds the cost of posting the transaction to the parent chain to its gas, reported asgasUsedForL1 in the receipt, so a plain transfer uses about 21,140 gas and eth_estimateGas returns more than 21,000. A transaction with a hard-coded gas limit of 21000 returns -32000 intrinsic gas too low. ethers.js, viem, web3.py, Foundry, and Hardhat all estimate gas when you don’t set a limit.
HyperCore precompiles are not available. Elysium does not have HyperEVM’s HyperCore read precompiles (0x0000000000000000000000000000000000000800 and up) or the CoreWriter contract (0x3333333333333333333333333333333333333333). A call to one of these addresses succeeds and returns empty data, as a call to any address without code does, so a contract ported from HyperEVM reverts when it decodes the result, not at the call. Kinetiq plans a HyperCore market-data precompile and an ElysiumCoreWriter predeploy for an ArbOS upgrade after the Mainnet launch. See Building on Elysium.
Pending transactions are never delivered. Elysium has a single sequencer and no public mempool. eth_subscribe("newPendingTransactions") and eth_newPendingTransactionFilter return an ID but deliver nothing, so an ethers.js provider.on("pending") listener never fires. Watch new blocks or transaction receipts instead. See Pending transactions are accepted but never delivered.
Block-count limits cover little time. Elysium produces about four blocks per second, so limits defined in blocks span much less time than on Ethereum. A 10,000-block eth_getLogs request covers about 40 minutes of chain time, and eth_getProof serves state from less than 127 blocks behind the tip, about 30 seconds. Paginate log backfills accordingly. See EVM range limits and EVM eth_getProof history limits.