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

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

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

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

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

  • 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

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

Blockscout — open-source block explorer, написан на Elixir/Phoenix. Підтримує будь-яку EVM сумісну мережу: Ethereum, Polygon, Arbitrum, Optimism, а також кастомні мережи (Hyperledger Besu, Hardhat, Anvil). Де-факто стандарт для appchain'ів та L2 проектів які хочуть власний explorer без vendor залежності від Etherscan.

Три компоненти системи: indexer (Elixir, пише дані в БД), API (Elixir/Phoenix REST + GraphQL), frontend (Next.js, окремий репозиторій).

Вимоги до інфраструктури

Мінімальні вимоги сильно залежать від навантаження мережі:

Профіль CPU RAM Диск Застосування
Dev/staging 2 vCPU 8 ГБ 50 ГБ SSD Тестова мережа, малий об'єм
Production (small chain) 4 vCPU 16 ГБ 500 ГБ SSD < 1000 транзакцій/день
Production (active chain) 8+ vCPU 32 ГБ 2+ ТБ NVMe > 10000 транзакцій/день

PostgreSQL та сам Blockscout можуть бути на одному сервері для small chain. Для активних мереж — розділяйте: окремий managed PostgreSQL (RDS, Cloud SQL) + Blockscout інстансі.

RPC нода: Blockscout потребує archive node з підтримкою trace_ namespace (Erigon, Besu з --rpc-http-api=TRACE, або Geth з --gcmode=archive). Без трейсів теряється інформація про внутрішні транзакції та token transfers через internal calls.

Docker Compose деплой

Офіційний шлях для більшості деплоїв:

git clone https://github.com/blockscout/blockscout.git
cd blockscout/docker-compose

Основний файл конфігурації — переменні окружения:

# docker-compose/envs/common-blockscout.env

ETHEREUM_JSONRPC_VARIANT=geth            # або besu, erigon
ETHEREUM_JSONRPC_HTTP_URL=http://your-node:8545
ETHEREUM_JSONRPC_TRACE_URL=http://your-node:8545
ETHEREUM_JSONRPC_WS_URL=ws://your-node:8546

DATABASE_URL=postgresql://blockscout:password@db:5432/blockscout

NETWORK=My Network Name
SUBNETWORK=Mainnet
COIN=ETH
COIN_NAME=Ether

# Chain ID
CHAIN_ID=12345

# Block Explorer URL
BLOCKSCOUT_HOST=explorer.yournetwork.com

# API rate limiting (опціонально)
API_RATE_LIMIT=10
API_RATE_LIMIT_HAMMER_REDIS_URL=redis://redis:6379

# Верифікація контрактів
ENABLE_SOURCIFY_INTEGRATION=true
SOURCIFY_SERVER_URL=https://sourcify.dev/server
# Запуск
docker-compose -f docker-compose.yml up -d

# Мониторинг індексації
docker-compose logs -f blockscout | grep "blocks"

Перший запуск починає індексацію з genesis (або з блоку вказаного в FIRST_BLOCK). Для мереж з історією в мільйони блоків індексація займає дні — планіруйте це заранее.

Конфігурація для кастомної мережі

Якщо розворачиваєте для своєї appchain або тестової мережі, потрібно настроїти кілька додаткових параметрів:

# Відключити external price fetching якщо токен не торгується
DISABLE_EXCHANGE_RATES=true

# Інтервал оновлення блоків (мс)
BLOCKSCOUT_ECTO_USE_SSL=false

# Ліміти якщо мережа має нестандартні блоки
BLOCK_TRANSFORMER=base

# Якщо потрібно індексувати з певного блоку (не з genesis)
FIRST_BLOCK=0
LAST_BLOCK=

Для Hyperledger Besu з QBFT:

ETHEREUM_JSONRPC_VARIANT=besu
# Besu вимагає включених API модулів: --rpc-http-api=ETH,NET,TRACE,DEBUG,ADMIN

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

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

