Skip to main content
X402 は、Coinbase によって提案された「HTTP 402 による課金」のオンチェーン支払いプロトコルです:サーバーはトークンのないリクエストに対して 402 Payment Required を返し、accepts: [...] フィールドを付けて受け入れ可能なチェーン / 資産 / 価格を列挙します;クライアントはローカルで承認を署名し(EVM では Permit2 / EIP-712、Solana では SPL トークン転送の承認)、base64 でエンコードされたエンベロープを PAYMENT-SIGNATURE ヘッダーに入れて再送します。サーバーが検証した後、実際にチェーン上で決済を行い、ビジネス結果を返します。
Ace Data Cloud の X402 クライアントは、ターゲット API を直接呼び出し、リアルタイムで返された 402 Payment Required と accepts を価格と署名の根拠として使用します。Facilitator の支払い能力は /.well-known/x402 で検証できます。
@acedatacloud/sdk と acedatacloud は、paymentHandler フックを公開しています:SDK 自身が発行したリクエストが 402 を受け取ったとき、注入したハンドラーを呼び出して PAYMENT-SIGNATURE ヘッダーを取得し、元のリクエストを再送します。@acedatacloud/x402-client / acedatacloud-x402 を SDK と組み合わせることで、全体のプロセスはビジネスコードに対して完全に透明です——あなたはただ client.openai.chat.completions.create(...) を使うだけで、トークンモードと全く同じように見えますが、基盤は呼び出しに応じた支払いで、事前にチャージする必要はありません。 本文:
  • TS 側の「トークンなし + X402 ハンドラー注入」リンクを実際に通してみました(T12 検証)
  • EVM / Solana の二つの署名リンクの違いを列挙しました
  • viem プライベートキー方式、ブラウザウォレット方式、Python EVMAccountSigner モードの三つの適応を示しました
  • preferScheme / prefer_scheme という落とし穴になりやすいフィールドを明確にしました

一、プロトコル概要(必見)

成功した X402 呼び出しには 3 回の HTTP RTT が関与します:
X402 エンベロープは JSON の一部で、base64 にエンコードされて PAYMENT-SIGNATURE ヘッダーに入れられます。構造(抜粋):
エンベロープの最上位は x402Version: 2 で、accepted オブジェクトを使って今回選択した scheme と network(CAIP-2 表示)を宣言します。 preferScheme / prefer_scheme は、サーバーが複数のスキームを同時に提供する場合に好みを選択するために使用されます。サーバーが exact のみを公開している場合、このフィールドは無視されます;upto を設定してもサーバーが公開していなければ、最初の一致項目にフォールバックします。

二、TypeScript:ブラウザウォレット + サーバー viem の二つの使い方

インストール

実測のバージョン番号:

createX402PaymentHandler 完全署名

戻り値は (ctx) => Promise&lt;{ headers: Record<string, string> }> で、SDK の paymentHandler フックの署名と一致します。

用法 1:ブラウザ(MetaMask / WalletConnect)

最初の呼び出しではブラウザが二回の署名提示を表示します:最初は Permit2 に対する USDC の一回限りの承認(金額は MaxUint256、チェーンに書き込まれます);二回目は X402 エンベロープの EIP-712 署名(チェーンには載せず、facilitator の検証用)。その後の呼び出しでは二回目の署名のみが必要で、体験上は「一回署名をクリック → 結果を取得」となります。

用法 2:Node サーバー + viem プライベートキー(バックエンド / CLI に適した)

@acedatacloud/x402-client は TS 側でEIP-1193 プロバイダーのみを受け入れます——それはプライベートキーを直接管理しません。Node / CLI シナリオでは、標準的な方法は viem を使用してプライベートキーを WalletClient に包み、次に @ethereumjs/util または viem 内部の EIP-1193 アダプタを使用します。
viem の EIP-1193 適合が不十分だと感じる場合は、より低レベルの signEVMUptoPayment を使用して、accepts → signed envelope → PAYMENT-SIGNATURE header のルートを自分でつなげて、SDK フックをスキップすることもできます。ただし、プロトコルのアップグレードを自分で管理する手間を省くために、createX402PaymentHandler を優先することをお勧めします。

用法 3:Solana

Solana チェーン上では現在**exact scheme**のみが公開されているため、Solana 上では preferScheme は機能しません。

三、Python:私钥模式

Python の acedatacloud-x402 は直接私钥で署名する方法を採用しており(EIP-1193 抽象なし)、サーバーサイド / タスクエグゼキューターに適しています。

インストール

実測バージョン番号:

EVM(Base / Skale)

Solana

一度きりの承認(EVM 初回のみ)

EVM Base 上の X402 は Permit2 を使用し、ウォレットが USDC に対して Permit2 コントラクトに一度 MaxUint256 の承認を行う必要があります。acedatacloud-x402 には approve_permit2 が内蔵されています:
この取引は一度だけ発行すればよく、その後のすべての X402 EVM 支払いはこの承認を使用します。Solana では必要ありません。

四、実際の実行検証

テスト目標:TS SDK がトークンを渡さず、X402 ハンドラーを注入し、正常にリクエストを構築して発起できること(真のチェーン上の USDC を消費しない軽量検証)。
出力:
結果の説明:
  • apiToken を渡さなかったため、SDK の構築はエラーを報告しない、X402 モードが確かにトークンの合法的な代替品であることを証明します。
  • createX402PaymentHandler が返すのは関数(フック)で、SDK は402を受け取ったときのみ呼び出します。
  • 実際のチェーン上での支払いが通るエンドツーエンドテストは、実際の USDC の引き落としが関与するため、このチュートリアルには含まれていません。詳細は X402 集成ガイド の e2e サンプルを参照してください。
Python 側の create_x402_payment_handler も同様の検証を行っており —— 関数の戻り値は呼び出し可能で、payment_handler=... を注入した際に AceDataCloud(...) の構築がエラーを報告しません。両方の意味が一致しています。

五、「Bearer token モード」との比較