135 lines
6.7 KiB
Plaintext
135 lines
6.7 KiB
Plaintext
|
|
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.
|