Solana

Solana Beta is live. Try BoltRPC Solana endpoints free - start your trial now.

How BoltRPC Request Units Work: Method Weights, Cost Calculation, Optimization

How BoltRPC calculates RPC costs: fixed method weights, full RU table, worked examples per plan, tips to reduce usage. Transparent pricing, no surprises.

BoltRPC
BoltRPC Team
16 min read
How BoltRPC Request Units Work: Method Weights, Cost Calculation, Optimization

How BoltRPC Request Units Work: Method Weights, Cost Calculation, Optimization

RPC request units (RUs) measure the computational cost of each method call to a blockchain node. Different methods consume different amounts of compute: a simple block number read requires minimal node resources, while scanning event logs across thousands of blocks requires significantly more. BoltRPC uses fixed, published weights per method so you always know the cost of a call before you build.


Why RPC Methods Don’t All Cost the Same

When your application calls an RPC endpoint, the node on the other end does real work. Not all work is equal.

Light reads like eth_blockNumber or eth_chainId require the node to return a single cached value. The CPU cost is negligible, the data size is minimal, the response is near-instant.

State reads like eth_getBalance or eth_getCode require the node to look up a value in the state trie. This involves disk I/O against the node’s state database.

Log queries like eth_getLogs require the node to scan through block receipts across a specified range, filter by topic and address, and return a variable-size payload. A query spanning 1,000 blocks with many matching events requires substantially more work than a single state read.

Transaction submission via eth_sendRawTransaction requires the node to decode and validate the transaction, check it against current state, propagate it to peers, and hold it in the mempool.

Debug and trace methods like debug_traceTransaction require the node to re-execute a transaction step by step, maintaining full EVM state at each opcode. This is orders of magnitude more expensive than any standard read.

Pool inspection methods like txpool_content require the node to serialize its entire pending transaction pool, which can hold thousands of transactions during high-activity periods.

Pricing that ignores these differences treats a mempool scan the same as a block number read. Method-based weighting reflects actual infrastructure cost. When weights are fixed and published, you can forecast your bill before a single line of code ships.


BoltRPC Request Unit Weight Table

BoltRPC assigns a fixed RU weight to every supported method. These weights never change mid-billing cycle. The tables below cover the full BoltRPC method catalog, grouped by category.

General Methods

MethodDescriptionRU Weight
web3_clientVersionReturns the current client version3
web3_sha3Returns Keccak-256 of the given data3
net_versionReturns the network ID (chain ID)3
net_listeningReturns true if client is listening for connections3
net_peerCountReturns the number of connected peers3
txpool_statusPending and queued transaction counts (Geth only)6
txpool_contentFromPending and queued transactions for a given address (Geth only)6
txpool_inspectTextual summary of pending and queued transactions (Geth only)6
txpool_contentAll pending and queued transactions (Geth only)12

Ethereum Methods

MethodDescriptionRU Weight
eth_protocolVersionReturns the Ethereum protocol version3
eth_syncingReturns node synchronization status3
eth_chainIdReturns the current chain ID3
eth_miningReturns true if the client is mining3
eth_hashrateReturns the node’s current hashrate3
eth_gasPriceReturns current gas price in wei3
eth_accountsReturns addresses owned by the client3
eth_blockNumberReturns the most recent block number3
eth_getBalanceReturns address balance at a given block3
eth_getStorageAtReturns value from a storage position at a given address3
eth_getTransactionCountReturns the number of transactions sent from an address3
eth_getBlockTransactionCountByHashReturns transaction count for a block by hash3
eth_getBlockTransactionCountByNumberReturns transaction count for a block by number3
eth_getUncleCountByBlockHashReturns uncle count for a block by hash3
eth_getUncleCountByBlockNumberReturns uncle count for a block by number3
eth_getCodeReturns the contract code at a given address3
eth_signSigns data with a specific account3
eth_sendTransactionCreates and broadcasts a transaction4
eth_sendRawTransactionSends a pre-signed transaction for broadcast5
eth_callExecutes a message call without creating a transaction3
eth_estimateGasEstimates the gas needed for a transaction3
eth_getBlockByHashReturns block information by hash3
eth_getBlockByNumberReturns block information by number3
eth_getTransactionByHashReturns transaction information by hash3
eth_getTransactionByBlockHashAndIndexReturns transaction by block hash and index3
eth_getTransactionByBlockNumberAndIndexReturns transaction by block number and index3
eth_getTransactionReceiptReturns transaction receipt by hash3
eth_getUncleByBlockHashAndIndexReturns uncle by block hash and index3
eth_getUncleByBlockNumberAndIndexReturns uncle by block number and index3
eth_newFilterCreates a new filter object3
eth_newBlockFilterCreates a filter for new block events3
eth_newPendingTransactionFilterCreates a filter for pending transactions3
eth_uninstallFilterUninstalls a filter3
eth_getFilterChangesPolls for filter changes since the last call3
eth_getFilterLogsReturns all logs matching a filter object3
eth_getLogsReturns logs based on filter criteria4
eth_subscribeSubscribes to events (newHeads, logs, newPendingTransactions)3
eth_unsubscribeUnsubscribes from an event using the subscription ID3
eth_getProofReturns account and storage values including Merkle-proof3
eth_maxPriorityFeePerGasReturns the priority fee needed to be included in a block3
eth_getCompilersReturns available compilers in the client8
eth_compileSolidityCompiles Solidity source code12
eth_subscriptionSubscription event stream3

