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







