Отправьте первый платный запрос через x402

В этом руководстве один запрос к Solana проходит через x402 целиком: вы узнаёте цену, оплачиваете запрос и получаете ответ с квитанцией о расчёте. С остальными 15 блокчейнами всё работает так же, меняется только путь.
Вам понадобятся кошелёк с USDC в Solana или с USDC либо EURC в Base и клиент x402 — программа, которая читает ответ 402, подписывает платёж вашим кошельком и повторно отправляет с ним запрос. О клиентах x402 читайте в документации x402 на x402.org.

1. Отправьте запрос

Отправьте RPC-запрос без оплаты:
bash
curl -i https://x402.erpc.global/v1/solana-mainnet \
  --header 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
В ответ придёт 402 Payment Required. В заголовках указаны метод и цена:
http
HTTP/2 402
x-payment-required: eyJ4NDAyVmVyc2lvbiI6Mi…
x-rpc-methods: getSlot
x-rpc-weight: 1000
x-rpc-price-usd: 0.001
В поле accepts тела ответа перечислены варианты оплаты — по одному на каждый стейблкоин, которым можно оплатить запрос. amount указан в наименьших единицах стейблкоина, поэтому 1000 — это 0.001 USDC или 0.001 EURC:
json
{
  "error": { "code": "payment_required", "message": "Payment required", "request_id": "…" },
  "x402Version": 2,
  "accepts": [
    { "scheme": "exact", "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "amount": "1000", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", … },
    { "scheme": "exact", "network": "eip155:8453", "amount": "1000", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", … },
    { "scheme": "exact", "network": "eip155:8453", "amount": "1000", "asset": "0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42", … }
  ],
  "pricing": { "methods": ["getSlot"], …, "weight": 1000, "rawWeight": 42, …, "price": "$0.001", … },
  …
}

2. Оплатите через клиент x402

Передайте ответ 402 своему клиенту x402. Он выберет вариант, который ваш кошелёк может оплатить, подпишет платёж на эту сумму и закодирует его для заголовка X-Payment. Для этого платежа не нужны SOL или ETH на комиссии сети.

3. Отправьте запрос повторно с платежом

Отправьте то же тело запроса ещё раз, указав платёж в заголовке X-Payment:
bash
curl -i https://x402.erpc.global/v1/solana-mainnet \
  --header 'Content-Type: application/json' \
  --header 'X-Payment: <PAYMENT_PAYLOAD>' \
  --data '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
Не меняйте тело запроса. Цена рассчитывается по телу запроса, поэтому если у изменённого тела другая цена, платёж ей больше не соответствует и в ответ придёт price_mismatch.
Когда платёж проверен и проведён, возвращается ответ RPC с квитанцией о расчёте в заголовке X-Payment-Response:
http
HTTP/2 200
x-payment-response: <RECEIPT>
json
{ "jsonrpc": "2.0", "id": 1, "result": … }
Каждый платёж действует только для одного запроса. Если отправить тот же платёж повторно, он будет отклонён с 402 payment_invalid или 409 duplicate_payment, и запрос не будет передан повторно.

Ответы

Запрос, на который x402.erpc.global отвечает ошибкой до того, как запросить оплату, ничего не стоит.
Статусerror.codeЧто произошло
402payment_requiredПлатёж не был отправлен. В теле ответа указаны цена и варианты оплаты.
402payment_invalidПлатёж не прошёл проверку. Подпишите новый платёж и отправьте запрос повторно.
402price_mismatchПлатёж не соответствует ни одному варианту, который предложил ответ 402 на этот запрос, например по цене.
402payment_amount_too_lowСумма меньше минимального платежа, который проводит x402.erpc.global.
402settlement_failedПолучен ответ, что расчёт не прошёл. В ответе снова указаны варианты оплаты.
409duplicate_paymentЭтот платёж уже использован.
400method_not_supported, invalid_requestЭтот метод на данном пути не продаётся, или путь не принимает такое тело запроса. Плата не взимается.
413batch_too_largeВ batch больше 100 вызовов. Плата не взимается.
500configuration_errorПуть сейчас не может обслуживать запросы. Плата не взимается.
503payment_unavailableСейчас нельзя предложить ни одного варианта оплаты. Плата не взимается. Повторите запрос через указанное в Retry-After число секунд.
503service_busyСлишком много одновременных запросов. Плата не взимается. Повторите запрос через указанное в Retry-After число секунд.
502settlement_failedРезультат расчёта неизвестен: платёж мог пройти, а квитанция не приложена. Прежде чем подписывать новый платёж, проверьте в Solana или Base, прошёл ли подписанный вами платёж.
502, 504upstream_error, upstream_timeoutПлатёж проведён, но блокчейн не ответил или не ответил вовремя. Квитанция всё равно приложена. Чтобы отправить запрос повторно, нужен новый платёж.
В Solana на вызов, который прочитал бы слишком много данных, например getProgramAccounts без фильтров для большой программы, приходит HTTP 200 и ошибка JSON-RPC ещё до запроса оплаты, поэтому он ничего не стоит.

Что дальше