コンテンツへスキップ
0%

Paymasterとは?(ERC-4337)

2024年2月5日 公開読了時間 2 分

アカウントアブストラクションにおいて、ペイマスターとは柔軟なガスポリシーを可能にするスマートコントラクトのことで、分散型アプリケーションがユーザーのオペレーションのスポンサーになる(つまりブロックチェーンのネイティブ通貨でガス代を支払う)ことや、ブロックチェーンのネイティブ通貨の代わりにERC-20トークン(例:USDC)でガス代の支払いを受け付けることを可能にします。

ペイマスタースマートコントラクトはEthereum Improvement Proposal (EIP) 4337で導入されたもので、バンドラーやエントリーポイントスマートコントラクトといった他のアカウントアブストラクションインフラと統合し、ユーザーオペレーションの実行に必要なガス代を立て替えた分を補償します。

Alchemy Universityによるペイマスター解説

ペイマスターはいつ使うべきか

ペイマスターを使う主な理由は2つあります。他のアカウントのトランザクションのガス代をスポンサーすること、そしてブロックチェーンネットワークのネイティブ通貨の代わりにERC-20トークンでガス代を支払うことです。このERC-20ペイマスターは、アプリケーション自身のトークンでも、USDCのようなステーブルコインでも構いません。

1. トランザクションをスポンサーするためのペイマスター

Web3アプリケーションおよびウォレットの開発者がスポンサー型ペイマスターを使う理由としては、新規ユーザーがWeb3に参加しやすくすること、プラットフォーム固有のユーザー行動をインセンティブ化すること、ガス代を払わずにNFTをミントすること、ガス代を使わずにウォレットをデプロイすること、その他多くのユースケースが挙げられます。

ペイマスターでトランザクションをスポンサーするには、Web3開発者はどのユーザーオペレーションをスポンサー可能とするかのルールを定義してポリシーを作成します。使用するペイマスターコントラクトは、スポンサーされたトランザクションのガス代がそこから差し引かれる一定額の暗号資産をエントリーポイントコントラクトにデポジットしており、その後ポリシーを有効化します。

ペイマスターのスポンサーシップポリシーを定義するルールとは

ペイマスターによるスポンサー付きトランザクションへのアクセスを制御するため、開発者はアプリケーションごとおよび送信者ごと(例:スポンサー付きユーザーオペレーションを要求するユーザー)の支出額とユーザーオペレーション数を管理するルール、スポンサー付きユーザーオペレーションへのアクセスを許可・拒否するルール、ポリシーの開始・終了・失効のタイミングを設定するルールを定義できます。

  • Max spend - ポリシーが支出できる最大金額(USD建て)
  • Max spend per sender - ポリシーが送信者1人あたりに支出できる最大金額(USD建て)
  • Max spend per user operation - 各ユーザーオペレーションが支出できる最大金額(USD建て)
  • Max count of transactions - ポリシーがスポンサー可能なトランザクション数のグローバルな上限
  • Max count of transactions per sender - 送信者1人あたりのトランザクション数の上限
  • Sender allowlists - ペイマスターへのアクセスを許可するアカウントを定義するルール
  • Sender blocklists - ペイマスターへのアクセスを拒否するアカウントを定義するルール
  • Policy start time - ポリシーの開始時刻
  • Policy end time - ポリシーの終了時刻
  • Policy expiration - ポリシーが支出できる最大金額(USD建て)

注: これらはAlchemyのGas Manager Coverage APIで設定できるガスポリシーのルールです。他のERC-4337準拠のペイマスターでは、これより多いまたは少ないルールをサポートしている場合があります。

ペイマスターアクセスキーを使うことで、開発者はプログラムから柔軟なガススポンサーシップポリシーを作成・有効化・管理できます。ポリシーを手動で管理する場合は、Gas Managerダッシュボードで作成できます。

Alchemyのgas manager coverage APIは、ユーザーオペレーションのスポンサーシップに使うデポジットをどのように管理しているか

