Развёртывание ноды Polygon
Собственная нода Polygon нужна когда публичные RPC перестают быть достаточными: rate limits на Alchemy/Infura режут запросы в пике нагрузки, нет гарантий uptime, и при серьёзной dApp недопустимо зависеть от чужой инфраструктуры. Polygon PoS — это не L2 Ethereum, а sidechain с собственным набором валидаторов и Heimdall/Bor архитектурой.
Архитектура Polygon PoS ноды
Polygon PoS нода состоит из двух компонентов, которые должны работать одновременно:
Heimdall — валидаторный слой (Tendermint-based). Отвечает за: финализацию чекпоинтов на Ethereum mainnet, consensus layer, bridge между Polygon и Ethereum. Работает на порту 26656 (P2P) и 1317 (API).
Bor — execution layer, форк go-ethereum. Именно он исполняет транзакции и смарт-контракты. Совместим с Ethereum JSON-RPC API. Порт 30303 (P2P), 8545 (HTTP RPC), 8546 (WebSocket).
Оба компонента должны быть синхронизированы. Частая ошибка при развёртывании — запуск Bor раньше чем Heimdall дошёл до текущего блока.
Требования к серверу
| Тип ноды | CPU | RAM | Диск | Сеть |
|---|---|---|---|---|
| Full node (archive) | 16+ cores | 64+ GB | 8+ TB NVMe | 1 Gbps |
| Full node (pruned) | 8 cores | 32 GB | 500 GB NVMe | 500 Mbps |
| Sentry node | 4 cores | 16 GB | 200 GB | 250 Mbps |
Archive нода — полная история всех состояний, нужна для eth_getStorageAt на исторических блоках и для аналитики. Pruned — для большинства dApp достаточна.
Polygon chain активна, размер стейта растёт быстро. Через 6 месяцев после деплоя — диск будет значительно более заполнен, планируйте с запасом.
Деплой через официальные скрипты
Polygon поддерживает официальный Ansible playbook:
git clone https://github.com/maticnetwork/node-ansible
cd node-ansible
# Редактируем inventory.yml: указываем IP и SSH ключи
# Выбираем тип: sentry, validator или fullnode
ansible-playbook playbooks/network.yml \
--inventory inventory.yml \
-e "node_type=sentry network_version=mainnet node_name=my-polygon-node"
Ручной деплой (больше контроля):
# Heimdall
git clone https://github.com/maticnetwork/heimdall
cd heimdall && make install
heimdalld init --chain-id heimdall-137
# Скачиваем genesis: https://raw.githubusercontent.com/maticnetwork/heimdall/master/builder/files/genesis-mainnet-v1.json
heimdalld start --rest-server
# Bor (в отдельном процессе)
git clone https://github.com/maticnetwork/bor
cd bor && make bor
bor server --config /path/to/config.toml
Snapshots: экономим время на синхронизации
Синхронизация с нуля — несколько недель. Polygon Foundation публикует snapshots на S3:
# Heimdall snapshot
aria2c -x6 -s6 "https://snapshot-download.polygon.technology/snapshots/heimdall/mainnet/latest.tar.gz"
# Bor snapshot (несколько TB для archive)
aria2c -x6 -s6 "https://snapshot-download.polygon.technology/snapshots/bor/mainnet/..."
aria2c вместо wget — многопоточная загрузка, в 3–5 раз быстрее для больших файлов.
Конфигурация Bor для production
# config.toml
[jsonrpc]
enabled = true
host = "0.0.0.0" # в production — только localhost, перед nginx
port = 8545
[jsonrpc.ws]
enabled = true
port = 8546
[p2p]
maxpeers = 50
[cache]
cache = 4096 # MB, увеличить при большом RAM
Не экспонируйте RPC публично напрямую. Nginx с rate limiting и IP whitelist перед нодой — обязательно. Иначе нода станет публичным RPC и исчерпает ресурсы от чужих запросов.
Мониторинг синхронизации
// Проверка статуса через JSON-RPC
const latestBlock = await provider.getBlockNumber() // ваша нода
const publicBlock = await publicProvider.getBlockNumber() // Alchemy
const lag = publicBlock - latestBlock
if (lag > 10) alert('Node is lagging!')
Heimdall статус: curl localhost:26657/status — поле catching_up: false означает синхронизирована.
Что делается за 1–3 дня
Выбор типа ноды под ваши задачи, деплой Heimdall + Bor на вашем сервере, загрузка и применение snapshots для быстрой синхронизации, настройка systemd сервисов для автозапуска, nginx proxy с базовой защитой, настройка мониторинга (Grafana + Prometheus с метриками Bor/Heimdall), передача endpoint для интеграции в ваше приложение.







