--- name: rpc description: Use when the user needs raw blockchain JSON-RPC access — contract reads (eth_call), native balances, blocks, transactions, logs, gas estimates, or any chain-native RPC method across 40 chains. One endpoint per chain via BlockRun's Tatum-backed gateway, $0.0030 per call, no node, no API key. Prefer blockrun_price / blockrun_dex / the paid tools when they already cover the question. triggers: - "rpc" - "json-rpc" - "eth_call" - "contract read" - "raw chain" - "node access" - "blockchain rpc" - "getBalance" - "block number" - "transaction receipt" - "event logs" - "tatum" --- # Multi-chain RPC — every supported chain, one tool `blockrun_rpc` POSTs a standard JSON-RPC 2.0 body to `/v1/rpc/{network}`. Flat **$0.0030 per call** ($0.002 base + the $0.001 transaction fee). A JSON-RPC **batch array charges per element but pays the flat fee only once** — $0.002 × n + $0.001, so a batch of 3 costs $0.0070 where three separate calls cost $0.0090. Batch whenever you can. Settlement in USDC via x402. Responses are cached briefly server-side for identical read calls (`X-Cache: HIT` is free of upstream latency but still billed). ## When to use which tool | Question | Tool | |---|---| | "What's ETH trading at?" | `blockrun_price` (free) | | "PEPE/WETH pool liquidity?" | `blockrun_dex` (free) | | "What's this wallet holding?" | `blockrun_rpc` (labels: no tool since Surf was retired 2026-09-06) | | "Call `balanceOf(0x...)` on this ERC-20" | **`blockrun_rpc`** | | "Latest block / tx receipt / event logs / gas price" | **`blockrun_rpc`** | | "Solana account info / slot / signatures" | **`blockrun_rpc`** | ## Networks EVM (use `eth_*` methods): | Key | Chain | | Key | Chain | |---|---|---|---|---| | `ethereum` | Ethereum | | `zksync` | zkSync Era | | `base` | Base | | `berachain` | Berachain | | `arbitrum` | Arbitrum One | | `unichain` | Unichain | | `arbitrum-nova` | Arbitrum Nova | | `monad` | Monad | | `optimism` | Optimism | | `chiliz` | Chiliz | | `polygon` | Polygon | | `moonbeam` | Moonbeam | | `bsc` | BNB Smart Chain | | `aurora` | Aurora | | `avalanche` | Avalanche C-Chain | | `flare` | Flare | | `fantom` | Fantom | | `oasis` | Oasis Sapphire | | `cronos` | Cronos | | `kaia` | Kaia (Klaytn) | | `celo` | Celo | | `sonic` | Sonic | | `gnosis` | Gnosis | | `xdc` | XDC Network | | `abstract` | Abstract | | `hyperevm` | HyperEVM | | `plume` | Plume | | `ronin` | Ronin | | `rootstock` | Rootstock (RSK) | | | | Non-EVM (chain-native methods): | Key | Chain | Method family | |---|---|---| | `solana` | Solana | `getSlot`, `getBalance`, `getAccountInfo`, `getSignaturesForAddress` | | `bitcoin` | Bitcoin | `getblockchaininfo`, `getblockcount`, `getrawtransaction` | | `litecoin` / `dogecoin` / `bitcoin-cash` / `zcash` | UTXO chains | Bitcoin-style RPC | | `near` | NEAR | `status`, `query` | | `sui` | Sui | `sui_getLatestCheckpointSequenceNumber`, `suix_getBalance` | | `ripple` | XRP Ledger | `account_info`, `ledger` | | `polkadot` / `kusama` | Substrate | `chain_getHeader`, `state_getStorage` | Unknown-but-wellformed slugs pass through to the Tatum gateway untouched — newly added chains work without an MCP update. A bad slug returns HTTP 400 with the supported list (no charge). ## Recipes ERC-20 balance (eth_call): ``` blockrun_rpc({ network: "base", method: "eth_call", params: [{ to: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC on Base data: "0x70a08231000000000000000000000000" }, "latest"] }) ``` Native balance: `method: "eth_getBalance", params: ["0x...", "latest"]` Tx receipt: `method: "eth_getTransactionReceipt", params: ["0x"]` Event logs: `method: "eth_getLogs", params: [{ fromBlock, toBlock, address, topics }]` — keep ranges small; huge ranges are rejected upstream (no charge). Gas: `method: "eth_gasPrice"` / `eth_estimateGas` Solana token account: `network: "solana", method: "getTokenAccountsByOwner", params: ["", {"mint": ""}, {"encoding": "jsonParsed"}]` Batch (charged per element, flat fee paid once — 3 calls = $0.0070, vs $0.0090 sent separately): ``` blockrun_rpc({ network: "ethereum", body: [ { jsonrpc: "2.0", id: 1, method: "eth_blockNumber" }, { jsonrpc: "2.0", id: 2, method: "eth_gasPrice" }, { jsonrpc: "2.0", id: 3, method: "eth_chainId" } ]}) ``` ## Failure semantics - Upstream timeout / 5xx → **no charge**, retry safe. - Malformed body / bad network → HTTP 400, **no charge**. - JSON-RPC-level errors (e.g. revert on `eth_call`) come back inside `result.error` — the call **is** charged (the node did the work).