# Система Кошельков Узлов Montana ## Концепция В Montana существует две параллельные системы кошельков: ### 1. **Пользовательские Кошельки** - **Адрес:** Telegram ID пользователя - **Ключ:** Telegram ID (одновременно адрес и ключ) - **Хранение:** Привязано к Telegram аккаунту - **Команда:** `/start` — показывает TG ID как адрес кошелька ### 2. **Кошельки Узлов** - **Адрес:** Криптографический хеш (mt + SHA256(public_key)[:20]) - **Ключ:** Private key ML-DSA-65/ML-DSA-65 - **Alias:** Удобное имя (например, `amsterdam.efir.org`) - **IP:** Только для networking, НЕ для идентификации - **Владелец:** Telegram ID оператора узла ## Официальные Узлы Montana ``` ⭐️ 🇳🇱 Amsterdam — mta46b633d258059b90db46adffc6c5ca08f0e8d6c — FULL NODE — Priority #1 Alias: amsterdam.efir.org IP: 72.56.102.240 (networking only) ⭐️ 🇷🇺 Moscow — mta8ae14f74c38294b24c2f1c20c6406e6be929c93 — FULL NODE — Priority #2 Alias: moscow.efir.org IP: 176.124.208.93 (networking only) ⭐️ 🇰🇿 Almaty — mtd07b0d9bdab2cb592f509bc1304c368ac703c45e — FULL NODE — Priority #3 Alias: almaty.efir.org IP: 91.200.148.93 (networking only) ⭐️ 🇷🇺 St.Petersburg — mtb397e136de69d92e5782f3fe14533a4a37b4ddec — FULL NODE — Priority #4 Alias: spb.efir.org IP: 188.225.58.98 (networking only) ⭐️ 🇷🇺 Novosibirsk — mtf3f0254b405382de38494e753924b4b92692bd2c — FULL NODE — Priority #5 Alias: novosibirsk.efir.org IP: 147.45.147.247 (networking only) ``` ## Защита от Атак ### ✅ IP Hijacking — ЗАБЛОКИРОВАНО - Адрес кошелька НЕ привязан к IP - IP используется только для networking - Атакующий с тем же IP не получит доступ к кошельку ### ✅ DNS Spoofing — ЗАБЛОКИРОВАНО - Alias только для удобства - Реальный адрес криптографический (mt...) - Подмена DNS не влияет на кошелек ### ✅ Man-in-the-Middle — ЗАБЛОКИРОВАНО - Все операции подписаны ML-DSA-65/ML-DSA-65 - Модифицированное сообщение = невалидная подпись ### ✅ Подделка Транзакций — ЗАБЛОКИРОВАНО - Требуется private key для подписи - Без ключа транзакция отклонена ## Команды Бота ### `/node` Показывает сводку по всем узлам сети: ``` Ɉ **MONTANA NETWORK** 🌐 **Всего узлов:** 5 ⭐️ **Официальных:** 5 🔷 **Full nodes:** 5 💰 **Общий баланс сети:** XXX.XX секунд ``` ### `/node <адрес>` Показывает детали конкретного узла: ``` Ɉ **Узел Montana:** 🇳🇱 Amsterdam **Адрес кошелька:** `mta46b633d258059b90db46adffc6c5ca08f0e8d6c` **Alias:** `amsterdam.efir.org` _(криптографический адрес — защита от IP hijacking)_ **IP:** 72.56.102.240 _(только для networking)_ **Тип:** FULL NODE **Владелец:** Montana Foundation (см. keyring: ADMIN_TELEGRAM_ID) **Приоритет:** #1 💰 **Баланс:** XXX.XX секунд 📊 **Последние транзакции:** • +100.50s — Награда за валидацию блоков ⚠️ Переводы только по криптографическому адресу или alias. ``` ### `/node ` Показывает узел по alias: ```bash /node amsterdam.efir.org # → Показывает Amsterdam узел ``` ### `/network` Альтернатива `/node` — показывает ту же сводку по сети. ### `/register_node` (admin only) **Только для администратора.** Регистрирует новый узел в сети Montana с генерацией криптографических ключей. Пример: ```bash /register_node tokyo "🇯🇵 Tokyo" 1.2.3.4 123456789 light ``` Параметры: - `node_name` — Короткое имя узла (станет частью alias) - `location` — Локация с флагом (например "🇯🇵 Tokyo") - `ip_address` — IP адрес узла (только для networking!) - `owner_telegram_id` — Telegram ID владельца узла - `node_type` — Тип узла: `full`, `light`, `client` (по умолчанию `light`) **Результат:** ``` Ɉ ✅ **Узел зарегистрирован** **Адрес:** `mtb9498a702435b2443bd8461574b80d8ed435159b` **Alias:** `tokyo.efir.org` **Public Key:** `a3f8b2c1d4e5f6789...` ⚠️ **КРИТИЧЕСКИ ВАЖНО:** **Private Key:** `f9d8c7b6a5e4d3c2b1...` 🔐 СОХРАНИ PRIVATE KEY В БЕЗОПАСНОМ МЕСТЕ! Без него доступ к кошельку узла невозможен. ``` ## Типы Узлов ### **Full Node** - Полная валидация всех транзакций - Хранит весь таймчейн Montana - Участвует в консенсусе - Может майнить блоки ### **Light Node** - Валидация только заголовков блоков - Хранит заголовки + чекпоинты - Не требует полного хранилища - Быстрая синхронизация ### **Light Client** - Только отправка подписей присутствия - Хранит только свои данные - Минимальные требования - Для мобильных устройств ## Транзакции Узлов Узлы получают награды за: - 🏆 **Валидацию блоков** — подтверждение транзакций - 📦 **Хранение данных** — репликация таймчейна - 🌐 **Релей трафика** — пересылка сообщений сети - ⏱️ **Аптайм** — стабильная работа 24/7 Узлы платят за: - 💸 **Bandwidth** — исходящий трафик - 🔧 **Операционные расходы** — сервер, электричество - 🔄 **Синхронизацию** — обмен данными с другими узлами ## API (программный доступ) ### Python ```python from node_crypto import get_node_crypto_system # Инициализация ncs = get_node_crypto_system() # Получить все узлы nodes = ncs.get_all_nodes() # Получить узел по адресу node = ncs.get_node_by_address("mta46b633d258059b90db46adffc6c5ca08f0e8d6c") print(f"Узел: {node['node_name']}") print(f"Баланс: {node['balance']} секунд") # Получить узел по alias node = ncs.get_node_by_alias("amsterdam.efir.org") # Зарегистрировать новый узел result = ncs.register_node( owner_telegram_id=123456789, node_name="tokyo", location="🇯🇵 Tokyo", ip_address="1.2.3.4", node_type="light" ) # ⚠️ СОХРАНИ PRIVATE KEY! print(f"Address: {result['address']}") print(f"Private Key: {result['private_key']}") # КРИТИЧЕСКИ ВАЖНО print(f"Public Key: {result['public_key']}") print(f"Alias: {result['alias']}") # Проверить владение узлом (подпись) message = "Transfer 500 seconds to mt9876543210" signature = sign_message(private_key, message) is_valid = ncs.verify_node_ownership( address="mta46b633d258059b90db46adffc6c5ca08f0e8d6c", message=message, signature_hex=signature ) ``` ## Файлы Данных Система хранит данные в: ``` data/ └── nodes/ ├── registered_nodes.json # Зарегистрированные узлы ├── node_keys.json # Криптографические ключи └── node_wallets.json # Кошельки узлов (deprecated) ``` ### registered_nodes.json ```json { "mta46b633d258059b90db46adffc6c5ca08f0e8d6c": { "address": "mta46b633d258059b90db46adffc6c5ca08f0e8d6c", "public_key": "a3f8b2c1d4e5f6789...", "owner": "ADMIN_TELEGRAM_ID", "node_name": "amsterdam", "alias": "amsterdam.efir.org", "location": "🇳🇱 Amsterdam", "ip": "72.56.102.240", "type": "full", "created_at": "2026-01-19T...", "official": true, "priority": 1 } } ``` ### node_keys.json ```json { "mta46b633d258059b90db46adffc6c5ca08f0e8d6c": { "private_key": "f9d8c7b6a5e4d3c2b1...", "public_key": "a3f8b2c1d4e5f6789...", "algorithm": "ML-DSA-65 (FIPS 204)" } } ``` ⚠️ **КРИТИЧЕСКИ ВАЖНО:** `node_keys.json` содержит private keys. НИКОГДА не коммить в git! ## Безопасность ### 🔒 Криптографическая Защита (MAINNET) - Private keys никогда не покидают сервер (4032 байта) - Подпись ML-DSA-65 (FIPS 204) для всех операций - SHA256 хеширование для адресов - Post-quantum защита АКТИВНА с genesis ### ⚠️ Важно - Криптографический адрес = идентификатор кошелька - IP адрес только для networking - Alias только для удобства - Private key = полный контроль над узлом - При утере private key доступ к кошельку невозможен ## Интеграция с Telegram Система полностью интегрирована в [@junomontanaagibot](https://t.me/junomontanaagibot): 1. Пользователи видят свой TG ID как адрес кошелька 2. Узлы имеют криптографические адреса (mt...) 3. Единая философия: **криптографический идентификатор = адрес** 4. Операторы узлов идентифицируются по Telegram ID 5. Переводы поддерживают как полные адреса, так и alias ## Статус: MAINNET PRODUCTION **Январь 2026:** ML-DSA-65 АКТИВЕН - ✅ Все узлы на ML-DSA-65 (FIPS 204) - ✅ Montana защищена от квантовых компьютеров с первого дня - ✅ Нет legacy — чистый post-quantum См. [NODE_CRYPTO_SYSTEM.md](NODE_CRYPTO_SYSTEM.md) для деталей. ## Roadmap - [ ] Автоматические награды за аптайм - [ ] Интеграция с Montana timechain - [ ] Web dashboard для мониторинга узлов - [ ] Stake механизм для узлов - [ ] Governance через узлы - [ ] Multi-sig кошельки для узлов - [ ] Hardware Security Module (HSM) для ключей --- **Ɉ Montana — Протокол идеальных денег** *Криптографическая защита — безопасность от genesis* *Post-quantum ready — защита от квантовых компьютеров*