StarkNet 账户抽象 与 EIP-4337

本文回顾了账户抽象,介绍了StarkNet 原生账户抽象(AA)机制、同时比较了 StarkNet 钱包与EIP-4337 钱包体验。

原作者: ChiHaoLu (chihaolu.eth) @ imToken Labs

特别感谢 NIC Lin & Cyan Ho 对本文的审阅。

本文将重点介绍 StarkNet 原生账户抽象(Account Abstraction 本文简称 AA)、StarkNet 钱包体验以及与 EIP-4337 钱包体验的的比较。

同时,本文也发布在 imToken Mirror 上发布

img

目录

  • 简介
  • StarkNet 中的 AA 机制
  • 快速了解 StarkNet AA 合约
  • StarkNet AA 中的 UX
  • StarkNet AA 特性
  • 总结与比较

简介

如果你了解以下背景知识,本文会更容易理解。

  • 熟悉智能合约钱包及其功能
  • EIP-4337 的基本概念
  • ZK-Rollup 的基本概念

回顾账户抽象

账户抽象的本质可以归纳为两个关键点:签名抽象支付抽象

签名抽象的目标是使各种账户合约能够利用不同的验证方案。这意味着用户不仅限于使用特定的数字签名算法,而是可以选择他们喜欢的任何验证机制。

与此同时,支付抽象旨在为用户提供一系列交易支付选项。例如,可以使用 ERC-20 代币进行支付,而不是使用本机代币,或者由第三方赞助交易。

StarkNet 中的 AA 机制

当用户发送交易时,首先会遇到 Sequencer。作为 Layer2 解决方案,StarkNet 没有类似于过去矿工的角色,这就是 Sequencer 发挥作用的地方。Sequencer 必须:

  • 确定交易顺序
  • 验证交易
  • 执行交易
  • 构建区块

Sequencer

负责这些任务的个体被称为 Sequencer。在 StarkNet 的背景下,账户抽象机制在 Sequencer 中定义(使用 StarkNet OS)。具体而言,StarkNet AA 受到 EIP-4337 的启发,并遵循交易处理的四个阶段来验证交易、收取费用并执行交易。

img

在验证阶段:

一旦用户的交易被接收,Sequencer 将验证 nonce 是否有效,并通过调用账户合约中的“validate”函数来验证交易是否得到账户所有者的授权。

由于 StarkNet 采用 AA 账户系统,用户可以在验证函数中实现他们喜欢的验证逻辑,而不是像以太坊中那样仅限于 ECDSA。我们将在 AA 特性部分更详细地探讨这一特性。

一旦验证成功完成,Sequencer 将从账户合约收取费用。如果交易在此失败,将不会收取任何费用。

在执行阶段:

接下来,Sequencer 将在 StarkNet OS 中执行交易,其功能类似于 EVM。

在此过程中,Sequencer 生成一个 trace,这是执行过程的记录,而不是函数的输出。然后将 trace 发送给 Prover 进行进一步处理。

快速了解 StarkNet AA 合约

在前一节中,我们了解了在 StarkNet 中执行交易所涉及的步骤。在本节中,我们将把注意力转向 StarkNet 中账户合约的实现,并探讨其关键方面。

账户合约的目的是什么?

在 StarkNet 中,账户合约作为用户与区块链进行交互的主要实体。除了执行用户发送的交易外,它主要负责:

  1. 授权验证: 在执行交易之前,Sequencer 将首先通过调用账户合约上的验证函数来验证交易是否得到授权。
  2. 重放保护: Sequencer 将验证账户合约的 nonce。(你可以在此处找到有关 StarkNet 的 nonce 机制的更多信息)

StarkNet 账户合约的入口点

这些入口点与 4337 账户合约是不同的。

账户合约必须实现这些强制性接口,这些接口是账户合约的主要入口点:

  1. __validate_declare__()
  2. __validate_deploy__()
  3. __validate__()
  4. __execute__()

无论执行何种操作(例如调用、声明或部署合约),都会首先调用相应的__validate__()函数系列。

例如,如果你希望在 DEX 上将 ETH 兑换为 USDC,Sequencer 将首先调用__validate__()来验证交易是否得到你的授权,然后调用__execute__()来完成兑换。

因此,__validate__()的输入参数将与__execute__()的输入参数相同。

StarkNet AA 中的用户体验

账户即合约

StarkNet 不支持 EOA,因为所有账户都被视为合约。

要创建一个新账户,必须部署一个合约。账户合约可用于 StarkNet 中的各种活动,包括转账、兑换和使用任意数据调用其他合约。

由自身部署

创建账户涉及以下步骤:

  1. 生成新的密钥对(生成公钥和私钥并安全存储;在此步骤中,账户尚未部署)。
  2. 在链下计算你将要部署的账户地址。
  3. 向此未部署的账户转移 ETH(例如从另一个已部署的账户或 StarkGate 转移)。
  4. 发送deploy_account类型的交易以部署此账户。

