Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.arc.network/llms.txt

Use this file to discover all available pages before exploring further.

This guide explains which fees apply when bridging, how funds move through a transaction, and the best practices to follow when implementing custom fees.

Fee breakdown

The following fees can apply:
FeeWhen it appliesAmountRecipient
Custom feeConditionally. When you implement custom bridge fees.You define (on top of the bridge amount).90% to your fee recipient; 10% to Arc
Cross-Chain Transfer Protocol (CCTP) feeConditionally. On FAST transfers only; SLOW (Standard) transfers skip this fee.Varies by source blockchain. See CCTP fees.Circle CCTP (the underlying protocol)
Forwarding Service feeConditionally. When you enable the Forwarding Service.Per Forwarding Service fees. Deducted from mint on destination.Circle CCTP

How funds flow through a transfer

The following example shows what happens when a user wants 1,000 USDC to arrive at the destination after a Fast Transfer, with a 10 USDC custom fee on that transfer, and the Forwarding Service enabled. The bridge amount is 1,000.30 USDC so that after the example CCTP protocol fee (0.10 USDC) and Forwarding Service fee (0.20 USDC), 1,000 USDC is credited to the recipient:
1

User initiates the bridge transfer on the source chain

The user initiates a 1,000.30 USDC bridge transfer on the source blockchain (sized for 1,000 USDC net to the destination after the example fees).
2

You add the custom fee

You add a 10 USDC (about 1%) custom fee.
3

Source wallet signs the total debit

The source wallet signs a transaction for 1,010.30 USDC (bridge amount + custom fee).
4

Source chain splits the custom fee

The 10 USDC custom fee is split on the source blockchain:
  • Arc receives 1 USDC (10%).
  • Your fee recipient receives 9 USDC (remaining 90%).
5

Bridge amount is forwarded to CCTP

The 1,000.30 USDC bridge amount is forwarded to CCTP.
6

CCTP applies the Fast Transfer protocol fee

CCTP takes a protocol fee (0.10 USDC in this example) for a Fast Transfer.
7

Forwarding Service applies the destination mint fee

The Forwarding Service deducts its fee (0.20 USDC in this example) from the amount to be minted on the destination blockchain.
8

Destination wallet receives the net amount

The destination wallet receives 1,000.00 USDC on the destination blockchain.
This flow is illustrated in the following diagram:

Best practices for custom fees

Follow these best practices when implementing custom fees:
  • Treat the custom fee as an amount added on top of the bridge transfer. Do not subtract it from the bridge amount.
  • Validate that the user’s wallet balance covers both the bridge amount and the custom fee. The following code shows an example balance check:
TypeScript
const requiredBalance = parseFloat(amount) + parseFloat(customFee);
if (userBalance < requiredBalance) {
  throw new Error(`Insufficient balance. Need ${requiredBalance} USDC`);
}
  • Use a fee recipient address on the source blockchain. Do not use an address on the destination.
  • In your UI, display the following to the user before they confirm the transaction:
    • The total source wallet debit: bridge amount + custom fee
    • The full fee breakdown: bridge amount, custom fee, CCTP Fast Transfer fee (if applicable), and Forwarding Service fee (if using the Forwarding Service)
  • Return human-readable decimal strings. For example, 10 rather than 10000000 for 10 USDC. App Kit handles base-unit conversion internally.