Cross-Chain Token Standard - Architecture (SVM)
The Cross-Chain Token (CCT) architecture offers a streamlined, self-service approach to enabling cross-chain operations to any token. The CCT standard is token logic agnostic, meaning token developers can deploy pre-audited token pool contracts to turn any SPL-compatible token into a CCT or deploy their own custom token pool contracts for bespoke token use cases. Importantly, CCTs do not require token developers to inherit any CCIP-specific code within their token's smart contract.
The CCT standard leverages the Chainlink Cross-Chain Interoperability Protocol (CCIP) for cross-chain transfers and allows token developers to configure, manage, and transfer tokens across multiple blockchains.
The architecture diagrams below provide an overview of how CCT fits within the CCIP ecosystem, illustrating the interaction between key components.
Source Chain

Destination Chain

The CCIP architecture for SVM-based blockchains (e.g., Solana) is described on this page, where we focus specifically on cross-chain token management.
Architecture
This document explains the four key components of CCIP's Cross-Chain Token architecture on SVM:
- Token: SPL token requirements and registration for CCIP integration
- Token Pool: Self-contained programs that execute cross-chain token operations
- Router: Central coordinator for token administration and outbound transfers
- OffRamp: Handler for inbound cross-chain token reception and release
Each component builds on the previous, forming a secure, integrated system for cross-chain token transfers. The sections below are organized in dependency order - understanding each component provides the foundation for understanding how they work together in the complete architecture.
Token
In the Cross-Chain Token (CCT) architecture, the token is an SPL Mint managed by either the standard SPL Token program or Token-2022 (Token Extensions). To enable cross-chain transfers, every token requires:
- Registration: Establishes a token administrator role and creates the TokenAdminRegistry PDA that governs CCIP integration
- Pool-Specific Requirements: Token requirements vary by chosen pool type:
- BurnMint pools: Must support
mint_to
andburn
instructions; mint authority must be transferable to the pool - LockRelease pools: Must support
transfer_checked
instruction; no mint authority requirements
- BurnMint pools: Must support
- Compatibility: Must support standard token interfaces including Associated Token Accounts and provide decimal precision
For detailed compatibility requirements and pool type selection guidance, see Tokens documentation. For the complete registration process and administrator role management, see Registration & Administration.
Token Pool
A Token Pool is a self-contained program responsible for executing cross-chain token transfers for a specific token. Each token must have exactly one pool per blockchain, deployed using one of three approaches: self-serve mode (recommended), self-deployed standard pools, or custom pools.
Cross-Chain Token Operations:
-
Source Chain Operations (called by Router during
ccip_send
): -
Destination Chain Operations (called by OffRamp during
execute
):
For comprehensive implementation details, deployment approaches, and technical requirements, see Token Pools documentation.
Router
The CCIP Router program is central to cross-chain token management. It has two flows:
-
Token Administration
-
TokenAdminRegistry (one PDA per mint): Stores the designated CCIP token administrator public key for a specific token mint (distinct from the SPL token's own mint authority) and references the token's pool address lookup table (ALT). The PDA is derived using seeds
[seed::TOKEN_ADMIN_REGISTRY, mint.key().as_ref()]
. This registry is created during token registration (see Token section) and governs all subsequent CCIP operations for that token. -
Token Pool Address Lookup Table: A Solana address lookup table that precisely defines the set of account addresses (including pool configuration PDAs, pool signer PDAs, and other required accounts) that are authorized for cross-chain operations with this token. The ALT contains a minimum of 9 required accounts in a specific order.
-
Administrator Methods: The token administrator can register or update cross-chain support for their mint through a sequence of instructions:
owner_propose_administrator
: Initiated by the mint authority to designate a token administrator.accept_admin_role_token_admin_registry
: Confirmation by the proposed administrator to accept the role.set_pool
: Links the token to a specific token pool configuration via an address lookup table, including writable account indexes for proper permission management.
For detailed step-by-step procedures, sequence diagrams, and complete registration workflows, see Registration & Administration.
-
Pool configuration: The TokenAdminRegistry maps each mint to exactly one token pool configuration through the ALT. This ensures that during cross-chain transfers, only the authorized token pool implementation can interact with the token. The registry also includes a
supports_auto_derivation
flag for enhanced account derivation capabilities. -
Security Architecture: The one-to-one mapping between tokens and pools provides critical security guarantees:
- Single Authorized Pool: Each token mint can only have one authorized pool configuration, preventing unauthorized token handling
- Atomic Pool Updates: Changing pool configurations requires updating the entire ALT reference, ensuring consistent state
- Access Control: Only the registry administrator can modify pool assignments, maintaining strict governance
-
Enhanced Account Derivation: When
supports_auto_derivation
is enabled, token pools can dynamically derive additional accounts during cross-chain operations. This allows pools to handle complex transfer scenarios with varying account requirements while maintaining security through the registry's controlled environment.
-
-
Lock or Burn Flow (when sending tokens cross-chain)
ccip_send
entrypoint: When a CCIP sender initiates a cross-chain token transfer, they invoke theccip_send
instruction on the Router, providing the token mint, amount, destination chain, receiver address, and other transaction parameters.- Multi-step Validation: The Router performs comprehensive validation:
- Verifies the destination chain is not cursed (via RMN Remote CPI)
- Checks sender authorization against allow-list if enabled
- Validates token amounts are non-zero
- Ensures proper account relationships and permissions
- Registry Validation: The sender must provide the token pool account addresses as part of the transaction. The Router validates these accounts by checking them against the addresses stored in the address lookup table (ALT) referenced by the mint's TokenAdminRegistry PDA, including proper writable permissions.
- Fee Processing: Before token interaction, the Router handles fee collection either in native SOL (with wrapping to WSOL) or supported fee SPL tokens through the fee quoter program.
- CPI to
lock_or_burn_tokens
: After validation, the Router executes a CPI call to the token pool'slock_or_burn_tokens
instruction, passing the appropriate context including nonce information and destination chain details for the token pool to either lock tokens in its Associated Token Account (ATA) or burn them from circulation, depending on the pool implementation (see Token Pool section for operation details).
OffRamp
The CCIP OffRamp program handles cross-chain token reception and release on the destination chain. This section focuses specifically on the execute phase. For the complete OffRamp functionality including commit phase and general message processing, see OffRamp Components.
During the execute phase, when processing messages containing token transfers, the OffRamp performs comprehensive token-specific validations and operations.
-
Token Pool Authorization Validation
Before releasing or minting tokens, the OffRamp validates its authorization to interact with token pools:
- Router Authorization Check: Verifies a special PDA exists, derived using seeds
[seed::ALLOWED_OFFRAMP, source_chain_selector.to_le_bytes().as_ref(), offramp.key().as_ref()]
with the Router as the program ID. This PDA must be owned by the Router, ensuring only authorized OffRamps can trigger token operations. - TokenAdminRegistry Validation: Checks the TokenAdminRegistry PDA (owned by the Router) to confirm the provided token pool accounts match the authorized configuration for the token mint.
- Address Lookup Table Verification: Validates that the address lookup table and TokenAdminRegistry PDAs correspond to the mint's registry record, ensuring interaction with the correct token pool program.
- Router Authorization Check: Verifies a special PDA exists, derived using seeds
-
Token Pool Operations
Once authorization is confirmed, the OffRamp executes token operations:
- CPI to
release_or_mint_tokens
: Makes a cross-program invocation to the token pool'srelease_or_mint_tokens
instruction, passing the validated cross-chain token transfer details. - Authorization Signer: Uses the
external_token_pools_signer
PDA as the CPI signer, derived using seeds[seed::EXTERNAL_TOKEN_POOLS_SIGNER, pool_program.key().as_ref()]
with the OffRamp as the program ID. Token pools recognize this as an authorized caller from the OffRamp. - Token Balance Verification: Validates that the recipient's Associated Token Account receives the correct amount of tokens as specified by the pool's response.
- CPI to
-
Cross-Chain Token Operations
The OffRamp handles different token pool types based on their configuration:
The OffRamp ensures secure token operations by leveraging the same TokenAdminRegistry and address lookup table system established by the Router (see Token section), maintaining the one-to-one mapping between tokens and their authorized pools while providing the necessary authorization for cross-chain token reception.
Component Integration
The four components work together to enable secure cross-chain transfers:
- Token Registration: Creates the TokenAdminRegistry PDA that authorizes all subsequent operations and links to the designated token pool
- Token Pool Deployment: Provides the execution logic for transfers, with the specific pool type (BurnMint or LockRelease) determined by the token's requirements and operational preferences
- Router Coordination: Manages token administration through the TokenAdminRegistry and validates outbound transfers by ensuring proper authorization against the pool's Address Lookup Table
- OffRamp Execution: Validates authorization against the same TokenAdminRegistry system and executes inbound transfers through CPI calls to the authorized token pool
This architecture ensures that every cross-chain token operation is governed by the initial registration decision, maintaining security and consistency across the entire transfer lifecycle. The one-to-one mapping between tokens and pools, established during registration and enforced by all components, provides the foundation for secure cross-chain token transfers.