# Cross-Chain Token (CCT) Tutorials
Source: https://docs.chain.link/ccip/evm/tutorials/cross-chain-tokens
Last Updated: 2025-05-19

> For the complete documentation index, see [llms.txt](/llms.txt).

> **NOTE: Prerequisites**
>
> Familiarize yourself with the [CCT standard](/ccip/concepts/cross-chain-token/overview) and [CCIP
> architecture](/ccip/concepts/architecture/overview) before proceeding with these tutorials.

Before diving into the [tutorials](#tutorials), it's important first to understand the overall procedure for enabling your tokens in CCIP. This procedure involves deploying tokens and token pools, registering administrative roles, and configuring token pools to enable secure token transfers using CCIP. The diagram below outlines the entire process:

![Process for enabling a token in CCIP.](/images/ccip/CCIP_enabled_tokens_flowchart.jpg)

### Understanding the Procedure

The steps in the diagram highlight the flow of actions needed to enable a token for cross-chain transfers. These steps will be the foundation of the tutorials. Whether you're working with an Externally Owned Account (EOA) or a **Smart Account** (such as one using a multisig scheme), the overall logic remains the same. You'll follow the same process to enable cross-chain token transfers, configure pools, and register administrative roles.

In the following tutorials, we will walk through each step of the process to give you hands-on experience, from deploying your token to registering and configuring token pools. The process will apply equally whether you use an EOA or a Smart Account (such as with multisig transactions), ensuring flexibility across different account types.

### Key Steps to Keep in Mind:

1. **Token Deployment**: If the token is not yet deployed, you'll deploy an ERC20-compatible token.
2. **Admin Registration**: The token administrator must be registered in the [`TokenAdminRegistry`](https://github.com/smartcontractkit/chainlink-ccip/tree/contracts-ccip-v2.0.0/chains/evm/contracts/tokenAdminRegistry/TokenAdminRegistry.sol) via self-service.
3. **Pool Deployment and Configuration**: Token pools are deployed, linked to tokens, and configured to manage cross-chain token transfers.

The tutorials will implement the logic of this process, which involves deploying and configuring token pools and registering administrative roles, step-by-step.

## Tutorials

- [Register from an EOA (Burn & Mint)](/ccip/evm/tutorials/cross-chain-tokens/register-from-eoa-burn-mint-foundry): Register a cross-chain token with the Burn & Mint mechanism using an EOA. Hardhat and Foundry versions available.
- [Register from an EOA (Lock & Mint)](/ccip/evm/tutorials/cross-chain-tokens/register-from-eoa-lock-mint-foundry): Register a cross-chain token with the Lock & Mint mechanism using an EOA. Hardhat and Foundry versions available.
- [Set Token Pool Rate Limits](/ccip/evm/tutorials/cross-chain-tokens/update-rate-limiters-foundry): Set rate limits for token pools to control cross-chain token transfer flow. Hardhat and Foundry versions available.
- [Set Token Transfer Fee Config](/ccip/evm/tutorials/cross-chain-tokens/set-transfer-fee-config-foundry): Configure token transfer fee parameters directly on your v2 token pool, overriding FeeQuoter defaults. Hardhat and Foundry versions available.
- [Configure a Sender Allowlist with AdvancedPoolHooks](/ccip/evm/tutorials/cross-chain-tokens/configure-sender-allowlist-advanced-pool-hooks-foundry): Deploy and attach AdvancedPoolHooks to your v2 token pool to restrict outbound transfers to approved sender addresses. Hardhat and Foundry versions available.
- [Enforce ACE Policies on CCIP Token Transfers](/ccip/evm/tutorials/cross-chain-tokens/enforce-ace-policies-foundry): Connect source and destination AdvancedPoolHooks to Chainlink ACE Policy Engines and exercise preflight and postflight rejections with live transfers. Hardhat and Foundry versions available.

> **CAUTION: Educational Example Disclaimer**
>
> This page includes an educational example to use a Chainlink system, product, or service and is provided to
> demonstrate how to interact with Chainlink's systems, products, and services to integrate them into your own. This
> template is provided "AS IS" and "AS AVAILABLE" without warranties of any kind, it has not been audited, and it may be
> missing key checks or error handling to make the usage of the system, product or service more clear. Do not use the
> code in this example in a production environment without completing your own audits and application of best practices.
> Neither Chainlink Labs, the Chainlink Foundation, nor Chainlink node operators are responsible for unintended outputs
> that are generated due to errors in code.