Розгортування 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 днів включаючи індексацію історії мережі та настройку мониторингу.







