基于Chainlink CCIP 的跨链代币标准(CCT)

随着CCIPv1.5的发布,代币开发者获得了强大的工具,可以无缝部署和管理跨链代币。此次升级引入了若干关键功能,旨在加速去中心化金融(DeFi)和传统金融(TradFi)的跨链整合:自定义代币上线:开发者现在可以通过一个自助、无需许可且安全的流程,在几分钟内创建跨链代币。

随着CCIP v1.5的发布,代币开发者获得了强大的工具,可以无缝部署和管理跨链代币。此次升级引入了若干关键功能,旨在加速去中心化金融(DeFi)和传统金融(TradFi)的跨链整合:

  • <b>自定义代币上线<b>:开发者现在可以通过一个自助、无需许可且安全的流程,在几分钟内创建跨链代币。这使得各种规模的项目都能轻松利用跨链代币(CCT)标准,使代币天生具备跨链能力。
  • <b>CCIP代币管理器</b>:全新的CCIP代币管理器通过直观的界面简化了跨链代币的部署和管理。代币开发者可以注册、配置、启动并管理跨多个区块链网络的代币,拥有完全的控制权和自主性。
  • <b>CCIP软件开发工具包(SDK)</b>:为了进一步简化整合,CCIP SDK为开发者提供了预构建功能,只需几行代码即可集成CCIP的跨链功能。这降低了复杂性,加快了跨链应用的部署时间。
  • <b>增强的安全性与隐私性</b>:CCIP v1.5升级还引入了关键的安全性增强,包括升级的纵深防御措施和针对潜在漏洞的保护机制。

跨链代币(CCT)标准的代币标准与要求

作为CCIP v1.5升级的一部分,开发者现可轻松创建支持CCIP的ERC-20代币。这些代币利用跨链代币(CCT)标准,在保持安全性和灵活性的同时,天生具备跨链能力。

跨链代币(CCT)标准概述

跨链代币(CCT)标准通过Chainlink的跨链互操作协议(CCIP),为代币提供了一种简化的、去中心化的跨链转移方式。此前,代币开发者需经历耗时的人工流程,包括为每个区块链部署代币池。CCT现通过一个直观的界面,允许开发者部署、配置和管理代币池,消除了这一摩擦。这种自助方式加速了部署,并增强了开发者对跨链代币操作的控制力。以下,我们将深入探讨启用支持CCIP的ERC-20代币的要求以及CCT的架构组件。

支持CCIP的ERC-20代币要求

要将ERC-20兼容代币与CCIP集成,开发者必须确保满足以下条件:

  1. 无需许可的代币管理员注册:

    • 支持的功能:代币合约应使用以下任一支持的功能签名来注册管理员:
    • owner():返回代币合约所有者的地址。
    • getCCIPAdmin():返回代币管理员的地址,建议新代币使用此功能,将CCIP代币管理员角色与其他角色(如所有者)分开。
    • 若上述功能均未实现,开发者可通过Chainlink提供的表单注册代币。
  2. <b>销毁与铸造要求:</b>

    • <b>mint(address account, uint256 amount)</b>:在目标区块链上为指定账户铸造指定数量的代币。
    • <b>burn(uint256 amount)</b>:在源区块链上销毁指定数量的代币。
    • <b>decimals()</b>:返回代币的小数位数。
    • <b>balanceOf(address account)</b>:检索指定账户的当前代币余额。
    • <b>可选功能 - burnFrom(address account, uint256 amount)</b>:从源区块链上的特定账户销毁代币。尽管此功能为可选,但若代币池需要burnFrom而非burn时,此功能非常有用。
  3. <b>授予铸造与销毁权限:</b>

    • 源区块链和目标区块链上的代币合约必须支持授予铸造和销毁权限。通常,这些权限由代币开发者或管理员角色授予代币池。
  4. <b>锁定与铸造要求:</b>

    • 代币合约应实现:
    • decimals()
    • balanceOf(address account)
    • 在目标区块链上,必须将铸造和销毁权限授予代币池。
  5. <b>使用Chainlink的BurnMintERC677创建新代币:</b>

    • 若开发者没有现有代币,可使用Chainlink的BurnMintERC677合约,该合约实现了ERC677或ERC777标准,快速部署与CCIP兼容的代币。此合约可直接使用或根据自定义需求进行扩展。