AlchemyのGas Manager Coverage APIコントラクトは、サポートする各ブロックチェーン上のグローバルなエントリーポイントコントラクトに、あらかじめネイティブ通貨をデポジットしています。開発者がGas Managerを通じてガスポリシーを作成すると、ガス代の支払いに使われたネイティブ通貨の量を弊社が追跡します。

月末になると、Alchemy上で開発しているチームには、そのポリシーがカバーしたガス代の合計額に、カバーしたガス代合計の8%を加えた金額の請求書が送られます。この料金は、Alchemyアカウントに登録されている支払い方法を通じて支払われます。

Alchemyのgas manager coverage APIにはどのような料金がかかるか

スポンサー付きトランザクションのガス代をカバーする料金は、Enterpriseの顧客はカスタム料金、Growth Tierの顧客は8%、無料ユーザーはスポンサー付きトランザクションがテストネットでのみ利用可能なため無料です。

Alchemyのスポンサー型ペイマスターコントラクトがデプロイされているネットワークは

AlchemyはEthereum、Arbitrum、Optimism、Polygonにスポンサー型ペイマスターコントラクトをデプロイしています。以下はメインネットのデプロイアドレスとEtherscanへのリンクです。

Alchemyのスポンサー型ペイマスターコントラクトがデプロイされているテストネットは

Alchemyはスポンサー型ペイマスターコントラクトをSepoliaにデプロイしています。以下はテストネットのデプロイアドレスです。

2. ERC-20トークンでガス代を支払うためのペイマスター

dappやウォレットの開発者がERC-20ペイマスターを使う理由としては、アプリケーションのERC-20トークンに用途を持たせること、ブロックチェーンネットワークのエコシステム内で多様なデジタル資産を保有するユーザーによりいっそうの柔軟性を提供すること、ETH、MATIC、OP、ARBのようなネイティブ通貨とは異なり価値が変動しないステーブルコインで支払うこと、その他多くのアプリケーション固有のユースケースが挙げられます。

IPaymasterインターフェースに基づくペイマスターの種類とは

ペイマスターは、トランザクションのスポンサーやユーザーによるERC-20トークンでのガス代支払いを可能にするなど、複数の目的を果たします。これら2つの機能を提供するペイマスターは、IPaymasterインターフェースに基づき、verifying paymaster(検証型ペイマスター)とtoken (deposit) paymaster(トークン(デポジット)型ペイマスター)と呼ばれます。

1. Verifying paymaster

verifying paymasterタイプは、オフチェーンのサービスがトランザクション手数料をスポンサーするかどうかを判断する場合に使われます。例えば、ユーザーが法定通貨とクレジットカードで支払いたい場合、ユーザーオペレーションの送信者はまず外部の署名者に支払いを送り、このステップが成功すれば、ペイマスターがオペレーションを検証し、トランザクション手数料をカバーすることを確認します。

2. ERC-20ペイマスター

deposit paymasterタイプは、ガス代をERC-20トークンで支払う場合に使われます。開発者は、ERC-20トークンと、スポンサー付きユーザーオペレーションの対象となるスマートコントラクトウォレットのアドレスを指定します。例えば、Web3 dappが最初の1000人のユーザーのトランザクションの支払いに自身のERC-20トークンを使いたい場合などです。

deposit paymasterはERC-20トークンでの手数料スポンサーを可能にしますが、トランザクションの実際のコストはETHで支払われ、エントリーポイントコントラクトにあるペイマスターのデポジット残高から差し引かれます。postOp() 関数には、オラクルから取得した価格に基づいて、手数料をカバーするのに必要なETHに相当する分を送信者からERC-20トークンで徴収するロジックが含まれています。

ペイマスターはどのように動作するか

ペイマスターは、スポンサー付きユーザーオペレーションの手数料をカバーし、送信者に代わってユーザーオペレーションを実行するバンドラーに報酬を支払うため、エントリーポイントコントラクトと連携して動作します。

