x402 Ethereum RPC について
x402 Ethereum RPC は、Ethereum ノードへの JSON-RPC アクセスを Base 上の USDC でリクエストごとに販売する Cloudflare Worker テンプレートです。処理量に応じた価格設定とリクエスト・ノードエラーの検査により、回答できない場合の課金を防ぎます。
主な機能
- 01メソッドとリクエストごとに課金
- 02処理量に応じて価格を調整
- 03支払い前に不正なリクエストを拒否
- 04ノードの拒否を非課金エラーに変換
- 05公開 RPC 経由でトランザクションを中継
活用シーン
- 01Ethereum ノードへの有料アクセスを提供
- 02高負荷な RPC メソッドを処理量で価格設定
- 03プライマリの背後に有料の予備 RPC を配置
- 04ノードが応答できない場合の課金を防止
MCP 対応
ゲートウェイには、エージェントが RPC サービスをツールとして使うための MCP サーバーが含まれます。README に MCP エンドポイントや設定方法の記載はありません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
x402-rpc-gateway
独自の Ethereum ノードへの JSON-RPC アクセスを、x402 経由でリクエストごとに販売する Cloudflare Worker です。アカウントも API キーも請求書も不要です。呼び出し元は Base 上で USDC の利用許可に署名し、同じやり取りの中で応答を受け取ります。
402rpc.com で本番稼働中です。
これが必要な理由
通常、RPC アクセスを販売するには、リクエストを1件も受け付ける前に、サインアップ、課金、キーのローテーション、料金プランを構築する必要があります。x402 を使えばこれらすべてが不要になります。ただし、単純に呼び出しごとに課金するだけのゲートウェイでは、新たに2つの問題が生じます。このテンプレートはその両方を解決します。
呼び出し元に、返せない応答への支払いをさせてはいけません。 すべてのリクエストは、ペイウォールの前に検証されます。ブロック対象の名前空間、履歴の下限より前のブロック、広すぎるログ範囲は、いずれも HTTP 400 を返します。x402 はステータスが 400 以上の応答では決済しません。同じ理由で、ノードの障害は 502 を返します。
一律料金では損失が出ます。 eth_getLogs で1万ブロックを対象にすると、eth_blockNumber の何百倍もの負荷がノードにかかります。ここでは、各メソッドで実際に発生する処理量に応じて料金が変わります。
ノードが拒否した場合も、HTTP 200 が返されます。 「そのブロックでは状態を取得できない」や「1回の応答で返せるログが多すぎる」とノードが返す場合、ステータス 200 の JSON-RPC エラーになります。x402 はステータス 200 で決済するため、そのままでは、返せなかった応答に対して顧客に支払いが発生します。このテンプレートは、該当する種類のエラーを 4xx に変換し、決済されないようにします。一方、たとえば execution reverted のような実際の結果を示すエラーには課金されます。
利用できる機能
- メソッドごとの料金設定。バッチでも予想外の請求が発生しないよう、上限を設定できます
- 課金前に拒否するポリシーレイヤー。呼び出し元が対処できる理由を返します
- 独自ノードではなく、パブリック RPC 経由で中継するトランザクション。Privacy を参照してください
- エージェントが人間の手を介さずにサービスを見つけて利用できる、ディスカバリーメタデータ
- 人間向けのランディングページと機械向けの JSON を、
Acceptヘッダーに応じて切り替えます - MCP サーバー。あらゆるエージェントがツールとして利用できます
- フォールバックの例。1行追加するだけで、プライマリの後ろに有料の待機系としてゲートウェイを設定できます
セットアップ
npm install
cp wrangler.jsonc.example wrangler.jsonc # edit the vars
npx wrangler deploy
最低限、PAY_TO_ADDRESS、ORIGIN_URL、PUBLIC_URL を設定してください。それ以外はすべて、動作するデフォルト値が設定されています。
メインネットで使うには Coinbase CDP の認証情報が必要です。パブリックの x402.org ファシリテーターが対応しているのは テストネットのみ です。
npx wrangler secret put CDP_API_KEY_ID
npx wrangler secret put CDP_API_KEY_SECRET
認証情報がない場合、Worker は決済できない支払いチャレンジを発行せず、意図的に 503 を返します。
ドキュメントには書かれていない3つのこと
ファシリテーターには非公開の下限があります。 約 $0.0002 の金額は amount_too_low で拒否されますが、$0.001 なら通ります。そのため、料金の差別化はおよそ1セントの10分の1を上回る範囲でのみ可能です。
Bazaar がインデックスするのは x402 バージョン2のみです。 私が確認した20件のリソースはすべて v2 を使用しており、v1 を使用するものはありません。v1 のパッケージ(x402-hono、x402-fetch — 最終公開は2026年4月)を使って構築すると、サービス自体は動作しますが、エージェントが実際に検索するディスカバリーレイヤーには表示されません。このテンプレートでは全体を通して v2 を使用しています。
resource には公開 URL を指定してください。 リクエストから自動で取得する設定にすると、ミドルウェアは Worker の内部ホスト名を支払いチャレンジに含めます。このホスト名には Cloudflare アカウント名が含まれており、受取先アドレスと並んで表示されます。
自分の主張を検証する
このテンプレートが支払い条件やランディングページに記載する内容はすべて、見知らぬ人から料金を受け取るための約束です。そうなると信じている内容ではなく、ノードが実際にどう動作するかを確認してください。特に問題になった例を3つ紹介します。
- 「ブロック N 以降の履歴」— ブロック N と N-1 を確認してください。
- 「過去の状態を参照する呼び出しは、課金せずに拒否される」— ノード自身の拒否は HTTP 200 で返されます。変換しなければ決済されます。
policy.tsのnodeRefusalを参照してください。 - 「
eth_getLogsは最大 N ブロックまで」— クライアントには応答ごとに返せるログ数の上限もあります(Nethermind のデフォルトは20,000件)。これはブロック数の上限よりずっと前に問題になります。
見つけてもらう
Bazaar での順位は、説明文の出来ではなく、実測された利用状況(l30DaysTotalCalls と
l30DaysUniquePayers)によって決まります。説明文を練るのに午後を費やす前に知っておくとよいでしょう。
もうひとつ知っておきたいことがあります。2026 年 8 月時点で、公開されている Bazaar 全体では、 80 のサービスで 30 日間におよそ 1,200 件の有料呼び出しが処理されました。その中で最も利用された Ethereum RPC の処理数は 14 件でした。今の市場ではなく、これから成長する市場に向けて構築しましょう。
それでも、このテンプレートが用意するのは、検索対象として登録されるための bazaar ディスカバリー拡張機能、
iconUrl、そしてより多くのウォレットから利用できるようにする Base、Polygon、Arbitrum での支払い対応です。意図的に用意していないのは、自分の呼び出し数を水増しする仕組みです。それで得られるのは、まだ誰も読んでいないリスト上の順位であり、そのために自分のお金を使うことになります。
オリジンサーバーの保護
ORIGIN_TOKEN をシークレットとして設定し、オリジンサーバーで対応する
X-Origin-Token ヘッダーを必須にしてください。設定しないと、オリジンのホスト名を知った人は誰でもあなたのノードを無料で使えてしまい、ペイウォールは飾りになります。最小限の参考用プロキシは
examples/origin-proxy.py にあります。
プライバシー
受け取り先アドレスは、すべての支払いチャレンジに含まれるため、必然的に公開されます。 ノードの IP アドレスも、ピアツーピアネットワークに参加するため公開されます。保護すべきなのは、この 2 つのつながりです。
あなたのゲートウェイ経由でトランザクションを送信し、最初にブロードキャストした IP アドレスを監視する人は、あなたのサービスが物理的に稼働している場所を特定できます。RELAY_URLS を設定すると、公開エンドポイント経由で未加工のトランザクションを送信するため、その痕跡は残りません。それ以外のすべての方法は応答を返すだけなので、情報を明かすことはありません。
クライアントの利用方法
どの x402 クライアントでも、自動的に支払いと再試行を行います。
import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
const x402 = new x402Client().register("eip155:8453", new ExactEvmScheme(account));
const fetchWithPay = wrapFetchWithPayment(fetch, x402);
await fetchWithPay("https://your-gateway/rpc", { method: "POST", body });
自分のノードの背後に有料のフォールバックとして設定する方法については、examples/fallback.mjs をご覧ください。
transport: fallback([
http(YOUR_OWN_RPC),
http("https://your-gateway/rpc", { fetchFn: fetchWithPay }),
], { retryCount: 0 })
使うことのないスタンバイに費用はかかりません。これはサブスクリプションでは実現できない特性であり、こうしたものを運用する最大の理由です。
ライセンス
MIT.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。