Skip to content

Fees, gas, and limits

The hub charges a configurable fee when it accepts a request. Quote the consumer’s current tariff rather than hard-coding a price.

Recorded for the mainnet deployment on September 29, 2026:

Setting Value
Base fee 0.00933 USDC
Fee per callback gas unit 40 gwei of native USDC
Default callback gas 100,000
Fee at default callback gas 0.01333 USDC
Maximum callback gas per consumer 1,000,000
Fee at that maximum 0.04933 USDC
Hub callback gas ceiling 2,000,000
Pending requests per consumer 256
Pending requests across the hub 4096
Requests per block No configured cap

Custom consumer tariffs can differ. A quote reads the active on-chain configuration.

callbackGas = requestedGas == 0 ? tariff.defaultCallbackGas : requestedGas
fee = tariff.baseFee + tariff.feePerGas × callbackGas

baseFee and feePerGas are uint128; the gas and pending-limit fields are uint32. A consumer may have a custom tariff or use the default.

Fee values use the chain’s native 18-decimal units. On Arc, native fee accounting is in USDC. Do not treat these values as six-decimal ERC-20 transfer amounts.

(uint128 fee, uint32 resolvedGas) = hub.quote(consumer, gasLimit);

Inside the consumer, getFeeV2 quotes for that caller. Outside it, use the explicit consumer address.

Send the exact fee. Overpayment is retained. The fee is not recalculated for an accepted request when later tariffs change. The request fee pays for the delivery attempt and is not refunded on expiry.

Quantity Purpose
Request transaction gas Paid by the sender to execute the request and consumer wrapper.
callbackGas Budget forwarded by the hub to the consumer’s callback; part of the service fee formula.
Fulfillment transaction gas Paid by the relayer for proof verification, storage, and callback execution.

Requesting 100,000 callback gas does not set the whole request transaction’s gas limit. Estimate your actual consumer call, allowing for state changes before inclusion.

The hub rejects a callback budget above the smaller of the consumer’s maxCallbackGas and the global callbackGasCeiling. It does not silently reduce that budget.

Setting Scope
Tariff.maxPending Pending requests per consumer.
Limits.maxPendingTotal Pending requests across the hub.
Limits.maxRequestsPerBlock Accepted requests per block; zero disables this cap.
Limits.callbackGasCeiling Highest permitted callback budget across tariffs.

These checks run before a lane index is allocated. Fulfillment and on-chain expiry free pending slots. New consumer addresses do not bypass the global cap.

Limits protect capacity; they do not reserve a delivery deadline for a particular request. Configuration and RPC performance determine throughput alongside chain capacity.

Read the deployed tariff for request pricing. The performance reference records observed mainnet delivery times.