Розробка системи прогнозування цін на газ в Ethereum
Користувач хоче відправити транзакцію, але не знає, скільки вона коштуватиме через 30 хвилин або 2 години. Проста відповідь «дивись на поточний baseFee» не працює — він змінюється кожні 12 секунд і на довгих горизонтах марний. Ми розробляємо системи прогнозування газових цін під ключ для DeFi-проєктів, використовуючи ML та on-chain аналіз. Наш досвід — понад 5 років, понад 10 реалізованих проєктів. Система збирає історичні дані за кілька місяців, будує модель на базі XGBoost або Prophet і віддає прогноз через REST API. Ми надаємо документацію, навчання та підтримку після впровадження. Гарантуємо точність прогнозів та інтеграцію у ваш стек. Отримайте консультацію щодо вибору моделі прогнозування для вашого проєкту.
Як влаштований gas pricing після EIP-1559?
Механізм gas став двокомпонентним:
-
baseFee — алгоритмічно визначувана базова комісія, що спалюється назавжди. Змінюється максимум на ±12.5% від блоку до блоку залежно від того, чи був попередній блок заповнений більш або менш ніж на 50% (
target_gas_used = block_gas_limit / 2). -
maxPriorityFee(tip) — чайові валідатору. Користувач встановлює сам, ринок визначає мінімальний прийнятний рівень. -
maxFeePerGas— максимум, який користувач готовий заплатити. Фактично сплачуєтьсяbaseFee + min(tip, maxFeePerGas - baseFee).
Формула зміни baseFee:
baseFee_new = baseFee_old * (1 + 0.125 * (gas_used - target_gas) / target_gas) Це ключове: baseFee детерміновано обчислюється з on-chain даних. Якщо знаєш gas utilization кожного блоку, можна точно реконструювати історичну baseFee та будувати модель. Детальніше — у специфікації EIP-1559.
Які дані потрібні для прогнозування?
Мінімальний набір даних для кожного блоку:
interface BlockGasData {
blockNumber: bigint;
timestamp: number;
baseFeePerGas: bigint;
gasUsed: bigint;
gasLimit: bigint;
utilizationRate: number; // gasUsed / gasLimit
// з транзакцій у блоці:
medianPriorityFee: bigint;
p25PriorityFee: bigint;
p75PriorityFee: bigint;
p95PriorityFee: bigint;
txCount: number;
mempoolSizeAtBlock?: number; // якщо є доступ до mempool даних
} Покрокова інструкція зі збору даних
- Підключіть архівний вузол Ethereum (Alchemy/QuickNode Archive) або використовуйте публічні датасети (Dune Analytics, BigQuery).
- Налаштуйте WebSocket на
newHeadsі для кожного блоку додатково запитуйтеeth_getBlockByNumberз прапорцемtrueдля отримання транзакцій. - Збирайте дані мінімум за 3–6 місяців — цього достатньо для захоплення різних ринкових умов (bull/bear, NFT-mints).
- Опціонально: підпишіться на mempool через Mempool.space API або Blocknative для більш точного короткострокового прогнозу.
Як працює короткостроковий прогноз (1–10 блоків, ~12–120 секунд)?
Детермінована модель: наступна baseFee обчислюється точно з поточної плюс поточного utilization. На 5–10 блоків можна застосовувати марковський ланцюг на основі історичних патернів utilization.
def predict_next_basefee(current_basefee: int, utilization: float) -> int:
change = 0.125 * (utilization - 0.5) # -0.0625 to +0.0625
return int(current_basefee * (1 + change))Це детерміновано для наступного блоку. Для горизонту 5–10 блоків використовуємо Monte Carlo симуляцію з розподілом utilization з історичних даних.
Як працює середньостроковий прогноз (10 хв – 2 години)?
Тут детермінізм закінчується, починається ML. XGBoost / LightGBM з часовими ознаками добре працюють для tabular даних:
- Фічі: поточна baseFee, rolling average за 10/30/60 блоків, time of day (sin/cos encoding), day of week, pending tx count у mempool, останній utilization trend
- Target: baseFee через N блоків
LSTM / Transformer — краще вловлюють довгострокові патерни, але складніші в обслуговуванні. Для практичної системи часто вистачає gradient boosting.
Метрика якості: не RMSE, а практична — який % часу користувач, який поставив recommended gas, потрапив у наступний блок vs. переплатив vs. застряг.
Як працює довгостроковий прогноз (2–48 годин)?
На таких горизонтах домінує часова сезонність. Prophet (Facebook) добре справляється з добовими та тижневими патернами:
from prophet import Prophet
model = Prophet(
daily_seasonality=True,
weekly_seasonality=True,
changepoint_prior_scale=0.05
)
model.fit(df[["ds", "y"]]) # ds=timestamp, y=basefee_gwei
forecast = model.predict(future_df)Практична точність на 24h горизонті: ±30–50% від медіанного значення. Достатньо, щоб дати пораду «завтра вранці UTC газ буде значно нижчим, ніж зараз». Детальніше — Prophet.
Таблиця 1: Порівняння моделей прогнозування
| Горизонт | Метод | Фічі | Точність | Застосування |
|---|---|---|---|---|
| 1–10 блоків | Детермінована + Monte Carlo | Поточна baseFee, utilization | Детермінована для 1 блоку, ±5% для 10 блоків | Real-time рекомендації |
| 10 хв – 2 год | XGBoost / LightGBM | Часові ознаки, mempool | ±10–20% | DeFi-трейдинг, арбітраж |
| 2–48 год | Prophet | Сезонність, тренд | ±30–50% | Планування транзакцій, стейкінг |
Таблиця 2: Порівняння джерел даних
| Джерело | Тип | Вартість | Затримка | Обсяг даних |
|---|---|---|---|---|
| Alchemy Archive | RPC | $$ (за трафіком) | Блок (12 с) | Повні дані |
| QuickNode Archive | RPC | $$ (за трафіком) | Блок (12 с) | Повні дані |
| Dune Analytics | SQL-датасет | $ (підписка) | Відкладений (години) | Історичні дані |
| BigQuery | SQL-датасет | $ (за обсягом) | Відкладений (дні) | Історичні дані |
| Mempool.space | API | Безкоштовно (обмеження) | Real-time pending | Mempool дані |
Рекомендації для конкретних сценаріїв
Система повинна конвертувати прогноз у actionable рекомендації:
interface GasRecommendation {
scenario: "fast" | "standard" | "economy";
maxFeePerGas: bigint; // в wei
maxPriorityFee: bigint; // в wei
estimatedInclusionTime: number; // секунди
confidence: number; // 0–1
usdCostFor21000Gas: number; // для простого transfer
}Economy сценарій: «якщо не поспішаєте — зачекайте до UTC 04:00, gasWei буде ~40% від поточного». Використовуємо історичні перцентилі для годинних сегментів.
API та інтеграція
Результати прогнозування віддаємо через REST API:
GET /v1/gas/current — поточні ціни + короткостроковий прогноз
GET /v1/gas/forecast?hours=24 — прогноз на період
GET /v1/gas/recommend?speed=economy — рекомендація для сценарію
WS /v1/gas/stream — оновлення кожен блокКешуємо результати: поточні дані — TTL 12 сек (один блок), короткостроковий прогноз — TTL 1 хв, довгостроковий — TTL 15 хв. Redis.
Що входить у роботу
- Документація архітектури та API (Swagger/OpenAPI)
- Доступ до дашборду моніторингу точності прогнозів (Grafana)
- Навчання команди замовника роботі з системою
- Технічна підтримка протягом 1 місяця після впровадження
- Інтеграція з існуючою інфраструктурою (cloud, CI/CD)
Реалістичний термін розробки системи з ML прогнозуванням та API: 8–12 тижнів. Вартість розраховується індивідуально. Зв'яжіться з нами для обговорення вашого проєкту — ми підготуємо оцінку за 2 дні.







