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 fuel | fuel 耗尽 → 调用 trap,全部回滚,手续费和 nonce 照常消耗 |
MAX_BYTECODE_SIZE | 512 KiB | 部署被拒绝 |
MAX_CALL_DEPTH | 8 层嵌套 call_contract | call_contract 返回 -1 |
MAX_STATE_GROWTH_BYTES_PER_TX | 每次调用 64 KiB 新增存储 | set_storage 不写入任何内容 |
单次 allocate 请求 | 1 MiB | 请求被截断 |
宿主函数的 fuel 价格
| 宿主函数 | Fuel | 常量 |
|---|---|---|
get_storage | 800 + 5 × 值长度 | FUEL_STORAGE_READ_BASE、FUEL_STORAGE_READ_PER_BYTE |
set_storage | 5 000 + 50 × (键 + 值长度) | FUEL_STORAGE_WRITE_BASE、FUEL_STORAGE_WRITE_PER_BYTE |
其他宿主函数和普通 WASM 指令按解释器的默认 fuel 开销计量。计划中的 AI 宿主函数将各自拥有一个命名的 fuel 价格。
这些是协议常量;合约和客户端不应依赖其确切值保持不变。