Skip to content

Account abstraction 账户抽象

当前以太坊账户有两种类型:外部拥有账户(EOA)和合约账户(CA)。

外部拥有账户(EOA):常规的以太坊账户,创建和持有不需要任何成本,可以持有 ETH 和 ERC20/ERC721 等资产,可以发送 transaction 并支付交易的 gas 费。他的所有权仅靠一个私钥确定,拥有私钥等于拥有这个账户的所有权限,安全保管私钥是极重要的事情。

合约账户 (CA):通称位智能合约与 EOA 账户有些差异,CA 由智能合约代码决定其行为逻辑。合约代码储存在链上,创建它是需要成本的。它也可以持有 ETH 和 ERC20/ERC721 等资产,但是无法主动发起交易,必须有一个 EOA 地址从外部调用它。智能合约的所有权由其代码逻辑控制,不存在私钥。

账户类型 创建成本 所有权 资产管理 发起交易(机器人) 批量执行 消息签名 链的限制
外部拥有账户 EOA 无 私钥 ETH、代币 可以 不可以 ECDSA 验签 不受限,在采用 ECDSA 的链上通用
智能合约 CA 部署合约 gas 费 代码逻辑控制 ETH、代币 *不可以 可以 *调用合约钱包的验证签名方法验签 只有在链上部署钱包合约才能使用

*虽然合约自身不能主动发起交易,但是我们可以借助 OpenZeppelin\ AutoTasks_{[1]} 和 Chainlink\ Automation_{[2]} 来发起自动调用。

*智能合约钱包需要定义一个验证签名的方法,去验证交易、消息的签名,在 EIP4337 中并没有针对消息签名做一些优化,只有验证 UserOperation 的 API

账户抽象 Account Abstract 的出现的目的是统一以太坊上面的两种账户类型,它有以下主要优点:

  • 原子批量执行
  • 支持聚合签名(如 BLS)
  • 非原生代币支付 gas

同样它也有两个主要的缺点:

  • 不能使用 ECDSA 的验证方式对消息签名进行验证,只能调用只能合约的签名验证方法验证,详见 EIP-1271_{[14]}
  • 在对应链上部署钱包合约才能去使用,没有部署的链无法使用

当前账户抽象 Account Abstract 主要有三种,

  • 一是 Argent Vault(非 Argent X 和 zkSync)的这种在 EIP4337_{[3]} 提案提出之前出现的智能合约钱包
  • 二是 Vitalik Buterin 在 2021 年 9 月 提出的 EIP4337 通过引入独立的 bundler 避免了共识层的修改,标准化的智能合约钱包
  • 三是 像 Starknet 这种原生支持 L2 的账户抽象,也是智能合约

Argent Vault(非 Argent X 和 zkSync)

Argent\ Vault_{[4]} 是 Argent 为管理 $50K plus 资产的客户提供的一个 L1 智能合约钱包解决方案。具备监护人批准的多重签名、无私钥和社交恢复等特性。

对于用户

在使用 Argent Vault 之前需要充值 ETH 到钱包中,Argent 在监控到 Vault 收到 ETH 后会对你的账户进行部署,约消耗 0.0061 Ether,这个过程是自动化的,在你进行第一次操作之前需要等待部署完成(Argent 帮你部署钱包 和 你的第一次操作 是两笔交易)。

在进行操作(转账、合约调用)之前,Argent Vault 会给你发送邮箱验证码及 SMS 进行验证这部分都是中心化的,然后才能发出交易。

交易会由 Argent Relayer 代为提交并收取交易费用。

目前 Argent Vault 可以通过 App 内适配的直接调用 Dapp 合约的 UI 和 WalletConnect 与 Dapp 交互,使用起来没有什么明显差异。

*受限与消息签名验证的问题,Argent 在 2022 年 2 月 25 日才支持与 OpenSea 交互_{[5]}

*因为 Argent 只部署在特定链,所以目前无法使用 mirror.xyz

对于开发者

因为 Argent Vault 实现了 WalletConnect 钱包端协议,所以开发者只需要在 Dapp 端接入 WalletConnect 即可与 Argent 用户交互。它有上述智能合约钱包的通病。

体验 Argent 的一些 transaction:https://etherscan.io/address/0x168d51e8e16bb77c6a2c5483575fc4e8f4fbf865#internaltx

EIP4337

EIP4337 是 Vitalik Buterin 等在 2021 年 9 月 29 日提出的一种不依赖于更高层的基础设施,完全避免共识层协议更改的帐户抽象提案,重点在去中心化(摒弃 Argent Relayer)和制定标准,它具备当下智能合约钱包的一切优点(批量执行、非 native 代币支付 gas)。

用户的操作被打包成 UserOperation 之后通过 bunder 的 RPC 端点提交给 bundler,由 bundler 进行验证和代提交,bundler 是去中心化的,人人都可以做 bundler。

对于用户

使用 EIP4337 的钱包跟普通的私钥钱包区别不大,只要钱包应用实现了 Injected Provider 或者 WalletConnect 交互起来跟普通钱包区别不大。

得益于 EIP4337 的优秀设计,用户在进行第一次操作之前无需提前部署钱包合约。

对于开发者

它也有上述智能合约钱包的通病。

EIP4337 bundler 使用 paymaster 代付的 transaction:https://goerli.etherscan.io/tx/0xd3a90050e5b7ab026ebac9c030ae8ba25402bb6a1174466e4c3d96c2c04a35ed

StarkNet

StarkNet_{[6]} 是以太坊的一个 Layer 2 方案,它实现了原生账户抽象。合约账户是一类公民,如果进行直接的合约调用,智能合约取不到调用者信息(相当于 EVM 的 msg.sender 为 address(0))。

StarkNet 智能合约采用名为 Cairo_{[7]} 的类 Python 语言,同时提供了 Solidity\ to\ Cairo\ 转译器_{[8]}。

StarkNet 采用 STARK\ Curve_{[9]} + Pedersen Hash_{[10]} 的 ECDSA 算法,而 Ethereum 采用的是 secp256k1 + sha256 的 ECDSA 算法。

*当前 StarkNet 的 paymaster 模型还未推出,还没有一个完善的交易费用代付方案_{[11]}

对于用户

在使用之前用户需要通过 bridge 将 L1 的资产存入 L2,想要回到 L1 上再次使用时需要从 L2 解锁资产。

在使用钱包之前需要持有 ETH(目前还没有成熟的 paymaster 方案),账户合约的合约地址是提前算出来的,将 ETH 转移到 L2 的地址之后,才能去部署和使用账户合约。

Ethereum 有 web3js,StarkNet 有 @argent/get-starknet_{[12]} 目前 Braavos 和 Argent 都是使用的 Argent 团队制作的 starknet.js wrapper,使用上跟 Ethereum 钱包一致。

对比 Ethereum 主网来说,L2 的成本更低,速度更快。用户可以将资产跨链到 L2 在 L2 中使用 L1 上面的资产。

对于开发者

对于只运行在 StarkNet 上的开发者来说,使用 @argent/get-starknet 开发即可达到 Ethereum Dapp 的体验。

智能合约只能使用 StarkNet 专用智能合约语言 Cairo。

StarkNet 提供在 L1、L2 智能合约之间传递消息的能力_{[13]},有很多可能性。

体验 StarkNet 的一些交易:https://testnet.starkscan.co/contract/0x0484739289de98e6012eEe2984610b7C19Aa8A7a0723Bf46F81feAEEB11f1997#transactions

总结

用户视角

方案 安全性 成本 生态与体验
Argent Vault 中(邮箱、SMS 认证、Relayer 都是中心化) 高(L1) 中(只可使用 WalletConnect 或 Argent 团队自己脱离 Dapp UI 适配的 Dapp)
EIP4337 优(Bundler 去中心化) 高(L1) 未知(等待 EIP4337 钱包出现,跟钱包开发团队强相关)
StarkNet 优(原生账户抽象) 低(L2) 优(L2 上面生态虽然不如 L1,但存在像 dYdX 一样无可替代的应用)

开发者视角

这些方案可以做的事情基本一致,除非你需要 L2 上面的特定能力,用户在哪里,项目就到哪里。

Resources

  1. Autotasks - OpenZeppelin Docs. (2023). Retrieved 18 January 2023, from https://docs.openzeppelin.com/defender/autotasks
  2. Reliable, high-performance smart contract automation | Chainlink. (2023). Retrieved 18 January 2023, from https://chain.link/automation
  3. Proposals, E. (2023). EIP-4337: Account Abstraction Using Alt Mempool. Retrieved 18 January 2023, from https://eips.ethereum.org/EIPS/eip-4337
  4. Argent Vault. (2023). Retrieved 18 January 2023, from https://www.argent.xyz/vault/
  5. OpenSea now fully supports Argent on L1. (2023). Retrieved 18 January 2023, from https://www.argent.xyz/blog/opensea/
  6. StarkNet. (2023). Retrieved 18 January 2023, from https://starknet.io/
  7. Cairo. (2023). Retrieved 18 January 2023, from https://www.cairo-lang.org/
  8. GitHub - NethermindEth/warp: Warp - Bringing Solidity to StarkNet at warp speed. Warp is a Solidity to Cairo Transpiler, this allows teams to write/migrate Solidity to Cairo for easy onboarding into the StarkNet ecosystem. (2023). Retrieved 18 January 2023, from https://github.com/NethermindEth/warp
  9. STARK Curve :: StarkEx Documentation. (2023). Retrieved 18 January 2023, from https://docs.starkware.co/starkex/crypto/stark-curve.html
  10. Pedersen Hash Function :: StarkEx Documentation. (2023). Retrieved 18 January 2023, from https://docs.starkware.co/starkex/crypto/pedersen-hash-function.html
  11. Starknet Account Abstraction Model - Part 2. (2022). Retrieved 18 January 2023, from https://community.starknet.io/t/starknet-account-abstraction-model-part-2/839
  12. @argent/get-starknet. (2022). Retrieved 18 January 2023, from https://www.npmjs.com/package/@argent/get-starknet
  13. Interacting with L1 contracts :: StarkNet documentation. (2023). Retrieved 18 January 2023, from https://docs.starknet.io/documentation/getting_started/l1l2/
  14. Proposals, E. (2023). EIP-1271: Standard Signature Validation Method for Contracts. Retrieved 19 January 2023, from https://eips.ethereum.org/EIPS/eip-1271#specification

Comments

Commenting as a guest. A nickname is required; email is optional. Only new comments posted after verifying your email and signing in will appear on your profile. Existing guest comments will not be linked automatically.

Share article

Account abstraction 账户抽象

Email X

View original ↗