Contracts

The Rave SettlementRouter address on each chain, what to approve, and what to call.

Every Rave trade settles through the Rave SettlementRouter, one contract per chain. You never need to hard-code its address: the API returns it on every trade.

What you needWhere it comes from
Address to approve (token_in spender)GET /v2/limits, assets[].sides.<buy|sell>.allowance_target
Address to callFirm quote, execution.transaction.to
Chain to call it onFirm quote, execution.transaction.chain_id
🚧

Always use the addresses from the API

Read the spender and the target from the API for every trade, check to and chain_id together before signing, and never edit the transaction data. Never approve or send to any other address on Rave's behalf.

SettlementRouter addresses

The table below is for allowlists and for checking execution.transaction.to. The same address is used on several chains, so the address alone does not identify the chain.

These addresses are stable. New chains are added as they go live; /v2/limits and the firm quote always carry the current one.

Quote tokens

Stablecoin quote tokens Rave prices against today, with their decimals. Chains without a row (for example Pharos 1672) have no quote token published yet. decimals belongs to the token contract on each chain, not to the ticker: USDC has 18 decimals on BNB Smart Chain and 6 on Ethereum and Base.

The set is live, so read chains[].quote_tokens[] from /v2/assets and convert with the decimals it returns for the exact token address you quote:

curl -s "$RAVE_API/v2/assets" -H "Authorization: Bearer ***" \
  | jq '[.[].chains[] | .chain_id as $c | .quote_tokens[] | {chain_id: $c, symbol, address, decimals}] | unique'

Reverts you may see

A settlement that fails on chain has no API error body. The one revert integrators most often need to decode is FillOutOfSignedWindow(uint256,uint256,uint16,uint16), selector 0x42aa024f: less than the quoted input arrived on an exact side. See Errors.


Did this page help you?