Base and Ethereum RPC with Flashblocks
On the shelf at Prism
Ethereum and Base JSON-RPC on nodes we run, with Flashblocks on Base. Over HTTP at /rpc/<chain>, a websocket at the same path, or the call_rpc tool over MCP.
Price and how to start
$0.000001 per millisecond a call runs, on a line. Without a line, a call costs $0.00025 and runs for up to 250 ms.
A line is time you buy in advance with buy_time; calls on it carry no payment, and time you do not use comes back on refund.
First call on a channel deposits at least $0.004918. Later calls spend it. The unspent balance is refundable.
sample_rpc is free: 60 calls an hour per network address, per tool.
One MCP address for everything on Prism. No account, no API key.
https://mcp.zeamprism.com/mcp
How to connect · Price · For agents
What it does
Base is archive: state at any block.
Ethereum has state for the most recent 7,200 blocks, about a day; it is not archive.
Base "pending" is the next block as it builds, updated about every 200 ms (Flashblocks).
Streams, on the websocket at /rpc/<chain>?line=<credential> with eth_subscribe. base: newHeads, logs, syncing, newFlashblocks, pendingLogs, newFlashblockTransactions. eth: newHeads, logs, newPendingTransactions, syncing.
Base streams send: newHeads, each new block header; logs, each log that matches the filter; newFlashblocks, the next block so far, as a full block object with its transactions, resent as it grows; newFlashblockTransactions, each transaction hash; pendingLogs, each log in the next block as it builds.
Ethereum streams send: newHeads, each new block header; logs, each log that matches the filter; newPendingTransactions, each transaction hash.
newFlashblocks arrives about every 200 ms. logs and pendingLogs take an {address, topics} filter, or none.
newPendingTransactions on Base is refused: Base has no public mempool, so this stream would open and stay silent. Use newFlashblockTransactions.
If our connection to the node drops, your subscription stays open under the same id, resumes when the node is back, and a notice in the stream says how long was missed.
There is no eth_sendBundle.
Node height and stream state are in /status.json, with the last time every item listed here was checked against the nodes.
base methods
eth_blobBaseFee eth_blockNumber eth_call eth_callBundle eth_callMany eth_chainId eth_config eth_createAccessList eth_estimateGas eth_feeHistory eth_gasPrice eth_getAccount eth_getBalance eth_getBlockByHash eth_getBlockByNumber eth_getBlockReceipts eth_getBlockTransactionCountByHash eth_getBlockTransactionCountByNumber eth_getCode eth_getFilterChanges eth_getFilterLogs eth_getHeaderByHash eth_getHeaderByNumber eth_getLogs eth_getProof eth_getRawTransactionByBlockHashAndIndex eth_getRawTransactionByBlockNumberAndIndex eth_getRawTransactionByHash eth_getStorageAt eth_getStorageValues eth_getTransactionByBlockHashAndIndex eth_getTransactionByBlockNumberAndIndex eth_getTransactionByHash eth_getTransactionBySenderAndNonce eth_getTransactionCount eth_getTransactionReceipt eth_getUncleByBlockHashAndIndex eth_getUncleByBlockNumberAndIndex eth_getUncleCountByBlockHash eth_getUncleCountByBlockNumber eth_maxPriorityFeePerGas eth_newBlockFilter eth_newFilter eth_newPendingTransactionFilter eth_protocolVersion eth_sendRawTransaction eth_sendRawTransactionSync eth_simulateV1 eth_syncing eth_uninstallFilter net_listening net_peerCount net_version web3_clientVersion web3_sha3 txpool_content txpool_contentFrom txpool_inspect txpool_status debug_codeByHash debug_executionWitness debug_executionWitnessByBlockHash debug_getBadBlocks debug_getRawBlock debug_getRawHeader debug_getRawReceipts debug_getRawTransaction debug_getRawTransactions debug_intermediateRoots debug_stateRootWithUpdates debug_storageRangeAt debug_traceBlock debug_traceBlockByHash debug_traceBlockByNumber debug_traceCall debug_traceCallMany debug_traceTransaction base_transactionStatus eth_baseFee eth_getBlockAccessList
eth methods
eth_blobBaseFee eth_blockNumber eth_call eth_callBundle eth_callMany eth_chainId eth_config eth_createAccessList eth_estimateGas eth_feeHistory eth_gasPrice eth_getAccount eth_getBalance eth_getBlockByHash eth_getBlockByNumber eth_getBlockReceipts eth_getBlockTransactionCountByHash eth_getBlockTransactionCountByNumber eth_getCode eth_getFilterChanges eth_getFilterLogs eth_getHeaderByHash eth_getHeaderByNumber eth_getLogs eth_getProof eth_getRawTransactionByBlockHashAndIndex eth_getRawTransactionByBlockNumberAndIndex eth_getRawTransactionByHash eth_getStorageAt eth_getStorageValues eth_getTransactionByBlockHashAndIndex eth_getTransactionByBlockNumberAndIndex eth_getTransactionByHash eth_getTransactionBySenderAndNonce eth_getTransactionCount eth_getTransactionReceipt eth_getUncleByBlockHashAndIndex eth_getUncleByBlockNumberAndIndex eth_getUncleCountByBlockHash eth_getUncleCountByBlockNumber eth_maxPriorityFeePerGas eth_newBlockFilter eth_newFilter eth_newPendingTransactionFilter eth_protocolVersion eth_sendRawTransaction eth_sendRawTransactionSync eth_simulateV1 eth_syncing eth_uninstallFilter net_listening net_peerCount net_version web3_clientVersion web3_sha3 txpool_content txpool_contentFrom txpool_inspect txpool_status debug_codeByHash debug_executionWitness debug_executionWitnessByBlockHash debug_getBadBlocks debug_getRawBlock debug_getRawHeader debug_getRawReceipts debug_getRawTransaction debug_getRawTransactions debug_intermediateRoots debug_stateRootWithUpdates debug_storageRangeAt debug_traceBlock debug_traceBlockByHash debug_traceBlockByNumber debug_traceCall debug_traceCallMany debug_traceTransaction trace_block trace_call trace_callMany trace_filter trace_get trace_rawTransaction trace_replayBlockTransactions trace_replayTransaction trace_transaction
Refused before the node is asked: the signing methods (eth_sendTransaction, eth_sign, eth_signTransaction, eth_signTypedData; the node holds no keys), debug_ methods that control the node (debug_setHead, profiling, verbosity, raw database access), eth_subscribe outside the websocket, a namespace a chain does not have (trace_ on Base, base_ on Ethereum), a method listed for another chain only (eth_baseFee on Ethereum, eth_getBlockAccessList on Ethereum), and every other namespace.
Any other method in a served namespace that is not listed here is passed to the node, and the node's answer is what you get.
Tools
call_rpc
Ethereum and Base JSON-RPC on nodes we run. Base serves eth_, net_, web3_, txpool_, debug_ and base_ methods; Ethereum serves eth_, net_, web3_, txpool_, debug_ and trace_ methods. The full list is in /llms.txt and is checked against the nodes every hour.
Base is archive: state at any block. Ethereum has state for the most recent 7,200 blocks, about a day; it is not archive.
Base "pending" is the next block as it builds, updated about every 200 ms (Flashblocks): eth_getBlockByNumber ["pending", true].
To stream instead of polling, open the websocket at /rpc/<chain>?line=<credential> and eth_subscribe. Base: newHeads, logs, syncing, newFlashblocks, pendingLogs, newFlashblockTransactions. Ethereum: newHeads, logs, newPendingTransactions, syncing.
Send with eth_sendRawTransaction. The node holds no keys, so signing methods are refused.
$0.000001 per millisecond on a line. Without a line, $0.00025 for a call of up to 250 ms.
{"chain":"base","method":"eth_blockNumber","params":[]}
sample_rpc
A free sample of the nodes call_rpc uses, to check them before you pay. No wallet. Eight read-only methods: eth_chainId, eth_blockNumber, eth_gasPrice, net_version, web3_clientVersion, net_peerCount, eth_syncing, txpool_status. For any other method, call_rpc.
60 calls an hour per network address, per tool.
{"chain":"base","method":"eth_blockNumber"}
Also on the shelf
Wallet funding traces and clustering on Base · An immutable on-chain notepad on Base