0%

死磕chainLink CCIP 原理

原文集锦:https://github.com/blockchainGuide

概念

互操作性

跨链互操作性是指不同区块链网络之间进行信息和价值交换的能力。简单来说,就是让不同的区块链能够“对话”,实现资产、数据在不同区块链之间的自由流动。

为什么需要跨链互操作性?

  • 资产流动性: 将不同区块链上的资产进行整合,提高资产的流动性。
  • 数据共享: 实现跨链数据共享,拓展应用场景。
  • 生态互通: 打通不同区块链生态,促进创新。

实现跨链互操作性的方法:

  • 中继: 通过一个中继链来传递消息。
  • 侧链: 在主链上建立一个侧链,实现部分功能的隔离。
  • 哈希锁: 将资产锁定在源链上,在目标链上铸造等值的资产。
  • 状态通道: 在链下进行交易,定期将状态同步到链上。

最终性

跨链最终性是指跨链交易一旦完成,就不可逆转,且所有参与节点都达成一致。

为什么需要跨链最终性?

  • 信任基础: 确保跨链交易的可靠性,建立用户信任。
  • 避免双花: 防止同一资产在不同链上被重复花费。
  • 提高安全性: 增强整个跨链系统的安全性。

实现跨链最终性的挑战:

  • 共识机制差异: 不同区块链的共识机制不同,达成一致比较困难。
  • 安全性风险: 跨链过程中可能存在安全漏洞,需要谨慎处理。
  • 性能瓶颈: 跨链交易可能导致性能下降。

常见的跨链最终性解决方案:

  • 双向锚定: 在源链和目标链上都锁定资产,确保交易的原子性。
  • 验证人机制: 引入验证人来验证跨链交易的有效性。
  • 侧链验证: 通过侧链来验证跨链交易。

通道

A Chainlink CCIP通道是源和目标之间的一条独特通道blockchain 。通道是单向的。例如,以太坊主网 => Polygon主网Polygon主网 => 以太坊主网是两个不同的通道。

CCIP高层架构

image-20240820151236273

术语

CCIP 能够使源区块链上的发送者能够向目标区块链上的接收者发送消息

术语 描述
Sender(发送者) 一个智能合约或一个 EOA。
源区块链(Source Blockchain) 发送者与 CCIP 交互的区块链。
Message(消息) 任意数据(Arbitrary data)和/或代币。
Receiver(接收者) 一个智能合约或 EOA。注意:EOA 不能接收“arbitrary data”。它只能接收代币。
Destination Blockchain(目标区块链) 接收者所在的区块链。

详细架构

image-20240820151637994

流程概述:

  1. 用户发起交易: 用户在源区块链上通过Router合约发起跨链交易。
  2. 数据打包与提交: Router将交易数据发送给OnRamp合约,OnRamp合约将多个交易打包成一个Merkle树,并由Committing DON生成Merkle根。这个Merkle根被提交到CommitStore合约中。
  3. 风险管理: Risk Management Network对提交的Merkle根进行验证,确保交易的合法性。
  4. 交易执行: 如果Merkle根通过验证,Executing DON会根据Merkle根中的信息,调用OffRamp合约在目标区块链上执行交易。
  5. 资产转移: 在整个过程中,Token Pool负责管理资产的锁定、解锁、燃烧和铸造。

链上组件

Router

  • 核心功能: 作为用户与CCIP交互的主要合约。
  • 职责:
    • 发起跨链交互。
    • 管理链上token的批准。
    • 将交易路由到正确的OnRamp合约。
    • 在目标链上接收消息并交付给用户或智能合约。

CommitStore

  • 核心功能: 存储源链上最终化消息的Merkle根。
  • 职责:
    • 与Committing DON交互,存储Merkle根。
    • 确保消息经过风险管理网络的批准。
    • 每个链路仅存在一个CommitStore合约。

OnRamp

  • 核心功能: 处理源链上的消息。
  • 职责:
    • 验证目标链的地址格式等信息。
    • 检查消息大小和gas限制。
    • 管理消息序列号。
    • 处理token转账(与TokenPool交互)。
    • 向Committing DON发送事件。

OffRamp

  • 核心功能: 处理目标链上的消息。
  • 职责:
    • 验证消息的真实性,检查Merkle根证明。
    • 防止重复执行交易。
    • 将消息传递给Router合约。
    • 处理token转账(与TokenPool交互)。

