`genesis-manifest.json` определяет **bootstrap-peers** (с кем новый узел синхронизируется при первом запуске). Manifest **одинаков на всех узлах сети** — берём с любого существующего.
[network] CONNECTION ESTABLISHED peer=12D3Koo... label=moscow
[network] CONNECTION ESTABLISHED peer=12D3Koo... label=frankfurt
[network] CONNECTION ESTABLISHED peer=12D3Koo... label=helsinki
[network] heartbeat OK peer=...
```
### 8. Lifecycle нового узла
После запуска узел проходит фазы автоматически:
1.**Bootstrap** (несколько секунд) — подключение к peer-ам manifest, дискавери.
2.**CandidateVdf** — тикает VDF (Verifiable Delay Function), накапливая `vdf_chain_length` до `τ₂ = 20160` окон (≈10 часов wall-clock на M-class CPU).
3.**Registered** — формирует NodeRegistration через `apply_noderegistrations_batch`, попадает в `CandidatePool`.
4.**Active** — на ближайшем selection-окне (`window % 336 == 0`) проходит `apply_selection_event` и появляется в `NodeTable`. С этого момента — полноправный валидатор: per-window VdfReveal + BundledConfirmation + ProposalHeader + эмиссия `13 Ɉ`.
### 9. Регистрация на карте (опционально)
Чтобы новый узел отображался на `/net/` карте `montana.quest`:
#### 9.1. Добавить DNS A-запись через Cloudflare
```bash
# например: <alias>.montana.quest → <new-ip>, DNS-only (не proxied, Reality не работает за CF)
```
#### 9.2. Добавить алиас на Moscow (orchestrator)
```bash
# /root/.ssh/config на Moscow:
Host montana-<alias>-stats
HostName <alias>.montana.quest
User root
IdentityFile /root/.ssh/montana_stats
IdentitiesOnly yes
StrictHostKeyChecking accept-new
ConnectTimeout 6
BatchMode yes
```
#### 9.3. Добавить в `montana-net-pull` arrays + `montana-cities-build` CITIES dict
Файлы:
-`/usr/local/bin/montana-net-pull` — добавить `[<id>]="..."` в SRC/LABEL/REGION/COUNTRY/HOSTING + `for NODE in msk fra fin us <id>;`
После остановки узел перестанет получать NodeRegistration heartbeat, существующие peer-ы через `τ₂` окон уберут его из активного `NodeTable` (cooldown logic).