360 Secure SkillHub
360 安全技能中心

x402-payments

提供在 Hedera 上用原生 HBAR 实现 x402 按次付费的参考:资源服务器以 HTTP 402 挑战和 PAYMENT-SIGNATURE 重试门控资源,自托管 facilitator 负责 verify/settle,网络费用由独立 ECDSA 账户代付,金额以 tinybars 表示,并附检查清单与参考文档。

hedera-dev
热度 0.00
最近更新 2026-10-18 23:42:51
分类:开发依赖:第三方 API应用场景:API 集成 / 代码生成

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add hedera-dev/hedera-skills/x402-payments
Metadata
name
x402-payments
description
x402 pay-per-use payments on Hedera. Use when gating HTTP resources behind native HBAR payments, wiring a self-hosted Hedera facilitator (verify/settle), building x402ResourceServer / ExactHederaScheme flows, or integrating WalletConnect payment retries (PAYMENT-REQUIRED → PAYMENT-SIGNATURE).

x402 Payments (Hedera)

Pay-per-use pattern: store protected bytes off-chain, record access terms separately (on-chain or config), gate HTTP resources with HTTP 402 + a self-hosted Hedera facilitator that verifies and settles native HBAR transfers.

Buyer → GET protected resource
          ├─ free / public → resource
          └─ paid → 402 PAYMENT-REQUIRED
                → client signs HBAR transfer
                → retry with PAYMENT-SIGNATURE
                → resource server verify + settle via facilitator
                → PAYMENT-RESPONSE + resource

The resource server never holds facilitator keys. Settlement uses a funded ECDSA fee-payer account on the facilitator process.

Quick Reference

Piece Role
Payment asset "0.0.0" — native HBAR; amounts in tinybars (1 HBAR = 1e8)
Resource server @x402/core + ExactHederaScheme → talks to facilitator over HTTP
Facilitator GET /supported, POST /verify, POST /settle, GET /health
Client Request → read 402 → sign → retry with PAYMENT-SIGNATURE (legacy X-PAYMENT also accepted)
Wallet ECDSA Hedera account (e.g. HashPack via WalletConnect / UniversalProvider)

See references/examples.md for server/client snippets. See references/facilitator.md for env vars and settle semantics.

Critical: Facilitator Fee Payer

Hedera x402 settles with native TransferTransactions. The buyer partially signs (authorize buyer → seller). The facilitator must:

  1. Verify the signed payload against payment requirements
  2. Co-sign as the advertised fee payer (/supported)
  3. Pay network fees and submit until SUCCESS

Requires FACILITATOR_ACCOUNT_ID + FACILITATOR_PRIVATE_KEY on a funded ECDSA account — separate from deployer/seller keys. Do not put that key in the resource-server process.

Critical: Prices Are Tinybars

Payment requirements use tinybars. Convert in UIs with 8-decimal helpers; never float.

const TINYBAR_PER_HBAR = 100_000_000n;
// hbar "1.5" → 150_000_000n tinybars

Resource Server Flow (paid resource)

  1. Load access terms for the resource — if missing → 404
  2. If free/public → return the resource
  3. Else build payment requirements: payTo = seller Hedera account id, amount in tinybars, asset 0.0.0, network (e.g. hedera:testnet)
  4. No payment header → 402 with PAYMENT-REQUIRED header + JSON body
  5. With payment header → verifyPayment then settlePayment; only on success return resource + PAYMENT-RESPONSE
const facilitator = new HTTPFacilitatorClient({ url: FACILITATOR_URL });
const server = new x402ResourceServer(facilitator)
  .register(X402_NETWORK, new ExactHederaScheme());
await server.initialize(); // pulls fee-payer from /supported

Client Flow

const first = await fetch(resourceUrl);
if (first.status === 402) {
  const paymentRequired = httpClient.getPaymentRequiredResponse(...);
  const payload = await httpClient.createPaymentPayload(paymentRequired);
  const headers = httpClient.encodePaymentSignatureHeader(payload);
  const paid = await fetch(resourceUrl, { headers });
  // processResponse → resource + settle receipt
}

Machine-to-machine clients use a key-based signer instead of a browser wallet.

Checklist

  • Resource server has no facilitator private key
  • Client and server share the same X402_NETWORK (e.g. hedera:testnet)
  • Amounts are tinybars; asset id is 0.0.0
  • 402 challenge → signed retry → verify → settle → resource only after success
  • Fee-payer account is ECDSA and funded for network fees
  • Facilitator /health OK before testing paid requests
  • payTo is a Hedera account id string (e.g. 0.0.1234), not an EVM address

References