Token Pool

  • 核心功能: 管理token的跨链转移。
  • 职责:
    • 提供token相关的操作接口。
    • 实现token的锁定、解锁、燃烧和铸造。
    • 提供速率限制功能,防止恶意行为。
  • 机制:
    • Burn and Mint: 直接燃烧和铸造token。
    • Lock and Mint: 锁定源链上的token,铸造对应的包装token到目标链。
    • Burn and Unlock: 燃烧目标链上的包装token,解锁源链上的token。
    • Lock and Unlock: 直接锁定和解锁token。

【举例说明:】

LINK 代币

  • 特点: 仅在以太坊主网发行,总供应量固定。

  • 处理方式:

    采用锁定和铸造机制。

    • 从以太坊主网转出: 将 LINK 锁定在以太坊主网,并在目标链上铸造相同数量的 LINK。
    • 从其他链转入以太坊主网: 将目标链上的 LINK 销毁,并在以太坊主网解锁对应的 LINK。

2. 包装的原生资产(如 WETH)

  • 特点: 是原生资产的包装形式,可以代表多个区块链上的原生资产。
  • 处理方式: 采用锁定和解锁机制。
    • 跨链转账: 在源链上锁定原生资产,在目标链上解锁对应的包装资产。

3. 稳定币(如 USDC)

  • 特点: 可以跨多个区块链发行,保持价值稳定。
  • 处理方式:采用销毁和铸造机制。
    • 跨链转账: 在源链上销毁稳定币,在目标链上铸造相同数量的稳定币。

4. 带有 PoR 的代币

  • 特点: 具有证明储备的代币。
  • 处理方式: 由于 PoR 的限制,通常采用锁定和铸造机制。

5. 本地 Gas 代币(如 ETH)

  • 处理方式:
    1. 包装: 先将 ETH 包装成 WETH。
    2. 跨链转账: 使用 CCIP 转移 WETH。
    3. 解包: 在目标链上将 WETH 解包成 ETH。

6. 新支持的代币

  • 流程:
    • 添加: 持续支持新的代币。
    • 配置: 为每个代币设置速率限制,以控制跨链转账的速度。
    • 风险评估: 根据代币的风险特征和使用场景,选择合适的处理机制。

Risk Management Network

  • 核心功能: 管理风险控制。
  • 职责:
    • 维护允许批准或拒绝的节点列表。
    • 实现批准或拒绝Merkle根的逻辑。
    • 确保网络的安全性。

链下组件

Committing DON

  • 角色: 负责将源链上的交易数据打包成Merkle树,并提交到目标链上的CommitStore合约。
  • 职责:
    • 监控源链上的OnRamp合约,获取交易数据。
    • 等待交易确认(达到最终性)。
    • 将多个交易打包成Merkle树,并生成Merkle根。
    • 对Merkle根进行签名。
    • 将签名的Merkle根提交到目标链上的CommitStore合约。

Executing DON

  • 角色: 负责执行已经提交到CommitStore的交易。
  • 职责:
    • 监控源链上的OnRamp合约,获取交易数据。
    • 检查交易是否包含在CommitStore中的Merkle根中。
    • 等待风险管理网络的批准。
    • 生成Merkle证明,验证交易的合法性。
    • 调用OffRamp合约执行交易。

Risk Management Network

  • 角色: 负责监控CommitStore中的Merkle根,并决定是否允许执行交易。
  • 职责:
    • 验证CommitStore中的Merkle根与实际交易数据的一致性。
    • 对Merkle根进行投票,决定是否批准或拒绝执行。
    • 在出现异常情况时,暂停CCIP系统。

各组件之间的关系

  • Committing DON负责将交易数据打包成Merkle树并提交到目标链。
  • Executing DON负责检查Merkle树的有效性并执行交易。
  • Risk Management Network负责对Merkle树进行风险评估,决定是否允许执行交易。

为什么要分离Committing和Executing

  • 提高效率: 将打包和执行分开,可以提高系统的吞吐量。
  • 增强安全性: 分离这两个过程可以增加攻击难度,提高系统的安全性。
  • 灵活处理: 可以对不同的交易类型采取不同的处理策略。
  • 风险管理: 可以更有效地进行风险评估和控制。