This guide demonstrates how to use the viem framework and the CCTP V1 API in a simple script that enables a user to transfer USDC from a wallet address on the Ethereum Sepolia testnet to another wallet address on the Avalanche Fuji testnet. To get started with CCTP V1, follow the example script provided on GitHub. The example uses web3.js to transfer USDC from a wallet address on Ethereum Sepolia testnet to another wallet address on Avalanche Fuji testnet. The script has five steps:Documentation Index
Fetch the complete documentation index at: https://developers.circle.com/llms.txt
Use this file to discover all available pages before exploring further.
- In this first step, you initiate a transfer of USDC from one blockchain to another, and specify the recipient wallet address on the destination chain. This step approves the Ethereum Sepolia TokenMessenger contract to withdraw USDC from the provided Ethereum Sepolia wallet address.
JavaScript
- In this second step, you facilitate a burn of the specified amount of USDC on
the source chain. This step executes the
depositForBurnfunction on the Ethereum Sepolia TokenMessenger contract deployed on Sepolia testnet.
JavaScript
- In this third step, you make sure you have the correct message and hash it.
This step extracts
messageBytesemitted by the MessageSent event fromdepositForBurntransaction logs and hashes the retrievedmessageBytesusing the keccak256 hashing algorithm.
JavaScript
- In this fourth step, you request the attestation from Circle, which provides
authorization to mint the specified amount of USDC on the destination chain.
This step polls the attestation service to acquire the signature using the
messageHashfrom the previous step.
Rate LimitThe attestation service rate limit is 35 requests per second. If you exceed 35
requests per second, the service blocks all API requests for the next 5 minutes
and returns an HTTP 429 response.
JavaScript
- In this final step, you enable USDC to be minted on the destination chain.
This step calls the
receiveMessagefunction on the Avalanche Fuji MessageTransmitter contract to receive USDC at the Avalanche Fuji wallet address.
JavaScript