随着CCIPv1.5的发布,代币开发者获得了强大的工具,可以无缝部署和管理跨链代币。此次升级引入了若干关键功能,旨在加速去中心化金融(DeFi)和传统金融(TradFi)的跨链整合:自定义代币上线:开发者现在可以通过一个自助、无需许可且安全的流程,在几分钟内创建跨链代币。
随着CCIP v1.5的发布,代币开发者获得了强大的工具,可以无缝部署和管理跨链代币。此次升级引入了若干关键功能,旨在加速去中心化金融(DeFi)和传统金融(TradFi)的跨链整合:
作为CCIP v1.5升级的一部分,开发者现可轻松创建支持CCIP的ERC-20代币。这些代币利用跨链代币(CCT)标准,在保持安全性和灵活性的同时,天生具备跨链能力。
跨链代币(CCT)标准通过Chainlink的跨链互操作协议(CCIP),为代币提供了一种简化的、去中心化的跨链转移方式。此前,代币开发者需经历耗时的人工流程,包括为每个区块链部署代币池。CCT现通过一个直观的界面,允许开发者部署、配置和管理代币池,消除了这一摩擦。这种自助方式加速了部署,并增强了开发者对跨链代币操作的控制力。以下,我们将深入探讨启用支持CCIP的ERC-20代币的要求以及CCT的架构组件。
要将ERC-20兼容代币与CCIP集成,开发者必须确保满足以下条件:
无需许可的代币管理员注册:
owner()
:返回代币合约所有者的地址。 getCCIPAdmin()
:返回代币管理员的地址,建议新代币使用此功能,将CCIP代币管理员角色与其他角色(如所有者)分开。<b>销毁与铸造要求:</b>
burnFrom
而非burn
时,此功能非常有用。<b>授予铸造与销毁权限:</b>
<b>锁定与铸造要求:</b>
decimals()
balanceOf(address account)
<b>使用Chainlink的BurnMintERC677创建新代币:</b>
在CCIP中,代币池作为中间保险库,安全存储和管理跨链转移中的代币。开发者可根据需求选择以下几种代币池类型:
这些代币池选项使开发者能够选择最适合其跨链代币策略的机制,实现安全、灵活且合规的跨链交易。
所有代币池,无论是标准还是定制,必须遵守特定指南,以确保与Chainlink的跨链互操作协议(CCIP)无缝交互。以下是实现可靠跨链代币转移的必要要求。
<b>源区块链和目标区块链的强制功能</b>
为促进代币移动,代币池必须为源区块链和目标区块链实现特定功能:
lockOrBurn(Pool.LockOrBurnInV1 calldata lockOrBurnIn) external returns (Pool.LockOrBurnOutV1 memory)
:此功能负责在源区块链上锁定或销毁代币。releaseOrMint(Pool.ReleaseOrMintInV1 calldata releaseOrMintIn) external returns (Pool.ReleaseOrMintOutV1 memory)
:此功能在目标区块链上释放或铸造代币。当在目标区块链上释放或铸造代币时,CCIP OffRamp合约会执行三项基本调用,以确保准确的余额调整:
balanceOf
函数检查接收者铸造或释放操作前的代币余额。 releaseOrMint
函数调用,包括代币池逻辑和代币执行逻辑(如铸造相关气体成本)。 balanceOf
函数,验证接收者在释放或铸造操作后的余额。这三个调用总计不得超过目标区块链的默认气体限制90,000 gas。建议在测试网上测试代币转移,以确认是否遵守该限制。若总执行气体超过90,000 gas,且未配置自定义气体限制,CCIP在目标区块链上的执行将失败。在这种情况下,需要人工干预。
以下是基于OpenZeppelin库实现支持CCIP的ERC-20代币的示例。为实现对Minter等角色的更精细控制,建议使用OpenZeppelin的AccessControl,而非传统的Ownable模式。
[image1]
代码示例展示可销毁和可铸造功能
以下是基于OpenZeppelin库实现支持CCIP的ERC-20代币的示例:
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;
import {IBurnMintERC20} from "@chainlink/contracts-ccip/src/v0.8/shared/token/ERC20/IBurnMintERC20.sol";
import {
ERC20,
ERC20Burnable
} from
"@chainlink/contracts-ccip/src/v0.8/vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import {AccessControl} from
"@chainlink/contracts-ccip/src/v0.8/vendor/openzeppelin-solidity/v4.8.3/contracts/access/AccessControl.sol";
contract MyToken is IBurnMintERC20, ERC20Burnable, AccessControl {
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE");
address internal s_CCIPAdmin;
event CCIPAdminSet(address indexed ccipAdmin);
constructor() ERC20("MyToken", "MTK") {
_grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
_grantRole(MINTER_ROLE, msg.sender);
_grantRole(BURNER_ROLE, msg.sender);
s_CCIPAdmin = msg.sender;
}
function mint(address account, uint256 amount) public onlyRole(MINTER_ROLE) {
_mint(account, amount);
}
function burn(uint256 amount) public override(IBurnMintERC20, ERC20Burnable) onlyRole(BURNER_ROLE) {
super.burn(amount);
}
function burnFrom(address account, uint256 amount)
public
override(IBurnMintERC20, ERC20Burnable)
onlyRole(BURNER_ROLE)
{
super.burnFrom(account, amount);
}
function burn(address account, uint256 amount) public virtual override {
burnFrom(account, amount);
}
function getCCIPAdmin() external view returns (address) {
return s_CCIPAdmin;
}
function setCCIPAdmin(address ccipAdmin) external onlyRole(DEFAULT_ADMIN_ROLE) {
s_CCIPAdmin = ccipAdmin;
emit CCIPAdminSet(ccipAdmin);
}
}
通过以上功能和要求,CCIP v1.5为开发者提供了创建和管理跨链代币的强大工具,简化了流程,增强了安全性和灵活性,为DeFi和TradFi的跨链整合铺平了道路。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!