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







