Composooor Snap:混合链上与链下应用的可组合性赋能工具

ETHDenver 黑客马拉松获奖者

6 分钟阅读
Composooor Snap:混合链上与链下应用的可组合性赋能工具

MetaMask Snaps 是让 MetaMask 成为全球最具扩展性钱包的发展路线图。作为开发者,您可以通过全新的方式将您的功能和 API 带入 MetaMask。Web3 开发者是这一增长的核心,本系列旨在展示当今正在构建的创新 MetaMask Snaps。

Composooor Snap

Snap 代码仓库https://github.com/kairos-loan/composooor/tree/main/packages/snap

您为什么要构建它?

在我们开发基于智能合约的金融协议和其他区块链应用的过程中,我们注意到了一个反复出现的模式。由于区块链的技术限制,越来越多的应用正在使用经合约逻辑验证的链下资源(例如计算或数据存储)。典型例子包括订单簿、空投的默克尔树、排序列表、代币属性等。

在每种情况下,有价值的信息都被存储或计算在链下,但可以被使用,并对链上交互产生重大影响。为了实现这一点,合约使用哈希或签名等不同的密码学技术来验证有效性。DApp 则需要具备特定逻辑的前端/API,以便为合约提供相关信息。遗憾的是,这种模式破坏了可组合性——例如,一个依赖托管在 AWS 上的专有订单簿的 DeFi 应用,很难被另一个智能合约轻松集成。

受够了这些限制,我们决定提出一套标准和基础设施,使所有应用都能轻松集成到任何系统中。我们坚信,让集成变得更加简便将为整个行业开辟众多新机遇。

您能带我们了解一下技术实现吗?

简介

Composooor MetaMask Snap 用于标准化并处理 Web 客户端、一个或多个链下任意资源,以及任意数量实现 Composooor 标准的智能合约之间的通信。所有标准资源均可通过一个 npm 包轻松访问,在大多数情况下,使用 Composooor 的强大功能只需一行代码。

分步说明

  • 在准备交易时,我们的 MetaMask Snap 钱包将对目标链上合约发起预估 Gas 调用。

  • 如果合约需要某些链下数据或计算才能运行,它将以包含如何找到缺失数据规范的标准化错误进行回滚。标准化错误如下所示:

error MissingOffchainDataError(
    address registryAddress,
    string url,
    bytes abiArgs
);
复制

此错误由 ComposooorRegister 暴露,合约必须继承该合约才能访问链下资源。

  • MetaMask Snap 钱包随后可以解码此错误,并通过以下方式找到缺失数据:从去中心化协议获取、调用 API,或执行从这些来源获取的代码来生成数据。在 ETHDenver 黑客松中,我们实现了最简单的方案,即 API 调用。

const responseData = await fetch(error.url + `?args=${error.abiArgs}`);
  • 钱包随后将再次预估 Gas,这次会添加一条指令,在调用目标方法之前,将获取的数据存储到对应合约的标准化注册表中。

const callToRegisterData: Call = {
    callee: error.registryAddress,
    functionSelector: utils.id('recordParameter(bytes)').slice(0, 10) as PrefixedBy0x,
    data: defaultAbiCoder.encode(['bytes'], [data]) as PrefixedBy0x,
};
复制
  • 在交易执行过程中,同一合约或另一个合约可能需要另一个链下资源才能运行。如果是这种情况,钱包将循环执行交易准备步骤,直到不再需要任何链下资源为止。这实现了协议之间访问丰富链下资源的无限可组合性。

  • 当 Gas 预估成功后,系统将提示用户对已准备好的交易进行签名,以便在包含所有必要资源的情况下成功执行。

集成支持 Composooor 的应用/构建您自己的应用是什么样的。

在 ETHDenver,我们展示了 Composooor 如何将常规混合应用模式的代码复杂度降低至少 80-90%。

智能合约端

通过 import "@composooor/ComposooorRegister.sol" 导入。使用示例:

