x402 on Gonka
проверка…

Git: Git-хостинг gonkalabs временно недоступен. Скачайте исходный код с этого сайта — Исходный код.

Протокол

Этот фасилитатор говорит на x402 версии 2 по HTTP. Привязка к сети — Cosmos exact с клиентской подписью TxRaw.

Привязка к сети

Версия x4022
Схема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:

x402Version2
acceptedPaymentRequirements, которые вы выполнили.
payload.signedTxBase64 protobuf TxRaw (body, auth info, подпись).
payload.signatureBase64 64-байтовой подписи secp256k1 (те же байты, что в TxRaw).
payload.authorization.fromПлательщик gonka1…. Должен совпасть с подписантом транзакции.
payload.authorization.toДолжен равняться accepted.payTo.
payload.authorization.amountАтомарные единицы. Сумма в транзакции ≥ этого и ≥ accepted.amount.
payload.authorization.denomngonka или контракт USDC.
payload.authorization.timeoutAtUnix-секунды. Если в прошлом — отказ.

Форма транзакции

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

  1. Версия, схема и сеть.
  2. signedTx декодируется в поддерживаемое сообщение.
  3. Получатель, актив и сумма совпадают с требованиями.
  4. from в authorization совпадает с адресом подписанта.
  5. Номер аккаунта и sequence в сети совпадают с подписанной транзакцией.
  6. Подпись сходится с SignDoc.
  7. Только на /verify: баланс плательщика ≥ суммы.
  8. Только на /settle: этот TxRaw ещё не проводили, затем трансляция и ожидание блока.

Коды отказа — на странице Ошибки.