What is HyperEVM?
HyperEVM is Hyperliquid's Ethereum-compatible execution layer. It runs smart contracts and exposes familiar Ethereum JSON-RPC methods for accounts, blocks, transactions, contract calls, and event logs. HyperCore is Hyperliquid's exchange layer for markets, orders, and positions; see the HyperCore overview when you need trading or exchange data.
A HyperEVM application can deploy contracts, read contract state, send transactions, and watch contract events. Some activity crosses between HyperCore and HyperEVM, so the route you choose can affect the transactions and logs returned for a block.
HyperEVM's Ethereum compatibility lets you use tools such as Foundry, Hardhat, and Viem. For a working example with Foundry and Viem, see Read HyperCore Oracle Prices in HyperEVM.
Quicknode services for HyperEVM
Your Quicknode Hyperliquid endpoint has two HyperEVM paths. The /nanoreth path also supports WebSocket connections.
| Route | Use it for | Protocol |
|---|---|---|
/evm | Standard Ethereum JSON-RPC on recent blocks, including contract calls and transaction submission | HTTP |
/nanoreth | Historical queries, transaction tracing, and debugging | HTTP |
/nanoreth | New blocks and contract events as they arrive | WebSocket |
Use /evm for recent state and ordinary transaction operations. Choose /nanoreth when you need older blocks, debug_* or trace_* methods, or an eth_subscribe WebSocket connection. Both paths are available on all plans; see Pricing & Plans.
Before you send a request
Create an endpoint in the Quickstart and copy its provider URL. Keep the endpoint hostname and token, then use /evm or /nanoreth as the final path. If the copied URL already ends in /evm, replace that path when switching to /nanoreth. For WebSocket, use wss:// with /nanoreth. The examples below use a mainnet hostname; for testnet, use the hostname from your testnet endpoint.
The /evm route retains recent data only. Older blocks are pruned approximately every 12 hours, and requests outside the retained range can return invalid block height. The /nanoreth archive has full mainnet history; on testnet, its history begins at block 34112653 rather than genesis.
How to use each route
Recent state with /evm
Send an HTTP JSON-RPC request to https://your-endpoint.hype-mainnet.quiknode.pro/your-token/evm. This example fetches the latest block:
curl https://your-endpoint.hype-mainnet.quiknode.pro/your-token/evm \
-X POST \
-H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest",false],"id":1}'
Use this route for recent account and block queries, contract calls against current state, and broadcasting transactions. It supports HTTP only.
Archive, debug, and trace with /nanoreth
Send the same JSON-RPC envelope to https://your-endpoint.hype-mainnet.quiknode.pro/your-token/nanoreth for historical state or trace and debug methods. This example traces a block:
curl https://your-endpoint.hype-mainnet.quiknode.pro/your-token/nanoreth \
-X POST \
-H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","method":"debug_traceBlockByNumber","params":["0xbdd86d"],"id":1}'
Use /nanoreth for historical eth_call requests and methods such as debug_traceTransaction or trace_transaction. Complex traces can take longer, so set an appropriate client timeout.
Live subscriptions with /nanoreth
HyperEVM WebSocket connections use wss://your-endpoint.hype-mainnet.quiknode.pro/your-token/nanoreth. The /evm path does not support WebSocket. Subscribe with eth_subscribe to receive new block headers or contract events:
const WebSocket = require('ws');
const ws = new WebSocket('wss://your-endpoint.hype-mainnet.quiknode.pro/your-token/nanoreth');
ws.on('open', () => {
ws.send(JSON.stringify({
jsonrpc: '2.0',
id: 1,
method: 'eth_subscribe',
params: ['newHeads']
}));
});
ws.on('message', (data) => {
console.log('New block:', JSON.parse(data));
});
WebSocket responses have a size limit. For large results, use an HTTP POST request instead; an oversized WebSocket response returns error -32616.
Method compatibility
| Method type | /evm | /nanoreth |
|---|---|---|
Standard Ethereum queries such as eth_getBalance and eth_getBlockByNumber | Recent blocks | Full available history |
Transaction submission with eth_sendRawTransaction | Supported | Supported |
Historical contract calls with eth_call | Current state only | Historical state |
debug_* and trace_* methods | Not supported | Supported |
eth_subscribe over WebSocket | Not supported | Supported |
The HyperEVM method reference lists the available Ethereum JSON-RPC methods. Trace and debug methods are listed in the HyperEVM sidebar.
Differences to account for
The two routes can return different views of Hyperliquid's internal system activity:
- System transactions:
/nanorethincludes HyperCore-to-HyperEVM system transactions in block queries that/evmdoes not return. These transactions havegasPrice: 0. If your application displays only user transactions, account for those system transactions when processing/nanorethblocks. - Transfer events:
/nanorethincludes additional ERC-20 transfer events from HyperCore bridging activity ineth_getLogsresponses and WebSocket subscriptions. - Transaction lookups: A system transaction hash can return “transaction not found” on
/evm. Useeth_getSystemTxsByBlockHashoreth_getSystemTxsByBlockNumberon/evmto access system transactions.
HyperEVM contracts can also read selected HyperCore data, such as oracle prices, through precompiles. See the HyperCore oracle prices guide for an example.