---
title: "ERC-4337スマートコントラクトウォレットの仕組みとは?"
description: "ERC-4337準拠のスマートコントラクトウォレットの仕組みを解説"
---

# ERC-4337スマートコントラクトウォレットの仕組みとは?

[Account Abstraction（ERC-4337）](https://www.alchemy.com/overviews/what-is-account-abstraction)を利用するスマートコントラクトウォレットは、EOA（Externally Owned Address）ウォレットのように単一の秘密鍵で管理されるウォレットではなく、スマートコントラクトによって管理されるウォレットを作成する。

スマートコントラクトウォレットのプログラマブルな性質は、幅広い新しいユースケースの開発を可能にする。セキュリティや匿名性を損なうことなく複雑さを軽減することで、スマートコントラクトウォレットは次のブロックチェーンユーザー層のオンボーディングを促進する。

<CalloutBlock>
  [埋め込み型スマートコントラクトウォレット](https://www.alchemy.com/smart-wallets)をアプリに追加したいですか？エンタープライズグレードのEmbedded Accountsと垂直統合されたAAインフラストラクチャを使えば、シードフレーズやガス、摩擦なしでユーザーをオンボーディングできます。
</CalloutBlock>

## **スマートコントラクトウォレットとは何か**

[スマートコントラクトウォレット](https://www.alchemy.com/dapps/best/smart-contract-wallets)は、スマートコントラクトを使ってデジタル資産（暗号通貨、NFTなど）を保管・管理する。スマートコントラクトウォレットはアカウントアブストラクションの基盤である。アカウントアブストラクションとは、Ethereumの様々なアカウントタイプを単一のタイプに統合するプロセスであり、アカウントの制御をネットワークから「抽象化」し、スマートコントラクトによって定義する。

**ERC-4337を利用するスマートコントラクトウォレットの例：**

1. Soul Wallet
1. Candide
1. UniPass
1. Castle
1. Openfort

ERC-4337を利用していない主なスマートコントラクトウォレットは**Safe**と**Argent**である。

## **コントラクトアカウント（cas）とは何か**

スマートコントラクトとも呼ばれるコントラクトアカウントは、当事者間の情報のやり取りを管理するコードを含む。コントラクトアカウントはあらゆるDeFiプロトコル、NFTコレクション、ERC-20トークンで使用されている。

コントラクトのビジネスロジックと状態変数はすべてオンチェーンに保存される。スマートコントラクトの状態とコードはオンチェーンに保存されるため、それをデプロイする外部所有アカウントは手数料を支払う必要がある。

**注**：web3プログラミングには「スマートコントラクトファクトリー」というパターンがあり、コントラクトが定義済みのインターフェースを通じて他のコントラクトをデプロイできる。この場合でも、それを開始するトランザクションはEOAから発生し、EOAによって支払われなければならない。

### コントラクトアカウントは**外部所有アカウント（eoas）**とどう違うのか

スマートコントラクトアカウントとEOAアカウントの主な違いは、スマートコントラクトアカウントがロジックを含むことができる点である。EOAアカウントのみがトランザクションを開始できるため、スマートコントラクトアカウントはBundlerのEOAアカウントに依存し、ユーザーオペレーションを1つのトランザクションにまとめてブロックチェーンに投稿してもらう。

現在のEthereumプロトコルでは、コントラクト呼び出しであれ価値の転送であれ、トランザクションを開始できるアカウントタイプはEOAのみである。あるコントラクトアカウントが別のコントラクトアカウントを呼び出す場合でも、トランザクションの起点は常に外部所有アカウントである。

コントラクトアカウントとEOAアカウントの比較を以下に示す。

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "EOA", dataType: "object" },
      { key: "2", width: 200, title: "CONTRACTS", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>秘密鍵を通じて人間が制御する</p>", tooltip: "", icon: "" },
        "2": { title: "<p>秘密鍵はない。自身のコードによって制御される</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p>トランザクションを開始できる</p>", tooltip: "", icon: "" },
        "2": { title: "<p>トランザクション開始の起点になることは決してない</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p>コードを含まない</p>", tooltip: "", icon: "" },
        "2": { title: "<p>コードと状態を含み、ストレージに保存される</p>", tooltip: "", icon: "" },
        id: 2,
      },
      {
        "1": { title: "<p>オフチェーンで無料で作成される</p>", tooltip: "", icon: "" },
        "2": { title: "<p>デプロイヤーが費用を負担してオンチェーンで作成される</p>", tooltip: "", icon: "" },
        id: 3,
      },
    ],
  }}
/>

では、スマートコントラクトウォレットはトランザクションを自ら開始できないのに、どのようにトランザクションを実行するのだろうか。

## ERC-4337スマートコントラクトウォレットの仕組み

