{"content":{"title":"StarkNet 账户抽象 与 EIP-4337","body":"> * 原文链接：https://blog.openzeppelin.com/arbitrary-address-spoofing-vulnerability-erc2771context-multicall-public-disclosure\r\n> * 译文出自：[登链翻译计划](https://github.com/lbc-team/Pioneer)\r\n> * 译者：[翻译小组](https://learnblockchain.cn/people/412)  ，校对：[Tiny 熊](https://learnblockchain.cn/people/15) \r\n> * 本文永久链接：[learnblockchain.cn/article…](https://learnblockchain.cn/article/7064) \r\n\r\n原作者: [ChiHaoLu](https://chihaolu.me/) ([chihaolu.eth](https://chihaolu.eth.xyz/)) @ imToken Labs\r\n\r\n*特别感谢* [NIC Lin](https://medium.com/u/aca73f7679fe?source=post_page-----2c343b561d6e--------------------------------)  *&* [Cyan Ho](https://medium.com/u/fa719f8b236f?source=post_page-----2c343b561d6e--------------------------------)  对本文的审阅。\r\n\r\n本文将重点介绍 StarkNet 原生账户抽象（Account Abstraction 本文简称 AA）、StarkNet 钱包体验以及与 [EIP-4337](https://eips.ethereum.org/EIPS/eip-4337) 钱包体验的的比较。\r\n\r\n同时，本文也发布在 [imToken Mirror 上发布](https://mirror.xyz/0x347c9872A2a1dE370D798f9FE96341A9A0E05af8/6d8EVq_43TCYovplZ4HquOso42erE_qgC42ab_E1naU)！\r\n\r\n![img](https://img.learnblockchain.cn/attachments/migrate/1702388688051)\r\n\r\n## 目录\r\n\r\n- 简介\r\n- StarkNet 中的 AA 机制\r\n- 快速了解 StarkNet AA 合约\r\n- StarkNet AA 中的 UX\r\n- StarkNet AA 特性\r\n- 总结与比较\r\n\r\n## 简介\r\n\r\n如果你了解以下背景知识，本文会更容易理解。\r\n\r\n- 熟悉智能合约钱包及其功能\r\n- EIP-4337 的基本概念\r\n- ZK-Rollup 的基本概念\r\n\r\n### 回顾账户抽象\r\n\r\n账户抽象的本质可以归纳为两个关键点：**签名抽象**和**支付抽象**。\r\n\r\n签名抽象的目标是使各种账户合约能够利用不同的验证方案。这意味着用户不仅限于使用特定的数字签名算法，而是可以选择他们喜欢的任何验证机制。\r\n\r\n与此同时，支付抽象旨在为用户提供一系列交易支付选项。例如，可以使用 ERC-20 代币进行支付，而不是使用本机代币，或者由第三方赞助交易。\r\n\r\n## StarkNet 中的 AA 机制\r\n\r\n当用户发送交易时，首先会遇到 Sequencer。作为 Layer2 解决方案，StarkNet 没有类似于过去矿工的角色，这就是 Sequencer 发挥作用的地方。Sequencer 必须：\r\n\r\n- 确定交易顺序\r\n- 验证交易\r\n- 执行交易\r\n- 构建区块\r\n\r\n![Sequencer](https://img.learnblockchain.cn/attachments/migrate/1702388690086)\r\n\r\n\r\n\r\n负责这些任务的个体被称为 Sequencer。在 StarkNet 的背景下，账户抽象机制在 Sequencer 中定义（使用 StarkNet OS）。具体而言，StarkNet AA 受到 EIP-4337 的启发，并遵循交易处理的四个阶段来验证交易、收取费用并执行交易。\r\n\r\n![img](https://img.learnblockchain.cn/attachments/migrate/1702388692118)\r\n\r\n### 在验证阶段：\r\n\r\n一旦用户的交易被接收，Sequencer 将验证 nonce 是否有效，并通过调用账户合约中的“validate”函数来验证交易是否得到账户所有者的授权。\r\n\r\n由于 StarkNet 采用 AA 账户系统，用户可以在验证函数中实现他们喜欢的验证逻辑，而不是像以太坊中那样仅限于 ECDSA。我们将在 AA 特性部分更详细地探讨这一特性。\r\n\r\n一旦验证成功完成，Sequencer 将从账户合约收取费用。如果交易在此失败，将不会收取任何费用。\r\n\r\n### 在执行阶段：\r\n\r\n接下来，Sequencer 将在 StarkNet OS 中执行交易，其功能类似于 EVM。\r\n\r\n在此过程中，Sequencer 生成一个 trace，这是执行过程的记录，而不是函数的输出。然后将 trace 发送给 Prover 进行进一步处理。\r\n\r\n## 快速了解 StarkNet AA 合约\r\n\r\n在前一节中，我们了解了在 StarkNet 中执行交易所涉及的步骤。在本节中，我们将把注意力转向 StarkNet 中账户合约的实现，并探讨其关键方面。\r\n\r\n### 账户合约的目的是什么？\r\n\r\n在 StarkNet 中，账户合约作为用户与区块链进行交互的主要实体。除了执行用户发送的交易外，它主要负责：\r\n\r\n1. **授权验证：** 在执行交易之前，Sequencer 将首先通过调用账户合约上的验证函数来验证交易是否得到授权。\r\n2. **重放保护：** Sequencer 将验证账户合约的 nonce。（你可以在[此处](https://docs.starknet.io/documentation/architecture_and_concepts/Account_Abstraction/approach/#replay_protection)找到有关 StarkNet 的 nonce 机制的更多信息）\r\n\r\n### StarkNet 账户合约的入口点\r\n\r\n> 这些入口点与 4337 账户合约是不同的。\r\n\r\n账户合约必须实现这些强制性接口，这些接口是账户合约的主要入口点：\r\n\r\n1. `__validate_declare__()`\r\n2. `__validate_deploy__()`\r\n3. `__validate__()`\r\n4. `__execute__()`\r\n\r\n无论执行何种操作（例如调用、声明或部署合约），都会首先调用相应的`__validate__()`函数系列。\r\n\r\n例如，如果你希望在 DEX 上将 ETH 兑换为 USDC，Sequencer 将首先调用`__validate__()`来验证交易是否得到你的授权，然后调用`__execute__()`来完成兑换。\r\n\r\n因此，`__validate__()`的输入参数将与`__execute__()`的输入参数相同。\r\n\r\n## StarkNet AA 中的用户体验\r\n\r\n### 账户即合约\r\n\r\nStarkNet 不支持 EOA，因为所有账户都被视为合约。\r\n\r\n要创建一个新账户，必须部署一个合约。账户合约可用于 StarkNet 中的各种活动，包括转账、兑换和使用任意数据调用其他合约。\r\n\r\n### 由自身部署\r\n\r\n创建账户涉及以下步骤：\r\n\r\n1. 生成新的密钥对（生成公钥和私钥并安全存储；在此步骤中，账户尚未部署）。\r\n2. 在链下计算你将要部署的账户地址。\r\n3. 向此未部署的账户转移 ETH（例如从另一个已部署的账户或 StarkGate 转移）。\r\n4. 发送`deploy_account`类型的交易以部署此账户。\r\n\r\n### 用户体验如何？\r\n\r\n**AA 钱包与 EOA 钱包之间的部署体验区别**\r\n\r\n用户可能会发现使用 AA 钱包有些困惑，因为 EOA 无需部署任何内容，可以简单地存入 ETH 并使用 EOA 钱包进行各种交易。然而，在 StarkNet 中，每个用户都必须首先部署他们的账户，这可能会导致困惑，不明白为什么AA钱包需要支付费用来“建立钱包”。\r\n\r\nArgentX 通过隐藏用户视角中的账户部署交易，为此提供了出色的 UX 解决方案。用户可以创建钱包，存入足够的以太币，并进行各种交易，而无需意识到账户部署交易。在幕后，ArgentX 将在发送用户的第一笔交易之前为用户启动账户部署交易。\r\n\r\n因此，用户将不会意识到账户部署交易已经发生。\r\n\r\n> *敏锐的用户可能会注意到第一笔交易的交易费比预期高。这是因为 ArgentX 在第一笔交易中收取了部署费用。*\r\n\r\n**与 EOA 钱包的其他 UX 差异呢？**\r\n使用 StarkNet AA 钱包的用户体验与使用以太坊 EOA 钱包的体验没有显著差异，除了账户部署过程。\r\n\r\n**与其他 4337 钱包用户体验差异？**\r\n\r\n 4337 钱包允许用户在部署钱包合约之前发送 UserOp，并且入口点合约将使用嵌入在 UserOp 中的`initCode`部署钱包合约，在 StarkNet 中，你必须先部署账户合约，然后再向其发送任何交易。\r\n\r\n## StarkNet AA 特性\r\n\r\n>*EIP-4337 也共享相同的特性。*\r\n\r\n现在我们了解到用户可以定义其账户的功能，我们可以看到账户合约可以执行简单的签名检查并调用目标，或者可以编程实现几乎任何功能。\r\n\r\n### 更多操作\r\n\r\n- 仅在满足某些条件时同意支付交易。例如，每日交易限制，黑/白名单地址\r\n- 使用从混币器中提取的资金支付交易。\r\n- …\r\n\r\n### MultiCall / 批量交易\r\n\r\n通过将一系列调用（例如 ERC-20 中的`approve()`和`transferFrom()`）包装为 MultiCalls 并提交给账户合约，我们可以在单个交易中执行多个操作。这样，如果它们作为独立交易进行，我们可以避免为每个单独调用签名和支付基本交易费用。\r\n\r\n### 不同的验证方法\r\n\r\n我们可以在验证函数中设计自己的验证机制。例如，我们可以使用各种算法（如 Stark Curve、secp256k1、secp256r1）验证签名，甚至可以使用多重签名机制。此外，这些签名算法也可以是量子抗性和 Gas高效的 。\r\n\r\n### 插件\r\n\r\n账户合约还可以实现插件机制，允许未来扩展。你可以添加一个插件，该插件可在验证和执行函数中使用，以扩展账户的功能。\r\n\r\n- **会话密钥：** 用户可以授权 Dapp（例如 Game-Fi 或 Social-Fi Blog）代表其执行具有预定义期限的交易，从而无需每次都签署交易。\r\n\r\n### Paymaster\r\n\r\nStarkNet 当前的交易费用与以太相关联。但是在未来，StarkNet 将允许用户选择如何支付交易费用。为了实现这一点，StarkNet 遵循 EIP 4337 中制定的指南，并允许交易指定一个特定的合约，即paymaster ，来支付其交易。\r\n\r\n在验证阶段，Sequencer 需要验证 paymaster 是否有足够的资金来支付交易。\r\n\r\n一旦验证完成并成功，Sequencer 将请求 paymaster 在执行交易之前支付交易。\r\n\r\n用户可以选择在发送交易之前使用 ERC-20 或信用卡支付 paymaster，或者允许paymaster 在交易执行后从账户合约请求 ERC-20 费用。\r\n\r\n## 总结与比较\r\n\r\n### 总结\r\n\r\n从前一节中，我们了解了这两个目标的含义：\r\n\r\n- **签名抽象：** 我们可以通过在我们的验证系列函数中实现不同曲线、多重签名、硬件签名者、2FA、3FA 甚至插件来实现签名抽象。\r\n- **支付抽象：** 我们可以期待 StarkNet 中实现paymaster，这将允许我们使用以太以外的代币来支付交易，甚至请求他人代为支付。\r\n\r\n### StarkNet AA 与 4337 的比较\r\n\r\nEIP-4337 和 StarkNet Native AA 之间的主要区别是：\r\n\r\n1. 在处理用户交易时，Starknet 中的Sequencer在功能上类似于 4337 中的捆绑器。但是Sequencer还充当区块构建者（详细信息可见[我的其他文章](https://medium.com/taipei-ethereum-meetup/starknet-%E4%BB%8B%E7%B4%B9-full-node-%E8%88%87-data-dd80e799a265) ）。\r\n2. 在 StarkNet AA 中，我们必须在发送交易之前部署账户合约。\r\n\r\n![img](https://img.learnblockchain.cn/attachments/migrate/1702388693862)\r\n\r\n\r\n\r\nTEM Medium 2023 有獎徵稿 TEM Medium 目前正在進行有獎徵稿！詳情請參考： https://medium.com/taipei-ethereum-meetup/validity-rollup-posting-state-diff-30cf70614af\r\n\r\n## 参考引用\r\n\r\nStarkNet 交易和状态\r\n\r\n- [Starknet 状态 — Merkle-Patricia 树](https://docs.starknet.io/documentation/architecture_and_concepts/State/starknet-state/#merkle_patricia_tree)\r\n- [Starknet 架构](https://david-barreto.com/starknets-architecture-review/)\r\n- [Starknet 交易生命周期](https://docs.starknet.io/documentation/architecture_and_concepts/Blocks/transaction-life-cycle/)\r\n\r\nStarkNet AA\r\n\r\n- [StarkNet 账户](https://docs.starknet.io/documentation/architecture_and_concepts/Account_Abstraction/introduction/)\r\n- [费用机制](https://docs.starknet.io/documentation/architecture_and_concepts/Fees/fee-mechanism/)\r\n- [StarkNet 账户抽象模型 — 第 1 部分](https://community.starknet.io/t/starknet-account-abstraction-model-part-1/781)\r\n- [Starknet 账户抽象模型 — 第 2 部分](https://community.starknet.io/t/starknet-account-abstraction-model-part-2/839)\r\n- [精彩的 StarkNet AA 视频列表](https://youtube.com/playlist?list=PLbn3OUDXBfE3DykaMOkdPUXLfRq0OFfO5)\r\n\r\n我之前在以太坊 AA 上的文章\r\n\r\n- [账户抽象介绍（一）：以太坊的账户现状](https://medium.com/imtoken/account-abstraction-介绍-一-以太坊的账户现状-6c03c303f229)\r\n- [账户抽象介绍（二）：以太坊未来的账户体验](https://medium.com/imtoken/account-abstraction-介绍-二-以太坊未来的账户体验-cca0380d3ba5)\r\n- [账户抽象抽象账户：EIP-2938 简介](https://medium.com/taipei-ethereum-meetup/account-abstraction-抽象账户-eip-2938-简介-edfd64fac767)\r\n- [账户抽象抽象账户：EIP-3074 与 EIP-4337 简介](https://medium.com/taipei-ethereum-meetup/account-abstraction-抽象账户-eip-3074-與-eip-4337-簡介-cb4e1f3f6864)\r\n\r\n--- \r\n\r\n本翻译由 [DeCert.me](https://decert.me/) 协助支持， 在 DeCert 构建可信履历，为自己码一个未来。"},"author":{"user":"https://learnblockchain.cn/people/412","address":"0x9e64a306aB319811C5a1270F2CA9f6E1e4857c84"},"history":"bafkreibwyimaqv4okr4x5ydmg46y2bguwpay3pjwvk4upie7gb5h254pa4","timestamp":1702392325,"version":1}