Розгортання кастомного блок-експлорера

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

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

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

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1308
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1221
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    921
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1149
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    612
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    886

Розгортування кастомного блок-експлорера

Стандартне питання: зачем свій експлорер, якщо є Etherscan? Відповіді: приватна EVM-мережа (L2, корпоративний сайдчейн), брандований інтерфейс, кастомні дані (decoded events, protocol-specific метрики), контроль над індексацією. Для публічних мереж — в основному брендинг та кастомізація. Для приватних мереж — єдиний варіант.

Вибір базового рішення

Не потрібно писати блок-експлорер з нуля — існує кілька open source проектів з різними trade-off:

Blockscout — найзріліший і функціональний. Використовується Gnosis Chain, Polygon, десятками L2. Написаний на Elixir/Phoenix, PostgreSQL. Підтримує EVM, ERC-20/721/1155, token tracking, decoded transactions, API. Складний у настройці, вимагає ресурсів, але production-proven.

Otterscan — легковесний, запускається як frontend-only поверх Archive ноди з Erigon (вимагає otterscan-compatible RPC API). Не потрібна окрема база даних. Добре підходить для development мереж і невеликих production.

Sirato (ex-Web3Labs Explorer) — комерційний з open source Community Edition. Хороша підтримка Hyperledger Besu.

Самописний на основі The Graph — якщо потрібна максимальна кастомізація протокол-специфічних даних.

Для більшості EVM-мереж вибір між Blockscout (повнофункціональний) і Otterscan (простий і швидкий у деплоі).

Розгортування Blockscout

Архітектура

Ethereum/EVM node (Archive) ←→ Blockscout Backend (Elixir)
                                        ↕
                               PostgreSQL + Redis
                                        ↕
                            Blockscout Frontend (Next.js)

Вимоги до ноди

Blockscout вимагає archive ноду з включеним trace API:

  • Geth: --gcmode=archive --http.api=eth,net,web3,debug,trace
  • Erigon: за замовчуванням архівна, --private.api.addr=0.0.0.0:9090
  • Nethermind: --JsonRpc.EnabledModules=Eth,Subscribe,Trace,TxPool,Web3,Personal,Proof,Net,Parity,Health

Без trace API не будуть працювати internal transactions і token transfers з internal calls.

Docker Compose деплой

# docker-compose.yml
services:
  db:
    image: postgres:15
    environment:
      POSTGRES_DB: blockscout
      POSTGRES_USER: blockscout
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - postgres-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U blockscout"]
      interval: 10s

  redis:
    image: redis:7-alpine
    command: redis-server --save "" --appendonly no

  backend:
    image: blockscout/blockscout:latest
    depends_on:
      db: { condition: service_healthy }
      redis: { condition: service_started }
    environment:
      DATABASE_URL: postgresql://blockscout:${DB_PASSWORD}@db:5432/blockscout
      ETHEREUM_JSONRPC_HTTP_URL: http://host.docker.internal:8545
      ETHEREUM_JSONRPC_TRACE_URL: http://host.docker.internal:8545
      ETHEREUM_JSONRPC_WS_URL: ws://host.docker.internal:8546
      CHAIN_ID: "1"                        # ваш chain ID
      COIN: ETH                            # нативний токен
      COIN_NAME: Ether
      NETWORK: Ethereum
      SUBNETWORK: Mainnet
      LOGO: /images/blockscout_logo.svg   # кастомний логотип
      REDIS_URL: redis://redis:6379
      SECRET_KEY_BASE: ${SECRET_KEY_BASE} # 64-char random string
      PORT: 4000
    ports: ["4000:4000"]
    command: sh -c "mix do ecto.create, ecto.migrate && mix phx.server"

  frontend:
    image: ghcr.io/blockscout/frontend:latest
    environment:
      NEXT_PUBLIC_API_HOST: http://backend:4000
      NEXT_PUBLIC_APP_HOST: http://localhost:3000
      NEXT_PUBLIC_NETWORK_NAME: "My Network"
      NEXT_PUBLIC_NETWORK_SHORT_NAME: "MyNet"
      NEXT_PUBLIC_NETWORK_ID: "1"
      NEXT_PUBLIC_NETWORK_CURRENCY_NAME: Ether
      NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL: ETH
      NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS: "18"
    ports: ["3000:3000"]