各ユーザーオペレーションについて:

  1. 送信者のウォレットでvalidateOpを呼び出す
  2. ユーザーオペレーションにペイマスターアドレスがある場合、validatePaymasterOpを呼び出す
  3. validatePaymasterOpの呼び出しに失敗したユーザーオペレーションは破棄する
  4. 各ユーザーオペレーションについて、送信者のウォレットでexecuteOpを呼び出す
  5. 送信者に代わってユーザーオペレーションを実行するのにどれだけガスを使ったかを追跡する
  6. バンドラーが送信者に代わってユーザーオペレーションを実行するのに使ったガス代を支払うため、バンドラーにETHを送金する
  7. ユーザーオペレーションにペイマスターフィールドがある場合、ペイマスターは自身のコントラクトにデポジットされたETHを使ってバンドラーに支払う
  8. ユーザーオペレーションにペイマスターフィールドがない場合、ETHは送信者のウォレットによって払い戻される

以下はペイマスターの動作を示した図です:

paymaster経由でuser opsを検証し、bundlerに払い戻すentry pointコントラクトの図
entry pointコントラクトがpaymasterコントラクト経由でuser opsを検証し、paymasterの資金からbundlerに払い戻す仕組みの図

IPaymasterインターフェースに含まれる関数は

IPaymasterインターフェースは、提案の仕様に準拠するために各ペイマスターコントラクトが従うべき設計図です。これは**validatePaymasterOp()とpostOp()**という2つの関数を導入しています。

1. validatePaymasterUserOp()

**validatePaymasterUserOp()**は、メンプールノード、バンドラー、そしてエントリーポイントコントラクトが、ペイマスターコントラクトがトランザクション手数料のスポンサーに同意しているかどうかを確認するために使う関数です。validatePaymasterUserOp()は、ユーザーオペレーションのpaymasterAndDataフィールドに記載されています。

**validatePaymasterUserOp()関数は、検証対象のユーザーオペレーションのバイト表現を、そのIDおよび最大コストとともに受け取ります。そして、その後postOp()**関数に渡されるbytes32型の変数「context」を返します。

2. postOp()

**postOp()関数は、ユーザーオペレーションの検証が成功した場合に何をすべきかを定義します。例えば、ユーザーオペレーションの送信者がERC-20トークンで支払いたい場合、エントリーポイントはオペレーション完了後にpostOp()**を呼び出し、使用されたガス量を伝えます。

**postOp()**関数は、**validatePaymasterUserOp()**によって生成された「context」がnullでない場合にのみ呼び出し可能です。

バンドラーは悪意あるペイマスターによるDoS攻撃をどのように防いでいるか

ERC-4337仕様では、ERC-4337バンドラーが悪意あるペイマスターからのユーザーオペレーションの実行を回避できるようにする、ペイマスターのレピュテーションスコアリングおよびスロットリングシステムが定義されています。

ペイマスターのストレージは、そのペイマスターを使用するバンドル内のすべてのオペレーションで共有されるため、1つのvalidatePaymasterOpの動作が原因で、サービス拒否攻撃(DoS)によって同じペイマスターを使用するバンドル内の他の多数のユーザーオペレーションの検証が失敗する可能性があります。

悪意あるペイマスターが自身の複数のインスタンスを作成すること(つまりSybil攻撃)を防ぐため、ペイマスターはETHをステークすることが求められます。ペイマスターのステークがスラッシュされることは一切なく、いつでも引き出すことができます。ステークは、攻撃者に相当量の資本をロックさせることで悪意ある行動を抑止するために存在します。

ペイマスターを使うことの開発者にとってのメリットは

ペイマスターのメリットには、ガスポリシーの柔軟性の向上、新規ユーザー向けのWeb3オンボーディング体験の簡素化、トランザクションへのプログラマビリティの追加などがあります。

1. 新規ユーザーの獲得

ペイマスターを活用する開発者にとってのメリットの1つは、新規ユーザーがWeb3に参加しやすくなることです。現状のプロセス、すなわちExternally Owned Account(EOA)ウォレットを作成し、ブロックチェーンのネイティブトークンで資金を入れ、NFTをミントするという流れは複雑なプロセスであり、ユーザーが途中で離脱してしまう機会が多くあります。