CCT中的代币池理解

在CCIP中,代币池作为中间保险库,安全存储和管理跨链转移中的代币。开发者可根据需求选择以下几种代币池类型:

  1. 销毁/铸造:
    • 代币在源区块链上销毁,在目标区块链上铸造。此类型常用于需要跨链固定供应量的ERC-20代币。
  2. 锁定/铸造:
    • 代币在源区块链上锁定,在目标区块链上铸造。此类型适用于不可销毁的代币或需要在源链上保持特定余额的代币。
  3. 销毁/解锁:
    • 代币在源区块链上销毁,允许在目标区块链上解锁等量代币。此方法适用于跨链供应量固定的代币。
  4. 锁定/解锁:
    • 代币在源区块链上锁定,在目标区块链上解锁。此池类型常用于不可转移或实用型代币,需要在区块链间保持镜像余额。

这些代币池选项使开发者能够选择最适合其跨链代币策略的机制,实现安全、灵活且合规的跨链交易。

CCIP中代币池的要求

所有代币池,无论是标准还是定制,必须遵守特定指南,以确保与Chainlink的跨链互操作协议(CCIP)无缝交互。以下是实现可靠跨链代币转移的必要要求。
<b>源区块链和目标区块链的强制功能</b> 为促进代币移动,代币池必须为源区块链和目标区块链实现特定功能:

  1. <b>源区块链要求:</b>
    lockOrBurn(Pool.LockOrBurnInV1 calldata lockOrBurnIn) external returns (Pool.LockOrBurnOutV1 memory):此功能负责在源区块链上锁定或销毁代币。
  2. <b>目标区块链要求:</b>
    releaseOrMint(Pool.ReleaseOrMintInV1 calldata releaseOrMintIn) external returns (Pool.ReleaseOrMintOutV1 memory):此功能在目标区块链上释放或铸造代币。

目标区块链上的 gas 限制

当在目标区块链上释放或铸造代币时,CCIP OffRamp合约会执行三项基本调用,以确保准确的余额调整:

  1. <b>铸造/释放前的余额检查</b>:通过balanceOf函数检查接收者铸造或释放操作前的代币余额。
  2. <b>执行releaseOrMint</b>:执行主要的releaseOrMint函数调用,包括代币池逻辑和代币执行逻辑(如铸造相关气体成本)。
  3. <b>铸造/释放后的余额检查</b>:再次调用balanceOf函数,验证接收者在释放或铸造操作后的余额。

这三个调用总计不得超过目标区块链的默认气体限制90,000 gas。建议在测试网上测试代币转移,以确认是否遵守该限制。若总执行气体超过90,000 gas,且未配置自定义气体限制,CCIP在目标区块链上的执行将失败。在这种情况下,需要人工干预。

铸造新的CCT支持代币

CCIP集成的示例合约代码

以下是基于OpenZeppelin库实现支持CCIP的ERC-20代币的示例。为实现对Minter等角色的更精细控制,建议使用OpenZeppelin的AccessControl,而非传统的Ownable模式。
[image1]

ecct-0.webp 代码示例展示可销毁和可铸造功能

  • <b>CCIP管理员管理<b>:必须通过公开范围的getter函数getCCIPAdmin(address CCIPadmin)暴露存储CCIP管理员地址的变量。此外,setCCIPAdmin(address CCIPAdmin)必须可由代币所有者或管理员调用,并在设置管理员时发出事件。

以下是基于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的跨链整合铺平了道路。

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Chainlink
Chainlink
顶尖的智能合约去中心化预言机网络解决方案 https://chain.link/