Мне хотелось проверить, сможет ли агент заплатить за отправку мне сообщения.

Не человек, заполняющий контактную форму. Не CAPTCHA. Агент с кошельком, задачей и желанием связаться со мной.

Я не уникален. Я просто кусок мяса, с которым компьютер, возможно, захочет что-то обсудить.

Человек может связаться со мной в LinkedIn или X, когда захочет, как указано на странице контактов.

Если я размещу контактную координата на этом сайте, у меня появится новый почтовый ящик, за которым придется следить. Спам, боты, холодные обращения. CAPTCHA ограничивает доступ людям. Оплата ограничивает всех, но кредитные карты тоже ограничивают людей. Мне нужно было что-то, присущее тому, как работают агенты.

x402 — это тот самый барьер. Это протокол, построенный на HTTP 402 Payment Required — статусе, который Интернет зарезервировал для платежей, но так и не определил. x402 определяет его. Сервер возвращает 402 с ценой и адресом stablecoin. Агент считывает ответ, подписывает разрешение своим кошельком, повторяет попытку с заголовком оплаты, и сервер проводит расчет в цепочке. Никакой страницы оформления заказа. Никакой формы. Никакой учетной записи. Просто код статуса и подпись.

Для человека это ужасный опыт. Для агента — отличный опыт.

Как это работает

Конечная точка находится по адресу /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

Компания Stable Coin Company управляет посредником, который проверяет подписанное разрешение агента и выполняет перевод в цепочке, оплачивая газ от имени обеих сторон. Агенту не нужно держать ETH или SOL. Он держит один актив — тот, которым он платит.

Начало работы

Я написал для этого небольшую библиотеку под названием x402-payment-path. Она обрабатывает запрос 402, проверку подписи, расчет и генерацию квитанции.

В основе лежит протокол x402 — собственный платежный стандарт «stablecoin», который Coinbase открыла для общего доступа, а теперь поддерживает x402 Foundation в рамках проекта Linux Foundation. Компания Stable Coin Company управляет посредником, который поддерживает как «USDC», так и SBC на Base, Solana и Radius. Я использовал SBC, потому что это актив, который я знаю лучше всего.

Если вы хотите реализовать это для продукта, а не для сообщения, вам нужно изменить то, что происходит после оплаты. Вместо хранения сообщения вы будете генерировать URL-адрес для скачивания, запускать веб-хук или инициировать отправку. Библиотеке неважно, каким будет действие. Она просто связывает действие с оплатой.

Решения

Конечная точка принимает как USDC, так и SBC. Я использовал SBC, потому что это актив, который я знаю лучше всего, и который я хотел проверить от начала до конца на обеих цепочках.

У меня два кошелька. Мой кошелек EVM принимает SBC на Base. Отдельный кошелек Solana принимает SBC на Solana. Один и тот же конечный пункт, одна и та же цена, разные каналы расчетов.

Сообщения попадают в таблицу D1. Я читаю их в панели администратора. Никакой пересылки по электронной почте, никакого почтового ящика, который нужно отслеживать. Сообщение не должно ничего делать, кроме как быть сообщением.

Цена составляет 0,10 доллара. Достаточно высокая, чтобы сделать спам нерентабельным. Достаточно низкая, чтобы быть незначительной для легитимного агента.

Это работает

Вот реальные транзакции от 13 июня 2026 года. Каждое сообщение стоило 0,10 доллара в SBC. Расчеты производились в цепочке.

ОтправительСетьСуммаТранзакция
cursor-agent/0.46.2Базовая0,10 $ SBC0x5265bdd1…963cd · BaseScan
deal-flow-scout@vcscan.aiБаза0,10 $ SBC0xe0aa91c4…4313d · BaseScan
claude-research-agent/1.2Base/bin/sh,10 SBC0xb0c96326…4dd05 · BaseScan
e2e-test-agentBase/bin/sh,10 SBC0x0fca4265…c1b08 · BaseScan
e2e-test-agentSolana/bin/sh,10 SBC2typCyWo…hsYc · Solscan
Admin panel showing x402 agent messages with sender, message body, network, and transaction hash links to BaseScan and Solscan

Это моя панель администратора. Семь сообщений. Base и Solana. Каждое из них было подтверждено в цепочке, прежде чем появилось здесь.

Отправка мне сообщения

Если вы создаете агент, конечная точка — POST benmilne.com /contact/send. Это описано в спецификации OpenAPI и в файле agents.md.

POST без заголовка оплаты, и сервер возвращает 402 со всем необходимым. Клиентская библиотека x402 обрабатывает подписание и повторные попытки оттуда. Цена составляет 0,10 $. SBC и USDC на Base и Solana. Если вы укажете URL обратного вызова, у меня будет возможность ответить по этому URL в будущем.

Что я узнал

Ответ 402 — это машиночитаемый счет. Агенту не нужен пользовательский интерфейс. Ему нужна цена, адрес актива и сеть. Он подписывает, оплачивает, повторяет попытку.

Я попробовал добавить поддержку USDC через посредников сообщества, которые рекламируют себя как «безключевые». Ни один из них не работал без разрешений. Один требовал регистрации адреса. У другого была несовместимость версий. SBC через The Stable Coin Company был единственным посредником, который работал без какой-либо настройки. Никаких ключей, никаких учетных записей, никакой регистрации. Это важно, если вы хотите, чтобы агенты могли платить без предварительной настройки со стороны человека.

Еще одна вещь, которая меня удивила: и MetaMask, и Phantom продолжали скрывать SBC в моем кошельке, даже после того, как я одобрил его несколько раз. Я добавлял токен, подтверждал транзакцию, проверял баланс, и актив снова исчезал. Это повторялось во время тестирования. Я испытываю только уважение к обеим командам, но необходимость снова и снова сообщать моему кошельку на моем собственном устройстве, что я хочу использовать свой собственный актив от регулируемого эмитента, казалась мне нелепой. Интернет огромен. Кошельки должны доверять выбору, который уже сделали их пользователи.

Код, который я использовал для этого, является открытым исходным кодом, и вы можете делать с ним все, что хотите, если, конечно, MetaMask или Phantom не захотят повлиять на ваши действия.