Debug Methods (Geth/Parity specific)

MethodDescriptionRU Weight
debug_traceTransactionReturns the trace of a transaction6
debug_traceBlockByHashTraces a block by block hash6
debug_traceBlockByNumberTraces a block by block number6
debug_traceBlockFull stack trace of all transactions in a block6
debug_traceCallReturns trace result by executing an eth_call in block context6
debug_storageRangeAtReturns a storage range for a given address6
debug_accountRangeReturns an account range at a given block6
debug_getBadBlocksReturns a list of recent bad blocks seen on the network6

Personal Methods (Geth/Parity account management)

MethodDescriptionRU Weight
personal_newAccountCreates a new account6
personal_lockAccountLocks an unlocked account6
personal_ecRecoverReturns the address that signed the given data6
personal_unlockAccountUnlocks an account for a specified duration9
personal_signSigns data with a specific account12
personal_sendTransactionCreates, signs, and sends a new transaction20

Parity-specific Methods

MethodDescriptionRU Weight
parity_pendingTransactionsReturns the list of pending transactions6
parity_allTransactionsReturns all transactions for the given block6
parity_traceReplayTransactionReturns the trace replay of a given transaction hash12
parity_listStorageKeysReturns the list of keys at a specific storage location20

Parity Trace Methods

MethodDescriptionRU Weight
trace_callTraces a call at the given block6
trace_rawTransactionTraces a raw transaction for a given block6
trace_blockTraces all transactions in a block6
trace_callManyPerforms multiple call traces on top of the same block6
trace_filterReturns traces matching given filter6
trace_transactionReturns all traces of given transaction6
trace_replayTransactionReplays a transaction and returns the trace12
trace_replayBlockTransactionsReplays all transactions in a block and returns traces12

Whisper Protocol Methods (Geth)

MethodDescriptionRU Weight
shh_postSends a whisper message6
shh_versionReturns the current whisper protocol version6
shh_addToGroupAdds an identity to a group6
shh_newFilterCreates a Whisper filter6
shh_uninstallFilterUninstalls a Whisper filter6
shh_newIdentityCreates a new identity in Whisper9
shh_newGroupCreates a new Whisper group9
shh_getFilterChangesPolls Whisper for changes since the last call9
shh_getMessagesReturns messages that match the filter9
shh_hasIdentityChecks if the client holds private keys for a given identity12

The most frequently called methods in production (eth_call, eth_getBalance, eth_blockNumber) sit at 3 RUs. Standard write operations (eth_sendRawTransaction) cost 5 RUs. Debug and trace methods run at 6 RUs. The expensive outliers are Whisper identity operations (9-12 RUs), mempool serialization (12 RUs), Solidity compilation (12 RUs), and full storage iteration or signed transaction broadcast (20 RUs).

Fixed weights mean predictable budgeting. Before you write a single function, you know the exact RU cost of every call. Your infrastructure cost is a formula, not a surprise.