ペイマスターは、NFTのミント、ユーザー名の取得、ウォレットを使ったイベントへの申し込みといったオンチェーントランザクションを完了させるために、ネイティブ通貨でウォレットに資金を入れる手間を減らすのに役立ちます。

2. ユーザー体験の向上

Web3プロダクトを開発する開発者は、プラットフォームのネイティブ通貨でガス代を支払う機能などを追加することで、ペイマスターを使ってアプリケーションのユーザー体験を改善できます。

3. ユーザー行動のインセンティブ化

自社の成長を図るWeb3スタートアップは、パワーユーザーのプラットフォーム手数料をカバーすること、ユーザーに新製品を試してもらうインセンティブを与えること、マーケティングプロモーションへの参加への賛同を得ることなどにより、ペイマスターの恩恵を受けられます。

スマートコントラクトウォレットの利点と同様、ペイマスターはさまざまな形でWeb3開発者に恩恵をもたらします。今日、最も革新的なWeb3企業は、プロダクトとWeb3のUXを改善するため、ペイマスターを実装する新しい方法を見出し続けています。

ペイマスターAPIを使い始めるには

AlchemyのペイマスターはEthereum、Polygon、Optimism、Arbitrumの各メインネットで稼働しています。ERC-4337準拠のペイマスターでトランザクションのスポンサーや柔軟なガスポリシーの構築を始めるには、Gas Manager APIとペイマスターポリシー作成のクイックスタートガイドをご確認ください。

よくある質問

ERC-4337におけるペイマスターとは

ペイマスターとは、EIP-4337で導入されたスマートコントラクトで、柔軟なガスポリシーを可能にし、アプリケーションがユーザーのガス代をスポンサーしたり、ブロックチェーンのネイティブ通貨の代わりにERC-20トークンでの支払いを受け付けたりすることを可能にします。

開発者はいつペイマスターを使うべきか

ペイマスターは、ユーザーオンボーディングを改善するためのガス代スポンサー、USDCのようなステーブルコインを含むERC-20トークンでの支払い、Web3プラットフォームにおける特定のユーザー行動のインセンティブ化などに最適です。

ペイマスターの主な2つのタイプとは

2つのタイプとは、オフチェーンのサービスを使ってトランザクションのスポンサーを判断するverifying paymasterと、ペイマスターが実際のETHコストをカバーしながらユーザーがERC-20トークンでガス代を支払えるようにするERC-20 paymasterです。

ペイマスターはEntryPointコントラクトとどのようにやり取りするか

EntryPointは検証時にvalidatePaymasterUserOp()を呼び出してスポンサーの確認を行い、実行後にpostOp()を呼び出して、ペイマスターのデポジット済みETH準備金からの会計処理とトークン送金を行います。

ペイマスターが実装しなければならない関数とは

ペイマスターは、スポンサー契約を検証するvalidatePaymasterUserOp()と、ユーザーからERC-20トークンを徴収してETHコストをカバーするといった実行後のロジックを処理するpostOp()を実装する必要があります。

Alchemyのgas managerはスポンサー付きトランザクションの請求をどのように処理しているか

Alchemyはネイティブ通貨をあらかじめEntryPointコントラクトにデポジットしており、Growth Tierの顧客にはカバーしたガス代の合計額に8%の手数料を加えて毎月請求し、Enterpriseの顧客にはカスタム料金を適用します。

開発者はガススポンサーシップにどのようなポリシーを設定できるか

開発者は、グローバルおよび送信者ごとの最大支出額の上限、トランザクション数の上限、送信者のアローリストとブロックリスト、ポリシーの開始・終了時刻を設定して、ペイマスターの利用を制御できます。

Background gradient

ブロックチェーンで魔法を生み出す

Alchemyは、最も強力なweb3開発者向けプロダクトとツールを、豊富なリソース、コミュニティ、そして卓越したサポートと組み合わせて提供します。