Cointime

扫码下载App
iOS & Android

Chainlink:使用 CCIP 构建跨链应用程序的 5 种方法

项目方

作者:Chainlink. 编译:Cointime.com QDD

Chainlink的跨链互操作性协议(CCIP)是一种新的通用跨链通信协议,为智能合约开发者提供了以最小化信任的方式在区块链网络之间传输数据和代币的能力。

目前,部署在多个区块链上的应用程序受到资产、流动性和用户的碎片化问题的困扰。有了CCIP,开发者可以利用代币转移和任意消息传递,实现由部署在多个不同区块链网络上的多个智能合约组成的去中心化应用程序,这些智能合约相互操作,形成单一统一的应用程序。这种Web3设计模式被称为跨链智能合约

以下是使用CCIP构建跨链应用程序的几个示例,涵盖了DeFi、跨链ENS、在多个链上铸造NFT以及跨链游戏等领域。这些用例示例展示了CCIP将传统的单链或多链应用程序转变为强大的全新跨链dApps的潜力。

所有示例都可以在Chainlink Labs的GitHub上找到,并且现在可以部署和与之交互。

DeFi:跨链组合性

DeFi是一个适合通过跨链智能合约进行转变的Web3应用程序类别。在当前的DeFi世界中,许多应用程序要么部署在单个链上,要么部署在多个链上,每个实例都需要其自己的一组用户和流动性。在每个链上,都有DeFi组合性和“货币乐高”的概念,开发者可以无需许可地与部署在特定网络上的各种协议进行连接和集成,以创造新的用例和金融产品。

通过启用跨链智能合约和跨链代币转移,CCIP将DeFi组合性的概念指数级增加。因为现在,组合性不再局限于每个链上,并且不再受限于该链上的DeFi协议,而是所有链上的所有DeFi应用程序现在可以以各种方式组合在一起,创造新的金融产品。应用程序和协议不再局限于它们所在的链上。

这种跨链组合性使DeFi应用程序的生态系统更加完整和互联,所有链上的流动性、用户和金融产品都可以为所有协议所用。用“货币乐高”的类比,CCIP使您能够将所有不同的乐高套装组合在一起,并将它们作为一个单一的、统一的套装来构建金融协议。

一个特定的DeFi金融服务将极大受益于CCIP,那就是借贷。在当前的世界中,大多数DeFi借贷协议要求您在部署您想要使用的协议的链上存入抵押品。但许多DeFi用户在多个不同区块链上使用多个DeFi协议,并且资产分散在所有这些链上。这些用户通常追求最佳回报率,调整其头寸以最大化收益,但在许多情况下,当这些资产在另一个链上有更好的收益机会时,它们被锁定在一个链上的协议中。如果他们想参与更好的收益机会,他们需要在一个链上清算他们的头寸,手动将资产桥接到新的链上,在新的链上的协议上存入这些资产,然后在想要将资产返回原始链时执行相同的过程——这是很多步骤,只是为了将资产转移到新的协议来追求收益机会。

像这样的情况就是CCIP可以帮助实现DeFi协议真正跨链的地方,让用户无缝地在一个链上利用数字资产作为另一个链上DeFi协议的抵押品,所有这些都由CCIP在协议层面处理,而无需用户执行手动操作,或者因使用第三方桥接而添加信任假设。使用CCIP,DeFi协议可以使借款人在一个(源)链上存入资产,或者直接将其转移到目标链上,然后让这些资产在目标链上可供借用。当他们希望停止在目标链上使用他们的资产时,DeFi协议可以使用CCIP撤回他们的头寸,并将资产移回原始链。这就是CCIP赋能的DeFi的威力。

在这个示例中,我们有一个部署在Avalanche Fuji测试网上的DeFi智能合约Sender.sol。这个合约接受以代币形式的用户存款;它可以是包装的ETH、稳定币或任何具有实际价值的代币。Sender.sol有一个sendMessage函数,它使用CCIP执行指定代币的可编程转账以及一个消息发送到目标链。在本例中,我们将指定的代币发送到Ethereum Sepolia测试网,并包含了最终用户的EOA(外部拥有账户)的消息:

