本文介绍了如何为智能合约钱包设置基础设施,重点介绍了账户抽象引入的新组件,包括用户操作、捆绑器、支付方和入口点合约。文章还介绍了如何使用Tenderly的Web3 Actions和Node Extensions来简化和自动化整个过程,以及如何将所有组件集成到dapp中,而无需更改现有的逻辑。
账户抽象为智能合约钱包引入了新的组件,包括用户操作、捆绑器、支付者和入口点合约。 了解如何为智能合约钱包构建自定义基础设施,并将这些组件整合在一起。
当你不再使用私钥-公钥配对,转而使用智能合约时,你会得到什么? 你将获得一种简单、灵活、易于访问且更安全的方式,通过智能合约钱包管理你的交易。
由于标准智能合约钱包的不兼容性和迁移限制,它们已被证明是复杂的。 在 EIP-4337 之前,它们没有标准化,这阻碍了它们的采用和灵活性。
另一方面,账户抽象钱包在用户体验方面带来了显著的改进。 基于账户抽象系统的智能合约钱包无需对以太坊进行任何更改,而是引入了一些新组件,指定了使用它们时的操作和流程。
因此,如果你准备构建以用户为先的钱包,请首先了解每个组件。 然后,了解如何在不更改任何 dapp 的情况下,为智能合约钱包设置基础设施。
账户抽象为智能账户钱包的逻辑引入了一些新组件。 让我们深入了解每一个组件。 🔎
用户操作是账户抽象钱包和常规智能合约钱包之间的关键区别之一。 在账户抽象钱包的情况下,用户以 UserOperation
对象的形式将交易发送到替代 mempool。
UserOperations
包含与常规交易相同的参数,包括发送者、calldata、nonce、签名等。 但是,与常规交易相比,UserOperations
还包括一些额外的字段,这些字段对其验证、 गैस 付款和 paymaster 补贴是必需的。 它们也不能调用某些禁止的 opcodes。
Paymasters 允许开发者或第三方补贴用户的费用,并允许以 ERC-20 代币支付 गैस 费用。 Paymaster 可以包含用于支付 गैस 费用的押金和用于防止恶意 DoS 攻击的股份。
但是,并非所有 paymasters 都可以发送请求。 Bundlers 首先需要接受一个 paymaster,因此只有列入白名单的 paymasters 才能提供支持。
Bundlers 可以是区块构建者或可以将交易发送给区块构建者的用户。 他们监听替代 mempool,并将提交的 UserOperations 收集到一个捆绑包中。 Bundlers 以 handleOps
调用的形式收集 UserOperation
对象。
此外,bundlers 运行模拟以确保 UserOperation
不会因为调用禁止的 opcodes 而回滚。 它还使用模拟来估计 UserOperation
成功所需的 गैस 量。
当通过账户钱包管理交易时,模拟可确保 UserOperation
的有效性及其支付执行费用的能力。 此外,运行模拟还有助于确保一切在链上发送后以完全相同的方式执行。
UserOperation
的模拟发生在将 UserOperation
添加到 mempool 并将其提交到捆绑包之前:
UserOperation
提交到替代 mempool。UserOperations
时运行模拟。 Bundlers 通过调用 RPC 方法执行 simulateValidation
函数。 这允许 bundlers 验证操作签名并确保所有费用都已支付。一旦客户端运行模拟,该方法将以 ValidationResult
的形式返回一个成功的响应。 如果发生错误,客户端可以拒绝提交的 UserOperation
。
此外,validateUserOp
或 validatePaymasterUserOp
可能会返回一个特定的时间范围,在此期间 UserOperation
在链上有效。 如果 UserOperation
的时间框架很短,无法持续到下一个区块被挖掘出来,则客户端可能会丢弃 UserOperation
。
💡
如果你是从头开始构建 bundler 和 paymaster 组件,你可以集成我们的交易模拟器以获得模拟功能。
将我们的模拟基础设施整合到你的钱包中,你可以确定用户操作的有效性以及 paymaster 是否会在链上启动整个流程之前为其付费。
入口点合约执行 UserOperation 捆绑包。 Bundler 将 handleOps
调用发送到入口点合约。 然后,handleOps
会经历验证和执行循环:
handleOps
函数会创建一个账户。 然后,它通过调用 validateUserOp
开始验证过程,并请求验证操作签名。在此循环中,handleOps
函数检查 paymaster 在入口点合约中是否有足够的存款来支付费用。 它还会确认 paymaster 是否愿意这样做。
handleOps
使用提交的 UserOperation
的 calldata 调用该账户。 该账户解析数据,然后逐个执行剩余的调用。在你开始设置上述所有基础设施之前,这里有一个整个过程的简短概述:
UserOperation
,并要求 paymaster 赞助它。UserOperation
以确定它是否符合要求的标准。UserOperation
符合标准并成功模拟,则 paymaster 可以接受赞助它。UserOperation
可以花费指定数量的代币来执行。UserOperation
进入替代 mempool,任何 bundler 都可以决定将其包含在其捆绑包中。UserOperation
的 bundler 对其进行模拟,以确保其有效并且不调用任何禁止的 opcodes。UserOperations
并将它们发送到入口点智能合约。handeOps
函数在确保它们有效、已签名且尚未执行后,在链上执行每个 UserOperation
。在替代 mempool 中捆绑用户操作
好的,现在你已经熟悉了所有组件,让我们看看如何为你的智能合约钱包设置基础设施。 借助 Tenderly 的全栈基础设施,你可以自动化和简化整个过程,将所有组件集成到你的 dapp 中,并且不会在此过程中对你现有的逻辑进行任何更改。
那么,准备好开始行动了吗? 我们从 Tenderly Web3 Actions 开始。 😎
Web3 Actions 是你 dapps 的无服务器后端。 你可以使用 JavaScript 或 Typescript 编写自定义代码,并且一旦满足指定的条件,Web3 Action 将自动执行它。
例如,如果你想发送一个带有特定参数的 mint 操作,你可以设置一个 Web3 Action 来自动调用模拟。 它将模拟此交易,验证你的 UserOperation
的值,然后如果一切执行成功,则将其发送到 Paymaster。
通过设置 Web3 Action,你可以自动化通过智能合约钱包管理交易的整个过程。 你可以通过以下两种方式做到这一点:
但是,如果你想以更灵活的方式将 Web3 Action 基础设施集成到你的 dapp 中,该怎么办? 为了实现这一点,你可以使用 Tenderly 节点扩展,这是一种构建和部署自定义 JSON-RPC 方法的创新方法。
节点扩展连接到 Web3 Actions,并允许你通过 Tenderly Web3 Gateway(我们的节点即服务解决方案)调用你为你的钱包基础设施创建的操作。 这样,你实际上可以自定义你与区块链交互的方式,而无需修改你的 dapp 逻辑。
此外,节点扩展还带有一个公共库,你可以在其中找到随时可用的示例。 因此,除了创建你自己的扩展之外,你还可以使用来自 Pimlico 的三个预定义的扩展来进行 Paymaster 集成:
💡
你是否有一个促进账户抽象过程的节点扩展的想法?
请随时将其提交到我们的社区来源库,我们的团队将对其进行审核。 如果获得批准,我们将将其添加到我们的库中,以便社区中的其他开发人员可以将其集成到他们的智能合约钱包中。
所有智能合约钱包都采用账户抽象功能只是时间问题。 当你现在就可以开始构建用户友好的钱包并保持领先一步时,为什么还要等待这种情况发生呢? 但是,不要围绕预设的 API 进行工作并尝试思考替代解决方案,而是设置一个适合你的产品的基础设施,而不是相反。
借助 Tenderly 的全栈基础设施,你可以通过 Web3 Actions、节点扩展和模拟构建一个自定义、灵活且可扩展的基础设施。 更好的是,你可以使用 Tenderly 无缝地连接不同的组件,而无需更改你现有的逻辑。
开始使用 Tenderly 构建,并在整个过程中获得更大的控制权、灵活性和支持。
- 原文链接: blog.tenderly.co/how-to-...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!