Реалізація розрахунку та настройки Gas Fee у мобільному криптогаманці
Gas fee—не просто цифра в інтерфейсі. Це баланс між швидкістю підтвердження та вартістю. Мобільний гаманець повинен пропонувати розумні значення за умовчанням та одночасно давати контроль тим, хто його хоче.
Звідки брати актуальний gasPrice
Для legacy-транзакцій (до EIP-1559) або мереж без підтримки EIP-1559 (BNB Chain за умовчанням): eth_gasPrice повертає медіанний gasPrice з останніх блоків. Це відправна точка.
Для Ethereum Mainnet та мереж з EIP-1559—eth_feeHistory(10, "latest", [10,50,90]) дає percentile-розподіл priority fee за останні 10 блоків. Це основа для розрахунку slow/average/fast.
// Android — web3j: отримати feeHistory
val feeHistory = web3j.ethFeeHistory(10, DefaultBlockParameterName.LATEST, listOf(10.0, 50.0, 90.0)).send()
val baseFee = feeHistory.feeHistory.baseFeePerGas.last() // в wei
val slowPriorityFee = feeHistory.feeHistory.reward[0][0] // 10-й percentile
val avgPriorityFee = feeHistory.feeHistory.reward[0][1] // 50-й percentile
val fastPriorityFee = feeHistory.feeHistory.reward[0][2] // 90-й percentile
Для Polygon з його спайками gasPrice рекомендую використовувати Gas Station API: https://gasstation.polygon.technology/v2—він враховує локальну специфіку мережі.
Три режими: Slow / Average / Fast
Стандартна схема:
| Режим | Base Fee | Priority Fee | Очікуване час |
|---|---|---|---|
| Повільно | base + 0% | 10-й percentile | 3–5 хвилин |
| Середнє | base + 10% | 50-й percentile | ~30 секунд |
| Швидко | base + 20% | 90-й percentile | ~15 секунд |
maxFeePerGas = baseFee * multiplier + priorityFee. Користувач вибирає режим—програма автоматично перераховує итогову вартість у USD.
Кастом режим для продвинутих користувачів
Режим «Кастом»—поля для введення maxFeePerGas та maxPriorityFeePerGas у Gwei. Обов'язкова валідація:
-
maxPriorityFeePerGas <= maxFeePerGas -
maxFeePerGas >= поточний baseFee(інакше транзакція зависнеме) - Попередження, якщо значення занадто занижені: «Транзакція може не підтвердитися кілька годин»
Вводити значення у Gwei зручніше, ніж у Wei. Конвертація: 1 Gwei = 10^9 Wei.
Estimation gasLimit
eth_estimateGas обов'язковий для ERC-20 transfers та контрактних вызовів. Повертає ориентировочний gasLimit—рекомендується помножити на 1.2 для запасу. Для ETH transfer—фіксований 21000 gas.
Якщо eth_estimateGas повертає помилку execution reverted—транзакція гарантовано провалиться. Показати користувачу помилку до підтвердження, не давати підтверджувати.
Сроки: 2–3 дні: polling feeHistory, розрахунок трьох режимів, UI вибору швидкості з відображенням вартості в USD, кастомний режим з валідацією, estimation gasLimit.







