测试网 tAX 预付费与结算
为什么需要支付模块?
在去中心化计算网络中,资源的使用必须伴随合理的成本机制,以防止滥用并激励维护者。支付模块是 HyMatrix 为解决以下核心问题而设计的经济枢纽:
- 资源公平分配:通过对计算、存储和网络资源的计费,防止恶意用户通过空置或无效进程占用节点资源。
- 多方激励均衡:系统自动将收取的费用在节点运营者(提供算力)和 VM 开发者(提供应用逻辑)之间进行分配,构建可持续发展的生态。
- 低门槛接入:引入了“每日免费额度”和“第三方代付”机制,降低了新用户体验 DApp 的门槛。
核心原理
支付模块遵循 HIP-3 标准,其运行逻辑可以概括为:“预付充值、实时计费、按需暂停、定期结算”。
1. 预付余额系统 (Prepaid System)
HyMatrix 不直接从钱包扣款,而是采用预付账本模式。用户可以为特定的 受益人(Beneficiary) 存入 tAX 代币。
- 自充值:用户为自己的账户 ID 充值。
- 第三方充值(赞助):项目方或好友可以为某个特定用户充值,使其能够免费使用服务。
2. 计费项目
- 虚拟机创建费 (Spawn Fee):每创建一个新的虚拟机进程时收取,为一次性费用。
- 交易费 (Transaction Fee):当用户向虚拟机发送消息或发起调用时产生。
- 虚拟机运行费 (Residency Fee):这是维持 VM 存活的关键费用。只要虚拟机在节点上运行,就会按天产生租金。
3. 自动停机与恢复
- 停机:若受益人的余额不足以支付下一周期的“虚拟机运行费”,节点会自动将其 VM 切换为
Paused(暂停)状态。 - 恢复:一旦受益人补充了足够的预付余额,VM 可以被重新激活并恢复状态。
节点配置
作为节点运营者,你需要在 config.yaml 中配置支付参数。
配置示例
enablePayment: true # 必须设置为 true 以开启计费
payment:
prvKey: "0x..." # 结算私钥,用于发送结算交易
settlementAddress: "0x0b1A4805..." # 收益接收地址(建议冷钱包)
axToken: "fHQbzw6acg2nqmCqzdr2GFaeoGzcRd0paVTD2kMGyU4" # 支付代币 ID
# --- 费率设置 (单位: 10^-12 tAX) ---
txFee: 10000000000 # 单次交易费 (默认 0.01 tAX)
spawnFee: 100000000000 # 创建 VM 费 (默认 0.1 tAX)
residencyFee: 10000000000 # 虚拟机运行费 (每日 0.01 tAX)
# --- 运营策略 ---
dailyLimit: 5 # 每日每人免费调用次数
developerShareRatio: 5000 # 开发者分成比例 (5000 = 50%)
用户与开发者操作指南
1. 如何充值
用户需要通过向节点的充值地址发送 Transfer 消息。在消息的标签(Tags)中,包含 Beneficiary 字段。
使用 SDK 充值的伪代码:
// 给用户 A 充值 50 个 tAX
tags := []Tag{
{Name: "Action", Value: "Transfer"},
{Name: "Recipient", Value: "节点的收款地址"},
{Name: "Quantity", Value: "50000000000000"}, // 50 tAX
{Name: "Beneficiary", Value: "用户 A 的 AccountID"},
}
注意:如果没有 Beneficiary 字段,将为发起该转账的地址进行充值。
2. 如何查看余额与费用
可以通过访问节点提供的 API 接口进行查询:
| 功能 | 接口路径 | 说明 |
|---|---|---|
| 查询余额 | GET /pay/beneficiaryTotal/:id | 查看受益人当前可用余额 |
| 查询余额来源 | GET /pay/beneficiaryBreakdown/:id | 查看该受益人的资金是由哪些赞助者分别提供的 |
| 查询赞助总额 | GET /pay/sponsorTotal/:sponsor | 查看特定赞助者累计为所有受益人充出的资金总额 |
| 查询赞助明细 | GET /pay/sponsorBreakdown/:sponsor | 查看特定赞助者为每个受益人分别充值的金额列表 |
| 查询节点费率 | GET /pay/info | 查看该节点收取的运行费和交易费配置 |
| 查询待扣费 | GET /pay/totalPending/:id | 查看已产生但尚未在结算周期中扣除的费用 |
3. 费用不足的反馈 (HTTP 402)
如果用户余额不足,节点会返回 402 Payment Required 错误。
开发者可以在前端捕获此错误,并引导用户通过错误信息中提供的 payTo(收款地址)和 amount(所需金额)进行充值。