montana/Montana-Protocol/Apps/macOS/INSTALL.md

105 lines
5.9 KiB
Markdown
Raw Normal View History

2026-05-18 18:05:32 +03:00
# Montana — установка на Mac (десктоп + ноут)
Узел Montana и desktop-приложение ставятся одной командой `install-anywhere.sh`. Поддерживается fresh-установка и recovery на втором Mac из 24-словной мнемоники либо 64-hex master_seed.
## Требования
- macOS 14.0+ (Sonoma) — Apple Silicon или Intel
- Xcode Command Line Tools (`xcode-select --install`)
- ~5 GB свободного места (Rust toolchain + dependencies + сборка)
Rust ставится автоматически через rustup-minimal, если не найден.
## Сценарий 1 — первый Mac (десктоп)
```
bash /path/to/Montana-Protocol/Apps/macOS/install-anywhere.sh
```
Что произойдёт:
1. Сборка `montana-node` release (~1-2 мин cold).
2. Установка binary в `~/Applications/Montana/montana-node`.
3. Генерация **identity** — 24 слова мнемоники выводятся в Terminal.
4. **Запишите 24 слова на бумагу**. Без них узел не восстанавливается.
5. Регистрация launchd-агента `org.montana.node` (auto-restart, переживает logout/reboot).
6. Сборка `Montana.app` (~10 сек) и установка в `/Applications/Montana.app`.
7. Запуск узла (фаза CandidateVdf → ~10 часов VDF → Registered).
8. Запуск Montana.app — на вкладке **Кошелёк** видны QR-код и `account_id`.
## Сценарий 2 — второй Mac (ноут) — recovery той же identity
На ноуте та же команда, но с переданной мнемоникой:
```
INSTALL_MNEMONIC_OR_SEED='word1 word2 ... word24' \
bash /path/to/Montana-Protocol/Apps/macOS/install-anywhere.sh
```
Альтернативно — через 64-hex master_seed (показывается в приложении на десктопе через **Кошелёк → Backup → Показать master seed**):
```
INSTALL_MNEMONIC_OR_SEED='b0800520902f7439...64-hex' \
bash /path/to/Montana-Protocol/Apps/macOS/install-anywhere.sh
```
Recovery flag `--force` затрёт identity.bin на ноуте если он был — это намеренно.
## Что работает в текущей сборке (ядро 0.1.0)
- ✅ Узел поднимается, проходит lifecycle Bootstrap → CandidateVdf → Registered → Active
- ✅ launchd-агент переживает logout, reboot, краш узла
- ✅ Montana.app — вкладки **Узел** (фаза, окно, VDF, лог) и **Кошелёк** (QR, идентификация, backup)
- ✅ Recovery identity на втором Mac из мнемоники или master_seed
- ✅ QR-код для получения Ɉ — отправители видят `account_id`
## Что НЕ работает в текущей сборке
-**Cross-machine синхронизация state.** Десктоп и ноут с одной identity работают независимо в singleton-режиме — балансы и chain не синхронизируются. P2P (M6+) — следующий milestone, требует 3-node genesis ceremony.
-**Отправка Ɉ.** CLI-команды `transfer` пока нет, в Montana.app кнопка Send показывает honest-сообщение о статусе. Получение через QR работает (отправители запоминают адрес).
-**Подпись транзакций app-уровня.** Anchor, Nickname, Premium, Auction — операции из spec, ещё не экспонированы в CLI.
## Полезные команды
```bash
# статус узла (фаза, окно, балансы)
~/Applications/Montana/montana-node status --data-dir ~/Applications/Montana/data
# показать identity (account_id, node_id, libp2p_peer_id)
~/Applications/Montana/montana-node inspect --data-dir ~/Applications/Montana/data
# показать master_seed для backup (НЕ ВЫВОДИТЬ при кому-то на экране!)
~/Applications/Montana/montana-node inspect --data-dir ~/Applications/Montana/data --reveal-master-seed
# логи узла realtime
tail -f ~/Applications/Montana/data/logs/montana.log
# остановить узел
launchctl unload ~/Library/LaunchAgents/org.montana.node.plist
# запустить узел
launchctl load -w ~/Library/LaunchAgents/org.montana.node.plist
# полная переустановка (сохраняет identity если есть)
bash /path/to/Montana-Protocol/Apps/macOS/install-anywhere.sh
```
## Безопасность мнемоники
- 24 слова — **единственный backup**. Identity.bin защищён правами 0600, но если потерян (отказ диска, переустановка ОС) — без мнемоники восстановление невозможно.
- Мастер-seed (64 hex) функционально эквивалентен 24 словам.
- **Никогда не передавайте** seed через мессенджеры, облачные заметки, фото экраном смартфона.
- **Записывайте на бумагу.** Две копии в физически разных местах.
- Кто получил seed — получил полный контроль над аккаунтом.
## Удаление
```bash
launchctl unload ~/Library/LaunchAgents/org.montana.node.plist
rm ~/Library/LaunchAgents/org.montana.node.plist
rm -rf ~/Applications/Montana
rm -rf /Applications/Montana.app
```
`identity.bin` удаляется вместе с `~/Applications/Montana/data/`. **Перед удалением убедитесь что мнемоника записана.**