Skip to main content
Metal exposes Ethereum JSON-RPC over HTTP with targeted overrides for MIP20 gas and additive methods for finality, retained blob sidecars, node metadata, and MIP20 diagnostics. The method pages in this tab document each method and send real requests to Metal’s public endpoints.

Choose a network

Every method page has a server selector with both networks: Testnet is the default, and the developer examples in these docs target it. Devnet state may be wiped at any time, so don’t rely on devnet block numbers, hashes, or balances staying valid. To send testnet requests from a method page, open Try it and paste your endpoint ID into the endpointId field under Server. Your endpoint ID is a credential: anyone who has it can spend your account’s credits. The playground keeps it in this browser for every method page, and sends each request from your browser straight to Metal.

Test the connection

Create an endpoint in the Metal console and replace <endpoint-id> below with your endpoint ID. See RPC endpoint setup for the setup steps. Requests can be batched. This asks for the chain ID, latest block height, and finalized consensus state in one round trip:

How requests work

Metal follows JSON-RPC 2.0. Send each request as an HTTP POST to your /v1/<endpoint-id> URL, with jsonrpc, method, ordered params, and an id in the body. The response echoes the id. Use the same endpoint URL for every method, without appending a method name to the path. The bare https://rpc-testnet.metalntwx.com/v1 answers 402 with a price: an agent with only a wallet buys an endpoint there over x402. Each page pre-fills a valid request, so once your endpoint ID is set, read-only methods succeed as-is. Methods that take a transaction hash, block hash, or address are pre-filled with placeholders; replace them with real values from the network you selected. Calling eth_getBlockByNumber with "latest" is an easy way to get a current block hash.

Wallet-facing overrides

Metal adapts several Ethereum methods so standard wallets can quote and submit transactions against its MIP20-denominated gas model.

State proofs and blob sidecars

eth_getProof returns account and storage proofs against a block’s state root. Its balance field is the EVM account’s native balance, rather than the MIP20 balance returned by Metal’s eth_getBalance override. Proving a MIP20 balance requires a storage proof at the token contract address for keccak256(abi.encode(holder, uint256(0))). Slot 0 is the base slot of the _balances mapping, rather than a holder’s balance. For holder 0x0000000000000000000000000000000000000001, the derived key is 0xada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d. metal_getBlobSidecars retrieves retained EIP-7594 sidecars by execution block hash. It returns null for blocks outside the canonical finalized chain or without a retained verified sidecar. See Blob Transactions and Sidecars for ordering and verification requirements.

Block tags and finality

Block-reading methods accept the standard Ethereum block selectors. For settlement decisions, use "finalized" or compare the receipt’s block against consensus_status.finalized. A transaction hash identifies a submission, and a successful receipt reports EVM execution; neither alone proves finality.

Errors

Errors come back in-band as a JSON-RPC error object with code and message in place of result. Protocol-level errors use the standard codes: Transaction admission failures are returned by eth_sendRawTransaction with a more specific message.

Error codes

Match Metal admission and MIP20 transfer failures to corrective actions.

Connect to testnet

Wallet and SDK connection details for the public testnet.