montana/Монтана-Протокол/Код/dist/macOS/Montana
2026-05-04 00:48:53 +03:00
..
1. Запуск и логи узла.command Mirror of /Users/kh./Python/Ничто/Монтана 2026-05-04 00:48:53 +03:00
2. Остановить узел.command Mirror of /Users/kh./Python/Ничто/Монтана 2026-05-04 00:48:53 +03:00
README.txt Mirror of /Users/kh./Python/Ничто/Монтана 2026-05-04 00:48:53 +03:00

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.