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

ユーザーオペレーションの手数料の見積もりと請求の仕組み

最終更新日: 2023年7月11日2分で読めます

ERC-4337 のガス見積もりに関する連載では、ERC-4337 のガス見積もりの仕組みから始め、「User Operation Flow」のステップ2、eth\_estimateUserOperationGas、そしてそれに伴う複雑な問題としてガストークン転送の問題やL2 ガスの見積もりの課題について解説してきました。今回の記事では、フローのステップ3に焦点を当て、ガス料金がどのように見積もられ、徴収されるかを詳しく説明します。

この記事では、EIP-1559 をサポートするチェーンを扱うことを前提とします。user operation における料金フィールドを理解するには、EIP-1559 についての理解が前提として必要です。

user operation には EIP-1559 トランザクションと同じ料金フィールドがあります:

  • maxFeePerGas: ユーザーが支払う意思のある最大の合計金額(base fee + priority fee)
  • maxPriorityFeePerGas: ユーザーが入札する最大の priority fee、つまり「チップ」

entry point は次の式を使ってこれら2つのフィールドから結果となるガス価格を計算します。

ご覧の通り、maxFeePerGas はガス価格の絶対的な上限として機能し、maxPriorityFeePerGas はブロックの base fee に上乗せされるチップとして機能します。

バンドルトランザクション

bundler がバンドルトランザクションを送信する際、そのトランザクションも entry point に対して EIP-1559 のダイナミクスに従ったガス価格の対象となります。bundler は maxFeePerGas と maxPriorityFeePerGas を設定します。最終的なガス価格は、これらとトランザクションが含まれるブロックの base fee から計算されます。

bundler はあるガス価格でトランザクションを送信し、その後、バンドル内の各 user operation が設定した(場合によっては異なる)ガス価格で報酬を受け取ります。user operation のガス価格が高ければ bundler は利益を得ますが、そうでなければその user operation については損失を被ります。maxPriorityFeePerGas は単に bundler へのチップというだけではなく、bundler がバンドルトランザクションを含めてもらうために block builder に支払う必要があったチップを補填する役割も果たします(bundler 自身が builder である場合を除く)。

bundler はどのように経済的インセンティブを得るのか?

bundling は、bundler の安全性を確保するために必要な複雑なシミュレーションのため、コストのかかる作業になり得ます。この計算コストを bundler が回収できるようにし、また user operation の健全な市場を促進する(これにより inclusion までの時間が短縮され、UX が向上する)ためには、bundler に対して余剰収益という形での経済的インセンティブが必要です。

この収益は複数の形を取り得ます: priority fee、MEV、オフチェーンの取引です。

1. Priority fee

bundler は、自身がトランザクションに支払った priority fee よりも高い priority fee を operation に含めるよう送信者に要求する場合があります。混雑度の高い時間帯にバンドルされる可能性を高めたい送信者は、priority fee の入札額を引き上げることがあります。

2. MEV 収益

bundler はバンドル内での順序決定権を持つため、mempool 内の operation から MEV を抽出できます。bundler は operation に対して back-run やサンドイッチを行い、この利益を得ることができます。

3. オフチェーン

bundler は(MEV 保護などの機能を備えた)プライベートな mempool を運用し、user operation の送信者とオフチェーンで取引を行うことができます。この場合の手数料は、何らかのオフチェーンの仕組みによって担保されます。

健全なネットワークを確保するには、(1)がほとんどの user operation にとって必須の選択肢であると言えるでしょう。

すべての user operation の種類から正の MEV を抽出できるわけではありません。このインセンティブのみに依存すると、bundler はほとんどの user operation を取り上げなくなってしまいます。オフチェーンの取引は中央集権化を招くため、多くのユーザーがこれを避けたいと考えるでしょう。残るのは Priority Fee です。

Alchemy の Rundler は現在、バンドリングに必要な動的な priority fee を定義しています。この手数料は現在推定されているネットワーク手数料に基づいています。user operation が推定ネットワーク手数料に加えて bundler への小さなオーバーヘッドチップを下回る額を入札した場合、その operation はバンドルされず、mempool に残り続けます。

💡 P2P ネットワークが登場すると、これはトランザクションの市場に近い形になるでしょう。送信者は過去にマイニングされた user operation を分析し、最低価格を把握できます。bundler は現在の mempool の内容に基づいてユーザーにヒントを提供できます。MEV サーチャーも、関連する MEV が高い user operation を mempool から選び出し、ガス代を少なく(あるいはゼロに)支払う、あるいはサーチャーに支払いをさせることさえ可能かもしれません。この MEV 市場は Orderflow Auction(OFA)によって促進される可能性があります。

bundler はどのようにガス料金を見積もるのか?

