- 了解 CCTP 的 burn-attest-mint(销毁-签名-铸造)协议是如何工作的
- 在源链上销毁 USDC 以发起跨链转账
- 获取 Circle 的 attestation(签名证明),以授权在目标链上进行铸造
- 在目标链上铸造 USDC,完成转账
- 在源链上销毁 USDC。
- 获取一份 attestation。
- 在目标链上铸造等额的 USDC。
前置条件
在开始本教程之前,请确保已安装以下工具:
你还需要:
- 浏览器中已安装 MetaMask
- 已连接到 Injective 测试网
- 同时已连接到 Sepolia
- 通过 Injective 水龙头 或 Google Cloud 水龙头 获取的测试网 INJ
- 通过某个 Sepolia 水龙头 获取的测试网 Sepolia ETH
- 通过 Circle Faucet 获取的测试网 USDC
开始使用
本教程配套代码位于 USDC CCTP demo 仓库。 克隆仓库并安装依赖:http://localhost:5173 查看该 dApp。
CCTP 是如何工作的?
CCTP 通过在源链上销毁 USDC、 从 Circle 的 API 获取一份已签名的 attestation, 并在目标链上铸造等额 USDC 的方式实现跨链转账。 CCTP 通过三个步骤完成跨链 USDC 转账:- Burn(销毁):
源链上的
TokenMessengerV2合约销毁指定数量的 USDC, 随后发出一个包含转账详情的MessageSent事件。 - Attest(签名证明): Circle 的 Iris API 监听链上事件,并对消息进行签名。 在销毁被确认后,产生一份 attestation。
- Mint(铸造):
目标链上的
MessageTransmitterV2合约校验 attestation, 并将等额 USDC 铸造到收款地址。
该 dApp 用如下调用来实现每一步:
Injective 上使用的合约地址请参见 Injective 上的 USDC。
在源链上销毁 USDC
在浏览器中打开 dApp(http://localhost:5173)后:
- 点击 Connect Wallet,在 MetaMask 弹窗中批准连接请求。
- 选择源链(例如 Ethereum Sepolia) 和目标链(Injective EVM Testnet), 然后输入要转账的 USDC 数量。
- 点击 Approve USDC,在 MetaMask 中确认授权交易。
- 点击 Burn USDC,确认销毁交易。
当你点击 Burn USDC 时,
dApp 会调用
TokenMessengerV2 合约的 depositForBurn:如何选择 minFinalityThreshold 的取值?
如何选择 minFinalityThreshold 的取值?
minFinalityThreshold 的取值应遵循:- 取值 ≤ 1000 时会产生一条 “fast”(快速)消息,
- 取值 > 1000 时会产生一条 “standard”(标准)消息。
Circle attestation 是什么?
Circle attestation 是 Circle 的 Iris API 提供的一份加密签名, 用于证明 USDC 已在源链上完成销毁。 Attestation 用于授权在目标链上进行相应的铸造。 在销毁之后,Circle 的 Iris API 会在 源链 上监听MessageSent 事件。
一旦达到所需的区块确认数,
Circle 就会对消息签名并颁发一份 attestation。
Attestation 所需时间因源链而异:
- Ethereum Sepolia(标准模式):15–20 分钟
- Injective EVM Testnet:通常几分钟
从 Sepolia 出发的转账支持快速模式,可显著缩短等待时间,
但需要设置足够高的
maxFee。
若费用过低,转账会回退为标准模式。等待 attestation
本 dApp 会自动轮询 Iris API, 你不需要离开页面。 UI 会在 attestation 就绪时通知你。dApp 使用销毁步骤中的交易哈希来获取 attestation:
在目标链上铸造 USDC
一旦 dApp 显示 “Attestation received”:- 在提示时,将 MetaMask 切换到 目标链。
- 点击 Mint USDC,在 MetaMask 中确认交易。
- 通过 dApp 中显示的余额,或在 Injective Testnet Blockscout 或 Sepolia Etherscan 中查看你的地址, 核对目标链上的 USDC 余额。
当你点击 Mint USDC 时,
dApp 会调用
MessageTransmitterV2 合约的 receiveMessage:后续步骤
恭喜你使用 Injective 上的 CCTP 完成了第一次跨链 USDC 转账! 以下是你在本教程中所学到的:- CCTP 的 burn-attest-mint 协议如何在链之间以 1:1 的比例转账 USDC, 无需 包装或跨链桥接
- 如何在源链上销毁 USDC 以发起跨链转账
- 如何获取 Circle attestation,并用它在目标链上铸造 USDC
- Injective 上的 USDC: 合约地址、测试网水龙头以及常见问题。
- MultiVM 代币标准: 在 Injective 的 EVM 与 Cosmos 之间使用 USDC,无需跨链桥接。
