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

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска 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-offs:

Blockscout — самый зрелый и функциональный. Используется Gnosis Chain, Polygon, десятками L2. Написан на Elixir/Phoenix, PostgreSQL. Поддерживает EVM, ERC-20/721/1155, токен трекинг, 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

Готово. Но функциональность значительно беднее 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'));

Verified Contracts

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 недели.