エージェントがお金を払って私にメッセージを送れるかどうか試してみたかったのです。
人間が問い合わせフォームに入力するわけでも、CAPTCHAを解くわけでもありません。財布を持ち、タスクを抱え、私に連絡を取りたいと願うエージェントのことです。
私は特別な存在ではありません。単に、コンピュータが何かを伝えたいと思うような、ただの「肉塊」に過ぎないのです。
連絡先ページに記載されている通り、人間ならいつでもLinkedInやXを通じて私に連絡できます。
もしこのサイトに連絡先エンドポイントを設置すれば、監視すべき受信箱がまた一つ増えることになる。スパム、ボット、冷やかし。CAPTCHAは人間を遮断する。支払いはすべての人を遮断するが、クレジットカードもまた人間を遮断する。私には、エージェントの働き方に固有の何かが必要だった。
x402こそがそのゲートだ。これはHTTP 402 Payment Required(支払いが必要)に基づいて構築されたプロトコルであり、インターネット上で支払いのために予約されていたものの、これまで定義されていなかったステータスコードである。x402はそれを定義する。 サーバーは価格とstablecoinアドレスを伴う402を返します。エージェントはレスポンスを読み取り、ウォレットで許可証に署名し、支払いヘッダーを付けて再リクエストすると、サーバーはチェーン上で決済を確定します。チェックアウトページも、フォームも、アカウントも不要です。必要なのはステータスコードと署名だけです。
人間にとっては最悪の体験だ。エージェントにとっては素晴らしい体験だ。
仕組み
エンドポイントは、このサイトの /contact/send にあります。エージェントは、OpenAPI仕様またはagents.mdを通じてこれを発見します。最初のPOSTリクエストには支払いヘッダーが含まれません。サーバーは、価格、受け入れ可能な資産、および含めるべきフィールドを記述したスキーマを伴う402を返します。エージェントは、レスポンス自体以外のドキュメントを必要としません。
sequenceDiagram
participant Human as Human
participant Agent as Agent
participant Site as benmilne.com
participant Facilitator as x402 Facilitator
participant Chain as Blockchain
participant Admin as Admin Panel
Human-->>Agent: "Contact Ben Milne about X"
Agent-->>Site: POST /contact/send (no payment)
Site-->>Agent: 402 + price + assets + field schema
Agent-->>Agent: Sign stablecoin permit
Agent-->>Site: POST + PAYMENT-SIGNATURE + message body
Site-->>Facilitator: Verify signature
Facilitator-->>Site: Valid
Site-->>Facilitator: Settle
Facilitator->>Chain: On-chain transfer (SBC)
Chain-->>Facilitator: Tx hash
Facilitator-->>Site: Settlement confirmed
Site-->>Site: Store message in D1
Site-->>Agent: 200 + receipt with tx hash
Admin-->>Admin: Message appears with block explorer link
rect rgba(200, 120, 50, 0.08)
Note over Human,Admin: Future: callback URL enables two-way communication
end
The Stable Coin Companyは、エージェントの署名付き許可証を検証し、オンチェーン送金を実行するファシリテーターを運営しており、双方に代わってガス代を支払います。エージェントはETHやSOLを保有する必要はありません。エージェントが保有するのは、支払いに使用する1つの資産のみです。
はじめに
このために、x402-payment-pathという小さなライブラリを作成しました。これは、402チャレンジ、署名検証、決済、および領収書生成を処理します。
基盤となるプロトコルはx402です。これはCoinbaseがオープンソース化し、現在はx402 FoundationがLinux Foundationプロジェクトとして維持管理している、stablecoinネイティブの決済標準です。The Stable Coin Companyはファシリテーターを運用しており、Base、Solana、Radius上でUSDCとSBCの両方をサポートしています。私は最も熟知している資産であるSBCを使用しました。
メッセージではなく製品向けにこれを実装したい場合は、支払い後の処理を変更します。メッセージを保存する代わりに、ダウンロードURLを生成したり、Webhookをトリガーしたり、発送を開始したりします。ライブラリはアクションの内容を問いません。支払いによってアクションを制御するだけです。
決定事項
このエンドポイントは、USDCとSBCの両方を受け付けます。私がSBCを選んだのは、それが私が最もよく知っている資産であり、両方のチェーンでエンドツーエンドの検証を行いたかったからです。
私は2つのウォレットを持っています。私のEVMウォレットはBase上でSBCを受信し、別のSolanaウォレットはSolana上でSBCを受信します。エンドポイントは同じ、価格も同じ、決済経路が異なるだけです。
メッセージはD1テーブルに格納されます。管理パネルでそれらを確認します。メール転送も、監視すべき受信箱もありません。メッセージは、メッセージである以外には何もできないものでなければなりません。
価格は0.10ドルです。スパムを行うには割に合わないほど高く、正当なエージェントにとっては些細な金額です。
機能しています
以下は2026年6月13日の実際の取引です。各メッセージのコストはSBCで0.10ドルでした。決済はオンチェーンで行われました。
| 送信者 | ネットワーク | 金額 | トランザクション |
|---|---|---|---|
cursor-agent/0.46.2 | ベース | 0.10 SBC | 0x5265bdd1…963cd · BaseScan |
deal-flow-scout@vcscan.ai | Base | 0.10 SBC | 0xe0aa91c4…4313d · BaseScan |
claude-research-agent/1.2 | Base | /bin/sh.10 SBC | 0xb0c96326…4dd05 · BaseScan |
e2e-test-agent | Base | /bin/sh.10 SBC | 0x0fca4265…c1b08 · BaseScan |
e2e-test-agent | Solana | /bin/sh.10 SBC | 2typCyWo…hsYc · Solscan |

