Montana — узел (genesis bootstrap, без сетевого слоя) ====================================================== Узел установлен через install-local-mac.sh и запущен через launchd: • работает в фоне 24/7 • переживает закрытие Terminal, logout, перезагрузку Mac • автоматически рестартует при падении • логи пишутся в data/logs/montana.log + montana.err.log Identity сгенерирован при установке. 24-словная мнемоника была выведена в Terminal во время install — backup которой ваша ответственность (мнемоника нигде на диске НЕ сохраняется). ДВЕ КНОПКИ В FINDER ------------------- 1. Запуск и логи узла — launchctl load -w + статус + tail -F логов (если узел уже запущен, просто показывает статус и логи в реальном времени) 2. Остановить узел — launchctl unload -w Это всё что нужно. Узел запущен через launchd и работает сам; кнопка 1 нужна только чтобы посмотреть что он делает, кнопка 2 — чтобы корректно остановить. ЖИЗНЕННЫЙ ЦИКЛ УЗЛА ------------------- Этот узел = genesis bootstrap node своей локальной сети. Per spec Genesis Decree, bootstrap_node_pubkey активируется через genesis state без Candidate VDF — узел стартует сразу в Active phase. Phase Active: каждое окно (~60 сек, D = 252_000_000 SHA-256): 1. TimeChain VDF compute (T_r = SHA-256^D(prev)) 2. VdfReveal с endpoint = compute_endpoint(T_r, cba, node_id, W) 3. BundledConfirmation с reveal_hash, подпись node_sk 4. is_cemented quorum check (genesis узел сам себя cement: 1/1) 5. weighted_ticket_node lottery, determine_winner argmin 6. ProposalHeader с правильным state_root, подпись node_sk 7. mt_account::apply_proposal canonical pipeline: — Step 2 apply_emission (13 Ɉ оператору) — Step 3.5 chain_length++ для cemented confirmers — Step 3.6 checkpoint rotation — Step 4 state_root recompute 8. state_root self-verify через compute_state_root recompute 9. archive_proposal через FsStore::archive_proposal Каждое τ₂ = 20160 окон (≈14 дней): mt_timechain::next_d adaptive D. Эмиссия: 13 Ɉ оператору per окно (winner_W-1 — за окно W). На W=1 эмиссии нет (apply_emission early-return на genesis окно). С W=2: balance растёт линейно ~13 Ɉ × N окон. ОСТАЛЬНЫЕ УЗЛЫ (когда добавится сетевой слой M6+) -------------------------------------------------- Узлы которые присоединяются к существующей сети проходят полный canonical путь: 1. fast-sync TimeChain до текущего W (от genesis узла, verify-only) 2. Candidate VDF (~10 часов на M-class Mac, τ₂ × D итераций SHA-256) 3. NodeRegistration через apply_noderegistrations_batch 4. selection event на следующем W % 336 == 0 → активация 5. Active phase В текущей версии montana-node (без M6) этот путь существует в коде для будущего использования, но не выполняется (один genesis узел). ВОССТАНОВЛЕНИЕ ИЗ МНЕМОНИКИ --------------------------- 24 слова — единственный надёжный backup. Мнемоника в файлах НЕ сохраняется (стандартная практика безопасности крипто-кошельков). Полная переустановка с нуля (INSTALL_DIR — путь установки, по умолчанию ~/Applications/Montana, но может быть любой через env var INSTALL_DIR): launchctl unload -w ~/Library/LaunchAgents/org.montana.node.plist rm -rf "$INSTALL_DIR/data" bash <путь>/scripts/install-local-mac.sh Installer создаст новую identity. Запишите 24 слова до нажатия Enter. LAUNCHD CONTROL (продвинутое) ----------------------------- LaunchAgent: ~/Library/LaunchAgents/org.montana.node.plist Прямые команды: launchctl list org.montana.node launchctl unload ~/Library/LaunchAgents/org.montana.node.plist launchctl load -w ~/Library/LaunchAgents/org.montana.node.plist Полное удаление ($INSTALL_DIR — текущий путь установки): launchctl unload -w ~/Library/LaunchAgents/org.montana.node.plist rm ~/Library/LaunchAgents/org.montana.node.plist rm -rf "$INSTALL_DIR" ЕСЛИ macOS БЛОКИРУЕТ ЗАПУСК .command ------------------------------------ Правый клик (Control + клик) на .command → «Открыть» → «Открыть» Либо через терминал ($INSTALL_DIR — путь установки): xattr -dr com.apple.quarantine "$INSTALL_DIR" ЧТО ВНУТРИ ---------- montana-node — бинарь узла 1. Запуск и логи узла.command — launchctl load + status + tail -F 2. Остановить узел.command — launchctl unload -w data/ — состояние узла identity.bin — ключи (mode 0600) accounts.bin / nodes.bin / — таблицы state candidates.bin logs/montana.log — stdout (per-window события) logs/montana.err.log — stderr meta/current_window.bin — текущее окно (u64) meta/timechain.bin — T_r + D + last_window meta/node_state.bin — phase lifecycle proposals/ — archived ProposalHeaders 3722B каждый КРИПТОГРАФИЯ ------------ ML-DSA-65 (FIPS 204) — постквантовая подпись ML-KEM-768 (FIPS 203) — постквантовый обмен ключами SHA-256 (FIPS 180-4) — хеширование, VDF PBKDF2 + HKDF (RFC 5869) — деривация ключей Все примитивы через OpenSSL 3.5 LTS (статически линкованный), 51 NIST KAT vectors verified byte-exact.