montana/iOS/ARCHITECTURE.md

186 lines
8.1 KiB
Markdown
Raw Permalink Normal View History

# 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 не может удалить время. Ɉ*