Rate Limits - Overview

CCIP rate limits are an operator-level control on token pools. They limit how much of a token can move across a specific CCIP lane over time, reducing blast radius during incidents and helping manage operational risk.

This documentation is for operators, token issuers, and administrators who manage rate limits on token pool contracts. Most integrators do not need to interact with rate limits. Changes are applied on-chain, take effect immediately, and directly affect transfer availability.

How rate limits work

Rate limits are capacity buckets that refill over time. Each bucket has three parameters:

  • isEnabled — whether the limit is active
  • capacity — maximum tokens before the bucket is depleted
  • rate — refill speed in tokens per second

Transfers consume capacity; if enough is not available, the transfer is rejected until the bucket refills. All values use the token's local smallest unit on the chain where the pool is deployed. When enabled, rate must be ≤ capacity.

Rate limit bucket

Available now

100,000 tokens

Full

Rate limit settings

100,000 tokens

Largest possible single transfer.

1,000 tokens/s

Tokens added back every second.

Transfer

30,000 tokens

Fits in the bucket right now.

Try a transfer

Set an amount and send it. Used capacity refills every second, up to the max capacity.

Illustrative values in whole tokens. On-chain, rate limits are set in the token's smallest unit.

Each token pool maintains up to four limiters per remote chain (v2.0):

BucketDirectionUsed for
DefaultOutbound / InboundWait-for-finality transfers
Fast-finalityOutbound / InboundFast-finality transfers (optional)

Fast-finality buckets are optional. If one is not enabled, fast-finality traffic falls back to the default bucket. Whether fast-finality is permitted at all is controlled by the pool owner via setAllowedFinalityConfig.

  • Outbound limits apply to sends from the local chain.
  • Inbound limits apply to receives on the local chain.

Outbound is configured on the source pool; inbound on the destination pool. Both sides of a lane must be configured for limits to behave as intended.

Because CCIP commits messages in batches and chains finalize in epochs, destination inbound limits should be ~5–10% higher than source outbound limits (deployment tooling typically uses 10% headroom).

StateConfigEffect
ActiveisEnabled=true, capacity > 0Transfers consume capacity and refill over time
DisabledisEnabled=false, capacity=0, rate=0No volume limit for that bucket
ThrottledisEnabled=true, capacity=0, rate=0All transfers blocked

Rate limits are scoped per token pool, remote chain, bucket type, and direction — they do not pause CCIP globally.

Why rate limits exist

Rate limits are a defensive mechanism. They help:

  • prevent large, single transfers from draining liquidity unexpectedly
  • limit exposure during misconfiguration, incidents, or active investigations
  • give operators time to react if abnormal activity is detected

Who should manage rate limits

Interact with rate limits only if you:

  • operate or administer a CCIP token pool (v2.0 or v1.x)
  • hold the pool owner role or rateLimitAdmin
  • understand token decimals on each chain you configure
  • accept responsibility for the operational impact of changes
RoleUpdate limitsAdd/remove lanes
OwnerYesYes
rateLimitAdminYesNo

Responsibility and risk

Managing rate limits directly affects the availability of cross-chain transfers for a token. Incorrect configuration can:

  • unintentionally halt bridging
  • allow more volume than intended
  • create congestion or stuck transfers

Changes are applied on-chain and take effect immediately. Always review parameters carefully, verify units, and use a multisig workflow where possible.

Get the latest Chainlink content straight to your inbox.