montana/iOS/ARCHITECTURE.md

186 lines
8.1 KiB
Markdown
Raw Permalink Blame History

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 iOS — Юнона везде
## Архитектура: Юнона = Диалог управления
```
┌─────────────────────────────────────────────────────────────┐
│ ЮНОНА │
│ AI-диалог управления всей системой │
│ │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ││
│ │ "Покажи баланс" → Wallet функции ││
│ │ "Создай контракт" → Contracts функции ││
│ │ "Подключи VPN" → VPN функции ││
│ │ "Переведи 100 Ɉ" → Транзакции ││
│ │ ││
│ └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
┌───────────────────┼───────────────────┐
▼ ▼ ▼
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ APP STORE │ │ СЕРТИФИКАТЫ │ │ СЕРТИФИКАТЫ │
│ │ │ │ │ │
│ Junona VPN │ │ Junona Wallet │ │ Junona Contracts │
│ │ │ │ │ │
│ • VPN ML-KEM │ │ • Баланс Ɉ │ │ • Bitcoin Pizza │
│ • Диалог Юнона │ │ • Переводы │ │ • Голосование │
│ • Присутствие │ │ • Диалог Юнона │ │ • Диалог Юнона │
│ │ │ • ML-DSA-65 │ │ • Escrow │
│ .junona │ │ .wallet │ │ .contracts │
└──────────────────┘ └──────────────────┘ └──────────────────┘
│ │ │
└───────────────────┼───────────────────┘
┌────────────┴────────────┐
│ MontanaCore │
│ (SPM Package) │
│ │
│ • JunonaDialog │
│ • Shared Keychain │
│ • AppStoreGuard │
│ • Theme │
└─────────────────────────┘
```
## Присутствие = Время VPN
```
НЕ трафик!
1 секунда VPN включён = 1 Ɉ
Пример:
├── VPN подключён 1 час = 3600 Ɉ
├── VPN подключён 24 часа = 86400 Ɉ
└── Трафик НЕ считается, только время
```
## Почему гибридная модель?
| Канал | Плюсы | Минусы |
|-------|-------|--------|
| **App Store (VPN)** | Доверие, легко найти | Ревью Apple |
| **Сертификаты (Wallet/Contracts)** | Нет контроля Apple | Нужен UDID |
**Ключевые преимущества:**
1. VPN легален в App Store — точка входа для новых пользователей
2. Crypto/Finance Apple блокирует — обходим через сертификаты
3. Mutual monitoring — если Junona удалят, показываем предупреждение
## AppStoreGuard Mechanism
```swift
// Each app runs this on startup
AppStoreGuard.shared.startMonitoring()
// Checks iTunes Lookup API every hour
GET https://itunes.apple.com/lookup?bundleId=network.montana.wallet
// If resultCount = 0 → App removed from store
// Shows warning banner in remaining apps
```
## Warning Message When App Removed
```
⚠️ ВНИМАНИЕ
Apple удалила из App Store: Montana Wallet
Это ограничивает функциональность Montana Protocol.
Apple не поддерживает свободу финансовых транзакций.
Причина удаления: Apple Inc.
Альтернативы:
• TestFlight: testflight.apple.com/join/montana
• Web: app.efir.org
• Android: play.google.com/store/apps/montana
Время — единственная реальная валюта.
Apple не может удалить время.
```
## Cross-App Communication
### URL Schemes
- `montana-wallet://` — Open wallet
- `montana-junona://` — Open Junona chat
- `montana-contracts://` — Open contracts
### Shared Keychain
All 3 apps share the same keychain group (`group.network.montana`):
- Wallet address
- Private/Public keys (ML-DSA-65)
- User preferences
```swift
// Any app can access wallet
let address = MontanaKeychain.shared.walletAddress
// Open another app
MontanaLinks.openJunona(message: "Создай контракт")
```
## Все приложения = Юнона
| App | Канал | Юнона помогает |
|-----|-------|----------------|
| **Junona VPN** | App Store | Подключить VPN, показать присутствие |
| **Junona Wallet** | Сертификаты | Баланс, переводы, управление ключами |
| **Junona Contracts** | Сертификаты | Создать контракт, голосовать, escrow |
**Юнона — единый интерфейс.** Пользователь общается с ней, она выполняет.
## Bundle IDs
```
network.montana.junona — App Store (VPN + AI)
network.montana.junona.vpn — VPN Extension
network.montana.wallet — Сертификаты (Wallet)
network.montana.contracts — Сертификаты (Contracts)
```
## Поток пользователя
```
1. Находит Junona VPN в App Store
2. Устанавливает, подключает VPN (защита + начисление Ɉ)
3. Видит "Установить Wallet" в приложении
4. Переходит на install.efir.org
5. Регистрирует UDID, устанавливает Wallet/Contracts
6. Все приложения связаны через общий Keychain
```
## Fallback
```
Если App Store удаляет Junona:
├── Wallet/Contracts продолжают работать
├── VPN доступен через install.efir.org
└── Пользователи получают уведомление
Если сертификаты отзывают:
├── Junona VPN остаётся в App Store
├── Функции интегрируются в Junona
└── Или новый Enterprise-аккаунт
Если всё блокируют:
├── PWA: app.efir.org
├── Android: Play Store + APK
└── Desktop: macOS/Windows
```
## VPN Узлы
| Узел | IP | Регион |
|------|-----|--------|
| Amsterdam | 72.56.102.240 | Европа |
| Almaty | 91.200.148.93 | Азия |
---
*Apple не может удалить время. Ɉ*