Gas 与手续费
OXN 用 gas 计量执行成本,与以太坊完全一致。你发过以太坊 dApp 的经验大部分依然适用。但有几个实际差异你必须正确处理,否则交易会以奇怪的方式失败。
简短版
- Gas 以 BLUAI 计价。 标准
gasPrice × gasUsed公式。 - 每笔交易都要显式设置
gasLimit,不要依赖客户端自动估算。推荐默认值见下方。 - 测试网上
gasPrice: 0被接受。 用于测试、以及余额不够付 gas 的账户场景。 - 退还机制与以太坊一致。 未消耗的 gas 会退还——限额设大一些是安全的。
- 加密调用比明文调用消耗更多 gas,因为多了解密与再加密工作。做预算时注意。
手续费模型
费用按标准 EVM 方式计算:
fee = gasUsed × gasPrice
gasPrice 和 gasLimit 都由发送方在每笔交易上设置。未消耗的 gas 会退还(标准 EVM 行为)。费用从发送方的 BLUAI 余额扣除。
OXN 当前使用legacy 交易费用模型(与以太坊 EIP-1559 的 base fee + priority fee 相对)。你写的所有费用逻辑都应假设 legacy 语义。
显式设置 gasLimit
OXN 上每笔交易都应显式设置 gasLimit,而不是依赖客户端自动估算。加密 calldata 意味着 gateway 无法便宜地预览加密交易的执行,所以 eth_estimateGas 不是推荐路径——自己固定值即可。未消耗的 gas 会退还(标准 EVM 行为),限额设大一些是安全的。
ethers.js 里的写法:
await contract.transfer(recipient, amount, { gasLimit: 500_000n });
Foundry 里:
forge create ... --gas-limit 3000000
cast send ... --gas-limit 500000
推荐默认值
| 调用类型 | 推荐 gasLimit |
|---|---|
| 原生代币转账 | 100_000n |
ERC-20 transfer / approve | 500_000n |
ERC-721 mint / transfer | 500_000n |
| 简单合约部署(小 ERC-20) | 3_000_000n |
| 大合约部署 | 5_000_000n+ |
| 复杂组合调用 | 1_000_000n |
这些是保守的上界。未消耗的 gas 会退还,所以设大一些是安全的。设得太小会 out of gas revert。
测试网 gasPrice: 0
测试网链层接受 gasPrice: 0 的交易。在两种场景下有用:
新充值账户。 一个全新账户只有水龙头给的 10 TBLUAI,付不起合约部署要的 100 wei × 3M gas。设 gasPrice: 0 绕过。
测试。 不用建模费用动态时,确定性测试更容易。
生产流量不要用 gasPrice: 0。主网会要求正 fee。
为什么加密调用消耗更多 gas
一笔加密交易在 enclave 内多走几步:
- 信封解析。 运行时解析 CBOR wrapper。
- X25519 密钥派生。 从调用者临时公钥和 enclave 私钥派生对称密钥。
- Deoxys-II 解密。 解密 calldata。
- 返回数据加密。 用会话密钥加密响应回给调用者。
每一步在标准 EVM 执行之上都要消耗一些 gas。一个经验值:加密交易比同等以太坊明文交易多消耗大约 20–50k gas,具体取决于 payload 大小。
手续费相关陷阱
以前能跑的调用突然 out of gas。 提高 gasLimit。如果同样调用之前能跑现在跑不动,可能是运行时最近升级微调了 gas 成本。把默认值重置到上面表中的上界。
insufficient balance to pay fees。 你的账户付不起 gasLimit × gasPrice。要么去水龙头再领 BLUAI,要么测试网上设 gasPrice: 0。注意: OXN 网页钱包在某些版本里把这个错误误标为 "Invalid address"——先看底层错误再假定地址有问题。
Deposit / withdraw 操作也要 gas。 在两种地址格式之间移动价值是一笔改状态的交易。默认预算 500_000n。
退还是自动的。 你不需要手动索回未消耗的 gas。如果你设 gasLimit: 5_000_000n 但交易实际用 800_000,只按 800_000 × gasPrice 结算。
尚未支持的
- EIP-1559 费用模型——没有
maxFeePerGas/maxPriorityFeePerGas。用 legacygasPrice。 - 费用代付 / gas 赞助——协议内没有内置的 meta-transaction 中继。应用可以在其上自建。
下一步
- 原生代币(BLUAI)——付 gas 的东西
- EVM 兼容性——与以太坊的其他差异
- 调试与排查——诊断失败交易