Кастомізація

Blockscout 6.x розділений на backend (Elixir) і frontend (Next.js) — це спрощує кастомізацію UI. Frontend змінні окруження управляють:

# Брендинг
NEXT_PUBLIC_NETWORK_LOGO=/logo.png
NEXT_PUBLIC_NETWORK_ICON=/icon.png
NEXT_PUBLIC_COLOR_THEME_DEFAULT=dark

# Функціональність
NEXT_PUBLIC_IS_TESTNET=false
NEXT_PUBLIC_MARKETPLACE_ENABLED=true  # dApp каталог
NEXT_PUBLIC_STATS_ENABLED=true        # статистика мережі

Для глибокої кастомізації — fork frontend репозиторія і правка React компонентів.

Розгортування Otterscan (спрощений варіант)

Otterscan не вимагає окремої БД — читає дані напрямки з Erigon через розширений RPC:

# Erigon з otterscan API
erigon --chain=mainnet \
  --private.api.addr=0.0.0.0:9090 \
  --http \
  --http.api=eth,erigon,ots,web3,net,debug,trace

# Otterscan frontend
docker run --rm -p 5100:80 \
  -e ERIGON_URL=http://your-erigon-host:8545 \
  otterscan/otterscan:latest

Готово. Але функціональність значно беднішa за Blockscout — немає token трекера, немає API, немає verified contracts.

Продуктивність індексації

Blockscout при першому запуску індексує всю історію ланцюга. Для mainnet Ethereum — тижні. Для молодої приватної мережі — години. Параметри для прискорення:

INDEXER_BLOCKS_BATCH_SIZE=100   # блоків за один batch (дефолт 10)
INDEXER_RECEIPTS_BATCH_SIZE=250
INDEXER_CONCURRENCY=5           # паралельних воркерів (залежить від RPC лімітів)

Моніторинг індексації

-- Поточний статус індексації
SELECT number FROM blocks ORDER BY number DESC LIMIT 1;

-- Пропущені блоки (блоки без транзакцій НЕ пропущені, це нормально)
SELECT * FROM missing_block_ranges LIMIT 20;

-- Розмір бази даних
SELECT pg_size_pretty(pg_database_size('blockscout'));

Верифікація контрактів

Blockscout підтримує верифікацію контрактів через кілька методів:

Hardhat/Foundry плагін — автоматична верифікація при деплоі, якщо вказати API ключ Blockscout:

// hardhat.config.ts
etherscan: {
  apiKey: { myNetwork: "any-string" }, // Blockscout приймає будь-який ключ
  customChains: [{
    network: "myNetwork",
    chainId: YOUR_CHAIN_ID,
    urls: {
      apiURL: "http://your-blockscout/api",
      browserURL: "http://your-blockscout",
    },
  }],
}

Sourcify інтеграція: Blockscout може перевіряти через Sourcify — децентралізований реєстр вихідників. Для публічних мереж це бажано — верифікація зберігається не тільки у вас.

Масштабування

При зростанні нагрузки (багато користувачів, велика ланцюг):

  • Read replica PostgreSQL для API запитів
  • PgBouncer для connection pooling
  • CDN для статики frontend
  • Кілька backend інстансів за load balancer (stateless частина)
  • Redis Cluster для кешей

Орієнтовні терміни: розгортування Blockscout для нової приватної мережі — 3–5 днів. Для існуючої мережи з історичною індексацією і кастомним UI — 1–2 тижні.