/ Спецификация x402 v2
Справочник протокола.
Полная спецификация протокола x402 v2: заголовки запросов и ответов, JSON-схемы, структуры EIP-712, поддерживаемые сети и адреса контрактов.
1. Клиент отправляет начальный запрос
Стандартный HTTP-запрос к защищённому ресурсу. Никаких специальных заголовков на первой попытке не нужно.
2. Сервер возвращает 402 + payment-required
Ответ включает заголовок payment-required: Base64-JSON-объект, указывающий версию x402, принимаемые методы оплаты, суммы, адрес получателя и ID ресурса.
3. Клиент подписывает платёж
Wallet парсит требования, выбирает EIP-3009 или Permit2, собирает EIP-712 typed data и подписывает приватным ключом пользователя.
4. Клиент повторяет запрос с payment-signature
Исходный запрос отправляется заново с заголовком payment-signature, содержащим подписанный payload авторизации (Base64 JSON).
5. Сервер верифицирует и отдаёт ресурс
Сервер декодирует подпись, отправляет мета-транзакцию (EIP-3009) или транзакцию сетлмента (Permit2) on-chain, подтверждает получение и возвращает ресурс с заголовком payment-response.
Схема заголовка payment-required
{
"x402Version": 2,
"accepts": [
{
"scheme": "eip3009",
"network": "base",
"token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"maxAmountRequired": "100000",
"resource": "/api/inference",
"description": "GPU inference — 1 request",
"mimeType": "application/json",
"payTo": "0x...facilitator",
"extra": {}
}
]
}Поддерживаемые сети
x402 v2 зачисляет USDC в этих EVM-сетях:
| Chain | Chain ID | USDC address |
|---|---|---|
| Ethereum | 1 | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 |
| Polygon | 137 | 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 |
| Base | 8453 | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
| Arbitrum | 42161 | 0xaf88d065e77c8cC2239327C5EDb3A432268e5831 |
| Optimism | 10 | 0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85 |
| BSC | 56 | 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d |
EIP-712 typed data
Оба метода подписи используют EIP-712 структурированные данные для безопасности и читаемости. Wallet показывает человекочитаемые поля перед тем, как пользователь подпишет.
EIP-3009 types
TransferWithAuthorization(
address from,
address to,
uint256 value,
uint256 validAfter,
uint256 validBefore,
bytes32 nonce
)Permit2 types
PermitWitnessTransferFrom(
TokenPermissions permitted,
address spender,
uint256 nonce,
uint256 deadline,
X402Witness witness
)
TokenPermissions(
address token,
uint256 amount
)Последнее обновление: