CCIP Token Support
SkyBridge CCIP supports any ERC-20 token — you do not need to apply for listing or deploy anything yourself. When you bridge a token for the first time, the bridge handles the rest automatically.
How any token gets bridged
When you bridge an ERC-20 via CCIP:
- Source chain — the bridge locks (or burns, for previously bridged tokens) your tokens inside the Diamond.
- CCIP network — Chainlink nodes relay the cross-chain message.
- Destination chain — the
BridgeReceiverFacetreceives the CCIP message and either:- Unlocks tokens from escrow (if this chain was the origin)
- Mints new
SkyTokentokens (if this chain is not the origin)
On first arrival, if no SkyToken contract exists for that token on the destination chain, the bridge automatically deploys one using CREATE3. This means the SkyToken contract for a given token has the same address on every chain it ever reaches.
SkyToken
SkyToken is the ERC-20 contract the bridge deploys on destination chains. Key properties:
- Standard ERC-20 — works in any wallet or DeFi protocol that accepts ERC-20s
- Bridge-controlled mint/burn — the bridge (Diamond) controls mint/burn by default. The
ownerfield is set toaddress(0)at deployment; the Diamond holdsDEFAULT_ADMIN_ROLEand can rotate the CCIP admin viasetCCIPAdmin(requiresCCIP_OPERATOR_ROLE) - CCIP admin —
getCCIPAdmin()returns the Diamond address, enabling Chainlink's CCIP token admin registry to recognize the bridge as the authorized operator - Deterministic address — same CREATE3 address for the same token across all chains
Known caveats
These apply to any token you bridge via CCIP — check them before bridging an unfamiliar token:
Fee-on-transfer tokens
Tokens that automatically take a percentage of each transfer (e.g., some reflection tokens) can cause accounting issues. The bridge records the amount you send, but the actual amount that arrives at the Diamond may be less due to the built-in fee. The recipient receives the post-fee amount, which may not match what was shown in the UI at the time of bridging.
Centralized-function tokens
Tokens with owner-controlled functions — such as the ability to freeze balances, blocklist addresses, or forcibly transfer funds — retain those functions on the origin-chain contract but not on the bridge-deployed SkyToken. The bridge deploys a standard SkyToken, so centralized controls do not carry across chains.
SkyToken vs. standard bridge tokens
Bridge-deployed SkyToken contracts are not interchangeable with tokens deployed by other bridges (e.g., the Optimism Standard Bridge). If both a SkyToken version and an OP Standard Bridge version of the same token exist on a destination chain, they are different contracts at different addresses. You can trade them on L2 DEXs since both represent the same underlying 1:1 value, but they are distinct ERC-20s.
Checking a token before you bridge
- On the source chain, check whether the token implements a fee-on-transfer mechanism (you can check via a block explorer or the token's documentation).
- If unsure, try a small test transfer first.