Газ і комісії
Кожна сума в мережі — ціле число в uNRO: 1 NRO = 1 000 000 uNRO.
Комісія — це одиниці газу × ціна газу, де ціна газу задається в uNRO за одиницю:
комісія (uNRO) = gas_units × gas_priceГаз на операцію
| Операція | Одиниці газу | Константа |
|---|---|---|
| Переказ | 21 | GAS_BASE_TRANSFER |
Виклик контракту (адреса .app з даними виклику) | 50 наперед, потім перерахунок за фактом — див. нижче | GAS_CONTRACT_CALL |
| Розгортання контракту | 10 000, фіксовано | DEPLOY_GAS_UNITS |
Передача платного імені (.node, .vault, .agent) | фіксовано 100 uNRO | NFT_TRANSFER_FEE |
| Системні операції (стейкінг, реєстрації, кран, маркери управління) | 0 | — |
За мінімальної ціни газу 1 uNRO переказ коштує 21 uNRO = 0,000021 NRO.
Виклики контрактів
За виклик наперед списується 50 одиниць газу. Потім контракт виконується в WASM-інтерпретаторі з бюджетом 1 000 000 fuel (MAX_CONTRACT_GAS). Після завершення нода переводить фактично витрачений fuel в одиниці газу — ceil(fuel / 20 000), щонайменше 1 — і повертає або доплачує різницю.
Курс задає NEUROCHAIN_FUEL_PER_GAS_UNIT (за замовчуванням 20 000) — так, щоб виклик, який вичерпав увесь fuel, коштував рівно сплачені наперед 50 одиниць. Host-функції, як-от читання і запис сховища, витрачають додатковий fuel; див. Газ і ліміти NeuroWASM.
Якщо контракт перервався або вичерпав fuel, зміни його сховища відкочуються і сума не переказується — але nonce і комісія все одно витрачені, тож невдалий виклик не можна безкоштовно повторювати.
Базова комісія
Протокол підтримує базову комісію, що рухається за попитом, у стилі EIP-1559 з Ethereum:
- Починається з 1 uNRO за одиницю газу і ніколи не падає нижче цієї межі (
MIN_GAS_PRICE). - Після кожного блоку рухається до цілі — половини газового бюджету блоку (5 000 одиниць): вгору, якщо блок використав більше, вниз, якщо менше, щонайбільше на 12,5% за блок. Якщо рухається, то щонайменше на 1 uNRO, тож після навантаження повертається аж до мінімуму.
- Транзакцію з
gas_priceнижче поточної базової комісії відхиляє кожен валідатор. Це перевіряється в консенсусі, а не лише в mempool, тож пропозер не протягне занадто дешеву транзакцію повз інших.
Перед відправленням дізнайтеся поточне значення:
curl -s "$NODE_RPC/api/v1/gas/estimate"{
"base_fee": 1,
"gas_base_transfer": 21,
"gas_contract_call": 50,
"estimated_transfer": 21,
"estimated_contract": 50,
"estimated_transfer_human": "0.000021",
"estimated_contract_human": "0.00005",
"total_burned": 0,
"nft_transfer_fee": 100,
"nft_transfer_fee_human": "0.0001"
}Gateway віддає те саме за адресою $GATEWAY/api/v1/gas/estimate. Вебгаманець надсилає gas_price = base_fee × 1,5, щоб випереджати зростання базової комісії.
Куди йдуть комісії
Після кожного блоку сума його комісій ділиться:
- 50% спалюється (
BURN_RATE_BPS = 5000) і додається до лічильникаtotal_burned. - 50% отримує пропозер блоку.
Плата за реєстрацію імен .app і .vault спалюється повністю; реєстрація .node натомість стає стейком. Див. Адреси.
Бюджет блоку і mempool
| Правило | За замовчуванням | Зміна | Примітки |
|---|---|---|---|
| Газ на блок | 10 000 одиниць | параметр управління max_block_gas | від 1 до 1 000 000 000; зчитується під час старту ноди |
| Транзакцій на блок | 500 | — | MAX_BLOCK_TXS |
| Розмір mempool | 10 000 | NEUROCHAIN_MAX_MEMPOOL | Коли заповнено, нова транзакція витісняє найдешевшу очікувану — лише якщо платить більше |
| Час у mempool | 60 секунд | — | Очікувана транзакція, що не потрапила в блок, відкидається |
| Очікуваних від відправника | 64 | NEUROCHAIN_MAX_PENDING_PER_ACCOUNT | Наступні транзакції з тієї ж адреси відхиляються |
| Заміна за комісією | +10% | NEUROCHAIN_RBF_MIN_BUMP_PCT | Повторне надсилання тих самих (from, nonce) замінює очікувану лише з ціною газу, вищою щонайменше на стільки |
| Мінімальна ціна в mempool | 0 (вимкнено) | NEUROCHAIN_MIN_FEE_PER_GAS | Необов'язковий вхідний поріг понад базову комісію |
Пропозер бере очікувані транзакції за спаданням комісії (транзакції одного відправника — у порядку nonce), пропускає нижчі за базову комісію і зупиняється, коли бюджет блоку вичерпано. Під час вибору кожен переказ рахує як 21 одиницю, а кожен виклик .app — як 50.
Константи
| Константа | За замовчуванням | Значення |
|---|---|---|
UNRO_PER_NRO | 1 000 000 | uNRO в одному NRO |
GAS_BASE_TRANSFER | 21 | Одиниць газу на переказ |
GAS_CONTRACT_CALL | 50 | Одиниць газу наперед за виклик контракту |
DEPLOY_GAS_UNITS | 10 000 | Одиниць газу на розгортання |
MAX_CONTRACT_GAS | 1 000 000 | Бюджет fuel на виклик контракту |
NEUROCHAIN_FUEL_PER_GAS_UNIT | 20 000 | Fuel на одиницю газу під час перерахунку |
MIN_GAS_PRICE | 1 | Мінімум базової комісії, uNRO за одиницю |
MAX_BLOCK_GAS | 10 000 | Одиниць газу на блок |
BURN_RATE_BPS | 5 000 | Частка комісій, що спалюється, у базисних пунктах (50%) |
NFT_TRANSFER_FEE | 100 | Фіксована плата за передачу платного імені, uNRO |