关于 x402-payments
x402-payments 是用于在 Hedera 上以原生 HBAR 转账实现 HTTP 按次付费资源的技能,涵盖 402 挑战、客户端签名重试及 Facilitator 验证结算,并要求资源服务器不持有 Facilitator 密钥。
主要功能
- 01HTTP 402 付款流程
- 02原生 HBAR 结算
- 03Facilitator 验证与结算
- 04以 tinybar 标价
- 05客户端签名与重试模式
适用场景
- 01为受保护的 HTTP 资源收费
- 02构建处理 402 挑战的客户端
- 03将结算密钥与资源服务器隔离
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ hedera-dev/ hedera-skills --skill x402-payments安装后在 Claude Code 中输入/x402-payments确认已加载。
附带文件references/examples.mdreferences/facilitator.md
详细介绍
x402 付款(Hedera)
按使用量付费模式:将受保护的字节存储在链下,单独记录访问条款(链上或配置中),并通过 HTTP 402 和可自托管的 Hedera 协调器保护 HTTP 资源;该协调器负责验证和结算原生 HBAR 转账。
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
资源服务绝不持有协调器密钥。结算使用协调器进程中已注资的 ECDSA 费用付款账户。
快速参考
| 组成部分 | 作用 |
|---|---|
| 付款资产 | "0.0.0" — 原生 HBAR;金额以 tinybar 计(1 HBAR = 1e8) |
| 资源服务 | @x402/core + ExactHederaScheme → 通过 HTTP 与协调器通信 |
| 协调器 | GET /supported、POST /verify、POST /settle、GET /health |
| 客户端 | 请求 → 读取 402 → 签名 → 使用 PAYMENT-SIGNATURE 重试(也接受旧版 X-PAYMENT) |
| 钱包 | ECDSA Hedera 账户(例如通过 WalletConnect / UniversalProvider 使用 HashPack) |
服务器/客户端代码片段见 references/examples.md。环境变量和结算语义见 references/facilitator.md。
重要:协调器费用付款方
Hedera x402 使用原生 TransferTransaction 进行结算。买方进行部分签名(授权买方向卖方付款)。协调器必须:
- 根据付款要求验证已签名的载荷
- 作为公布的费用付款方(
/supported)共同签名 - 支付网络费用并提交交易,直到状态为
SUCCESS
需要在已注资的 ECDSA 账户上设置 FACILITATOR_ACCOUNT_ID + FACILITATOR_PRIVATE_KEY——该账户应与部署者/卖方密钥分开。不要将此密钥放入资源服务进程中。
重要:价格以 tinybar 计
付款要求使用 tinybar。在 UI 中使用 8 位小数的辅助函数进行转换;切勿使用浮点数。
const TINYBAR_PER_HBAR = 100_000_000n;
// hbar "1.5" → 150_000_000n tinybars
资源服务流程(付费资源)
- 加载资源的访问条款——如果缺失 → 404
- 如果免费/公开 → 返回资源
- 否则构建付款要求:
payTo= 卖方 Hedera 账户 ID,amount以 tinybar 计,资产为0.0.0,网络(例如hedera:testnet) - 没有付款标头 → 返回带有
PAYMENT-REQUIRED标头和 JSON 正文的 402 - 有付款标头 → 执行
verifyPayment,然后执行settlePayment;仅在成功后返回资源和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
客户端流程
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
}
机器对机器客户端使用基于密钥的签名器,而不是浏览器钱包。
检查清单
- 资源服务没有协调器私钥
- 客户端和服务器使用相同的
X402_NETWORK(例如hedera:testnet) - 金额以 tinybar 计;资产 ID 为
0.0.0 - 402 挑战 → 签名后重试 → 验证 → 结算 → 仅在成功后返回资源
- 费用付款账户为 ECDSA 账户,且已注资以支付网络费用
- 测试付费请求前,确认协调器
/health正常 -
payTo是 Hedera 账户 ID 字符串(例如0.0.1234),而非 EVM 地址
参考资料
- references/examples.md — 资源服务接线配置、客户端重试循环、tinybar 辅助函数
- references/facilitator.md — 端点、环境变量、费用付款方角色
- x402 文档
@x402/hedera
评论
支持 Markdown