How to Calculate Your RPC Bill

Your monthly RU consumption is the sum of calls per method multiplied by the RU weight for that method, across your entire application.

Formula:

Total RUs = sum of (calls_per_method × weight_per_method)

Three worked examples across common production patterns:


Example 1: DeFi protocol (mixed read/write)

A DeFi lending protocol checks prices, reads user positions, submits liquidations.

MethodDaily CallsRU WeightDaily RUs
eth_call (price reads)50,0003150,000
eth_getBalance5,000315,000
eth_getLogs (event monitoring)2,00048,000
eth_sendRawTransaction (liquidations)20051,000
Total174,000/day

Monthly total: ~5.2M RUs. The Builder plan at 30M RUs covers this comfortably.


Example 2: NFT indexer (log-heavy)

An NFT indexer tracks Transfer events across multiple collections.

MethodDaily CallsRU WeightDaily RUs
eth_getLogs20,000480,000
eth_call (ownerOf queries)10,000330,000
eth_getBlockByNumber1,00033,000
Total113,000/day

Monthly total: ~3.4M RUs. The Builder plan at 30M RUs covers this comfortably. The Pro plan at 150M RUs gives room to scale before needing to upgrade.


Example 3: High-frequency trading bot (transaction-heavy)

A trading bot monitors blocks, simulates transactions, submits at high frequency.

MethodDaily CallsRU WeightDaily RUs
eth_blockNumber (polling)100,0003300,000
eth_call (simulations)50,0003150,000
eth_sendRawTransaction5,000525,000
txpool_content500126,000
Total481,000/day

Monthly total: ~14.4M RUs. The Builder plan at 30M RUs covers this. At 10x volume, the Pro plan at 150M RUs handles the scale.

The pattern across all three examples: standard production applications fit comfortably within lower-tier plans because the most common methods (eth_call, eth_blockNumber, eth_getBalance) carry the lowest weights.


How to Optimize Your RPC Usage

Understanding method weights opens a direct path to reducing your RU consumption without changing your application’s behavior.

Batch with multicall instead of individual eth_call requests

A standard ownership check loop calls ownerOf(tokenId) once per token. With a Multicall3 contract, you can batch 100 ownership checks into a single eth_call at 3 RUs instead of 300 RUs for 100 separate calls.

// 100 separate calls: 300 RUs
for (const tokenId of tokenIds) {
  await contract.ownerOf(tokenId); // 3 RUs each
}

// 1 multicall: 3 RUs total
const results = await multicall.aggregate3(calls); // 3 RUs for all 100

Cache eth_blockNumber aggressively

Polling eth_blockNumber every 500ms generates 172,800 calls per day (518,400 RUs). Ethereum produces a new block every 12 seconds. Caching the block number for 3 seconds reduces polling calls by 6x with no meaningful impact on freshness.

Replace polling with WebSocket subscriptions

A polling loop checking for new events via eth_getLogs every few seconds generates continuous RU load. A single WebSocket subscription to eth_subscribe("logs", filter) delivers events in real time at the cost of one persistent connection. For event-driven applications, subscriptions eliminate the polling cost almost entirely. See WebSocket vs HTTP RPC for implementation patterns.

Scope eth_getLogs queries precisely

eth_getLogs costs 4 RUs per call regardless of result size, but a query spanning 10,000 blocks puts more load on the node than one spanning 100 blocks. Keep ranges tight and paginate large historical queries. Always filter by specific contract address and topic signature to reduce the data the node needs to scan. See eth_getLogs in production for range management patterns.

Move debug methods off the critical path

debug_traceTransaction and related methods cost 6 RUs. They are essential for debugging but should never run in a production request path. Run traces offline or in a development environment. In production, use eth_getTransactionReceipt (3 RUs) for confirmation checks.


BoltRPC Plans and RU Quotas

PlanMonthly PriceRU QuotaSupport
Builder$4930M RUsCommunity
Pro$199150M RUsBusiness hours
Business$699500M RUs24/7 monitoring
Enterprise$1,4991B RUsDedicated node + team member

