Газ і ліміти
До виклику контракту застосовуються два окремі лічильники:
- Fuel усередині VM — кожна інструкція WASM і host-функція спалює fuel; виклик має бюджет.
- Газ на рівні транзакції — те, що платить відправник, в uNRO. Див. Газ і комісії.
Після виклику спалений fuel перетворюється на одиниці газу: ceil(fuel / NEUROCHAIN_FUEL_PER_GAS_UNIT), щонайменше 1; за замовчуванням курс — 20 000 fuel за одиницю газу. Передплачені за виклик контракту 50 одиниць (GAS_CONTRACT_CALL) потім повертаються або доплачуються до фактичного значення.
Ліміти
| Константа | Значення | Що відбувається на межі |
|---|---|---|
MAX_CONTRACT_GAS | 1 000 000 fuel на виклик верхнього рівня | Fuel вичерпано → виклик переривається, усе відкочується, комісія й 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 host-функцій
| Host-функція | 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 |
Інші host-функції та звичайні інструкції WASM обліковуються стандартними цінами fuel інтерпретатора. Заплановані AI host-функції отримають кожна свою іменовану ціну fuel.
Це константи протоколу; контрактам і клієнтам не варто покладатися на те, що їхні точні значення не зміняться.