Протокол
Этот фасилитатор говорит на x402 версии 2 по HTTP. Привязка к сети — Cosmos exact с клиентской подписью TxRaw.
Привязка к сети
| Версия x402 | 2 |
|---|---|
| Схема | exact |
| Сеть | cosmos:gonka-mainnet (CAIP-2) |
| Метод перевода | signed-tx — клиент подписывает, фасилитатор транслирует |
| Поток оплаты | upfront — сначала settle, потом выдача. /verify для этого порядка не обязателен. |
Общий протокол описан на docs.x402.org и в спецификации v2. Эта страница — привязка к Gonka.
Заголовки
PAYMENT-REQUIRED | Сервер → клиент. Base64 JSON PaymentRequired. На 402. |
|---|---|
PAYMENT-SIGNATURE | Клиент → сервер. Base64 JSON PaymentPayload. |
PAYMENT-RESPONSE | Сервер → клиент. Base64 JSON результата settle. После попытки, успех или нет. |
Кодировка — стандартный base64 от UTF-8 JSON, не base64url. CORS открывает платёжные заголовки, чтобы браузер мог их прочитать.
PaymentRequired
{
"x402Version": 2,
"error": "PAYMENT-SIGNATURE header is required",
"resource": {
"url": "https://example/demo",
"description": "…",
"mimeType": "application/json",
"serviceName": "x402-gonka",
"tags": ["gonka", "x402", "usdc"]
},
"accepts": [ { "scheme": "exact", "network": "cosmos:gonka-mainnet", "amount": "1000", "asset": "ngonka", "payTo": "gonka1…", "maxTimeoutSeconds": 60, "extra": {} } ],
"extensions": {}
}accepts[].extra в этой сети включает name, decimals, assetTransferMethod и paymentFlow.
Payload платежа
Объект внутри PAYMENT-SIGNATURE:
x402Version | 2 |
|---|---|
accepted | PaymentRequirements, которые вы выполнили. |
payload.signedTx | Base64 protobuf TxRaw (body, auth info, подпись). |
payload.signature | Base64 64-байтовой подписи secp256k1 (те же байты, что в TxRaw). |
payload.authorization.from | Плательщик gonka1…. Должен совпасть с подписантом транзакции. |
payload.authorization.to | Должен равняться accepted.payTo. |
payload.authorization.amount | Атомарные единицы. Сумма в транзакции ≥ этого и ≥ accepted.amount. |
payload.authorization.denom | ngonka или контракт USDC. |
payload.authorization.timeoutAt | Unix-секунды. Если в прошлом — отказ. |
Форма транзакции
GNK
Первое (и единственное) сообщение: /cosmos.bank.v1beta1.MsgSend с одной монетой {denom: "ngonka", amount}.
USDC
Первое сообщение: /cosmwasm.wasm.v1.MsgExecuteContract. contract — CW-20 USDC. msg — JSON {"transfer":{"recipient":"…","amount":"…"}}.
Auth info
Один подписант, /cosmos.crypto.secp256k1.PubKey, SIGN_MODE_DIRECT (режим 1), комиссия 0ngonka, лимит газа обычно 120000. SignDoc — body_bytes || auth_info_bytes || chain_id || account_number, хеш SHA-256.
Что проверяет verify
- Версия, схема и сеть.
signedTxдекодируется в поддерживаемое сообщение.- Получатель, актив и сумма совпадают с требованиями.
fromв authorization совпадает с адресом подписанта.- Номер аккаунта и sequence в сети совпадают с подписанной транзакцией.
- Подпись сходится с SignDoc.
- Только на
/verify: баланс плательщика ≥ суммы. - Только на
/settle: этотTxRawещё не проводили, затем трансляция и ожидание блока.
Коды отказа — на странице Ошибки.