Documentation Index
Fetch the complete documentation index at: https://docs.chainstack.com/llms.txt
Use this file to discover all available pages before exploring further.
What an RU is
A request unit (RU) is the metric Chainstack uses to measure each request against our request-based services. Different requests consume different resources, so pricing is tied to RUs rather than raw call counts. See current service pricing on the pricing page.Cost per request
| Request | Cost |
|---|---|
| Full | 1 RU |
| Archive | 2 RUs |
Full vs archive by protocol
For each protocol, here’s what counts as a full request (1 RU) and what counts as an archive request (2 RUs):| Protocols | Classification |
|---|---|
| Ethereum, Polygon, BNB Smart Chain, Arbitrum, Base, Optimism, Avalanche, Linea, Mantle, Berachain, Scroll, Zora, Sonic, Unichain, Monad, Hyperliquid (HyperEVM), Plasma, Kaia, Cronos, Gnosis Chain, Celo, Moonbeam, MegaETH, Ronin, Fantom, zkSync Era, Polygon zkEVM, Blast, Tempo | Less than 127 blocks behind the tip is full; 127 or more blocks behind is archive |
| Solana | Archive billing applies to specific methods when fetching historical slots. See Solana method scope below. |
| Bitcoin, TON, Sui, Aptos, Starknet, Polkadot, TRON, opBNB, Harmony | No archive split — every request is billed as full |
Method rules
Always 2 RUs
Alldebug_* and trace_* methods — including debug_traceTransaction, debug_traceBlockByNumber, and trace_block — are billed at 2 RUs regardless of block age, as they require archive state.
For per-protocol debug and trace capabilities, see Debug and trace APIs.
EVM methods affected by block age
The block-age rule in the table above applies to these EVM methods:eth_getBalanceeth_getCodeeth_getTransactionCounteth_getStorageAteth_calleth_getProofeth_callManyeth_createAccessList
Solana method scope
Archive billing on Solana applies only to these methods:getTransactiongetBlockgetBlockTimegetBlocksgetBlocksWithLimitgetSignaturesForAddressgetFirstAvailableBlockgetSignatureStatuses
firstAvailable + 5,000, where firstAvailable is the lowest slot our Solana full node still retains. Slots at or above this boundary are full (1 RU).
getSignaturesForAddress and getFirstAvailableBlock are always billed as archive, regardless of slot.
All other Solana methods are billed as full (1 RU) regardless of slot.
Two values shape the Solana archive boundary
- Ledger retention — each Solana full node is configured with
--limit-ledger-size 400000000(400 million shreds). Shreds are Solana’s network-propagation units, and the number produced per slot varies with block density, so this caps disk usage rather than fixing the slot count retained. - Safety buffer — 5,000 slots immediately above the pruning floor. Requests targeting these slots are routed to the archive backend to avoid races where the full node prunes data mid-request. This sets the boundary that triggers archive billing.
Putting it together
A call’s RU cost on Solana depends on the method and, for methods eligible for archive billing, the target slot. The ledger size (400M shreds) caps how far back the full node retains data; the 5,000-slot safety buffer above the pruning floor sets the actual billing boundary. For a sequence of calls:| Call | Why | Cost |
|---|---|---|
getBalance(account) | Not eligible for archive billing | 1 RU |
getTransaction(signature) on a recent transaction | Eligible; target slot above the boundary | 1 RU |
getTransaction(signature) on a transaction from months ago | Eligible; target slot below the boundary | 2 RUs |
getSignaturesForAddress(address) | Always archive | 2 RUs |
getBlock(slot=1) | Eligible; target slot far below the boundary | 2 RUs |
| Total | 8 RUs |
HTTP requests vs WebSocket subscriptions
A “request” is anything the node returns to you over the wire. The transport changes how those individual returns are counted.HTTP
Each JSON-RPC call counts as one request, regardless of how much data the response contains.eth_blockNumber— 1 request.eth_getLogsacross 2,000 blocks returning 5,000 events — still 1 request.eth_callsimulating a complex contract — 1 request.
WebSocket subscriptions
Subscriptions over WebSocket flip the counting model. Setting up the subscription counts as one request — and then each push notification the node sends to you counts as one more request.eth_subscribe newHeadson Ethereum mainnet (≈one new block every 12 s) — ~7,200 requests/day.eth_subscribe logsfiltered to one contract emitting 5 events per block — ~36,000 requests/day.eth_subscribe newPendingTransactionson a high-throughput chain — easily millions of requests/day.
If you’re running sustained subscriptions, consider an Unlimited Node — it uses RPS-tiered flat-fee pricing instead of per-request billing, so subscription throughput stops mapping to RU cost.
eth_newPendingTransactionFilter + eth_getFilterChanges): each poll that returns events is one request per call, not per event — but the call cadence is yours to control, unlike a WebSocket push.
Predicting whether an EVM call is full or archive
For any EVM protocol in the table above:- Read the chain tip with
eth_blockNumber. - Compute
tip − your_block. - If the result is
127or greater, the call is archive (2 RUs). Otherwise it’s full (1 RU).
eth_blockNumber, eth_chainId, net_version — are always full.