x402 on Gonka
检查中…

Git:gonkalabs 的 Git 仓库暂时不可用。请从本网站下载源码 — 源码

卖家

用 GNK 或 USDC 为 HTTP 路由定价。你返回 402,客户端付款,你通过本协调器结算,然后再提供服务。无需运行 Gonka 节点。

服务端循环

  1. 若缺少 PAYMENT-SIGNATURE 或其不是有效的 base64 JSON,返回 402,并带 PAYMENT-REQUIRED(头和正文)。
  2. /settle 发送 POST,附上 paymentPayload(客户端所发)和 paymentRequirements(你所公布)。
  3. success 为 false,再次返回 402,并把原因放入 error
  4. success 为 true,完成工作,然后返回 200,并将 PAYMENT-RESPONSE 设为 settle 结果的 base64。

Gonka 使用先付后用流程。不要仅在 verify 通过后就提供资源。/verify 可选且只读。真正转账的是 /settle

你的 402 正文是 x402 v2 的 PaymentRequired 对象。最简可用的 accepts 项:

{
  "scheme": "exact",
  "network": "cosmos:gonka-mainnet",
  "amount": "1000000",
  "asset": "ngonka",
  "payTo": "gonka1yourmerchantaddress…",
  "maxTimeoutSeconds": 60,
  "extra": {
    "name": "GNK",
    "decimals": 9,
    "assetTransferMethod": "signed-tx",
    "paymentFlow": "upfront"
  }
}

为 USDC 再加一项:将 asset 设为 CW-20 地址,decimals 为 6,nameUSDC。把整个 PaymentRequired 对象编为标准 base64 放入请求头。字段列表见 协议

先结算再提供

curl -sS -X POST {{BASE}}/settle \
  -H 'Content-Type: application/json' \
  -d '{
    "x402Version": 2,
    "paymentPayload": { "...from PAYMENT-SIGNATURE..." },
    "paymentRequirements": { "...your accepts entry..." }
  }'

成功时你会得到 transaction(hex 哈希)、payernetworkamount。如需可记入自有账本;链上转账已经到 payTo

协调器会拒绝重复的 TxRawreplayed_payment)。若你有多个副本且客户端会重试,应用层仍应自行防护。

中间件草图

async function requirePayment(req, res, next) {
  const header = req.get("PAYMENT-SIGNATURE");
  const required = paymentRequiredFor(req);
  if (!header) return send402(res, required);
  const paymentPayload = JSON.parse(Buffer.from(header, "base64").toString());
  const settled = await fetch(FACILITATOR + "/settle", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      x402Version: 2,
      paymentPayload,
      paymentRequirements: paymentPayload.accepted,
    }),
  }).then((r) => r.json());
  res.set("PAYMENT-RESPONSE", Buffer.from(JSON.stringify(settled)).toString("base64"));
  if (!settled.success) return send402(res, { ...required, error: settled.errorReason });
  next();
}

定价

GNK1 GNK = 1000000000 ngonka。示例:0.001 GNK → amount: "1000000"
USDC1 USDC = 1000000。示例:$0.01 → amount: "10000"
收款方你的 payTo 地址。协调器不会归集或托管该笔付款。

本主机上的演示路由使用极小金额以便测试。生产金额由你自行决定。

发现

可选:公布付费 URL,方便代理发现。本协调器为其 /demo 提供 GET /discovery/resources。实时目录见下方和 资源列表。你也可以在自有 API 上提供类似列表,或稍后注册到 x402 Bazaar。形状见 HTTP API