スマートコントラクトウォレットはトランザクションを開始できないため、EOAウォレットによって呼び出される必要がある。このプロセスは複数の[Account Abstractionインフラストラクチャプロバイダー](https://www.alchemy.com/account-abstraction)（例：Bundler）とスマートコントラクト（例：EntryPoint）によってサポートされている。

<ExternalVideo
  url="https://youtu.be/FjK5rYznJjU?si=0e-DgU5kxxxOwaVg"
  provider="youtube"
  providerUid="FjK5rYznJjU"
/>

**スマートコントラクトウォレットのトランザクションの典型的な流れ：**

1. ユーザーが[UserOperation](https://www.alchemy.com/overviews/user-operations)を実行したいと考える
1. UserOperationsは「代替メンプール」に送信される
1. EOAウォレットを持つ[Bundler](https://www.alchemy.com/overviews/what-is-a-bundler)がすべてのUserOperationsをまとめてEntryPointコントラクトに送信する
1. EntryPointコントラクトがすべてのUserOperationsを検証し実行する
1. UserOperationsをまとめたEOAウォレットは、ユーザーに代わって支払ったETHを、ユーザーのウォレットまたは[Paymaster](https://www.alchemy.com/overviews/what-is-a-paymaster)から返済される

<ImageBlock
  src="https://media.alchemy.com/1703265387-how-user-operations-are-bundled-for-4337.jpeg"
  alt="UserOpsがどのようにバンドル、検証、実行されるかを示す図"
  width={960}
  height={540}
  caption="UserOpsがどのようにバンドル、検証、実行されるかを示す図"
/>

スマートコントラクトウォレットの仕組みを技術的な観点から理解するのは難しいかもしれないが、エンドユーザーにとって、[スマートコントラクトウォレットはEOAウォレットと比較して多くの改善](https://www.alchemy.com/overviews/smart-contract-wallet-benefits)をもたらす。プログラマビリティやソーシャルリカバリーのような機能がその例である。

### スマートコントラクトウォレットの仕組みを学ぶための追加リソース

Account Abstractionの各コンポーネントの仕組みについて詳しくは、Alchemy社のAccount Abstraction Infrastructureエンジニアリングチームに所属する**David Philipson**による記事シリーズ「You Could Have Invented Account Abstraction」を参照。

1. [UserOps、Bundler、そしてEntryPointコントラクト](https://www.alchemy.com/overviews/what-is-account-abstraction)
1. [Paymasterを使ったガスのスポンサー](https://www.alchemy.com/overviews/what-is-account-abstraction-paymasters)
1. [スマートコントラクトウォレットの作成](https://www.alchemy.com/overviews/what-is-account-abstraction-wallet-creation)
1. [署名の集約](https://www.alchemy.com/overviews/account-abstraction-aggregate-signatures)

## よくある質問

### スマートコントラクトウォレットとは何か

スマートコントラクトウォレットは、単一の秘密鍵ではなくスマートコントラクトを使って暗号通貨やNFTなどのデジタル資産を保管・管理するものであり、アカウントアブストラクションの基盤としての役割を果たす。

### ERC-4337スマートコントラクトウォレットはどのように機能するか

ERC-4337ウォレットでは、ユーザーがUserOperationsを作成して代替メンプールに送信し、Bundlerがそれらを収集してEntryPointコントラクトに提出して検証・実行を行い、その後ウォレットまたはPaymasterから返済を受けるという流れになっている。

### スマートコントラクトアカウントとEOAアカウントの違いは何か

スマートコントラクトアカウントはプログラマブルなロジックを含むがトランザクションを自ら開始することはできず、EOAアカウントはトランザクションを開始できるがプログラマブルな機能を持たない。

### UserOperationsとは何か

UserOperationsは、ユーザーが作成するトランザクションリクエストであり、代替メンプールに送信され、Bundlerがそれを収集してEntryPointコントラクトを通じて処理する。

### ERC-4337におけるBundlerの役割は何か

Bundlerは、EOAウォレットを持つノードであり、代替メンプールからUserOperationsを収集し、それらをまとめてEntryPointコントラクトに提出し、検証・実行を行わせる。

### EntryPointコントラクトとは何か

EntryPointコントラクトは、Bundlerによって提出されたバンドル済みのUserOperationsを検証・実行するオンチェーンのスマートコントラクトである。

### スマートコントラクトウォレットにガス手数料は必要か

スマートコントラクトウォレットはPaymasterを使ってガス手数料をスポンサーすることができ、ユーザーが直接ガスを支払う必要のないガスレストランザクションを実現できる。

### ERC-4337スマートコントラクトウォレットの例を教えてほしい

例としてSoul Wallet、Candide、UniPass、Castle、Openfortが挙げられ、SafeとArgentはERC-4337を利用していないスマートコントラクトウォレットである。