contract Example is ComposooorRegister {
    function action() public {
        bytes memory data = consumeParameter("http://api.api/number", abi.encode(arguments));
        (uint256 offchainNumber) = abi.decode(data, (uint256));
        (...)
    }
}
复制

ComposooorRegister 使用 Solidity 编写。

前端端

Composooor Snap 在前端侧的回报最为丰厚:它通常将 200 多行的集成代码减少到……0 行!Snap 逻辑处理一切。

演示

我们以 react-wagmi DApp 的形式制作了一个完整的集成演示。该 DApp 允许用户仅支付一小部分价格即可购买 NFT,并通过贷款在之后偿还剩余金额。在链上,交易涉及不少于 8 个合约。其中,NFT 市场需要 NFT 卖家的链下签名。尽管交易十分复杂,Composooor Snap 仍能捕获错误、解码并将信息(通过 API 获取后)提供至链上。Composooor 使这个应用的实现大大简化。

如果您要实施这个方案,下一步是什么?

此类创新的一部分在于帮助开发者节省大量时间并开启新的区块链使用场景,而这有赖于广泛采用。我们将在幕后使用 Composooor Snap 来实现和部署多个面向用户的应用,并与相应的 Snap 协同工作。如果这些应用获得关注,我们将寻求合作伙伴关系,将它们与其他应用进行组合,借助简化的开发体验推动采用的飞轮效应。在此过程中,Snap 和标准将演进为更通用、更标准化的产品,契合最初的愿景:以与去中心化程度和使用场景无关的方式,将区块链同步连接到任意资源。

您能介绍一下您自己和您的团队吗?

我们是一支正在构建借贷协议的团队,致力于以更具资本效率的方式将 NFT 用作抵押品。我们决定采用包含链下组件(如订单簿)的架构。这一选择有助于提升资本效率和用户体验,但可能会限制与其他协议的互操作性。这正是我们开发 Composooor Snap 的原因,它能够轻松实现与其他协议的集成。我们希望这个库能被其他团队使用,开辟新的可能性,让他们的工作更加轻松。

您认为 MetaMask Snaps 为 Web3 领域带来了哪些机遇和可能性?

钱包是 Web3 最重要的基础支柱之一,而 MetaMask 是大多数用户事实上的默认钱包。让开发者能够将其用于任意新的使用场景,对我来说至关重要。关键在于,我们无法预见或为钱包需要参与的所有创新做好准备,因此开放对钱包的部分访问权限,就像从比特币到以太坊的转变一样:在您的技术之上支持任意使用场景,将带来难以预料的指数级复利收益。所以这个问题很难回答,但我最期待的是那些让钱包不仅仅是签名工具的应用——能够以信息丰富的方式为用户优化交互体验。

您对有意尝试 MetaMask Snaps 的开发者有什么建议?

充分利用所提供的模板,谨慎地请求每一项所需的用户授权,并尽量减少授权请求的数量。

使用 MetaMask Snaps 进行构建

开始使用 MetaMask Snaps:

  1. 查阅开发者文档

  2. 安装 MetaMask Flask

  3. 查看 MetaMask Snaps 指南

  4. 通过 TwitterGitHub 讨论区Discord 与我们保持联系

请关注我们团队在您附近举办的下一场黑客松!祝 BUIDL 愉快 ⚒️

免责声明:MetaMask Snaps 通常由 Consensys Software 以外的第三方开发。使用第三方开发的 MetaMask Snaps 须由您自行决定并承担风险,且您同意对因此类活动导致的任何损失或损害承担全部责任。Consensys 对第三方开发的 MetaMask Snaps 不作任何明示或暗示的保证,并对第三方开发的 Snaps 免除一切责任。使用区块链相关软件存在风险,使用 MetaMask Snaps 即表示您完全承担上述风险。

AI 翻译。可能包含错误。请务必核实信息。

评价此翻译
  • MetaMask
    MetaMask

    由 Consensys 打造的领先自托管加密钱包和 Web3 入口。

    阅读所有文章