Через Sourcify — децентралізований реєстр metadata. Користувач завантажує вихідники + metadata.json, Sourcify верифікує та зберігає. Blockscout підтягує автоматично.

Пряма верифікація через API:

curl -X POST "https://explorer.yournetwork.com/api/v2/smart-contracts/verify/via/flattened-code" \
  -H "Content-Type: application/json" \
  -d '{
    "address": "0xCONTRACT_ADDRESS",
    "compiler_version": "v0.8.20+commit.a1b79de6",
    "source_code": "pragma solidity ^0.8.20;\n...",
    "is_optimization_enabled": true,
    "optimization_runs": 200,
    "contract_name": "MyContract",
    "evm_version": "london"
  }'

Hardhat Verify плагін — автоматична верифікація після деплою:

// hardhat.config.ts
import "@nomicfoundation/hardhat-verify";

const config: HardhatUserConfig = {
  networks: {
    myChain: {
      url: "https://rpc.yournetwork.com",
      chainId: 12345,
    }
  },
  etherscan: {
    apiKey: { myChain: "any-string" },  // Blockscout не вимагає реального ключа
    customChains: [{
      network: "myChain",
      chainId: 12345,
      urls: {
        apiURL: "https://explorer.yournetwork.com/api",
        browserURL: "https://explorer.yournetwork.com",
      }
    }]
  }
};
npx hardhat verify --network myChain 0xCONTRACT_ADDRESS "Constructor Arg1"

Production конфігурація

Nginx reverse proxy

server {
    listen 443 ssl http2;
    server_name explorer.yournetwork.com;

    ssl_certificate /etc/letsencrypt/live/explorer.yournetwork.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/explorer.yournetwork.com/privkey.pem;

    # Frontend (Next.js)
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # Backend API
    location /api {
        proxy_pass http://localhost:4000;
        proxy_set_header Host $host;
        # WebSocket для real-time оновлень
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

PostgreSQL оптимізація

Blockscout активно читає та пише. Ключові настройки postgresql.conf:

max_connections = 200
shared_buffers = 4GB              # 25% від RAM
effective_cache_size = 12GB       # 75% від RAM
maintenance_work_mem = 1GB
checkpoint_completion_target = 0.9
wal_buffers = 64MB
default_statistics_target = 100
random_page_cost = 1.1            # для SSD
work_mem = 50MB

Регулярний VACUUM ANALYZE — Blockscout створює багато dead tuples при re-indexing. Настроїти autovacuum агресивніше чим за умовчанням.

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

# Поточний статус через API
curl https://explorer.yournetwork.com/api/v1/stats | jq

# Перевірка отставання індексатора
curl https://explorer.yournetwork.com/api/v2/main-page/indexing-status
# Відповідь: {"finished_indexing": true, "indexed_blocks_ratio": "1.00"}

Prometheus метрики: Blockscout експортує через /metrics endpoint (Elixir VM метрики + кастомні).

Оновлення Blockscout

# Завантажити нову версію
git pull origin master

# Зупинка
docker-compose down

# Міграції БД (важливо — перед запуском нової версії)
docker-compose run --rm blockscout /app/bin/blockscout eval "Blockscout.ReleaseTasks.create_and_migrate()"

# Запуск нової версії
docker-compose up -d

Завжди читайте CHANGELOG перед оновленням — деякі версії вимагають повного ре-індексингу.

Процес роботи

День 1: настройка сервера, Docker, PostgreSQL, перший запуск Blockscout на тестових даних.

День 2: конфігурація під вашу мережу, настройка Nginx + SSL, тест верифікації контрактів.

День 3: мониторинг індексації на production даних, настройка Prometheus, тест backup процедур.

Дні 4-5: оптимізація продуктивності за результатами нагрузочного тестування, документація для команди.

Усього 3-5 днів включаючи індексацію історії мережі та настройку мониторингу.