Monthly plan price is flat. Your infrastructure cost is the same every month regardless of which methods you call or how you distribute RU consumption across the billing period. Accepts credit card and crypto.

BoltRPC handles 2 billion daily requests and is trusted by Chainlink and Tiingo for production workloads. The fixed weight system applies at every scale: the same pricing model that works for a developer building a first protocol works for institutional trading infrastructure.

See full plan details at boltrpc.io/pricing.

Start your free 2-week trial at trial.boltrpc.io.


FAQ

What is an RPC compute unit? An RPC compute unit (or request unit) is a measure of how much computational work a blockchain node performs to respond to a method call. Methods requiring more CPU, disk I/O, or larger payloads consume more units. BoltRPC uses request units (RUs) as the basis for usage measurement.

Why do different RPC methods cost different amounts? Different methods require different levels of node work. Returning a cached block number requires negligible resources. Scanning log events across thousands of blocks, serializing the mempool, or replaying a transaction at opcode level requires substantially more CPU, memory, disk access. Fixed method weighting reflects actual resource consumption.

How many RUs does eth_getLogs cost on BoltRPC? eth_getLogs costs 4 RUs per call. Most standard read methods (eth_call, eth_getBalance, eth_blockNumber) cost 3 RUs. eth_sendRawTransaction costs 5 RUs. debug_* methods cost 6 RUs. The full weight table is published above.

What happens if I exceed my RU quota? Contact the BoltRPC team at boltrpc.io/contact to discuss upgrade options. Enterprise plans offer custom RU quotas with dedicated infrastructure.

How do I monitor my RU usage? RU consumption is visible in the BoltRPC dashboard with real-time tracking and a breakdown by method type.

Does BoltRPC pricing change based on which methods I call? The monthly plan price is fixed. RUs are your usage quota within that plan. A call to eth_sendRawTransaction (5 RUs) draws down your quota faster than eth_blockNumber (3 RUs), but your monthly cost does not change. You know your infrastructure bill before the billing cycle begins.

Are the RU weights the same across all chains? Yes. The RU weight table applies uniformly across all supported networks on BoltRPC.


<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What is an RPC compute unit?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "An RPC compute unit is a measure of how much computational work a blockchain node performs to respond to a method call. Methods requiring more CPU, disk I/O, or larger data payloads consume more units. BoltRPC uses request units (RUs) as the basis for usage measurement."
      }
    },
    {
      "@type": "Question",
      "name": "Why do different RPC methods cost different amounts?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Different methods require different levels of node work. Returning a cached block number is nearly free. Scanning log events across thousands of blocks or replaying a transaction at the opcode level requires substantially more CPU, memory, disk access. Fixed method weighting reflects actual resource consumption."
      }
    },
    {
      "@type": "Question",
      "name": "How many RUs does eth_getLogs cost on BoltRPC?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "eth_getLogs costs 4 RUs per call on BoltRPC. Most standard read methods cost 3 RUs. eth_sendRawTransaction costs 5 RUs. debug_* methods cost 6 RUs. The full weight table is published on the BoltRPC blog."
      }
    },
    {
      "@type": "Question",
      "name": "What happens if I exceed my RU quota?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Contact the BoltRPC team to discuss upgrade options. Enterprise plans offer custom RU quotas with dedicated infrastructure."
      }
    },
    {
      "@type": "Question",
      "name": "Does BoltRPC pricing change based on which methods I call?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "The monthly plan price is fixed. RUs are your usage quota within that plan. A call to eth_sendRawTransaction (5 RUs) draws down your quota faster than eth_blockNumber (3 RUs), but your monthly cost does not change. You know your infrastructure bill before the billing cycle begins."
      }
    },
    {
      "@type": "Question",
      "name": "Are the RU weights the same across all chains?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. The RU weight table applies uniformly across all supported networks on BoltRPC."
      }
    }
  ]
}
</script>

Frequently asked questions

Ready to build with high-performance RPC?

Start your free trial today. No credit card required. Access 20+ networks instantly.

Disclaimer: The content in this article is for informational purposes only and does not constitute financial, legal, or technical advice. Code examples and configurations are provided as-is. Always verify information with official documentation and test thoroughly in your own environment before deploying to production.

Continue reading