用户体验如何?

AA 钱包与 EOA 钱包之间的部署体验区别

用户可能会发现使用 AA 钱包有些困惑,因为 EOA 无需部署任何内容,可以简单地存入 ETH 并使用 EOA 钱包进行各种交易。然而,在 StarkNet 中,每个用户都必须首先部署他们的账户,这可能会导致困惑,不明白为什么AA钱包需要支付费用来“建立钱包”。

ArgentX 通过隐藏用户视角中的账户部署交易,为此提供了出色的 UX 解决方案。用户可以创建钱包,存入足够的以太币,并进行各种交易,而无需意识到账户部署交易。在幕后,ArgentX 将在发送用户的第一笔交易之前为用户启动账户部署交易。

因此,用户将不会意识到账户部署交易已经发生。

敏锐的用户可能会注意到第一笔交易的交易费比预期高。这是因为 ArgentX 在第一笔交易中收取了部署费用。

与 EOA 钱包的其他 UX 差异呢? 使用 StarkNet AA 钱包的用户体验与使用以太坊 EOA 钱包的体验没有显著差异,除了账户部署过程。

与其他 4337 钱包用户体验差异?

4337 钱包允许用户在部署钱包合约之前发送 UserOp,并且入口点合约将使用嵌入在 UserOp 中的initCode部署钱包合约,在 StarkNet 中,你必须先部署账户合约,然后再向其发送任何交易。

StarkNet AA 特性

EIP-4337 也共享相同的特性。

现在我们了解到用户可以定义其账户的功能,我们可以看到账户合约可以执行简单的签名检查并调用目标,或者可以编程实现几乎任何功能。

更多操作

  • 仅在满足某些条件时同意支付交易。例如,每日交易限制,黑/白名单地址
  • 使用从混币器中提取的资金支付交易。

MultiCall / 批量交易

通过将一系列调用(例如 ERC-20 中的approve()transferFrom())包装为 MultiCalls 并提交给账户合约,我们可以在单个交易中执行多个操作。这样,如果它们作为独立交易进行,我们可以避免为每个单独调用签名和支付基本交易费用。

不同的验证方法

我们可以在验证函数中设计自己的验证机制。例如,我们可以使用各种算法(如 Stark Curve、secp256k1、secp256r1)验证签名,甚至可以使用多重签名机制。此外,这些签名算法也可以是量子抗性和 Gas高效的 。

插件

账户合约还可以实现插件机制,允许未来扩展。你可以添加一个插件,该插件可在验证和执行函数中使用,以扩展账户的功能。

  • 会话密钥: 用户可以授权 Dapp(例如 Game-Fi 或 Social-Fi Blog)代表其执行具有预定义期限的交易,从而无需每次都签署交易。

Paymaster

StarkNet 当前的交易费用与以太相关联。但是在未来,StarkNet 将允许用户选择如何支付交易费用。为了实现这一点,StarkNet 遵循 EIP 4337 中制定的指南,并允许交易指定一个特定的合约,即paymaster ,来支付其交易。

在验证阶段,Sequencer 需要验证 paymaster 是否有足够的资金来支付交易。

一旦验证完成并成功,Sequencer 将请求 paymaster 在执行交易之前支付交易。

用户可以选择在发送交易之前使用 ERC-20 或信用卡支付 paymaster,或者允许paymaster 在交易执行后从账户合约请求 ERC-20 费用。

总结与比较

总结

从前一节中,我们了解了这两个目标的含义:

  • 签名抽象: 我们可以通过在我们的验证系列函数中实现不同曲线、多重签名、硬件签名者、2FA、3FA 甚至插件来实现签名抽象。
  • 支付抽象: 我们可以期待 StarkNet 中实现paymaster,这将允许我们使用以太以外的代币来支付交易,甚至请求他人代为支付。

StarkNet AA 与 4337 的比较

EIP-4337 和 StarkNet Native AA 之间的主要区别是:

  1. 在处理用户交易时,Starknet 中的Sequencer在功能上类似于 4337 中的捆绑器。但是Sequencer还充当区块构建者(详细信息可见我的其他文章 )。
  2. 在 StarkNet AA 中,我们必须在发送交易之前部署账户合约。

img

TEM Medium 2023 有獎徵稿 TEM Medium 目前正在進行有獎徵稿!詳情請參考: https://medium.com/taipei-ethereum-meetup/validity-rollup-posting-state-diff-30cf70614af

参考引用

StarkNet 交易和状态

StarkNet AA

我之前在以太坊 AA 上的文章


本翻译由 DeCert.me 协助支持, 在 DeCert 构建可信履历,为自己码一个未来。

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

1 条评论

请先 登录 后评论
翻译小组
翻译小组
0x9e64...7c84
大家看到好的文章可以在 GitHub 提 Issue: https://github.com/lbc-team/Pioneer/issues 欢迎关注我的 Twitter: https://twitter.com/UpchainDAO