Key differences for exchanges
Three Arc design decisions affect every exchange integration:Operational areas
Exchange integration covers three workflows:- Deposits—Subscribe to new blocks and detect incoming USDC transfers. Deterministic finality means a single confirmation is final.
- Withdrawals—Build, sign, and broadcast USDC transfers from your hot wallet. Gas is paid in USDC from the same balance.
- Liquidity (CCTP bridging)—Move USDC between Arc and other blockchains using Cross-Chain Transfer Protocol to manage treasury and liquidity pools.
Arc behaviors relevant to this integration
The following Arc behaviors can affect exchange operations. Each is documented in full on the EVM differences page:-
Deposit events come from the system emitter: Every native USDC movement
emits a
Transferlog from the system emitter (0xffffFFFfFFffffffffffffffFfFFFfffFFFfFFfE), not from the ERC-20 USDC contract (0x3600000000000000000000000000000000000000). Plain native sends emit no log at the ERC-20 contract address. An ERC-20transfer()emits logs at both addresses; count only the system emitter to avoid double-crediting. System emitter log values are in 18 decimals; divide by 10¹² before crediting user balances. See Detect deposits. -
balanceOfzero does not mean no USDC:balanceOf()returns 0 for amounts under 1×10⁻⁶ USDC (6-decimal minimum). Accounts hold sub-minimum dust spendable as gas. See USDC as the native gas token. -
Blocklist enforcement: Transfers to or from a blocklisted address revert
at runtime. The transaction is included in the block and consumes gas, but
state changes roll back. Check the destination address against
isBlacklisted()on the USDC contract before submitting withdrawals. See Process withdrawals. -
Empty-account drain: A USDC meta-transaction (
transferWithAuthorization) that fully drains a brand-new deposit address reverts. Unlike a regular native send, a meta-transaction does not increment the deposit address’s nonce, so after a full drain the resulting state (zero nonce, zero balance, no code) triggers Arc’s empty-account check and the transaction reverts. Initialize any deposit address with a prior transaction before sweeping it using a meta-transaction. A protocol fix is planned for a future release. See Known limitation: draining an empty account. -
Block timestamps are non-decreasing, not strictly increasing: Sub-second
blocks can share the same timestamp. Use block number, not
block.timestamp, for deposit sequencing and event ordering. See Fee market and block behavior. -
Minimum base fee is 20 Gwei: Transactions with
maxFeePerGasunder 20 Gwei are rejected by the mempool. This applies to all hot wallet operations, including withdrawals and deposit sweeps. See Process withdrawals. -
Transaction attribution with Memo contracts: For transfers routed through
the Memo contract (
0x5294E9927c3306DcBaDb03fe70b92e01cCede505) or Multicall3From (0x522fAf9A91c41c443c66765030741e4AaCe147D0), the CallFrom precompile preserves the original sender, sotx.fromand theTransferevent’sfromare still your EOA wallet. For compliance attribution, read from theTransferlogs and theMemoevent’s indexedsender. See Process withdrawals.
What you need
Before you start, confirm you have the following:Integration guides
Detect deposits
Subscribe to blocks and detect incoming USDC transfers with
single-confirmation finality.
Process withdrawals
Build, sign, and broadcast withdrawal transactions using USDC for both value
and gas.
Bridge USDC (CCTP)
Move USDC liquidity to and from Arc using Cross-Chain Transfer Protocol.
Custody platforms
Register Arc in supported custody platforms.