これが私の管理画面です。7件のメッセージがあります。BaseとSolanaです。それぞれ、画面に表示される前にチェーン上で決済済みです。
メッセージの送信
エージェントを構築している場合、エンドポイントは POST benmilne.com /contact/send です。これは OpenAPI 仕様書と agents.md に記載されています。
支払いヘッダーなしでPOSTすると、サーバーは必要な情報をすべて含んだ402を返します。 x402クライアントライブラリが、そこから署名と再試行を処理します。料金は0.10ドルです。BaseとSolanaではSBCおよびUSDCが利用可能です。コールバックURLを指定していただければ、将来的にはそのURLで応答できるようになります。
学んだこと
402レスポンスは機械可読な請求書です。エージェントにUIは不要です。必要なのは価格、資産アドレス、そしてネットワークだけです。署名し、支払いを行い、再試行します。
「キーレス」を謳うコミュニティのファシリテーターを通じて、USDCのサポートを追加しようと試みました。しかし、許可不要で動作するものは一つもありませんでした。あるものはアドレスの登録を必要とし、別のものはバージョンの非互換性がありました。The Stable Coin Company経由のSBCだけが、一切の設定なしで動作する唯一のファシリテーターでした。 鍵も、アカウントも、登録も不要です。エージェントに、人間が事前に設定を行うことなく支払いをさせたいのであれば、これは重要な点です。
もう一つ驚いたのは、MetaMaskもPhantomも、私が何度も承認したにもかかわらず、ウォレット内でSBCを隠し続けていたことです。トークンを追加し、取引を確認し、残高をチェックしても、資産はまた消えていました。テスト中、この現象が繰り返し発生しました。 両チームの取り組みには敬意しかありませんが、規制対象の発行元から入手した自分の資産を使いたいと、自分のデバイス上のウォレットに何度も伝えなければならないのは、馬鹿げていると感じました。インターネットは広大です。ウォレットは、ユーザーがすでに下した選択を信頼すべきです。
今回使用したコードはオープンソースであり、MetaMaskやPhantomがあなたの行動に干渉しない限り、自由に利用して構いません。