This guide explains which fees apply when bridging, how funds move through a transaction, and the best practices to follow when implementing custom fees.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.
Fee breakdown
The following fees can apply:| Fee | When it applies | Amount | Recipient |
|---|---|---|---|
| Custom fee | Conditionally. 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) fee | Conditionally. On FAST transfers only; SLOW (Standard) transfers skip this fee. | Varies by source blockchain. See CCTP fees. | Circle CCTP (the underlying protocol) |
| Forwarding Service fee | Conditionally. 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: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).
Source wallet signs the total debit
The source wallet signs a transaction for 1,010.30 USDC (bridge amount + custom
fee).
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%).
CCTP applies the Fast Transfer protocol fee
CCTP takes a protocol fee (0.10 USDC in this example) for a Fast Transfer.
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.
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
- 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,
10rather than10000000for 10 USDC. App Kit handles base-unit conversion internally.