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.
Arc mainnet launch tariff
Section titled “Arc mainnet launch tariff”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.
Fee formula
Section titled “Fee formula”callbackGas = requestedGas == 0 ? tariff.defaultCallbackGas : requestedGasfee = tariff.baseFee + tariff.feePerGas × callbackGasbaseFee 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.
Quote for the correct contract
Section titled “Quote for the correct contract”(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.
Three gas quantities
Section titled “Three gas quantities”| 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.
Intake limits
Section titled “Intake limits”| 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.
Backpressure and pricing
Section titled “Backpressure and pricing”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.
