# Account Abstraction（アカウント抽象化）とはなにか

By [KOJO](https://paragraph.com/@ojoknek) · 2023-04-14

---

こんにちは。

Skyland Venturesでインターンをしている[KOJO](https://twitter.com/ojoknek)です。

Web3初心者のKOJOが、Web3について学習した内容をアウトプットしていく連載シリーズを刊行しています。一緒にWeb3について学んでいってもらえれば嬉しい限りです。読みやすく文章を整理するのではなく、なるだけアウトプットをメインにして素早く記事を執筆していこうと思っています。多少見苦しい文面が発生する場合がありますが、ご自愛ください。

文面は、参考にした資料を併記しつつ共有させていただきます。読解の誤りに気づいた場合は、是非とも指摘いただけると幸いです。

今回のテーマはAccount Abstraction（アカウント抽象化）です。

Vitalikの主張
----------

Vitalikは[記事](https://medium.com/infinitism/erc-4337-account-abstraction-without-ethereum-protocol-changes-d75c9d94dc4a)にてアカウント抽象化が達成されると以下のようなメリットがあると主張をしています。

*   マルチシグとソーシャルリカバリー
    
*   より効率的でシンプルな署名アルゴリズム（例：Schnorr、BLS）
    
*   ポスト量子安全署名アルゴリズム（例：Lamport、Winternitz）
    
*   アップグレード可能性
    

ではなぜAAによってこのようなメリットを受けられるのでしょうか。

*   今回の作成に利用した資料
    
    SOURCE⓪：[**ERC 4337　Vitalikの提案内容**](https://medium.com/infinitism/erc-4337-account-abstraction-without-ethereum-protocol-changes-d75c9d94dc4a)
    
    SOURCE①：[**Account Abstraction(ERC4337)を、具体的な処理を追ってしっかりと理解してみましょう。**](https://zenn.dev/yuki2020/articles/00242351b3b3aa)
    
    SOURCE②：m0t0k1ch1さん資料
    
    *   [**AA（Account Abstraction）の先にある、コントラクトウォレット中心の世界**](https://zenn.dev/sivira/articles/d041f1ac44ca1e)
        
    *   [**m0t0k1ch1さんのスライド資料**](https://drive.google.com/file/d/12MJVIJFYaCWBOB0JUXTNhhTMAryCZYbt/view)
        
    
    SOURCE③：[**Account Abstraction（アカウント抽象化）とは？**](https://medium.com/@bluesky-aozora/account-abstraction-%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E6%8A%BD%E8%B1%A1%E5%8C%96-%E3%81%A8%E3%81%AF-9fa34a5de876)
    
    SOURCE④：Lawrenceさんニュースレター
    
    *   [**Account AbstractionとERC-4337を区別する①**](https://1awrence.substack.com/p/account-abstractionerc-4337?utm_source=twitter&utm_campaign=auto_share&r=hnyta)
        
    *   [**Account AbstractionとERC-4337を区別する②**](https://1awrence.substack.com/p/account-abstractionerc-4337-5ba?utm_campaign=post_embed)
        
    
    SOURCE⑤：[**Account Abstractionの誤解と真実**](https://zenn.dev/inaridiy/articles/09429120aaba43)
    
    SOURCE⑥：Askyvさんの資料
    
    *   [**AnotherFlash構想**](https://www.notion.so/AnotherFLASH-bee504f5924a4a85886c21a18f8db60a)
        
    *   [**ERC4337のためのpublic mempool参加者のincentive構造について**](https://scrapbox.io/askyv/ERC4337%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEpublic_mempool%E5%8F%82%E5%8A%A0%E8%80%85%E3%81%AEincentive%E6%A7%8B%E9%80%A0%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
        
    *   [**Discussion Points on MEV attack targeting on UserOp**](https://scrapbox.io/askyv/Discussion_Points_on_MEV_attack_targeting_on_UserOp)
        
    *   [**bundlerによるMEV抽出を放置するとどうなるか**](https://scrapbox.io/askyv/bundler%E3%81%AB%E3%82%88%E3%82%8BMEV%E6%8A%BD%E5%87%BA%E3%82%92%E6%94%BE%E7%BD%AE%E3%81%99%E3%82%8B%E3%81%A8%E3%81%A9%E3%81%86%E3%81%AA%E3%82%8B%E3%81%8B)
        
    *   [**ERC4337 public mempool実装に関する最新状況(1/5)**](https://scrapbox.io/askyv/ERC4337_public_mempool%E5%AE%9F%E8%A3%85%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E6%9C%80%E6%96%B0%E7%8A%B6%E6%B3%81\(1%2F5\))
        
    
    SOURCE⑦：[**【EIP-4337】UserOperationをBundlerに投げてからTransactionが発行されるまで**](https://zenn.dev/taxio/articles/834e6a04bd6b80)
    

Account Abstraction（AA）とは
-------------------------

いま現在みんなが使っているウォレット（EOA形式）を、新たな形式のウォレット（コントラクトウォレットを利用した抽象化アカウント(?)）に移行させる一連の取り組みのこと。

AAのメリット（砕いて言うと）
---------------

*   ウォレット関連のクリプトにありがちなよくわからない概念（シードフレーズとか）が不要になるかもしれない
    
*   今よりも自由にウォレットに機能が追加できる（UXが改善される）かもしれない
    

なぜこうしたメリットがあるのか？
----------------

そもそもウォレットは、種別として２タイプのものが連結している(正確には一つしかないが、普段使いしているものと中身が分離している\[アドレスとアドレス先ノードの関係\])

SOURCE：[Account Abstraction(ERC4337)を、具体的な処理を追ってしっかりと理解してみましょう。](https://zenn.dev/yuki2020/articles/00242351b3b3aa)

![](https://storage.googleapis.com/papyrus_images/328864463a63b43f53487863ea3efe9dd01ca4d564d6505a362eb4db83061eda.png)

![](https://storage.googleapis.com/papyrus_images/1851318fb20e1cc719320c3e851c1ec5b275ca0632252c5ff480540176d22a8e.png)

*   外部所有アカウント(EOA)というのはMetamaskとか、普段われわれが使っているウォレット（のアドレス）
    
*   このアドレス＋秘密鍵（パスワード）を使って、私たちはコントラクトアカウントにアクセスしている
    
*   EOAを経由せずに、コントラクトアカウントからアクセスすることができれば…？
    
    *   コントラクトアカウントはアドレスではない（コード色々書いてある）
        
    *   アカウント自体に機能実装が可能なので、色々な機能をウォレット自体につけられる
        

この2種のウォレット(的なもの)の上下関係が**EOA＞コントラクトアカウント**だったのだが、アカウント抽象化(AA)を行うことで、コントラクトアカウントをEOAと等しい権限を持つものにする

どうしてAAをやりたい流れがあるのか
------------------

先述のコントラクトウォレットに権限を移譲することは直接的には色々な機能がつけられることにつながる。だが、そもそもなぜそのような権限移譲が必要なのか？

SOURCE：[m0t0k1ch1さんのスライド資料](https://drive.google.com/file/d/12MJVIJFYaCWBOB0JUXTNhhTMAryCZYbt/view)

![](https://storage.googleapis.com/papyrus_images/e4f99b6eb88a9ff721f60c6c4dff3572a4a450dd0c0bf53b83898514f665c519.png)

![](https://storage.googleapis.com/papyrus_images/e14e743107a0ca60b194df4fe0662ea5ac1b3819c890b8a4fc31187fcf826302.png)

*   AAは具体的には
    
    *   トランザクション(TX)の正当性検証/手数料支払いを抽象化したい
        
    *   なんで？
        
*   EOAはトランザクションの起点（端、end）に存在するもの
    
    *   EOAはブロックチェーンの外部にあり、以下の機能だけを持つ（[**SOURCE**](https://medium.com/@bluesky-aozora/account-abstraction-%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E6%8A%BD%E8%B1%A1%E5%8C%96-%E3%81%A8%E3%81%AF-9fa34a5de876)）
        
        *   アカウントで利用可能なETHの量を表す残高
            
        *   全てのトランザクションが一意であることを保証するためのナンス
            
        *   ネットワーク上でアカウントを一意に識別するためのアドレス
            
*   EOAからトランザクションに署名を書くことでアカウント所有者本人がトランザクションに対して合意している
    
    *   この本人が合意している部分が分散化のミソ。endである個人のウォレットがオーナーシップを持てる所以である
        
*   つまり…
    
    *   EOAという署名をする存在は必要不可欠
        
        *   しかし、現行の署名機能を持ったEOAは「単純な署名の機能**しか**ない」
            
        *   endになるEOA（本人）にアドオンをつけにくいから、そのendの手前にあるコントラクトウォレットにつけたものを利用したい
            
        *   アカウントを抽象化することで、コントラクト部分の機能をendに寄せたい！
            
    *   tx正当性検証
        
    *   手数料支払い
        
        *   txの相手に手数料を相手に押し付けることとかできる
            

AA＝トランザクション(TX)の正当性検証/手数料支払いを抽象化したい

アカウント抽象化を深ぼる
------------

SOURCE：[Account Abstractionの誤解と真実](https://zenn.dev/inaridiy/articles/09429120aaba43)

*   AA＝**秘密鍵からの解放ではない**
    
*   **秘密の希釈化**
    
    *   秘密鍵＝全てに対しての秘密であった
        
    *   秘密鍵がバレると全部終わり
        
    *   秘密鍵を分散（分割）させたい
        
        *   **部分的に**自分の秘密を解放したい
            
        *   部分的に自分のアカウント情報を開示する／権限を譲渡することができるようにしたい
            
        *   マルチシグウォレット的な、ソーシャルリカバリー可能なウォレットが作れる(例：Gnosis Safeはマルチシグウォレット)
            
            *   **多要素認証とセキュリティ強化**
                
            *   **プラグインによる柔軟性**
                
            *   **ソーシャルリカバリー**
                
            *   DECDSAとは異なる署名方式を使いたい場合には、そのためのアカウントを作成することができます。
                
            *   トランザクションの認証に複数の鍵を使用したい場合には、そのためのアカウントを作成することができます。
                
            *   毎週、署名者を変更したい場合にも、そのためのアカウントを作成することができます。
                

SOURCE：[Lawrenceさんニュースレター①](https://1awrence.substack.com/p/account-abstractionerc-4337?utm_source=twitter&utm_campaign=auto_share&r=hnyta)[と②](https://1awrence.substack.com/p/account-abstractionerc-4337-5ba?utm_campaign=post_embed)

SOURCE：[**AA（Account Abstraction）の先にある、コントラクトウォレット中心の世界**](https://zenn.dev/sivira/articles/d041f1ac44ca1e)

*   ここまで説明してきたAAは、現在実装されているERC4337とは微妙に異なる
    
    *   AAを目指してヴィタリックはいくつかの提案をしてきた
        
        *   **EIP86**
            
        *   **EIP2938**
            
        *   **EIP4337（←New！）**
            
    *   EIP4337はこれまでの提案と比べてプロトコルレイヤーをいじらない新たな提案
        
        *   ERC4337として規格になっている（プロトコルではなく規格をいじっているのみ）
            
    *   本来的なAA（完全なるアカウント抽象化）に、ERC4337だけでは到達できない
        

![](https://storage.googleapis.com/papyrus_images/519e1ee5c63892425c3e312eac3af6aa522701bd3186d068181777fd674c2680.png)

*   （ERC4337において）Bundlerと呼ばれるトラストポイントの発生
    
    *   BundlerはUserのトランザクションをまとめて署名をする
        
    *   これによりBundlerを信頼する必要ができてる
        
    *   Bundlerに署名してもらう代わりに、個々人のアカウントは抽象化することができる（擬似的にAA達成）
        
*   ERC 4337は実際こんな感じ
    

![](https://storage.googleapis.com/papyrus_images/e2b2eaa176e3848bc9bd5ba2af757e6317c30219b41596f6c67dc3629d516dff.jpg)

こういった問題があるわけだが…

Askyvさん：ERC 4337のこういった問題（トラストポイントの発生）の解決策を提案
--------------------------------------------

SOURCE：Askyvさんの資料

*   [**ERC4337のためのpublic mempool参加者のincentive構造について**](https://scrapbox.io/askyv/ERC4337%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEpublic_mempool%E5%8F%82%E5%8A%A0%E8%80%85%E3%81%AEincentive%E6%A7%8B%E9%80%A0%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
    
*   [**Discussion Points on MEV attack targeting on UserOp**](https://scrapbox.io/askyv/Discussion_Points_on_MEV_attack_targeting_on_UserOp)
    
*   [**bundlerによるMEV抽出を放置するとどうなるか**](https://scrapbox.io/askyv/bundler%E3%81%AB%E3%82%88%E3%82%8BMEV%E6%8A%BD%E5%87%BA%E3%82%92%E6%94%BE%E7%BD%AE%E3%81%99%E3%82%8B%E3%81%A8%E3%81%A9%E3%81%86%E3%81%AA%E3%82%8B%E3%81%8B)
    
*   [**ERC4337 public mempool実装に関する最新状況(1/5)**](https://scrapbox.io/askyv/ERC4337_public_mempool%E5%AE%9F%E8%A3%85%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E6%9C%80%E6%96%B0%E7%8A%B6%E6%B3%81\(1%2F5\))
    
*   UserOperationのためのpublic mempoolを実装する
    
    *   任意のbundlerが受信して処理を行えるように、待機中のUserOperationを共有するp2pネットワークを作る
        
    *   p2pネットワークの参加者（UserOperationをアップロードする人、bundleして署名する人）に報酬を配布する
        
*   UserOperationの処理フローの中でPBSを実装する
    
    *   block builderの役割をbundlerに担わせ、block proposerの役割をvalidatorに担わせることでPBSを実現する
        

これを理解するには

*   具体的にAAするウォレットがどういった経路でトランザクションしているのかの理解が必要
    

AAを知るために：トランザクションの流れを知る
-----------------------

SOURCE：[Account Abstraction(ERC4337)を、具体的な処理を追ってしっかりと理解してみましょう。](https://zenn.dev/yuki2020/articles/00242351b3b3aa)

SOURCE：[【EIP-4337】UserOperationをBundlerに投げてからTransactionが発行されるまで](https://zenn.dev/taxio/articles/834e6a04bd6b80)

![](https://storage.googleapis.com/papyrus_images/939dfbd1440eb858735bee2f2a4a79352ca609eb48c6d08104fa5b39635ff4ee.png)

![](https://storage.googleapis.com/papyrus_images/dbbd8b1d686cf8e245921351d113b6ad9d07a339323f94be4fcbb44e0b35e933.png)

![](https://storage.googleapis.com/papyrus_images/ae91ae18b43c32e734e69c71d9f89751e8c9e0e7ba65b33ee2b2a8254df00522.png)

![](https://storage.googleapis.com/papyrus_images/219d8652025ce1082fe75de798b83311ddcfc7cc72a295f53f56f98f3022b373.png)

以上

---

*Originally published on [KOJO](https://paragraph.com/@ojoknek/account-abstraction)*
