コンテンツへスキップ
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 - ポリシーが支出できる最大金額(USD建て)
  • Max spend per user operation - 各ユーザー操作が支出できる最大金額(USD建て)
  • Max count of transactions - ポリシーがスポンサーできるトランザクション数の全体上限
  • Max count of transactions per sender - 送信者ごとのトランザクション数の個別上限
  • 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、Goerli、Mumbai、Arbitrum-Goerli、Optimism-Goerliにデプロイされています。以下はテストネットのデプロイアドレスと、ブロックエクスプローラー上でのコントラクトアドレスです。

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

dappやウォレットの開発者がERC-20ペイマスターを利用する理由には、アプリケーション独自のERC-20トークンにユーティリティを追加すること、ブロックチェーンネットワークのエコシステム内でさまざまなデジタル資産を保有するユーザーに柔軟性を提供すること、ETH、MATIC、OP、ARBなどのネイティブ通貨とは異なり価値が変動しないステーブルコインで支払うことなど、アプリケーション固有の多くのユースケースがあります。

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

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

1. Verifying paymasters(検証ペイマスター)

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

2. ERC-20 paymasters(ERC-20ペイマスター)

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

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

ペイマスターはどのように機能するのか?

ペイマスターの仕組みは、エントリーポイントコントラクトと連携してスポンサー付きユーザー操作の手数料をカバーし、送信者に代わってユーザー操作を実行するバンドラーに報酬を支払うというものです。

各ユーザー操作について:

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

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

ペイマスターを介してエントリーポイントコントラクトがユーザー操作を検証し、バンドラーに払い戻す様子を示した図
エントリーポイントコントラクトがペイマスターコントラクトを介してユーザー操作を検証し、ペイマスターの資金からバンドラーに払い戻す仕組みを示した図。

IPaymasterインターフェースにはどのような関数が含まれているか?

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

1. validatePaymasterUserOp()

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

**validatePaymasterUserOp()関数は、検証対象のユーザー操作のバイト表現を、そのIDと最大コストとともに受け取ります。そして、bytes32型の’context’という変数を返し、それがpostOp()**関数に渡されます。

2. postOp()

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

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

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

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

ペイマスターのストレージは、そのペイマスターを使用するバンドル内の全ての操作間で共有されているため、ある一つのvalidatePaymasterOpの動作が、Denial-of-Service攻撃(DoS)として、同じペイマスターを使うバンドル内の他の多くのユーザー操作の検証を失敗させる可能性があります。

悪意のあるペイマスターが自身の複数のインスタンスを作成すること(すなわちSybil攻撃)を防ぐため、ペイマスターはETHのステーキングが求められます。ペイマスターのステークがスラッシュされることはなく、いつでも引き出すことができます。ステークが存在するのは、潜在的な攻撃者に無視できない額の資本のロックアップを要求することで、悪意のある行動を抑止するためです。

ペイマスターを利用することで開発者が得られるメリットとは?

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

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 paymastersと、ユーザーがERC-20トークンでガス代を支払え、ペイマスターが実際のETHコストをカバーするERC-20 paymastersです。

ペイマスターはEntryPointコントラクトとどのように連携するのか?

EntryPointは、検証時にvalidatePaymasterUserOp()を呼び出してスポンサーシップを確認し、実行後にpostOp()を呼び出して、ペイマスターの預け入れられたETH準備金からの会計処理とトークン転送を処理します。

ペイマスターはどの関数を実装する必要があるか?

ペイマスターは、スポンサーシップの合意を検証するためのvalidatePaymasterUserOp()と、ユーザーからERC-20トークンを徴収してETHコストをカバーするなどの実行後処理を扱うpostOp()を実装する必要があります。

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

Alchemyは、EntryPointコントラクトにあらかじめネイティブ通貨を預け入れ、Growth Tierのお客様には、カバーしたガス代の総額に8%の手数料を加えた金額を毎月請求します。Enterpriseのお客様にはカスタム料金が適用されます。

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

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

Background gradient

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

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