注:本文中的所有代码示例仅用于说明,并且按“原样”提供,没有任何明示或暗示的保证。使用这些代码片段受我们在 chain.link/terms 所列出的服务条款的约束。

在Ethereum Sepolia网络上,我们部署了一个名为Protocol.sol的智能合约。该合约接收CCIP可编程代币转移消息,并执行以下操作:

l   铸造和控制可以使用抵押品进行借贷的稳定币。

l   从CCIP消息中读取指定代币合约地址(在目标链上),这些代币是从源链发送的(作为借贷的抵押品)以及存入的金额。

l   从CCIP消息内容中还读取最终用户(存款人/借款人)的钱包地址。稳定币将铸造到此地址,并且此地址也用于跟踪存款和借贷。

l   将这些信息存储在智能合约中。

一旦Protocol.sol成功接收并处理了这个CCIP可编程代币转移消息,用户就可以通过手动执行borrowUSDC函数来借入资金。该函数允许用户将转移的代币用作抵押品,以铸造并借入等额的稳定币(例如USDC)到借款人的EOA。在本示例中,我们假设70%的抵押率,意味着协议将借出的金额不超过抵押品价值的70%:

用户成功在Sepolia上充当抵押品借入UDSC后,他们可以根据需要在Sepolia网络上的任何DeFi协议中使用这些资金。然后,当他们完成时,他们可以还款给Protocol.sol,这将导致稳定币代币被销毁,并且然后将CCIP可编程代币转移消息发送回Fuji网络上的Sender.sol合约,该合约将把锁定的代币返回到Fuji网络上的指定地址。请注意,用户必须首先批准Protocol.sol作为用户借入的稳定币的“spender”,以便协议能够燃烧借入的金额,这就是还款的实现方式:

本示例的完整源代码和说明可在 CCIP-DeFi Lending GitHub 存储库中找到。

DeFi: 跨链清算保护

延续 DeFi 和借贷协议的主题,许多 DeFi 用户在多个不同的 DeFi 协议和多个区块链上持有多个头寸。这使得跟踪投资组合和 DeFi 仓位变得困难。目前有多个第三方平台、追踪器和收益聚合器可用,DeFi 用户可以简单地部署抵押物,让这些第三方平台处理资产的部署和转移,以优化用户的收益。虽然这些工具可以很好地将 DeFi 的某些复杂性抽象化,使用户可以简单地赚取收益,但它们并不是信任最小化的。用户委托协议来赚取收益,并确保头寸保持抵押以避免清算。此外,如果最终用户想要获得某种形式的清算保护,他们需要在所有拥有 DeFi 仓位的区块链上部署原生资产,以确保在各个链上的借贷头寸抵押。

通过 CCIP 和跨链代币转移和消息传递,DeFi 协议、头寸监控应用和收益聚合器可以增强跨链清算保护。这意味着用户可以在多个区块链上有开放头寸的多个 DeFi 协议,然后他们可以在单个链上分配资产,作为额外抵押品,以防某个或多个借贷需要额外资金来确保抵押。以下是它在高层次上的工作原理:

l   一个 DeFi 最终用户在多个链上有债务头寸(例如 Ethereum、Avalanche、Polygon),但他们将流动性安全地保留在一个链上的保险库中(例如 Ethereum 上的 Aave)。

l   对于用户在每个链上的债务头寸,用户的 Chainlink Automation 实现会监控头寸的负债比率。

l   如果 Automation 发现他们的任何借贷接近清算阈值,然后 Automation 将发送一个 CCIP 消息到用户的流动性链(例如 Ethereum),请求发送资金来填充债务头寸。

l   当流动性链上的合约接收到 CCIP 消息后,它会从 Aave 中提取流动性,并将带有资金的新的 CCIP 消息发送回请求链。该消息包含足够的信息和代币来资助头寸,并避免清算情况。

其结果是用户可以在多个链上有债务头寸,同时仍然在单个链上保持流动性。整个过程是信任最小化的,用户仍然100%控制他们的债务头寸,他们不需要手动提取和转移资金到不同的链上。以下是它的工作原理:

Chainlink Automation 监控用户有债务头寸的所有链,并确定是否需要发送资金的消息。如果需要,performUpkeep 函数将向拥有流动性的链上的保险库发送一个 CCIP 消息,请求发送资金。

拥有流动性的链上的保险库然后接收资金请求,并检查是否有足够的资金返回到请求链,或者是否应该从 DeFi 协议(例如 Aave)中提取一些流动性,以确保有足够的资金发送。然后,它启动一个 CCIP 可编程代币转移,包含所请求的资金以及最初接收到的消息的消息 ID(以便在请求资金的区块链上的目标合约知道资金请求是关于哪个请求的):

最后,请求资金以补充债务头寸的区块链上的智能合约接收 CCIP 可编程代币转移,将请求 ID 与其原始请求匹配,并将资金取出并存入债务头寸中,以增加贷款的抵押,避免清算:

这个例子演示了如何在 DeFi 协议和 DeFi 头寸监控应用中使用 CCIP,为用户提供在多个区块链上对其债务头寸的信任最小化的清算保护,同时让他们保持他们的资金和流动性在单个区块链上。

完整的源代码和说明可以在 CCIP Liquidation Protector GitHub 存储库中找到。

跨链域名服务(Cross-Chain Domain Name Service)

去中心化域名服务(如 ENS)在 Web3 上非常流行,因为它们有助于将易读的名称转换为钱包地址。在理想的情况下,域名服务不应该限定于一个链,而是每个注册的域名应该在所有 Ethereum 链、侧链、第二层和应用链上传播和共存。这将允许用户在整个 Ethereum 生态系统中拥有一个统一的身份,而不是必须在多个命名服务上注册域名或使用不信任最小化的互操作性解决方案。

然而,要实现这一点,域名服务需要与其他区块链进行通信。每个链上的命名服务实例在注册新域名时需要得到通知,并且需要一种方法来执行对全局名称注册表的“查找”,涵盖所有链。

这个例子展示了如何构建一个简化的跨链域名服务应用程序,用户可以在其中在一个链上注册域名,然后在多个其他链上传播该注册信息,并在任何链上解析名称到地址。

第一步是在 Ethereum Sepolia 网络上部署 CrossChainNameServiceRegister 和 CrossChainNameServiceLookup 合约。这个网络将充当“主”网络,所有注册将在此网络上进行,并传播到其他链上。

当您注册一个新的 .ccns 句柄时,CrossChainNameServiceRegister 合约将使用 CCIP 发送一条消息到其他受支持的区块链,包含有关注册的 .ccns 句柄的信息:

在所有受支持的接收链上,部署 CrossChainNameServiceReceiver 合约。这个合约将从 CrossChainNameServiceRegister 合约接收注册的 .ccns 域名,并将它们存储在部署在该链上的 CrossChainNameServiceLookup 合约中:

最后,在所有区块链上部署 CrossChainNameServiceLookup 合约,包括注册链(在本例中为 Sepolia),以及所有目标链。该合约用于存储所有注册的 .ccns 句柄,并充当执行查找的接口,以将名称转换为地址:

使用这种简单的设计模式,可以创建一个简单的跨链域名服务,用户可以在其中注册一次域名,然后在多个区块链上拥有并使用它。

完整的源代码和说明可以在 Cross-Chain Name Service GitHub 存储库中找到。

跨链 NFT(Cross-Chain NFTs)

NFT 是 Web3 最受欢迎的用例之一。每个 NFT 项目通常在单个区块链上,或者该项目本身在多个链上部署,如果用户想要在多个链上拥有 NFT,他们必须多次铸造它。

通过 CCIP 任意消息,NFT 项目可以允许他们的资产仅在单个链上铸造一次,由铸造者一次付费,然后在其他区块链上传播。这意味着用户可以拥有和共享他们的 NFT,而不管他们使用的是哪个网络。CCIP 还可以用于在不同链上“销毁和铸造” NFT,允许用户将其 NFT 从一条链转移到另一条链。这是第一个场景的示例:

以下是简单 NFT 智能合约的说明:

SourceMinter 合约在源链上部署,并在其 mint 函数中包含逻辑,用于向目标区块链发送带有 ABI 编码的 mint 函数签名的 CCIP 跨链消息,该签名来自 MyNFT.sol 智能合约:

DestinationMinter 合约将接收带有 ABI 编码的 mint 函数签名的 CCIP 跨链消息作为有效载荷,并使用该签名调用 MyNFT 智能合约的 mint 函数。然后,MyNFT 智能合约将通过 SourceMinter 智能合约的 mint() 函数将新的 NFT 铸造到 msg.sender 账户,即在源链上铸造 NFT 时使用的相同账户地址:

最终结果是,铸造 NFT 的用户现在在多个链上拥有该 NFT,并且他们只需要铸造一次并支付一次。如果 NFT 项目希望在所有区块链上保持严格的不可替代性,该解决方案也可以轻松修改,以在目标区块链上铸造 NFT,并在源链上销毁它,确保在所有区块链上只有一个版本。

完整的源代码和说明可以在 Cross-Chain NFT GitHub 存储库中找到。

游戏:跨链井字游戏

在过去的几年中,Web3 游戏变得非常受欢迎。然而,与 DeFi 一样,游戏也非常分散,游戏及其资产通常只适用于特定的链。但与传统游戏一样,最终目标或最佳体验是拥有可以一起玩游戏的游戏玩家,而不考虑他们正在玩游戏的硬件或软件。就像 PC 游戏玩家可以与 Xbox 主机所有者一起玩游戏一样,没有理由为什么在 Polygon 上玩游戏的人不能与在 Avalanche 上玩游戏的人一起玩。这就是所谓的跨平台游戏

这对于回合制 Web3 游戏和其他不需要快速实时交互的游戏非常适用。Web3 游戏遭受用户碎片化,游戏玩家更喜欢在他们选择的链上玩游戏并使用他们喜欢的数字资产。CCIP 可以使 Web3 游戏真正跨链,促进资产在链上的转移,并在多个区块链上实现共享游戏状态,使玩家可以在不考虑他们选择的链的情况下相互对战或合作。如果您想要吸引尽可能多的游戏玩家,那么最好在多个链上部署您的游戏,并设计它以便所有玩家可以相互对战或合作。

这个跨链游戏设计模式的简单演示可以用回合制策略游戏(例如井字游戏)来展示。在这个例子中,我们有一个游戏智能合约在多个区块链上部署。用户可以在他们选择的链上开始一场游戏,然后将游戏会话 ID 分享给他们的朋友。如果愿意,他们的朋友可以从另一个链上加入游戏。在创建游戏时,CCIP 将把游戏的详细信息和初始状态与所有其他链共享:

一旦第一个玩家在开始游戏后采取了一步,另一个区块链上的第二个玩家将在成功处理 CCIP 消息后,在他们的游戏智能合约上看到更新后的游戏状态。玩家2将然后采取他们的步骤,这将生成一个 CCIP 消息发送回玩家1,并在他们的链上更新游戏状态:

然后,玩家1将看到更新后的游戏状态,并再次采取他们的步骤。随着玩家采取行动,跨链的 CCIP 消息在链之间来回传递,直到游戏达到结论并宣布获胜者。重要的是要注意,两个链上的游戏智能合约都维护游戏状态,并且使用 CCIP 发送和接收消息,以确保游戏状态在两个区块链上保持一致:

这个例子的完整源代码和说明可以在 CCIP 井字游戏 GitHub 存储库中找到。

结论

从跨链 DeFi 和 NFT 到在多个区块链上运行的游戏,CCIP 使得跨链智能合约的实现成为可能,实现了跨所有区块链的真正 DeFi 组合性,并实现了更加统一的 Web3。

评论

所有评论

