Blocks, gas and RPC
The HyperEVM produces small blocks every second and big blocks every minute, prices gas with EIP-1559 in HYPE, and serves a JSON-RPC with no historical state.
HyperCore and the HyperEVM share one state, so the HyperEVM launched with deliberately low throughput, to be raised in steps. The docs call heavy HyperEVM bandwidth use technically risky and tie gas spikes under heavy demand to that limit. Users want fast blocks and deployers want big ones, so throughput is split into two streams.
Small blocks often, big blocks rarely
Section titled “Small blocks often, big blocks rarely”Say your deployment needs 10M gas. No small block (3M) fits it, so it waits for a big block (30M), which comes once a minute.
Both kinds share one increasing sequence of EVM block numbers; with a block duration of x, the first L1 block in each x-second slot produces one. Each kind has its own mempool, held as on-chain state. Headers carry no kind flag; one production indexer calls a block big when its gas limit is at least 5,000,000.
Opting in to big blocks
Section titled “Opting in to big blocks”Small blocks are the default. Big blocks need this HyperCore L1 action (signing), so the sender must already be a HyperCore user; an EOA becomes one by receiving a HyperCore asset such as USDC.
{"type": "evmUserModify", "usingBigBlocks": true}The flag is HyperCore account state, not a transaction parameter. It survives restarts and applies to every transaction from the address until set back with "usingBigBlocks": false (eth_usingBigBlocks reads it).
So set it, deploy, unset: a forgotten flag leaves every later transaction waiting up to a minute.
Gas is HYPE, and the tip is burned too
Section titled “Gas is HYPE, and the tip is burned too”EIP-1559 is on and the base fee is burned. Unlike most EVM chains, the priority fee is burned too, to the zero address’s EVM balance, which the docs attribute to HyperBFT consensus.
| Method | Returns |
|---|---|
eth_gasPrice |
base fee for the next small block |
eth_bigBlockGasPrice |
base fee for the next big block (the dual-block page calls it bigBlockGasPrice) |
eth_feeHistory |
base fee history, as on any EIP-1559 chain |
Building a transaction
Section titled “Building a transaction”Pinned byte for byte against viem in one production client:
type 2 (EIP-1559), empty access listchainId 999 mainnet, 998 testnetnonce eth_getTransactionCount(address, "pending")tip eth_maxPriorityFeePerGas (0 today)maxFee 2 * latest base fee from eth_feeHistory + tipgas eth_estimateGas * 1.3Big-block senders take the base fee from eth_bigBlockGasPrice. The docs list eth_getTransactionCount as latest-block only, so track your own nonces when several transactions are in flight.
The RPC answers only at the latest block
Section titled “The RPC answers only at the latest block”The official JSON-RPC is rpc.hyperliquid.xyz/evm (mainnet) and rpc.hyperliquid-testnet.xyz/evm (testnet), with no websocket. The same host’s rpc.hyperliquid.xyz/explorer shows what HyperCore did with a CoreWriter action (CoreWriter).
There is no historical state: eth_call, eth_estimateGas, eth_getBalance, eth_getCode, eth_getStorageAt and eth_getTransactionCount answer only at the latest block. Custom methods:
| Method | Purpose |
|---|---|
eth_bigBlockGasPrice |
base fee for the next big block |
eth_usingBigBlocks |
whether an address is sending to big blocks |
eth_getSystemTxsByBlockHash, eth_getSystemTxsByBlockNumber |
the system transactions that originate from HyperCore, such as the credit of a HyperCore to HyperEVM transfer |
To index without the RPC, a non-validating node writes blocks and receipts to ~/hl/data/evm_block_and_receipts. The requester-pays S3 buckets hl-mainnet-evm-blocks and hl-testnet-evm-blocks hold the same data, one LZ4-compressed MessagePack file per block (running a node, data).
Wrapped HYPE
Section titled “Wrapped HYPE”WHYPE (18 decimals) is an immutable system contract, abbreviated 0x555...5 in the docs: the WETH9 source with name and symbol changed.
The numbers
Section titled “The numbers”| Parameter | Value |
|---|---|
| Chain id | 999 (0x3e7) mainnet, 998 (0x3e6) testnet |
| Small block | 1 s, 3M gas |
| Big block | 60 s, 30M gas |
| Pending nonces accepted per address | next 8 |
| Mempool expiry | 1 day |
| HYPE decimals on the HyperEVM | 18 |
| Priority fee | burned; eth_maxPriorityFeePerGas returns 0 |
eth_getLogs |
up to 4 topics; block range cap recorded as 50 and as 1,000 (see below) |
| Public RPC rate limit | docs: same IP limits as the API server; one production tool records 100 requests per minute per IP |
| Boundary error code | 10055 |
| Wrapped HYPE | 0x5555555555555555555555555555555555555555 |
Wallet setup
Section titled “Wallet setup”Use chain id 999, currency symbol HYPE and RPC URL rpc.hyperliquid.xyz/evm. Gas is HYPE, not ETH; a wallet asking for ETH usually has the network misconfigured.
One popular wallet builds a type 2 transaction with a legacy gas price field and fails with “Invalid transaction envelope type: specified type 0x2 but included a gasPrice instead of maxFeePerGas and maxPriorityFeePerGas”. The docs call it a known issue and suggest switching wallets.
Boundary errors and log scans
Section titled “Boundary errors and log scans”- Pre-EIP-155 transactions are accepted, with no chain id in the signature; the docs advise against any wallet that has ever sent one.
- Error code 10055 is a boundary error between HyperCore and the HyperEVM: nonce errors, insufficient funds, duplicate transaction hashes, underpriced replacements.
- Chunk
eth_getLogsand record which ranges succeeded; a skipped range is a hole. The 3,000,001-block scan behind this site had zero gaps.
Limits to plan around
Section titled “Limits to plan around”Two limits are recorded inconsistently, unresolved:
| Limit | Docs | Recorded | Plan for |
|---|---|---|---|
eth_getLogs block range |
50 blocks | official RPC 1,000; one third-party RPC 50,000 (3,000,001-block mainnet scan) | 50 until verified on your endpoint |
| RPC rate limit | same IP limits as the API server (rate limits) | 100 requests per minute per IP (one production tool) | 100 per minute until measured |
- Archive nodes serve historical blocks and code, not precompile history: a read precompile at an explicit block number fails (precompiles).
- Testnet S3 data starts at block 18,000,000. Earlier blocks were not backfilled.
For the other gas cost, charged on HyperCore, see moving assets.