# 对于所有人的账户抽象化

By [473](https://paragraph.com/@xiaohuhu473) · 2023-06-29

---

许多人将账户抽象描述为“一旦满足某些条件就自动执行交易”的一种手段。 如果您正在实施无状态帐户抽象，则只有其中一部分情况是可能的 - 您应该这样做！

> 免责声明：本文由一名Fuel社区的成员翻译。为了提供准确的翻译，我们进行了仔细的检查，但仍然不排除会有错误或遗漏。Fuellabs不对翻译信息的准确性、可靠性或及时性负责。
> 
> 原文：[Account Abstraction For Everyone Else](https://fuel-labs.ghost.io/account-abstraction-for-everyone-else/)

### 什么是账户抽象？

一般来说，账户抽象是指以编程方式设置交易的有效性条件的能力。

**这些不是账户抽象**：

*   支付用户的 **Gas** 费用
    
*   原生多重签名
    
*   基于“[社交登录](https://twitter.com/IvanOnTech/status/1491819594620809219?s=20)”的 **web3auth**
    

您可以通过帐户抽象实现来执行这些操作。

我们稍后将更深入地讨论由**Vitalik**等人撰写的[EIP-4337](https://eips.ethereum.org/EIPS/eip-4337?ref=fuel-labs.ghost.io)，它说：“实现账户抽象的关键目标：允许用户使用包含任意验证逻辑的智能合约钱包，而不是EOA作为他们的主要账户。”

目前，在**Ethereum**上，交易在以下情况下有效：

1.  有足够的余额来支付**Gas**。
    
2.  **Nonce** 是正确的。
    
3.  拥有有效的数字签名。
    

但是，如果开发人员可以定义一组不同的条件，在这些条件下事务是有效的呢？

### 无状态VS有状态帐户抽象

在继续之前，需要注意的是，存在两种类型的帐户抽象：无状态和有状态。

许多人将帐户抽象描述为“在满足某个条件后自动执行事务”的一种方法。如果您正在实现无状态帐户抽象，则只有这些情况的一个子集是可能的—您应该这样做！

无状态=不依赖于外部状态，没有副作用。

有状态 = 可以依赖于外部状态，可以访问链的状态。

在一个有状态帐户抽象实现中，定义有效性条件的智能合约可以访问链的状态。问题是，在某个实例中为真的条件在另一个实例中可能不为真。实际上，这看起来像是一个节点发送一个当前有效但过后会无效的交易。例如，假设您希望在区块**1000000**处自动执行交易。在区块 **1000000**时，您可以将用户操作提交到内存池中，该操作在当时是有效的。当绑定器尝试将其放入下一个块时，可能是因为块数增加而变得无效。

接收节点必须花费资源验证一些永远不会在链上的东西，并且不能将发送交易的内容列入黑名单，因为它在发送时是有效的。

在**ERC4337**中，研究人员花了大量时间研究如何避免这种情况，我们稍后将对此进行更详细的介绍。由于这个原因，这个规范禁止使用特定的操作码，比如“`blockNumber`”。

使用无状态帐户抽象，您永远不会冒着更改有效性的风险——这是单调的。

### Fuel中无状态AA的实施

稍后我们将讨论其他生态系统是如何实现帐户抽象的。从**Fuel**开始，您将看到从头开始建立一个新的系统和模块化论文与现有系统上构建两者之间的对比。

**Fuel**用谓词实现了无状态AA。谓词只是您可以消费[UTXO](https://academy.binance.com/en/glossary/unspent-transaction-output-utxo?ref=fuel-labs.ghost.io)的一个条件。谓词是主函数返回布尔值的脚本。一个纯函数，该谓词下的资产被解锁，并且如果求值为真，则调用方可以使用它。谓词拥有或控制**UTXO**。

> \*注：**UTXO**代表未花费的交易输出。**UTXO**的核心基本理解是，对于每一笔交易，都会花费全部余额或代币数量。你发送给指定接收人的金额会流向他们，剩下的会被全部销毁，然后再次铸造，从而产生新的未花费输出。\*

**Fuel**谓词的关键在于，你可以反省或检查谓词的输入和输出，这样你就可以达成协议，允许你在多方之间建立订单簿交换或进行原子交换。

在交易层面，**UTXO**交易描述了交易确切影响的子集。这种效应子集可以以无状态帐户抽象为条件。**Fuel**通过**UTX**O模型的设计决策实现了这一点。这使系统能够了解交易的输入和输出。在**Ethereum**上，你只知道输入。有了**Fuel**，你可以用输出来写逻辑，如果你提供**X**，那么它提供**Y**。

### 从实际情况来说

你可以将代币锁定在一个具有可编程有效性的谓词中，该谓词说：“如果作为回报，**X**数量的**Y**资产被发送到某个地址，这些都是可以消费的。同样，你可以有一些逻辑，说只有当X以某个价格交换时，这笔交易才有效。这里的问题不是你要”发送”任何东西。它已经被发送了。你看到的是交易的最终效果，在这种情况下，代币已经被发送。

### 谓词有效性

在有效范围执行期间不检查谓词。它们在交易有效期进行检查。谓词可以检查交易的输入是否具有特定的属性，但它不在乎这些是否是有效的（现有的、已签名的）输入。它们必须是有效的输入，交易才会有效，但执行这种有效性的不是谓词。

### Soon™

现在，**Fuel** 谓词受到字节数的约束，以此来衡量它们。未来，团队将使用**Gas**约束谓词，从而允许使用循环。这使得像自定义哈希和签名验证这样通常需要循环的密码学成为可能。

实施 Fuel 的优势
-----------

> _注意：如果你想继续学习AA可以做什么，请跳过本节_

### UTXO 反省

在**Bitcoin**和**Ethereum**以及使用类似实现的协议上，你都无法内省交易。这意味着您不能内省花费它的交易，也不能基于输出以编程方式设置要执行的操作。

从本质上讲，**Fuel**对AA的实现为开发人员和用户提供了更多的灵活性，因为这些都不是在协议级别编码的东西。**Fuel**的帐户抽象允许开发人员在应用程序级别定义自定义验证方案。

**Fuel Labs**团队有一个**Ethereum**私钥的**EC Recover**示例。如果您想要针对不同曲线的EC **Recover**，开发人员可以在应用层编写一个！看看**Hashcloack**用**Sway**编写的**BLS12-381**和**Edwards25519**的实现。

> **_EC RECOVER_**\*：当向**Ethereum**网络发送交易时，您必须用您的私钥签署此交易。 **EC Recover**正在将验证签名的功能转移到智能合约中，而不是只有**Ethereum**节点才能做的事情。有了这一功能，您可以验证的不仅仅是交易签名本身。\*

### 没有状态膨胀

无状态账户抽象不会让状态膨胀（那么多），因为即使花掉了，它也永远不会进入区块链状态，只有历史记录。

有了谓词，就没有契约、状态或存储。谓词最初没有状态，然后如果有人代表谓词进行支出，则只能获得一个数据库条目，仅用于**UTXO**而不是状态树。

其他团队如何进行账户抽象
------------

像计算机科学中的大多数东西一样，帐户抽象可以通过多种方式实现。没有哪种实施方案是整个行业的标准。

### Ethereum

[EIP-2938](https://eips.ethereum.org/EIPS/eip-2938?ref=fuel-labs.ghost.io)是最初的**EIP**，允许合约作为支付费用和开始交易执行的顶级账户。它的实现围绕着引入一个新的**EVM**操作码来表示有效性，以通过执行任意**EVM**字节码来扩展交易的条件。这个提议没有被纳入协议，因为开发人员正忙于合并或者其他更改，不能冒险进行如此大规模的协议更改。

[ERC-4337](https://medium.com/infinitism/erc-4337-account-abstraction-without-ethereum-protocol-changes-d75c9d94dc4a)是第一个在不需要更改核心协议的情况下实现**Ethereum**账户抽象的账户抽象提案/标准。它通过将交易的验证从协议本身中移出，并将其转移到更高的级别，即具有此特殊“入口点”的智能合约级别来实现这一点。

在**Ethereum**上，**EOA**是**Ethereum**上的账户，其功能被硬编码到协议中。定义他们如何支付**Gas**、如何签署交易、如何使用随机数等。这一标准摆脱了**EOA**给我们的账户的硬编码性质。

### Starknet

[Starknet](https://starkware.co/starknet/?ref=fuel-labs.ghost.io)是**Ethereum**上的**zk-rollup**。**Starkware**为**Ethereum**实现了**EIP-4337**模型的修改版本。点击[此处](https://v2-docs.zksync.io/dev/developer-guides/aa.html?ref=fuel-labs.ghost.io#extending-eip4337)了解更多信息。

### zkSync

**zkSync**是**Ethereum**上的**zk-rollup**。**zkSync**实现了[EIP-4337](https://eips.ethereum.org/EIPS/eip-4337?ref=fuel-labs.ghost.io)的修改版本。点击[此处](https://era.zksync.io/docs/reference/concepts/aa.html?ref=fuel-labs.ghost.io#extending-eip4337)了解更多信息。

### Biconomy AA

**Biconomy**是一个专注于**Ethereum**生态系统基础设施和工具的开发工具平台。**Biconomy**完成了**EIP-4337**的修改版本，并作为**SDK**的一部分提供了支付用户**Gas**等功能。请在[此处](https://biconomy.gitbook.io/sdk/additional-content/account-abstraction?ref=fuel-labs.ghost.io)阅读有关其如何实施的更多信息。

### 模块化设计

模块化的精神不是设计一个系统与另一个系统紧密结合，而是提供更多的灵活性。**Fuel**对账户抽象的实施就是一种表现。**Fuel**对账户抽象的实施提供了更高的灵活性和高度可定制的环境，开发人员可以在应用程序级别定义有效性条件，而无需依赖**Fuel**协议来支持它。

由于**Fuel**不是专门为**Ethereum**或任何其他系统构建的，因此**Fuel**的实施不会受到另其他系统的负担，并且有创新的空间。

虽然**zkSync**、**Starkware**和**Biconomy**都对**EIP-4337**版本实现了修改，但**Fuel**实现了更独特、更高性能的帐户抽象。由于**Fuel**将作为**rollup**部署在**Ethereum**上，因此从一些账户来看，**Ethereum**已经有了账户抽象。

你可以使用账户抽象来做什么
-------------

你看到的正在构建的新体验是通过帐户抽象而非帐户抽象本身实现的功能。像为用户赞助**Gas**和**Web3Auth**这样的东西都是建立在帐户抽象之上的应用层东西。通过帐户抽象的核心机制，这些事情本质上是可能的：通过编程设置tx的有效性条件的能力。

建立在帐户抽象之上的示例：

*   **Web3**身份
    
*   为其他用户支付**Gas**
    
*   自由签名验证方案
    
*   检查多重签名（本机多签）
    

看看这些利用了**Fuel**账户抽象的项目：

*   [Authsome](https://taikai.network/ethlisbon/hackathons/ethlisbon-2022/projects/cl9tv1epm14319401w1mf7ltuhm/idea?ref=fuel-labs.ghost.io) - 无钱包登录系统。这个钱包被用作可插拔身份验证基础设施的基础，类似于**Web3Auth**。
    
*   [Thunder](https://twitter.com/ThunderbyFuel/status/1598338104573714433?s=20&t=MCV2iY9PdkvkpoWJAtouBQ&ref=fuel-labs.ghost.io) - **Fuel**上的**NFT**市场，可以一键批量执行交易。
    
*   [Poolshark](https://twitter.com/poolsharks_labs?ref=fuel-labs.ghost.io) - 定向流动性协议。**Poolshark**使用Fuel的账户抽象将有条件订单与汇集的流动性相匹配，以提高可访问性并降低高级交易员的费用。
    

### 用户体验改进

*   改善钱包社交
    
*   批量交易
    
*   应用程序可以为用户的交易支付**Gas**费用
    
*   使用来自不同生态系统（或相同，使用不同签名方案）的钱包
    
*   无钱包**web3**登录
    
*   用户不需要在他们的“常规”钱包中添加ETH来发起交易
    
*   能够将 100% 的资金放入多签并直接从那里发起交易
    

### 解锁新应用程序

“没人知道，但这很挑衅。它让人们兴奋不已！”

事实是：我们还不完全知道哪些新型应用程序可以解锁，但我们可以开始对现有应用程序的用户体验进行大规模改进，这是一个很好的开始。

让区块链造福每个人
---------

几年前，因为用户的体验问题让世界上大多数人在经济上完全无法适用区块链。随着第2层的不断发展和扩散，我们到达了一个新的前沿：用户体验。

突然之间，我们可以将费用降到足够低的水平，使区块链变得可用，但应用程序的用户体验需要更加愉快和稳健。在下一个周期，我们预计更多的团队将专注于账户抽象的用户体验改进和流程。这将是另一个需要的工具，为web3带来类似**web2**的托管属性体验。

### 致谢

**John Adler, Kristof Gazso, Yuan Han Li, James Prestwich, Ryan Sproule.**

跟着我们
----

*   [官方DC](https://discord.gg/fuelnetwork)
    
*   [官方推特](https://twitter.com/Fuellabs_)
    
*   [Fuel中文推特](https://twitter.com/fuellabs_CN)
    
*   [Youtube](https://www.youtube.com/channel/UCam2Sj3SvFSAIfDbP-4jWZQ)
    
*   [领英](https://www.linkedin.com/company/fuel-labs/)
    

关于我们
----

[Fuel](https://www.fuel.network/)是模块化区块链堆栈的**最快执行层**。该技术功能强大且时髦，可实现并行交易执行，为开发人员提供扩展所需**最大的灵活吞吐量**和**最高级别的安全性**。开发人员选择[FuelVM](https://fuellabs.github.io/fuel-docs/master/vs-evm.html)是因为其**卓越的开发体验**以及**超越 EVM 局限性**的能力。

成为贡献者
-----

*   [探索我们目前的职位空缺](https://jobs.lever.co/fuellabs)
    
*   [申请补助金](https://fuel-labs.ghost.io/introducing-fuels-new-grants-program/)
    
*   [学习Sway](https://fuellabs.github.io/sway/v0.24.5/)

---

*Originally published on [473](https://paragraph.com/@xiaohuhu473/b7mBPEiMkeSIRohvO719)*