推荐阅读

  • 慢雾安全提醒:警惕恶意攻击者利用 WordPress 插件漏洞发起的水坑攻击

    近期有攻击者利用 WordPress 插件漏洞攻击正常的站点,然后在站点中注入恶意的 js 代码,发起水坑攻击,在用户访问站点时弹出恶意弹窗,骗取用户执行恶意的代码或进行 Web3 钱包签名,从而盗取用户的资产。建议有使用 WordPress 插件的站点注意排查是否存在漏洞,及时更新插件,避免被攻击;用户在访问任何站点的时候,要仔细识别下载的程序以及 Web3 签名的内容,避免下载到恶意程序或因授权了恶意的签名导致资产被盗。

  • 4月28日午间要闻速递

    1. BTC突破64000美元

  • 未经验证的Ember Sword NFT拍卖合约漏洞已造成近20万美元损失

    据Certik监测,其发现未经验证的Ember Sword NFT拍卖合约漏洞,已从159名批准该合约的受害者那里获利60 WETH(约19.5万美元)。Certik提醒用户撤销对Polygon上相关合约的批准。

  • BSC链上的某未知合约和Polygon链上Ember Sword项目合约存在可疑交易

    BlockSec Phalcon在X平台表示,位于BSC链上的未知合约和位于Polygon链上Ember Sword项目合约存在可疑交易,请立即撤销对BSC链上0x389开头合约地址和Polygon链上的0x6f7开头合约地址。

  • 4月28日早间要闻速递

    1. BTC:63,597美元、ETH:3,257美元、BNB:599美元

  • 诈骗者利用伪造的USDT余额来欺骗加密货币用户

    慢雾与Imtoken合作,揭露了一种利用离线交易并使用USDT的新加密货币骗局,诈骗者操纵以太坊RPC来伪造受害者钱包中的USDT余额。骗子诱骗受害者将他们的以太坊RPC URL更改为他们控制的URL,让受害者看起来像是存入了USDT资金,结果却让受害者在尝试交易时空手而归。此外,该骗局还通过小额转账欺骗用户以获得信任,然后操纵账户余额和合约信息,给毫无戒心的用户带来严重风险,并与更广泛的生猪屠宰骗局活动有关。

  • Cointime 4月27日要闻速递

    1. 港交所:将博时 HashKey、华夏、嘉实比特币及以太币ETF收纳为中央结算系统多柜台合资格证券

  • 港交所:将博时 HashKey、华夏、嘉实比特币及以太币ETF收纳为中央结算系统多柜台合资格证券

    香港交易所发布三份通告,宣布收纳博时 HashKey 比特币 ETF 股份及博时 HashKey 以太币 ETF 股份、华夏比特币 ETF 股份及华夏以太币 ETF 股份、嘉实比特币现货 ETF 股份及嘉实以太币现货 ETF 股份为中央结算系统多柜台合资格证券。据悉:

  • 俄罗斯央行和Rosfinmonitoring披露法币-加密货币跟踪系统试点

    Odaily星球日报讯 自 2023 年以来,俄罗斯一直试图追踪加密货币交易及其来源。俄罗斯银行和俄罗斯联邦金融监测局(Rosfinmonitoring)透露,目前存在一个系统,允许私人银行跟踪基于法币的交易与加密货币业务之间的联系。该公告是在 Rosfinmonitoring 组织的“当前反洗钱/反恐融资问题”论坛上发布的,该论坛还披露,该试点于 2023 年开始,五家大型信贷机构正在与 Rosfinmonitoring 合作,预计将持续到明年4月,但也可以延长。Rosfinmonitoring 合作伙伴 Innotech 的项目投资组合管理总监 Ilya Bushmelev 表示,该试点可能会帮助银行建立“了解您的加密客户”和“了解您的加密交易”程序,并指出该系统可能对合规和监管目的有用。(Bitcoin.com)

  • PolkaWorld:Kusama上的Coretime交易已开始

    4月27日消息,PolkaWorld 发文表示,Kusama 上的 Coretime 交易已开始,平行链时代谢幕。随着 Kusama 373 号公投的通过和执行,该提案将 Kusama 中继链运行时升级至 v1.2.0,并带来了 Coretime 的功能。紧接着,在上周五社区又通过了 Kusmaa 375 号公投,允许 Coretime 链开始 Coretime 的销售。当前,Kusama 正在进行续订期(Renew Period),即正在进行批量核心的售卖。