Skip to content

Gas 与限制 ​

合约调用适用两套独立的计量:

  • VM 内部的 fuel——每条 WASM 指令和每个宿主函数都会消耗 fuel;每次调用有一个预算。
  • 交易层面的 gas——发送方支付的费用,单位 uNRO。参见 Gas 与手续费。

调用结束后,消耗的 fuel 换算为 gas 单位:ceil(fuel / NEUROCHAIN_FUEL_PER_GAS_UNIT),至少为 1,默认比率为每 gas 单位 20 000 fuel。随后,为合约调用预付的 50 个单位(GAS_CONTRACT_CALL)会按实际用量退还或补扣。

限制 ​

常量值达到限制时
MAX_CONTRACT_GAS每次顶层调用 1 000 000 fuelfuel 耗尽 → 调用 trap,全部回滚,手续费和 nonce 照常消耗
MAX_BYTECODE_SIZE512 KiB部署被拒绝
MAX_CALL_DEPTH8 层嵌套 call_contractcall_contract 返回 -1
MAX_STATE_GROWTH_BYTES_PER_TX每次调用 64 KiB 新增存储set_storage 不写入任何内容
单次 allocate 请求1 MiB请求被截断

宿主函数的 fuel 价格 ​

宿主函数Fuel常量
get_storage800 + 5 × 值长度FUEL_STORAGE_READ_BASE、FUEL_STORAGE_READ_PER_BYTE
set_storage5 000 + 50 × (键 + 值长度)FUEL_STORAGE_WRITE_BASE、FUEL_STORAGE_WRITE_PER_BYTE

其他宿主函数和普通 WASM 指令按解释器的默认 fuel 开销计量。计划中的 AI 宿主函数将各自拥有一个命名的 fuel 价格。

这些是协议常量;合约和客户端不应依赖其确切值保持不变。