diff --git a/public/images/ccip/integrations/tempo/apply-chain-updates.png b/public/images/ccip/integrations/tempo/apply-chain-updates.png new file mode 100644 index 00000000000..bd4a2953d87 Binary files /dev/null and b/public/images/ccip/integrations/tempo/apply-chain-updates.png differ diff --git a/public/images/ccip/integrations/tempo/deploy-token-pool.png b/public/images/ccip/integrations/tempo/deploy-token-pool.png new file mode 100644 index 00000000000..3860182d70c Binary files /dev/null and b/public/images/ccip/integrations/tempo/deploy-token-pool.png differ diff --git a/public/images/ccip/integrations/tempo/set-pool.png b/public/images/ccip/integrations/tempo/set-pool.png new file mode 100644 index 00000000000..4b4eda86ec8 Binary files /dev/null and b/public/images/ccip/integrations/tempo/set-pool.png differ diff --git a/src/config/sidebar/__tests__/__snapshots__/ccip-dynamic.test.ts.snap b/src/config/sidebar/__tests__/__snapshots__/ccip-dynamic.test.ts.snap index 1ba061ceb7a..52b27a98a5c 100644 --- a/src/config/sidebar/__tests__/__snapshots__/ccip-dynamic.test.ts.snap +++ b/src/config/sidebar/__tests__/__snapshots__/ccip-dynamic.test.ts.snap @@ -981,6 +981,13 @@ exports[`CCIP Sidebar Configuration Snapshot should match the expected sidebar s "title": "HyperEVM Service Limits", "url": "ccip/service-limits/evm/hyperevm", }, + { + "chainTypes": [ + "evm", + ], + "title": "Tempo Integration Guide", + "url": "ccip/tools-resources/network-specific/tempo-integration-guide", + }, ], "title": "Network Specific", "url": "ccip/tools-resources/network-specific", diff --git a/src/config/sidebar/ccip-dynamic.ts b/src/config/sidebar/ccip-dynamic.ts index bca872d2688..3705c121914 100644 --- a/src/config/sidebar/ccip-dynamic.ts +++ b/src/config/sidebar/ccip-dynamic.ts @@ -751,6 +751,11 @@ export const CCIP_SIDEBAR_CONTENT: SectionEntry[] = [ url: "ccip/service-limits/evm/hyperevm", chainTypes: ["evm"], }, + { + title: "Tempo Integration Guide", + url: "ccip/tools-resources/network-specific/tempo-integration-guide", + chainTypes: ["evm"], + }, ], }, { diff --git a/src/content/ccip/llms-full.txt b/src/content/ccip/llms-full.txt index 23c4d3cf341..5205e41c024 100644 --- a/src/content/ccip/llms-full.txt +++ b/src/content/ccip/llms-full.txt @@ -26088,6 +26088,10 @@ This section provides guidance on how to integrate with networks that require sp - [Hyperliquid Integration Guide](/ccip/tools-resources/network-specific/hyperliquid-integration-guide) - [HyperEVM Testnet RPC Guide](/ccip/tools-resources/network-specific/hyperevm-testnet-rpc) +## Tempo + +- [Tempo Integration Guide](/ccip/tools-resources/network-specific/tempo-integration-guide) + --- # Hyperliquid Integration Guide @@ -26429,6 +26433,223 @@ Hyperliquid has provided a workaround to serve logs through a [dedicated resourc --- +# Tempo Integration Guide +Source: https://docs.chain.link/ccip/tools-resources/network-specific/tempo-integration-guide + +CCIP is compatible with Tempo (Moderato Testnet and Mainnet), enabling cross-chain token transfers to and from Tempo using the standard BurnMint mechanism. This guide provides comprehensive information for CCIP users who want to enable a token on Tempo. + + + +## **How Tempo Works** + +Tempo is an app-chain that uses any natively issued stablecoin as a gas token through their feeAMM; Tempo does not have a chain native gas token. It introduces a custom token standard (TIP-20) designed for stablecoins and payment tokens, and has a significantly different gas cost structure compared to Ethereum mainnet. + +### Gas and Execution Model + +When integrating with CCIP, it is important to consider Tempo costs for storage and deployment operations: + +| Operation | Tempo | Ethereum | Notes | +| :----------------------------------- | :---------- | :--------- | :------------------------------------------------------------------------------------------------- | +| New storage slot (SSTORE 0→non-zero) | 250,000 gas | 20,000 gas | Expect higher execution costs; test on testnet first | +| Account creation | 250,000 gas | 0 gas | Applies when the message receiver is a new account; ensure `destGasOverhead` values are sufficient | +| Contract deployment (per byte) | 1,000 gas | 200 gas | Deploying a token + pool via the factory may exceed limits | +| Transaction gas cap | 30M gas | 30M gas | — | + +Key implications: + +- Always test token transfers and message sends on testnet before estimating production gas costs. +- Deploying both a token and a token pool via Token Manager's factory contract can exceed gas limits. Adding a token in Token Manager therefore requires an **existing token** rather than a net-new deployment. Use Token Manager Expert Mode to deploy an ERC-20 or Tempo's official TIP-20 factory contract. +- When sending messages across chains, ensure `destGasOverhead` values are set high enough to cover Tempo's account creation costs on inbound transfers. + +### Fee Tokens + +Tempo uses stablecoin-based native gas tokens. On CCIP, the supported fee tokens are listed in the [CCIP Directory](https://docs.chain.link/ccip/directory/testnet/chain/tempo-testnet-moderato) and include: + +- **LINK** +- **PathUSD** + +For EVM gas on testnet, this guide uses **alphaUSD**. + +### TIP-20 Token Standard + +TIP-20 is Tempo's native token standard, optimized for stablecoins and payment tokens. More information is available in the [official Tempo docs](https://docs.tempo.xyz/protocol/tip20/overview). It differs from ERC-20 in the following key ways: + +| Feature | ERC-20 | TIP-20 | +| :-------------- | :--------------------- | :-------------------------------------------------------------------------------------------- | +| `decimals()` | Implementation-defined | Always returns `6` (hardcoded) | +| Transfer policy | None | Enforces TIP-403 policy on sender and recipient; reverts with `PolicyForbids` if either fails | +| Pause mechanism | None | All token-moving functions revert when `paused == true` | +| Mint/burn | Not standard | Role-based via `ISSUER_ROLE` | +| Rewards | None | Built-in opt-in reward distribution | + +Additional TIP-20 transfer restrictions: + +- Tokens cannot be sent to another TIP-20 token contract address (reverts). +- All transfers enforce `TIP403_REGISTRY.isAuthorized(transferPolicyId, from)` and `isAuthorized(transferPolicyId, to)` — both must pass. + +**ERC-20 alternative:** ERC-20 tokens can also be deployed to Tempo and are supported via Token Manager Expert Mode. Contact CCIP Support for access. + +## **Prerequisites** + +Before starting: + +- Access to [Tempo Moderato Testnet](https://explore.testnet.tempo.xyz) +- A funded wallet with alphaUSD (see [Add Funds and Set EVM Gas](https://docs.tempo.xyz/guide/use-accounts/add-funds)) +- Token Manager Expert Mode access (request from [CCIP Support](https://chain.link/ccip-contact?v=General%20Technical%20Support)) +- All Tempo Moderato Testnet CCIP addresses from the [CCIP Directory](https://docs.chain.link/ccip/directory/testnet/chain/tempo-testnet-moderato) + +## **Integration Steps** + +### High-Level Sequence + +``` +1. Deploy TIP-20 token (TIP20Factory precompile) +2. Deploy BurnMintTokenPool (Token Manager Expert Mode) +3. Grant ISSUER_ROLE (TIP-20 token contract) +4. Register token in TAR (self-serve via registerAccessControlDefaultAdmin()) +5. Accept Admin + Set Pool (Token Manager Expert Mode) +6. Wire pools across chains (applyChainUpdates on Tempo + each remote chain) +7. Test transfers (Transporter testnet) +``` + +**Order matters:** Complete Steps 1–5 before wiring token pools. Wiring early can allow users to initiate transfers before the Tempo pool is active, resulting in transactions stuck in flight. + +### Step 1: Deploy a TIP-20 Token + +Deploy using the **TIP20Factory** precompile on Tempo Moderato Testnet. + +**Factory address:** [`0x20Fc000000000000000000000000000000000000`](https://explore.testnet.tempo.xyz/address/0x20Fc000000000000000000000000000000000000?tab=interact) + +Call `createToken(string name, string symbol, string currency, address quoteToken, address admin, bytes32 salt).` The following inputs have been provided as an example: + +| Parameter | Example value | +| :----------- | :----------------------------------------------------------------------------------------------------- | +| `name` | `My Test Token` | +| `symbol` | `MTT` | +| `currency` | `USD` | +| `quoteToken` | `0x20C0000000000000000000000000000000000000 This is the address of PathUSD` | +| `admin` | Your admin wallet address | +| `salt` | `0x0000000000000000000000000000000000000000000000000000000000001234 Used for deterministic deployment` | + +**References:** + +- [TIP-20 specification](https://docs.tempo.xyz/protocol/tip20/spec) +- [Example TIP-20 token on testnet](https://explore.testnet.tempo.xyz/address/0x20C00000000000000000000000000000000000000090DC1fd50Deca30b?tab=token) + +### Step 2: Deploy the BurnMintTokenPool + +Using **Token Manager Expert Mode**: + +1. Select **Tempo Moderato Testnet** as the network. +2. Go to **Deploy → Deploy token pool**. +3. Set **CCIP Version** to `1.6.0` and **Token pool type** to `BurnMintTokenPool`. +4. Enter your TIP-20 token address. +5. Click **Connect** and execute the deployment transaction. + +### Step 3: Grant ISSUER_ROLE to the BurnMintTokenPool + +The BurnMintTokenPool must hold `ISSUER_ROLE` on your TIP-20 token in order to call `burn()` and `mint()` during cross-chain transfers. + +1. Navigate to your deployed TIP-20 token contract on the [Tempo explorer](https://explore.testnet.tempo.xyz), select **Interact**, and call `grantRole(bytes32 role, address account)`. +2. For `role`, enter the `ISSUER_ROLE` ID: `0x114e74f6ea3bd819998f78687bfcb11b140da08e9b7d222fa9c1f1ba1f2aa122` +3. For `account`, enter your `BurnMintTokenPool` address. +4. Execute the transaction. + +**Verify:** Call `hasRole(address account, bytes32 role)` with your `BurnMintTokenPool` address and the `ISSUER_ROLE` ID. The expected return is `true`. + +### Step 4: Register Token in the CCIP TokenAdminRegistry (TAR) + +TIP-20 tokens support self-serve TAR registration via OpenZeppelin's `AccessControl`. Because your admin wallet holds `DEFAULT_ADMIN_ROLE` (granted at factory deployment), you can register directly without manual assistance from Chainlink Labs. + +In **Token Manager Expert Mode**, go to **Token Admin → Register token** and call `registerAccessControlDefaultAdmin()` with your TIP-20 token address. + +You can verify this capability directly on the token contract — see an [example on the Tempo explorer](https://explore.tempo.xyz/address/0x09AC52380E6Ede653E122773734fDc8b4B716422?tab=interact). + +This makes your admin wallet the proposed CCIP Token Admin. Proceed to Step 5 to accept and activate. + +### Step 5: Accept Admin and Set Pool + +**Accept Admin:** + +In Token Manager Expert Mode, go to **Token Admin → Accept admin**. + +1. Connect your admin wallet. +2. Enter your Tempo token address. +3. Click **Accept Admin** and pay gas. + +Your admin wallet is now the official CCIP Token Admin for your Tempo token. + +**Set Pool:** + +In Token Manager Expert Mode, go to **Token Admin → Set pool**. + +1. Enter your Tempo token address. +2. Enter your Tempo `BurnMintTokenPool` address. +3. Click **Set Pool** and pay gas. + +This activates the token and token pool for CCIP. The token is now ready to be wired to remote chains. + +### Step 6: Wire Token Pools Across Chains + +Now that the token pool is active on Tempo, connect it to your existing remote chains. + +### **On Tempo (add remote chains)** + +In Token Manager Expert Mode: + +1. Go to **Token Pool → Chain Update → Apply Chain Updates** +2. Set the network to **Tempo Moderato Testnet** +3. Enter your **Tempo BurnMintTokenPool address** +4. Under **Add a new network**, configure each remote chain: + - **Network**: Select the remote chain (e.g., Avalanche Fuji) + - **Token Address**: Enter the token address on the remote chain + - **Token Pool Address**: Enter the remote chain’s BurnMintTokenPool address +5. Click **Chain update** and pay gas + +Leave **Inbound/Outbound rate limiters** at their default values unless you have specific requirements. + +Ignore **Remove a network** during initial setup. + +### **On each remote chain (add Tempo)** + +Repeat the process on each connected chain: + +1. Switch the network to the remote chain +2. Enter the existing token pool address on that chain +3. Under **Add a new network**: + - **Network**: Select **Tempo Moderato Testnet** + - **Token Address**: Enter your Tempo token address + - **Token Pool Address**: Enter your Tempo BurnMintTokenPool address +4. Click **Chain update** and pay gas + +Repeat for each additional remote chain by switching the network at the top. At the end of this step, all token pools should be mutually wired to each other. + +To maintain strong security and risk management it is *highly recommended* to enable [Token Pool Rate Limits](https://docs.chain.link/ccip/concepts/rate-limit-management/overview). + +### Step 7: Test Cross-Chain Transfers + +Use [**Transporter (testnet)**](https://test.transporter.io/) to test transfers across your connected chains. + +1. In the **Token** dropdown, paste your source chain's token address — the token symbol should be detected automatically. +2. Select your source and destination networks. +3. Set the token amount and approve the spending limit. +4. Click **Send** and pay gas (e.g., using alphaUSD as the gas token on Tempo). + +Test transfers in both directions across all connected chains. Your Token Manager dashboard will auto-detect configured networks once wiring is complete. + +## **Contact Us** + +To request Token Manager Expert Mode access, or if you have questions about your integration or need help validating your configuration, contact the Chainlink CCIP team: + +- **CCIP Support:** [chain.link/ccip-contact](https://chain.link/ccip-contact?v=General%20Technical%20Support) + +Once testing is complete, please share your CCIP transaction hashes with the team so the CCIP Directory and Transporter can be updated with your token's information. + +--- + # Solidity Interfaces & Contracts Reference Documentation (EVM) Source: https://docs.chain.link/ccip/api-reference/evm diff --git a/src/content/ccip/tools-resources/network-specific/index.mdx b/src/content/ccip/tools-resources/network-specific/index.mdx index e70612e7dbe..93514dc159b 100644 --- a/src/content/ccip/tools-resources/network-specific/index.mdx +++ b/src/content/ccip/tools-resources/network-specific/index.mdx @@ -11,3 +11,7 @@ This section provides guidance on how to integrate with networks that require sp - [Hyperliquid Integration Guide](/ccip/tools-resources/network-specific/hyperliquid-integration-guide) - [HyperEVM Testnet RPC Guide](/ccip/tools-resources/network-specific/hyperevm-testnet-rpc) + +## Tempo + +- [Tempo Integration Guide](/ccip/tools-resources/network-specific/tempo-integration-guide) diff --git a/src/content/ccip/tools-resources/network-specific/tempo-integration-guide.mdx b/src/content/ccip/tools-resources/network-specific/tempo-integration-guide.mdx new file mode 100644 index 00000000000..7e72c32bb77 --- /dev/null +++ b/src/content/ccip/tools-resources/network-specific/tempo-integration-guide.mdx @@ -0,0 +1,236 @@ +--- +title: "Tempo Integration Guide" +section: "ccip" +metadata: + description: "CCIP is fully compatible with Tempo, enabling cross-chain token transfers to and from Tempo using the standard BurnMint mechanism." +--- + +import { CopyText } from "@components" +import { Aside, ClickToZoom } from "@components" + +CCIP is compatible with Tempo (Moderato Testnet and Mainnet), enabling cross-chain token transfers to and from Tempo using the standard BurnMint mechanism. This guide provides comprehensive information for CCIP users who want to enable a token on Tempo. + + + +## **How Tempo Works** + +Tempo is an app-chain that uses any natively issued stablecoin as a gas token through their feeAMM; Tempo does not have a chain native gas token. It introduces a custom token standard (TIP-20) designed for stablecoins and payment tokens, and has a significantly different gas cost structure compared to Ethereum mainnet. + +### Gas and Execution Model + +When integrating with CCIP, it is important to consider Tempo costs for storage and deployment operations: + +| Operation | Tempo | Ethereum | Notes | +| :----------------------------------- | :---------- | :--------- | :------------------------------------------------------------------------------------------------- | +| New storage slot (SSTORE 0→non-zero) | 250,000 gas | 20,000 gas | Expect higher execution costs; test on testnet first | +| Account creation | 250,000 gas | 0 gas | Applies when the message receiver is a new account; ensure `destGasOverhead` values are sufficient | +| Contract deployment (per byte) | 1,000 gas | 200 gas | Deploying a token \+ pool via the factory may exceed limits | +| Transaction gas cap | 30M gas | 30M gas | — | + +Key implications: + +- Always test token transfers and message sends on testnet before estimating production gas costs. +- Deploying both a token and a token pool via Token Manager's factory contract can exceed gas limits. Adding a token in Token Manager therefore requires an **existing token** rather than a net-new deployment. Use Token Manager Expert Mode to deploy an ERC-20 or Tempo's official TIP-20 factory contract. +- When sending messages across chains, ensure `destGasOverhead` values are set high enough to cover Tempo's account creation costs on inbound transfers. + +### Fee Tokens + +Tempo uses stablecoin-based native gas tokens. On CCIP, the supported fee tokens are listed in the [CCIP Directory](https://docs.chain.link/ccip/directory/testnet/chain/tempo-testnet-moderato) and include: + +- **LINK** +- **PathUSD** + +For EVM gas on testnet, this guide uses **alphaUSD**. + +### TIP-20 Token Standard + +TIP-20 is Tempo's native token standard, optimized for stablecoins and payment tokens. More information is available in the [official Tempo docs](https://docs.tempo.xyz/protocol/tip20/overview). It differs from ERC-20 in the following key ways: + +| Feature | ERC-20 | TIP-20 | +| :-------------- | :--------------------- | :-------------------------------------------------------------------------------------------- | +| `decimals()` | Implementation-defined | Always returns `6` (hardcoded) | +| Transfer policy | None | Enforces TIP-403 policy on sender and recipient; reverts with `PolicyForbids` if either fails | +| Pause mechanism | None | All token-moving functions revert when `paused == true` | +| Mint/burn | Not standard | Role-based via `ISSUER_ROLE` | +| Rewards | None | Built-in opt-in reward distribution | + +Additional TIP-20 transfer restrictions: + +- Tokens cannot be sent to another TIP-20 token contract address (reverts). +- All transfers enforce `TIP403_REGISTRY.isAuthorized(transferPolicyId, from)` and `isAuthorized(transferPolicyId, to)` — both must pass. + +**ERC-20 alternative:** ERC-20 tokens can also be deployed to Tempo and are supported via Token Manager Expert Mode. Contact CCIP Support for access. + +## **Prerequisites** + +Before starting: + +- Access to [Tempo Moderato Testnet](https://explore.testnet.tempo.xyz) +- A funded wallet with alphaUSD (see [Add Funds and Set EVM Gas](https://docs.tempo.xyz/guide/use-accounts/add-funds)) +- Token Manager Expert Mode access (request from [CCIP Support](https://chain.link/ccip-contact?v=General%20Technical%20Support)) +- All Tempo Moderato Testnet CCIP addresses from the [CCIP Directory](https://docs.chain.link/ccip/directory/testnet/chain/tempo-testnet-moderato) + +## **Integration Steps** + +### High-Level Sequence + +``` +1. Deploy TIP-20 token (TIP20Factory precompile) +2. Deploy BurnMintTokenPool (Token Manager Expert Mode) +3. Grant ISSUER_ROLE (TIP-20 token contract) +4. Register token in TAR (self-serve via registerAccessControlDefaultAdmin()) +5. Accept Admin + Set Pool (Token Manager Expert Mode) +6. Wire pools across chains (applyChainUpdates on Tempo + each remote chain) +7. Test transfers (Transporter testnet) +``` + +**Order matters:** Complete Steps 1–5 before wiring token pools. Wiring early can allow users to initiate transfers before the Tempo pool is active, resulting in transactions stuck in flight. + +### Step 1: Deploy a TIP-20 Token + +Deploy using the **TIP20Factory** precompile on Tempo Moderato Testnet. + +**Factory address:** [`0x20Fc000000000000000000000000000000000000`](https://explore.testnet.tempo.xyz/address/0x20Fc000000000000000000000000000000000000?tab=interact) + +Call `createToken(string name, string symbol, string currency, address quoteToken, address admin, bytes32 salt).` The following inputs have been provided as an example: + +| Parameter | Example value | +| :----------- | :----------------------------------------------------------------------------------------------------- | +| `name` | `My Test Token` | +| `symbol` | `MTT` | +| `currency` | `USD` | +| `quoteToken` | `0x20C0000000000000000000000000000000000000 This is the address of PathUSD` | +| `admin` | Your admin wallet address | +| `salt` | `0x0000000000000000000000000000000000000000000000000000000000001234 Used for deterministic deployment` | + +**References:** + +- [TIP-20 specification](https://docs.tempo.xyz/protocol/tip20/spec) +- [Example TIP-20 token on testnet](https://explore.testnet.tempo.xyz/address/0x20C00000000000000000000000000000000000000090DC1fd50Deca30b?tab=token) + +### Step 2: Deploy the BurnMintTokenPool + +Using **Token Manager Expert Mode**: + +1. Select **Tempo Moderato Testnet** as the network. +2. Go to **Deploy → Deploy token pool**. +3. Set **CCIP Version** to `1.6.0` and **Token pool type** to `BurnMintTokenPool`. +4. Enter your TIP-20 token address. +5. Click **Connect** and execute the deployment transaction. + + + +### Step 3: Grant ISSUER_ROLE to the BurnMintTokenPool + +The BurnMintTokenPool must hold `ISSUER_ROLE` on your TIP-20 token in order to call `burn()` and `mint()` during cross-chain transfers. + +1. Navigate to your deployed TIP-20 token contract on the [Tempo explorer](https://explore.testnet.tempo.xyz), select **Interact**, and call `grantRole(bytes32 role, address account)`. +2. For `role`, enter the `ISSUER_ROLE` ID: `0x114e74f6ea3bd819998f78687bfcb11b140da08e9b7d222fa9c1f1ba1f2aa122` +3. For `account`, enter your `BurnMintTokenPool` address. +4. Execute the transaction. + +**Verify:** Call `hasRole(address account, bytes32 role)` with your `BurnMintTokenPool` address and the `ISSUER_ROLE` ID. The expected return is `true`. + +### Step 4: Register Token in the CCIP TokenAdminRegistry (TAR) + +TIP-20 tokens support self-serve TAR registration via OpenZeppelin's `AccessControl`. Because your admin wallet holds `DEFAULT_ADMIN_ROLE` (granted at factory deployment), you can register directly without manual assistance from Chainlink Labs. + +In **Token Manager Expert Mode**, go to **Token Admin → Register token** and call `registerAccessControlDefaultAdmin()` with your TIP-20 token address. + +You can verify this capability directly on the token contract — see an [example on the Tempo explorer](https://explore.tempo.xyz/address/0x09AC52380E6Ede653E122773734fDc8b4B716422?tab=interact). + +This makes your admin wallet the proposed CCIP Token Admin. Proceed to Step 5 to accept and activate. + +### Step 5: Accept Admin and Set Pool + +**Accept Admin:** + +In Token Manager Expert Mode, go to **Token Admin → Accept admin**. + +1. Connect your admin wallet. +2. Enter your Tempo token address. +3. Click **Accept Admin** and pay gas. + +Your admin wallet is now the official CCIP Token Admin for your Tempo token. + +**Set Pool:** + +In Token Manager Expert Mode, go to **Token Admin → Set pool**. + +1. Enter your Tempo token address. +2. Enter your Tempo `BurnMintTokenPool` address. +3. Click **Set Pool** and pay gas. + + + +This activates the token and token pool for CCIP. The token is now ready to be wired to remote chains. + +### Step 6: Wire Token Pools Across Chains + +Now that the token pool is active on Tempo, connect it to your existing remote chains. + +### **On Tempo (add remote chains)** + +In Token Manager Expert Mode: + +1. Go to **Token Pool → Chain Update → Apply Chain Updates** +2. Set the network to **Tempo Moderato Testnet** +3. Enter your **Tempo BurnMintTokenPool address** +4. Under **Add a new network**, configure each remote chain: + - **Network**: Select the remote chain (e.g., Avalanche Fuji) + - **Token Address**: Enter the token address on the remote chain + - **Token Pool Address**: Enter the remote chain’s BurnMintTokenPool address +5. Click **Chain update** and pay gas + +Leave **Inbound/Outbound rate limiters** at their default values unless you have specific requirements. + +Ignore **Remove a network** during initial setup. + + + +### **On each remote chain (add Tempo)** + +Repeat the process on each connected chain: + +1. Switch the network to the remote chain +2. Enter the existing token pool address on that chain +3. Under **Add a new network**: + - **Network**: Select **Tempo Moderato Testnet** + - **Token Address**: Enter your Tempo token address + - **Token Pool Address**: Enter your Tempo BurnMintTokenPool address +4. Click **Chain update** and pay gas + +Repeat for each additional remote chain by switching the network at the top. At the end of this step, all token pools should be mutually wired to each other. + +To maintain strong security and risk management it is _highly recommended_ to enable [Token Pool Rate Limits](https://docs.chain.link/ccip/concepts/rate-limit-management/overview). + +### Step 7: Test Cross-Chain Transfers + +Use [**Transporter (testnet)**](https://test.transporter.io/) to test transfers across your connected chains. + +1. In the **Token** dropdown, paste your source chain's token address — the token symbol should be detected automatically. +2. Select your source and destination networks. +3. Set the token amount and approve the spending limit. +4. Click **Send** and pay gas (e.g., using alphaUSD as the gas token on Tempo). + +Test transfers in both directions across all connected chains. Your Token Manager dashboard will auto-detect configured networks once wiring is complete. + +## **Contact Us** + +To request Token Manager Expert Mode access, or if you have questions about your integration or need help validating your configuration, contact the Chainlink CCIP team: + +- **CCIP Support:** [chain.link/ccip-contact](https://chain.link/ccip-contact?v=General%20Technical%20Support) + +Once testing is complete, please share your CCIP transaction hashes with the team so the CCIP Directory and Transporter can be updated with your token's information.