bundling を行う前に、bundler はバンドルマーケットプレイスを通じてバンドルトランザクションの inclusion を確実にするため、自身が提出する手数料について独自の見積もりを行う必要があります。通常、bundler は次のブロックでの inclusion を目指して構築を行い、inclusion を確実にするために妥当な価格を入札します。

base fee を見積もるには、bundler は現在のブロックの base fee をネットワークに問い合わせることができます。通常、次の2ブロックで手数料が増加しうる最大量である25%以上のオーバーヘッドを加えることが、トランザクションが詰まらないようにするために望ましいです。

priority fee を見積もるには、bundler は eth\_maxPriorityFeePerGas を使用できます。base fee と同様に、トランザクションが確実に取り上げられるよう、一定割合のオーバーヘッドを加えることが望ましいです。

これらの手数料を見積もった上で、bundler は mempool に問い合わせ、(bundler への小さな「チップ」を含めて)inclusion に十分な額を入札している user operation を絞り込むことができます。

💡 このセクションでは、バンドルマーケットプレイスを利用してバンドルを送信する Bundler について説明しています。bundler は、自身の user operation のバンドルがフロントランされてオンチェーンでリバートし、bundler 自身がガス代を負担する事態を避けるため、(Flashbots のような)バンドルマーケットプレイスを利用する必要があります。

bundler が block builder の一部である場合、事情は変わってきます。

送信者はどのように user operation の手数料を見積もるべきか?

クライアント側では、送信者はバンドリングに必要な手数料を見積もる必要があります。見積もりが低すぎると、user operation が mempool に滞留する可能性があります。見積もりが高すぎる場合、特に priority fee について、inclusion のために払いすぎることになる可能性があります。

p2p ネットワーク導入前の Rundler とやり取りする際は、以下のアプローチを推奨します:

  1. base fee を見積もります。価格が不利な方向に動いた場合でもマイニングされるよう、許容できるオーバーヘッドを加えます。少なくとも25%を推奨します。
  2. eth\_maxPriorityFeePerGas を使って priority fee を見積もります。許容できるオーバーヘッドを加えます。少なくとも10%を推奨します。
  3. priority fee にネットワーク依存の bundler「チップ」オーバーヘッドを加えます。
  4. priority fee を base fee に加えて maxFeePerGas を求めます。maxPriorityFeePerGas は2で見積もった手数料です。

Arbitrum の手数料見積もり

Arbitrum のシーケンサーは priority fee を無視し、eth\_maxPriorityFeePerGas は常に0を返します。bundler に補填するため、bundler が見積もった最大 base fee の固定割合を priority fee として要求します。現在は5%を課しています。

Optimism の手数料見積もり

Optimism には、以前の記事L2 ガスの見積もりで説明したエッジケースがあり、手数料見積もりに影響を与えます。

Optimism では maxPriorityFeePerGas = l1\_gas / l2\_base\_fee を設定します。しかし、通常の Optimism トランザクションでは priority fee は L2 ガスの部分にのみ適用されるため、L2 の base fee よりも桁違いに高くなる可能性があります。そのため、バンドルの priority fee が見積もり base fee の固定割合であることを要求します。現在は5%を課しています。

💡 Alchemy のbundler 手数料ロジックについての詳細は、当社のドキュメントに記載されています。

P2P mempool

P2P mempool が稼働すると、user operation の手数料に対して独立した市場が生まれます。これにより、user operation の手数料見積もりが大幅に簡素化される可能性があります。上記のように priority fee の静的な計算を行う代わりに、ユーザーは手数料の履歴を使って入札額を見積もることができます。単一の bundler が user operation を選ぶ際にどのような基準を使っているかはもはや重要ではなく、いずれかの bundler がある user operation をバンドルする価値があると見なすかどうかだけが重要になります。

Rundler は、過去にバンドルされた operation に基づいてユーザーが入札額を見積もるために問い合わせできる、eth\_feeHistory に似た rundler\_userOperationFeeHistory メソッド(あるいは標準化されうる同様のもの)をサポートする予定です。

🦀

続きを読む

ERC-4337 のガス見積もりに関するこの技術解説シリーズの最初の3つの記事をまだご覧になっていない方は、ERC-4337 のガス見積もりの仕組みと、user operation に対して正確なガス見積もりを提供するために私たちがどのように複雑な問題を解決してきたかをご確認ください。

Alchemy Newsletter

リリース情報をいち早く受け取る

ニュースレターに登録する

Alchemyの最新のプロダクト情報とリソースをお届けします

A
O
D
+
80,000人以上が購読中

メールアドレスを入力すると、当社のマーケティング情報およびプロダクト最新情報の受信に同意したことになります。Alchemyが受け取った情報をプライバシー通知に従って取り扱うことに同意するものとします。購読はいつでも解除できます。