Разработка системы предсказания газа

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1306 услуг
Разработка системы предсказания газа
Средний
~3-5 дней
Часто задаваемые вопросы

Направления блокчейн-разработки

Этапы блокчейн-разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1309
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1222
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    922
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1151
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    614
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    887

Разработка системы прогнозирования газа

Реальная задача звучит так: пользователь хочет выполнить транзакцию, ему нужно знать, сколько это будет стоить через 30 минут, через 2 часа и через 12 часов. Простой ответ "смотри на текущий baseFee" не работает — он меняется каждые 12 секунд и на длинных горизонтах бесполезен. Нужна система, которая предсказывает будущие gas prices с разумной точностью для практических решений.

Как устроен gas pricing на Ethereum (EIP-1559)

После EIP-1559 в August 2021 механизм 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 и строить модель.

Сбор данных

Минимальный набор данных для каждого блока:

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 данным
}

Исторические данные: для обучения модели нужны данные как минимум за 3–6 месяцев (разные рыночные условия, bull/bear периоды, события типа NFT mints и token launches которые создавали gas spikes). Быстрее получить через Alchemy/QuickNode Archive API или через публичные датасеты (Dune Analytics, BigQuery Ethereum dataset от Google).

Real-time данные: WebSocket подписка на newHeads, для каждого блока дополнительно запрашиваем eth_getBlockByNumber с true для получения транзакций (нужны priority fees). На загруженных сетях — это существенный объём данных, нужен rate-limit-aware polling.

Mempool данные — опциональный, но ценный сигнал. Pending транзакции показывают "давление спроса" до конфирмации. Доступен через eth_getFilterChanges или Mempool.space API, Blocknative streaming.

Временные паттерны

Gas prices имеют выраженную сезонность:

Внутрисуточная: активность в UTC 13:00–21:00 (пересечение EU + US business hours) стабильно выше чем UTC 02:00–10:00 (Asia ночь + US ночь). Разница может быть 3–5x на baseFee.

День недели: пятница и выходные — пики NFT и gaming активности. Понедельник–среда — DeFi и institutional операции.

Событийные пики: major NFT mint, token airdrop claim, protocol launch — газ может вырасти в 10–50x за несколько минут. Предсказать конкретный spike невозможно, но можно детектировать его начало и быстро обновлять прогноз.

Модели прогнозирования

Краткосрочный прогноз (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, recent 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 газ будет значительно ниже чем сейчас".

Рекомендации для конкретных сценариев

Система должна конвертировать прогноз в 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.

Реалистичный срок разработки системы с ML прогнозированием и API: 8–12 недель.