跳到主要内容

Gas 与手续费

OXN 用 gas 计量执行成本,与以太坊完全一致。你发过以太坊 dApp 的经验大部分依然适用。但有几个实际差异你必须正确处理,否则交易会以奇怪的方式失败。

简短版

  • Gas 以 BLUAI 计价。 标准 gasPrice × gasUsed 公式。
  • 每笔交易都要显式设置 gasLimit,不要依赖客户端自动估算。推荐默认值见下方。
  • 测试网上 gasPrice: 0 被接受。 用于测试、以及余额不够付 gas 的账户场景。
  • 退还机制与以太坊一致。 未消耗的 gas 会退还——限额设大一些是安全的。
  • 加密调用比明文调用消耗更多 gas,因为多了解密与再加密工作。做预算时注意。

手续费模型

费用按标准 EVM 方式计算:

fee = gasUsed × gasPrice

gasPricegasLimit 都由发送方在每笔交易上设置。未消耗的 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 / approve500_000n
ERC-721 mint / transfer500_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 内多走几步:

  1. 信封解析。 运行时解析 CBOR wrapper。
  2. X25519 密钥派生。 从调用者临时公钥和 enclave 私钥派生对称密钥。
  3. Deoxys-II 解密。 解密 calldata。
  4. 返回数据加密。 用会话密钥加密响应回给调用者。

每一步在标准 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。用 legacy gasPrice
  • 费用代付 / gas 赞助——协议内没有内置的 meta-transaction 中继。应用可以在其上自建。

下一步