1191 lines
54 KiB
Markdown
1191 lines
54 KiB
Markdown
|
|
# Montana Protocol — Техническая Спецификация
|
|||
|
|
|
|||
|
|
**Версия:** 1.0
|
|||
|
|
**Дата:** 19 февраля 2026
|
|||
|
|
**Автор:** Alejandro Montana
|
|||
|
|
**Статус:** MAINNET PRODUCTION
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Введение
|
|||
|
|
|
|||
|
|
Montana Protocol (Ɉ) — протокол идеальных денег с постквантовой криптографией.
|
|||
|
|
|
|||
|
|
Монтана — это три независимых слоя:
|
|||
|
|
|
|||
|
|
**Криптография** — генерация ключей и адресов. Полностью офлайн, чистая математика. Не требует сети, не требует ничьего разрешения. Хоть на бумажке считай.
|
|||
|
|
|
|||
|
|
**Таймчейн** — реестр транзакций. Хранит записи вида «на такой-то адрес можно потратить столько-то, если предъявишь правильную подпись». Ничего не знает о ключах, кошельках, владельцах.
|
|||
|
|
|
|||
|
|
**Кошелёк** — мост между первым и вторым. Он берёт ключи, вычисляет адреса, сканирует таймчейн и показывает тебе «баланс». А при отправке — подписывает транзакцию приватным ключом и отправляет в сеть.
|
|||
|
|
|
|||
|
|
Эти слои нигде не «регистрируют» друг друга. Связь между ними — только математика и протокол консенсуса.
|
|||
|
|
|
|||
|
|
Нет центра, который бы сводил ключи и адреса воедино.
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Блокчейн без криптографии — просто база данных.
|
|||
|
|
Криптография без блокчейна — просто шифрование.
|
|||
|
|
Вместе они дают деньги, не требующие доверия.
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Порядок строительства
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. КРИПТО-СЛОЙ → Ключи, адреса, подписи (офлайн)
|
|||
|
|
2. ФОРМАТ ТРАНЗАКЦИИ → Структура: от кого, кому, сколько, подпись
|
|||
|
|
3. ТАЙМЧЕЙН → Слайсы времени, консенсус, валидация, хранение
|
|||
|
|
4. КОШЕЛЁК → Мост: seed → ключи → адреса → баланс
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# ЧАСТЬ I. КРИПТО-СЛОЙ
|
|||
|
|
|
|||
|
|
## 1.1 Обзор
|
|||
|
|
|
|||
|
|
Крипто-слой — фундамент всего протокола. Полностью автономен. Работает офлайн. Не требует подключения к сети, не требует регистрации, не требует ничьего разрешения.
|
|||
|
|
|
|||
|
|
Единственная задача: генерировать ключи, вычислять адреса, подписывать данные и проверять подписи.
|
|||
|
|
|
|||
|
|
**Алгоритм:** ML-DSA-65 (Dilithium)
|
|||
|
|
**Стандарт:** FIPS 204
|
|||
|
|
**Уровень безопасности:** NIST Level 3 (128-bit post-quantum)
|
|||
|
|
|
|||
|
|
Постквантовая криптография с генезиса — не retrofit. Когда квантовые компьютеры станут угрозой, Montana уже будет защищена. Bitcoin, Ethereum и Solana будут вынуждены делать хардфорк.
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Bitcoin/Ethereum: ECDSA сейчас → хардфорк потом
|
|||
|
|
Montana: ML-DSA-65 с генезиса → уже защищены
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 1.2 Размеры ключей
|
|||
|
|
|
|||
|
|
| Параметр | Размер |
|
|||
|
|
|----------|--------|
|
|||
|
|
| Private Key | 4032 байт |
|
|||
|
|
| Public Key | 1952 байт |
|
|||
|
|
| Signature | 3309 байт |
|
|||
|
|
| Адрес | 42 символа |
|
|||
|
|
|
|||
|
|
## 1.3 Полный путь: Энтропия → Мнемоника → Seed → Ключи → Адрес
|
|||
|
|
|
|||
|
|
### Шаг 1. Генерация энтропии (256 бит)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
SecRandomCopyBytes() → 32 байта (256 бит)
|
|||
|
|
Криптографически безопасный генератор (/dev/urandom)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Шаг 2. BIP-39 мнемоника (24 слова)
|
|||
|
|
|
|||
|
|
Стандарт BIP-39 — тот же что в Bitcoin, Ethereum и большинстве криптовалют.
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. 256 бит энтропии → SHA-256 хеш
|
|||
|
|
2. Первые 8 бит хеша = контрольная сумма
|
|||
|
|
3. 256 бит + 8 бит = 264 бита
|
|||
|
|
4. Разбить на 24 группы по 11 бит
|
|||
|
|
5. Каждая группа → индекс (0–2047) → слово из словаря BIP-39
|
|||
|
|
6. Результат: 24 слова
|
|||
|
|
|
|||
|
|
Пример: abandon ability able about above absent ...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Валидация мнемоники:**
|
|||
|
|
- Извлечь 256 бит энтропии из 24 слов
|
|||
|
|
- Вычислить SHA-256, взять первый байт
|
|||
|
|
- Сравнить с контрольной суммой из мнемоники
|
|||
|
|
|
|||
|
|
### Шаг 3. Деривация seed через PBKDF2-SHA512
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Вход: Мнемоника (24 слова через пробел)
|
|||
|
|
Соль: "mnemonic" (стандарт BIP-39, без passphrase)
|
|||
|
|
KDF: PBKDF2-SHA512
|
|||
|
|
Итерации: 2048
|
|||
|
|
Выход: 64 байта (512 бит)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Ключевое свойство:** одна и та же мнемоника всегда даёт один и тот же seed. Детерминизм.
|
|||
|
|
|
|||
|
|
### Шаг 4. Генерация ключей ML-DSA-65 (детерминированная)
|
|||
|
|
|
|||
|
|
Seed (64 байта) инъектируется в liboqs через кастомный RNG на основе SHA256-CTR DRBG:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
block[i] = SHA256(seed || counter_be)
|
|||
|
|
где counter = 0, 1, 2, ...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
liboqs использует этот детерминированный RNG для генерации пары ключей.
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Выход:
|
|||
|
|
├── Private Key: 4032 байт
|
|||
|
|
└── Public Key: 1952 байт
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Ключевое свойство:** один и тот же seed всегда даёт одну и ту же пару ключей.
|
|||
|
|
|
|||
|
|
### Шаг 5. Вычисление адреса
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. Хеш публичного ключа: SHA256(public_key) → 32 байта
|
|||
|
|
2. Payload: Первые 18 байт → 36 hex-символов
|
|||
|
|
3. Промежуточный адрес: "mt" + payload (38 символов)
|
|||
|
|
4. Контрольная сумма: SHA256(SHA256("mt" + payload))[:2] → 4 hex-символа
|
|||
|
|
5. Финальный адрес: "mt" + payload + checksum = 42 символа
|
|||
|
|
|
|||
|
|
Пример: mta46b633d258059b90db46adffc6c5ca08f0e8d6c
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Валидация адреса:**
|
|||
|
|
- Длина = 42
|
|||
|
|
- Префикс = "mt"
|
|||
|
|
- Все символы hex (0–9, a–f)
|
|||
|
|
- Контрольная сумма совпадает
|
|||
|
|
|
|||
|
|
### Шаг 6. Подпись
|
|||
|
|
|
|||
|
|
ML-DSA-65 подпись с детерминированным rnd=0 (FIPS 204):
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
signature = ML_DSA_65.sign(private_key, message) → 3309 байт
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Одно и то же сообщение + один и тот же ключ = всегда одна и та же подпись.
|
|||
|
|
|
|||
|
|
### Шаг 7. Верификация
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
ML_DSA_65.verify(public_key, message, signature) → true/false
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Для верификации нужен только публичный ключ. Приватный ключ не раскрывается.
|
|||
|
|
|
|||
|
|
## 1.4 Полная диаграмма крипто-слоя
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────────┐
|
|||
|
|
│ 1. Энтропия (256 бит) │
|
|||
|
|
│ ↓ │
|
|||
|
|
│ 2. BIP-39 мнемоника (24 слова) │
|
|||
|
|
│ ↓ │
|
|||
|
|
│ 3. PBKDF2-SHA512 → Seed (64 байта) │
|
|||
|
|
│ ↓ │
|
|||
|
|
│ 4. ML-DSA-65 генерация ключей (детерминированная) │
|
|||
|
|
│ ├── Private Key: 4032 байт │
|
|||
|
|
│ └── Public Key: 1952 байт │
|
|||
|
|
│ ↓ │
|
|||
|
|
│ 5. Вычисление адреса │
|
|||
|
|
│ └── mt + SHA256(pubkey)[:18] + checksum = 42 символа │
|
|||
|
|
│ ↓ │
|
|||
|
|
│ 6. Подпись / Верификация (детерминированная) │
|
|||
|
|
│ └── Signature: 3309 байт │
|
|||
|
|
└─────────────────────────────────────────────────────────┘
|
|||
|
|
|
|||
|
|
Весь путь ДЕТЕРМИНИРОВАН:
|
|||
|
|
Одна мнемоника → всегда одни и те же ключи и адрес
|
|||
|
|
Одно сообщение + один ключ → всегда одна подпись
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 1.5 Сравнение с другими блокчейнами
|
|||
|
|
|
|||
|
|
| Параметр | Bitcoin | Ethereum | Solana | **Montana** |
|
|||
|
|
|----------|---------|----------|--------|-------------|
|
|||
|
|
| Алгоритм | ECDSA (secp256k1) | ECDSA (secp256k1) | Ed25519 | **ML-DSA-65 (FIPS 204)** |
|
|||
|
|
| Квантовая защита | Нет | Нет | Нет | **Да, с генезиса** |
|
|||
|
|
| Адрес | SHA256+RIPEMD160 | Keccak256[-20:] | Ed25519 pubkey | **mt + SHA256[:18] + checksum** |
|
|||
|
|
| Private key | 32 байт | 32 байт | 64 байт | **4032 байт** |
|
|||
|
|
| Public key | 33 байт | 64 байт | 32 байт | **1952 байт** |
|
|||
|
|
| Signature | 72 байт | 65 байт | 64 байт | **3309 байт** |
|
|||
|
|
| Seed | BIP-39 (12/24 слова) | BIP-39 (12/24 слова) | BIP-39 | **BIP-39 (24 слова)** |
|
|||
|
|
| Стандарт | — | — | — | **NIST FIPS 204** |
|
|||
|
|
|
|||
|
|
## 1.6 Реализации
|
|||
|
|
|
|||
|
|
| Платформа | Библиотека | Файл |
|
|||
|
|
|-----------|------------|------|
|
|||
|
|
| macOS/iOS (Swift) | liboqs (C) через ObjC bridge | `Crypto/MLDSA65.swift`, `Crypto/MontanaSeed.swift` |
|
|||
|
|
| Backend (Python) | dilithium_py | `Бот/node_crypto.py` |
|
|||
|
|
|
|||
|
|
Все реализации дают **идентичные криптографические результаты** для одного и того же seed.
|
|||
|
|
|
|||
|
|
## 1.7 Защита от квантовых атак
|
|||
|
|
|
|||
|
|
| Атака | Статус |
|
|||
|
|
|-------|--------|
|
|||
|
|
| Алгоритм Шора (взлом ECDSA/RSA) | Не применим к ML-DSA-65 |
|
|||
|
|
| Алгоритм Гровера (ускорение перебора) | ML-DSA-65 устойчив (NIST Level 3) |
|
|||
|
|
| Harvest Now, Decrypt Later | Защищены с первого дня |
|
|||
|
|
| Подделка подписи транзакции | Защищены с первого дня |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# ЧАСТЬ II. ФОРМАТ ТРАНЗАКЦИИ
|
|||
|
|
|
|||
|
|
## 2.1 Модель: UTXO
|
|||
|
|
|
|||
|
|
Montana использует модель UTXO (Unspent Transaction Output) — такую же, как в Bitcoin.
|
|||
|
|
|
|||
|
|
**Принцип:** в системе нет «балансов». Есть только неизрасходованные выходы транзакций. «Баланс» адреса — это сумма всех UTXO, привязанных к этому адресу.
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
UTXO — это запись:
|
|||
|
|
"На адрес mt... можно потратить N Ɉ, если предъявишь подпись от ключа этого адреса"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 2.2 Структура транзакции
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Transaction {
|
|||
|
|
version: u8 // Версия формата (1)
|
|||
|
|
inputs: Vec<TxInput> // Входы (ссылки на UTXO)
|
|||
|
|
outputs: Vec<TxOutput> // Выходы (новые UTXO)
|
|||
|
|
timestamp: u64 // Unix timestamp
|
|||
|
|
signature: [u8; 3309] // ML-DSA-65 подпись
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TxInput {
|
|||
|
|
tx_hash: [u8; 32] // Хеш транзакции-источника
|
|||
|
|
output_idx: u32 // Индекс выхода в той транзакции
|
|||
|
|
pubkey: [u8; 1952] // Публичный ключ отправителя
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TxOutput {
|
|||
|
|
address: String // Адрес получателя (42 символа, mt...)
|
|||
|
|
amount: u64 // Сумма в Ɉ
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 2.3 Жизненный цикл транзакции
|
|||
|
|
|
|||
|
|
**Транзакции моментальные.** Отправил — дошло. Финализация в τ₁ (1 минута).
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. Кошелёк собирает входы (UTXO принадлежащие отправителю)
|
|||
|
|
2. Кошелёк формирует выходы:
|
|||
|
|
├── Получатель: адрес + сумма
|
|||
|
|
└── Сдача: адрес отправителя + остаток
|
|||
|
|
3. Кошелёк подписывает транзакцию приватным ключом (ML-DSA-65)
|
|||
|
|
4. Транзакция отправляется в сеть → МОМЕНТАЛЬНО доходит до получателя
|
|||
|
|
5. Узлы валидируют:
|
|||
|
|
├── Входы существуют и не потрачены
|
|||
|
|
├── Подпись верна (ML-DSA-65 verify)
|
|||
|
|
├── Сумма входов ≥ сумма выходов
|
|||
|
|
└── Адреса валидны
|
|||
|
|
6. Финализация: включение в слайс τ₁ (≤ 1 минута)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Важно:** τ₁ — финализация транзакций, не эмиссии. Эмиссия финализируется в τ₂ (10 минут).
|
|||
|
|
|
|||
|
|
## 2.4 Валидация транзакции
|
|||
|
|
|
|||
|
|
Узел проверяет транзакцию через крипто-слой. Связь между слоями — только математика:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. Для каждого input:
|
|||
|
|
├── Найти UTXO по (tx_hash, output_idx) в таймчейне
|
|||
|
|
├── Проверить что UTXO не потрачен
|
|||
|
|
└── Проверить что address(input.pubkey) == UTXO.address
|
|||
|
|
|
|||
|
|
2. Проверить подпись:
|
|||
|
|
└── ML_DSA_65.verify(input.pubkey, tx_data, signature)
|
|||
|
|
|
|||
|
|
3. Проверить баланс:
|
|||
|
|
└── sum(inputs) ≥ sum(outputs)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 2.5 Coinbase-транзакция (эмиссия)
|
|||
|
|
|
|||
|
|
Специальная транзакция без входов — награда за присутствие:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
CoinbaseTransaction {
|
|||
|
|
version: 1
|
|||
|
|
inputs: [] // Пусто — нет источника
|
|||
|
|
outputs: [
|
|||
|
|
{ address: "mt...", amount: seconds × halving_coefficient }
|
|||
|
|
]
|
|||
|
|
timestamp: <unix time>
|
|||
|
|
proof: PresenceProof // Доказательство присутствия
|
|||
|
|
signature: <ML-DSA-65> // Подпись узла-валидатора
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Эмиссия определяется присутствием, а не вычислениями.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# ЧАСТЬ III. ТАЙМЧЕЙН
|
|||
|
|
|
|||
|
|
## 3.1 Обзор
|
|||
|
|
|
|||
|
|
Таймчейн — реестр всех транзакций Montana. Это не классический блокчейн с блоками, а **4-слойная иерархическая цепочка слайсов времени**, где каждый верхний слой вкладывает в себя все заголовки нижних — как матрёшка.
|
|||
|
|
|
|||
|
|
Таймчейн ничего не знает о ключах, кошельках и владельцах. Он хранит только записи: «на такой-то адрес можно потратить столько-то, если предъявишь правильную подпись».
|
|||
|
|
|
|||
|
|
## 3.2 Временные координаты
|
|||
|
|
|
|||
|
|
Montana измеряет время, а не блоки. Единица таймчейна — **слайс времени** (time slice), не блок:
|
|||
|
|
|
|||
|
|
| Единица | Длительность | В секундах | Назначение |
|
|||
|
|
|---------|-------------|------------|------------|
|
|||
|
|
| **τ₁** | 1 минута | 60 | **Финализация транзакций.** Подпись присутствия. Включение tx в слайс |
|
|||
|
|
| **τ₂** | 10 минут | 600 | **Финализация эмиссии.** Подтверждение балансов. Начисление Ɉ |
|
|||
|
|
| **τ₃** | 14 дней | 1,209,600 | **Кулдауны и балансировка.** Adaptive Cooldown. Чекпоинт сети |
|
|||
|
|
| **τ₄** | 4 года | 126,144,000 | **Халвинг.** Эмиссия ÷2 |
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Иерархия:
|
|||
|
|
1 τ₄ = 104 τ₃ = 209,664 τ₂ = 2,096,640 τ₁ = 126,144,000 секунд
|
|||
|
|
1 τ₃ = 2,016 τ₂ = 20,160 τ₁ = 1,209,600 секунд
|
|||
|
|
1 τ₂ = 10 τ₁ = 600 секунд
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 3.3 Структура слайсов времени
|
|||
|
|
|
|||
|
|
Единица таймчейна — **слайс времени** (time slice). Не блок. Каждый слайс содержит хеш предыдущего слайса своего слоя (цепочка внутри слоя) и заголовки нижних слоёв (матрёшка между слоями).
|
|||
|
|
|
|||
|
|
### τ₁ слайс (1 минута)
|
|||
|
|
|
|||
|
|
Атомарная единица таймчейна. Содержит транзакции и доказательство присутствия.
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Tau1Slice {
|
|||
|
|
timestamp: u64
|
|||
|
|
prev_tau1_hash: [u8; 32] // Хеш предыдущего τ₁ слайса (цепь)
|
|||
|
|
transactions: Vec<Transaction> // Транзакции за минуту
|
|||
|
|
presence_proof: PresenceProof // Доказательство присутствия узла
|
|||
|
|
slice_number: u64
|
|||
|
|
signature: [u8; 3309] // ML-DSA-65 подпись
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### τ₂ слайс (10 минут) — матрёшка уровень 1
|
|||
|
|
|
|||
|
|
Содержит **ВСЕ 10 заголовков τ₁** слайсов + Merkle-корень из них.
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Tau2Slice {
|
|||
|
|
timestamp: u64
|
|||
|
|
prev_tau2_hash: [u8; 32] // Хеш предыдущего τ₂ слайса (цепь)
|
|||
|
|
tau1_merkle_root: [u8; 32] // Корень Меркла из 10 τ₁
|
|||
|
|
tau1_headers: [[u8; 32]; 10] // ВСЕ 10 хешей τ₁ слайсов
|
|||
|
|
total_emission: u64 // Эмиссия за 10 минут
|
|||
|
|
halving_coefficient: f64
|
|||
|
|
signature: [u8; 3309]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### τ₃ слайс (14 дней) — матрёшка уровень 2
|
|||
|
|
|
|||
|
|
Содержит **ВСЕ 2,016 заголовков τ₂**, каждый из которых уже содержит корни своих 10 τ₁.
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Tau3Slice {
|
|||
|
|
timestamp: u64
|
|||
|
|
prev_tau3_hash: [u8; 32] // Хеш предыдущего τ₃ слайса (цепь)
|
|||
|
|
tau2_merkle_root: [u8; 32] // Корень Меркла из 2,016 τ₂
|
|||
|
|
tau2_headers: [[u8; 32]; 2016]// ВСЕ 2,016 хешей τ₂ слайсов
|
|||
|
|
epoch_number: u32
|
|||
|
|
signature: [u8; 3309]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### τ₄ слайс (4 года) — матрёшка уровень 3
|
|||
|
|
|
|||
|
|
Содержит **ВСЕ 104 заголовка τ₃**, каждый из которых содержит все τ₂, которые содержат все τ₁.
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Tau4Slice {
|
|||
|
|
timestamp: u64
|
|||
|
|
prev_tau4_hash: [u8; 32] // Хеш предыдущего τ₄ слайса (цепь)
|
|||
|
|
tau3_merkle_root: [u8; 32] // Корень Меркла из 104 τ₃
|
|||
|
|
tau3_headers: [[u8; 32]; 104] // ВСЕ 104 хеша τ₃ слайсов
|
|||
|
|
halving_number: u32 // Номер халвинга
|
|||
|
|
new_halving_coefficient: f64 // Новый коэффициент
|
|||
|
|
signature: [u8; 3309]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 3.4 Матрёшка слоёв (Merkle Nesting)
|
|||
|
|
|
|||
|
|
Каждый слайс содержит хеш предыдущего слайса своего слоя (горизонтальная цепь) и все заголовки нижнего слоя (вертикальная матрёшка):
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
ГОРИЗОНТАЛЬНАЯ ЦЕПЬ (внутри каждого слоя):
|
|||
|
|
τ₁[0] → τ₁[1] → τ₁[2] → ... (prev_tau1_hash)
|
|||
|
|
τ₂[0] → τ₂[1] → τ₂[2] → ... (prev_tau2_hash)
|
|||
|
|
τ₃[0] → τ₃[1] → ... (prev_tau3_hash)
|
|||
|
|
τ₄[0] → τ₄[1] → ... (prev_tau4_hash)
|
|||
|
|
|
|||
|
|
ВЕРТИКАЛЬНАЯ МАТРЁШКА (между слоями):
|
|||
|
|
┌─────────────────────────────────────────────────────────┐
|
|||
|
|
│ τ₄ слайс │
|
|||
|
|
│ ┌─────────────────────────────────────────────────────┐ │
|
|||
|
|
│ │ 104 × τ₃ заголовков │ │
|
|||
|
|
│ │ ┌─────────────────────────────────────────────────┐ │ │
|
|||
|
|
│ │ │ 2,016 × τ₂ заголовков (в каждом τ₃) │ │ │
|
|||
|
|
│ │ │ ┌─────────────────────────────────────────────┐ │ │ │
|
|||
|
|
│ │ │ │ 10 × τ₁ заголовков (в каждом τ₂) │ │ │ │
|
|||
|
|
│ │ │ └─────────────────────────────────────────────┘ │ │ │
|
|||
|
|
│ │ └─────────────────────────────────────────────────┘ │ │
|
|||
|
|
│ └─────────────────────────────────────────────────────┘ │
|
|||
|
|
└─────────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Принцип:** τ₂ вкладывает в себя все τ₁. τ₃ вкладывает все τ₂ (которые уже содержат τ₁). τ₄ вкладывает все τ₃. Один τ₄ слайс = криптографический proof всех 4 лет.
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
τ₁ → τ₁ → τ₁ → τ₁ ... (цепь 1-минутных слайсов)
|
|||
|
|
↓ ↓ ↓ ↓
|
|||
|
|
└────┴────┴────┴─→ τ₂ (содержит ВСЕ 10 τ₁ заголовков)
|
|||
|
|
↓
|
|||
|
|
└─→ τ₃ (содержит ВСЕ 2,016 τ₂ заголовков)
|
|||
|
|
↓
|
|||
|
|
└─→ τ₄ (содержит ВСЕ 104 τ₃ заголовков)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Преимущества:**
|
|||
|
|
1. Быстрая верификация: лёгкий клиент скачивает только заголовки верхнего слоя
|
|||
|
|
2. Компактность: один τ₄ слайс = proof всех 4 лет (вся матрёшка внутри)
|
|||
|
|
3. Параллелизм: слои можно верифицировать параллельно
|
|||
|
|
4. Постквантовая защита: ML-DSA-65 на каждом слайсе
|
|||
|
|
|
|||
|
|
## 3.5 Консенсус: ACP (Atemporal Coordinate Presence)
|
|||
|
|
|
|||
|
|
### Принцип
|
|||
|
|
|
|||
|
|
ACP — консенсус-механизм, где доказательство основано на **присутствии во времени**. Время нельзя ускорить, купить или накопить заранее. 14 дней требуют 14 дней — для всех одинаково.
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1 секунда доказанного присутствия = 1 Ɉ × halving_coefficient
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Сравнение с другими консенсусами
|
|||
|
|
|
|||
|
|
| Система | Ресурс | Можно ускорить? | Справедливость |
|
|||
|
|
|---------|--------|-----------------|----------------|
|
|||
|
|
| Bitcoin (PoW) | Вычисления | Да (купить ASIC) | Неравномерно |
|
|||
|
|
| Ethereum (PoS) | Stake | Да (купить ETH) | Плутократия |
|
|||
|
|
| **Montana (ACP)** | **Время** | **Нет** | **Равномерно** |
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Золото ограничено в пространстве → добыча
|
|||
|
|
Bitcoin ограничен вычислениями → майнинг
|
|||
|
|
金元Ɉ ограничен временем → присутствие
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Доказательство присутствия (Presence Proof)
|
|||
|
|
|
|||
|
|
Каждую τ₁ (1 минуту) узел подписывает доказательство:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Формат сообщения:
|
|||
|
|
MONTANA_PRESENCE_V1:{timestamp}:{prev_hash}:{pubkey}:{t2_index}
|
|||
|
|
|
|||
|
|
Подпись: ML-DSA-65
|
|||
|
|
Хеш: SHA256(message || signature)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Доказательства образуют цепочку:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Genesis → prev_hash = "0000...0000" (64 нуля)
|
|||
|
|
Proof #1 → prev_hash = Genesis.hash
|
|||
|
|
Proof #2 → prev_hash = Proof#1.hash
|
|||
|
|
...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
14 дней присутствия требуют 14 дней реального времени. Атакующий с бесконечными ресурсами может подписать 1000 координат за секунду, но сеть примет только 1 подпись на τ₁. Невозможно ускорить время.
|
|||
|
|
|
|||
|
|
## 3.6 Эмиссия: 金元Ɉ
|
|||
|
|
|
|||
|
|
### Определение
|
|||
|
|
|
|||
|
|
**金元** (jīn yuán) — буквально «золотой юань».
|
|||
|
|
**Ɉ** (Unicode U+0248) — Temporal Time Unit.
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
金元Ɉ = Время, доказанное присутствием
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Фундаментальное свойство
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
lim(evidence → ∞) 1 Ɉ → 1 секунда
|
|||
|
|
|
|||
|
|
∀t: Trust(t) < 1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Ɉ не равен секунде. Ɉ асимптотически приближается к секунде по мере накопления доказательств:
|
|||
|
|
|
|||
|
|
| Доказательства | Точность | Доверие |
|
|||
|
|
|----------------|----------|---------|
|
|||
|
|
| 1 подпись | ±10 минут | ~0.1 |
|
|||
|
|
| 1 τ₂ (10 мин) | ±1 минута | ~0.5 |
|
|||
|
|
| 1 τ₃ (14 дней) | ±1 секунда | ~0.99 |
|
|||
|
|
| 1 τ₄ (4 года) | ±0.1 секунды | ~0.9999 |
|
|||
|
|
|
|||
|
|
### Механизм эмиссии
|
|||
|
|
|
|||
|
|
Каждый τ₂ (10 минут) происходит финализация:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. Подсчёт секунд присутствия каждого участника за τ₂
|
|||
|
|
2. Применение коэффициента халвинга
|
|||
|
|
3. Начисление: coins = seconds × halving_coefficient
|
|||
|
|
4. Запись в таймчейн как coinbase-транзакции
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Эмиссия **параллельная** — каждый участник получает монеты за своё присутствие:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
User A: 450 сек × 1.0 = 450 Ɉ
|
|||
|
|
User B: 600 сек × 1.0 = 600 Ɉ
|
|||
|
|
User C: 150 сек × 1.0 = 150 Ɉ
|
|||
|
|
─────────────────────────────
|
|||
|
|
Эмиссия за τ₂: 1,200 Ɉ
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Нет лотереи, нет резерва — всё распределяется участникам.
|
|||
|
|
|
|||
|
|
### Халвинг
|
|||
|
|
|
|||
|
|
Каждые τ₄ (4 года) эмиссия делится на 2:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
halving_coefficient(n) = 1.0 / (2^n)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
| Эпоха τ₄ | Годы | Коэффициент | 1 секунда = |
|
|||
|
|
|----------|------|-------------|-------------|
|
|||
|
|
| 0 | 0–4 | 1.0 | 1.0 Ɉ |
|
|||
|
|
| 1 | 4–8 | 0.5 | 0.5 Ɉ |
|
|||
|
|
| 2 | 8–12 | 0.25 | 0.25 Ɉ |
|
|||
|
|
| 3 | 12–16 | 0.125 | 0.125 Ɉ |
|
|||
|
|
| ... | ... | ... | ... |
|
|||
|
|
| 64 | ~260 лет | ~0 | ~0 Ɉ |
|
|||
|
|
|
|||
|
|
### TIME_BANK Reserve — 21 миллион минут
|
|||
|
|
|
|||
|
|
Банк Времени имеет конечный резерв:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
21,000,000 минут = 1,260,000,000 секунд ≈ 40 лет
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
21 миллион — как 21 миллион Bitcoin. Конечный ресурс.
|
|||
|
|
|
|||
|
|
Банк тратит 10 минут из резерва каждый τ₂, подтверждая что прошло ровно 10 минут. Когда резерв исчерпан (~40 лет), банк переходит в **Oracle Mode**: продолжает верифицировать время, но больше не эмитирует из резерва.
|
|||
|
|
|
|||
|
|
| Год | Осталось | % резерва |
|
|||
|
|
|-----|----------|-----------|
|
|||
|
|
| 0 | 21,000,000 | 100% |
|
|||
|
|
| 4 | 18,897,600 | 90% |
|
|||
|
|
| 10 | 15,744,000 | 75% |
|
|||
|
|
| 20 | 10,488,000 | 50% |
|
|||
|
|
| 30 | 5,232,000 | 25% |
|
|||
|
|
| 40 | 0 | 0% → Oracle Mode |
|
|||
|
|
|
|||
|
|
### Генезис цены: Beeple Anchor
|
|||
|
|
|
|||
|
|
Продажа NFT Beeple «Everydays: The First 5000 Days» 11 марта 2021 установила генезисную цену времени:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
$69,300,000 ÷ 5000 дней ÷ 86400 сек = $0.1605/сек
|
|||
|
|
|
|||
|
|
1 Ɉ = $0.1605 USD = 12.04₽ RUB
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Два генезиса:
|
|||
|
|
|
|||
|
|
| Событие | Дата |
|
|||
|
|
|---------|------|
|
|||
|
|
| Генезис Цены (BIPL) | 12 марта 2021 |
|
|||
|
|
| Генезис Монтана | 9 января 2026 |
|
|||
|
|
|
|||
|
|
Цена может быть пересмотрена только в **День Пиццы** (22 мая) — и только вверх.
|
|||
|
|
|
|||
|
|
## 3.7 Свойства 金元Ɉ
|
|||
|
|
|
|||
|
|
**Неподделываемость:**
|
|||
|
|
```
|
|||
|
|
Подделать Ɉ = Подделать время = Нарушить физику
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Неинфлируемость:**
|
|||
|
|
```
|
|||
|
|
Эмиссия ограничена временем
|
|||
|
|
У всех людей одинаковое количество времени
|
|||
|
|
Халвинг делит эмиссию на 2 каждые 4 года
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Верифицируемость:**
|
|||
|
|
```
|
|||
|
|
Каждый Ɉ имеет доказательство:
|
|||
|
|
├── Подпись присутствия (ML-DSA-65)
|
|||
|
|
├── Включение в Merkle tree
|
|||
|
|
├── Подтверждение в таймчейне (цепь хешей)
|
|||
|
|
└── Аттестация сетью (P2P)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 3.8 Защита от Sybil: Adaptive Cooldown
|
|||
|
|
|
|||
|
|
Механизм динамической защиты от Sybil-атак — адаптивный период ожидания для новых узлов.
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Sybil_cost = cooldown × N_nodes
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
| Нагрузка | Cooldown |
|
|||
|
|
|----------|----------|
|
|||
|
|
| Нормальная | 1 день |
|
|||
|
|
| Средняя (r=0.5) | 4 дня |
|
|||
|
|
| Стандартная (r=1.0) | 7 дней |
|
|||
|
|
| Повышенная (r=1.5) | 93 дня |
|
|||
|
|
| Аномальная (r=2.0) | 180 дней |
|
|||
|
|
|
|||
|
|
Сглаженная медиана за 56 дней (4×τ₃) предотвращает манипуляцию через краткосрочные спайки. Rate limit ±20% за τ₃.
|
|||
|
|
|
|||
|
|
Стоимость атаки при стабильной нагрузке (cooldown ≈ 7 дней):
|
|||
|
|
- 10 узлов: 70 дней
|
|||
|
|
- 100 узлов: 700 дней (~2 года)
|
|||
|
|
- 1000 узлов: 7000 дней (~19 лет)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# ЧАСТЬ IV. СЕТЬ
|
|||
|
|
|
|||
|
|
## 4.1 Топология
|
|||
|
|
|
|||
|
|
5 географически распределённых узлов:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────┐
|
|||
|
|
│ amsterdam │ ← PRIMARY (позиция 0)
|
|||
|
|
│ 72.56.102.240│
|
|||
|
|
└──────┬──────┘
|
|||
|
|
│
|
|||
|
|
┌─────────────────┼─────────────────┐
|
|||
|
|
│ │ │
|
|||
|
|
┌────▼────┐ ┌────▼────┐ ┌─────▼────┐
|
|||
|
|
│ moscow │ │ almaty │ │ spb │
|
|||
|
|
│176.124..│ │91.200...│ │188.225...│
|
|||
|
|
└────┬────┘ └────┬────┘ └────┬─────┘
|
|||
|
|
│ │ │
|
|||
|
|
└────────────────┼────────────────┘
|
|||
|
|
│
|
|||
|
|
┌──────▼──────┐
|
|||
|
|
│ novosibirsk │
|
|||
|
|
│147.45.147...│
|
|||
|
|
└─────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
| Позиция | Узел | Адрес | Регион |
|
|||
|
|
|---------|------|-------|--------|
|
|||
|
|
| 0 | Amsterdam | mta46b633d258059b90db46adffc6c5ca08f0e8d6c | EU |
|
|||
|
|
| 1 | Moscow | mta8ae14f74c38294b24c2f1c20c6406e6be929c93 | RU-Central |
|
|||
|
|
| 2 | Almaty | mtd07b0d9bdab2cb592f509bc1304c368ac703c45e | KZ |
|
|||
|
|
| 3 | St.Petersburg | mtb397e136de69d92e5782f3fe14533a4a37b4ddec | RU-NW |
|
|||
|
|
| 4 | Novosibirsk | mtf3f0254b405382de38494e753924b4b92692bd2c | RU-Siberia |
|
|||
|
|
|
|||
|
|
Каждый узел имеет криптографический адрес (ML-DSA-65). IP используется только для networking, не для идентификации. Адрес не зависит от IP — защита от IP hijacking.
|
|||
|
|
|
|||
|
|
## 4.2 Leader Election
|
|||
|
|
|
|||
|
|
Детерминированный выбор мастера: первый живой узел в цепочке = мастер.
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Алгоритм:
|
|||
|
|
Для каждого узла в цепочке (сверху вниз):
|
|||
|
|
Если это я → я мастер
|
|||
|
|
Если узел жив → он мастер, я standby
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
При падении 4 из 5 узлов сеть продолжает работать. Failover < 10 секунд.
|
|||
|
|
|
|||
|
|
## 4.3 Обнаружение атак и Random Failover
|
|||
|
|
|
|||
|
|
При обнаружении атаки цепочка узлов перемешивается случайным образом:
|
|||
|
|
|
|||
|
|
| Метрика | Порог |
|
|||
|
|
|---------|-------|
|
|||
|
|
| CPU | > 80% |
|
|||
|
|
| Network traffic | > 100 MB/s |
|
|||
|
|
| Failures | > 10 подряд |
|
|||
|
|
| Response time | > 5 секунд |
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Нормальный режим:
|
|||
|
|
amsterdam → moscow → almaty → spb → novosibirsk
|
|||
|
|
|
|||
|
|
После атаки (пример):
|
|||
|
|
spb → novosibirsk → almaty → moscow
|
|||
|
|
(amsterdam исключён как атакованный)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 4.4 Breathing Sync
|
|||
|
|
|
|||
|
|
Git-синхронизация состояния сети каждые 12 секунд:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────┐ ┌─────────┐ ┌─────────┐
|
|||
|
|
│ Вдох │────▶│ Работа │────▶│ Выдох │
|
|||
|
|
│git pull │ │ 12 сек │ │git push │
|
|||
|
|
└─────────┘ └─────────┘ └─────────┘
|
|||
|
|
▲ │
|
|||
|
|
└───────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
~5 «вдохов» в минуту. Обеспечивает консистентность данных между всеми узлами.
|
|||
|
|
|
|||
|
|
## 4.5 TLS шифрование
|
|||
|
|
|
|||
|
|
Связь между узлами через TLS 1.3 на порту 19333. Каждый узел имеет self-signed сертификат с привязкой к криптографическому адресу:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
CN = amsterdam.efir.org
|
|||
|
|
UID = mta46b633d258059b90db46adffc6c5ca08f0e8d6c
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 4.6 Защита от атак
|
|||
|
|
|
|||
|
|
| Атака | Защита |
|
|||
|
|
|-------|--------|
|
|||
|
|
| Quantum (алгоритм Шора) | ML-DSA-65 (FIPS 204) |
|
|||
|
|
| IP Hijacking | Криптографические адреса (IP ≠ identity) |
|
|||
|
|
| DNS Spoofing | Alias только для UX |
|
|||
|
|
| MITM | TLS 1.3 + ML-DSA-65 подписи |
|
|||
|
|
| Harvest Now, Decrypt Later | ML-DSA-65 с генезиса |
|
|||
|
|
| Eclipse (изоляция узла) | Фиксированная топология + множественные проверки |
|
|||
|
|
| Sybil | Adaptive Cooldown (1–180 дней) |
|
|||
|
|
| DDoS | Random Failover + AtlantGuard |
|
|||
|
|
| Time manipulation | Физические ограничения τ₁ подписей |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# ЧАСТЬ V. КОШЕЛЁК
|
|||
|
|
|
|||
|
|
## 5.1 Обзор
|
|||
|
|
|
|||
|
|
Кошелёк — мост между участником и первыми тремя слоями. Он объединяет крипто-слой, формат транзакций и таймчейн в единый пользовательский интерфейс.
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Seed → Ключи → Адреса → Сканирование таймчейна → Баланс
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Кошелёк делает:
|
|||
|
|
1. Генерирует или восстанавливает ключи из мнемоники (крипто-слой)
|
|||
|
|
2. Вычисляет адрес (крипто-слой)
|
|||
|
|
3. Сканирует таймчейн на UTXO принадлежащие этому адресу (таймчейн)
|
|||
|
|
4. Суммирует UTXO → показывает «баланс»
|
|||
|
|
5. При отправке: собирает UTXO, формирует транзакцию, подписывает приватным ключом, отправляет в сеть
|
|||
|
|
|
|||
|
|
## 5.2 Хранение ключей
|
|||
|
|
|
|||
|
|
| Платформа | Хранилище | Access Level |
|
|||
|
|
|-----------|-----------|--------------|
|
|||
|
|
| macOS | Keychain (service: `network.montana.presence`) | AfterFirstUnlockThisDeviceOnly |
|
|||
|
|
| iOS | Keychain (service: `network.montana.wallet`) | AfterFirstUnlockThisDeviceOnly |
|
|||
|
|
|
|||
|
|
Хранимые данные:
|
|||
|
|
- `private_key` — 4032 байта (binary)
|
|||
|
|
- `public_key` — 1952 байта (binary)
|
|||
|
|
- `mnemonic` — 24 слова (text)
|
|||
|
|
|
|||
|
|
## 5.3 Операции кошелька
|
|||
|
|
|
|||
|
|
### Создание новой идентичности
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. Генерация мнемоники (24 слова BIP-39)
|
|||
|
|
2. Деривация seed через PBKDF2-SHA512
|
|||
|
|
3. Генерация пары ключей ML-DSA-65
|
|||
|
|
4. Вычисление адреса mt...
|
|||
|
|
5. Сохранение ключей и мнемоники в Keychain
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Восстановление из мнемоники
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. Ввод 24 слов
|
|||
|
|
2. Валидация контрольной суммы BIP-39
|
|||
|
|
3. Деривация seed → ключи → адрес
|
|||
|
|
4. Сканирование таймчейна → баланс
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Одна мнемоника → один и тот же адрес на любом устройстве.
|
|||
|
|
|
|||
|
|
### Проверка баланса
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. По адресу mt... найти все UTXO в таймчейне
|
|||
|
|
2. Сумма UTXO = подтверждённый баланс (confirmed)
|
|||
|
|
3. Плюс секунды в текущем τ₂ = ожидающий баланс (pending)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Отправка транзакции
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. Выбрать UTXO для покрытия суммы (сумма входов ≥ сумма + сдача)
|
|||
|
|
2. Сформировать Transaction:
|
|||
|
|
├── inputs: ссылки на UTXO + публичный ключ
|
|||
|
|
├── outputs: адрес получателя + сумма, адрес отправителя + сдача
|
|||
|
|
└── timestamp
|
|||
|
|
3. Подписать ML-DSA-65 приватным ключом
|
|||
|
|
4. Отправить в сеть
|
|||
|
|
5. Дождаться включения в τ₁ и финализации в τ₂
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 5.4 Типы переводов
|
|||
|
|
|
|||
|
|
| От | Кому | Формат |
|
|||
|
|
|----|------|--------|
|
|||
|
|
| Пользователь | Пользователь | mt... → mt... |
|
|||
|
|
| Пользователь | Узел | mt... → mt... (по адресу или alias) |
|
|||
|
|
| Узел | Пользователь | mt... → mt... (автоматическая награда) |
|
|||
|
|
| Узел | Узел | mt... → mt... (через оператора) |
|
|||
|
|
|
|||
|
|
## 5.5 API для внешних приложений
|
|||
|
|
|
|||
|
|
**Баланс:**
|
|||
|
|
```
|
|||
|
|
GET /api/balance/{address}
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
"address": "mt...",
|
|||
|
|
"confirmed": 1500,
|
|||
|
|
"pending": 45,
|
|||
|
|
"total": 1545,
|
|||
|
|
"slices": {
|
|||
|
|
"tau1": 25.0,
|
|||
|
|
"tau2": 2.5,
|
|||
|
|
"tau3": 0.00124,
|
|||
|
|
"tau4": 0.0000119
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Регистрация присутствия:**
|
|||
|
|
```
|
|||
|
|
POST /api/presence
|
|||
|
|
{ "seconds": 60 }
|
|||
|
|
|
|||
|
|
{ "success": true, "added": 60, "balance": 1560 }
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 5.6 Присутствие через датчики (macOS/iOS)
|
|||
|
|
|
|||
|
|
Вес присутствия определяется количеством активных датчиков:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Вес = 1 (база, пока программа включена) + количество активных датчиков + VPN
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Датчик активен только когда: разрешение есть + тумблер ON.
|
|||
|
|
Нет разрешения или тумблер OFF = датчик выключен, данные не собираются.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# ЧАСТЬ VI. КОНТРАКТЫ
|
|||
|
|
|
|||
|
|
## 6.1 Обзор
|
|||
|
|
|
|||
|
|
Montana Contracts — система умных контрактов с человеческим арбитражем. В отличие от автоматических смарт-контрактов, Montana Contracts используют AI-арбитра (Юнона) для валидации условий и разрешения споров.
|
|||
|
|
|
|||
|
|
## 6.2 Жизненный цикл
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
DRAFT → (голосование >50%) → PENDING → (Сторона Б принимает) → ACCEPTED
|
|||
|
|
→ (исполнение) → COMPLETION_VOTING → (кворум + Юнона) → COMPLETED
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 6.3 Escrow
|
|||
|
|
|
|||
|
|
При создании контракта средства замораживаются:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Создание: Сторона А ──[amount]──► escrow:CONTRACT-ID
|
|||
|
|
Исполнение: escrow:CONTRACT-ID ──[amount]──► Сторона Б
|
|||
|
|
Отмена: escrow:CONTRACT-ID ──[amount]──► Сторона А
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Escrow не контролируется ни одной стороной. Перевод возможен только при смене статуса контракта. Все операции подписаны ML-DSA-65.
|
|||
|
|
|
|||
|
|
## 6.4 Голосование
|
|||
|
|
|
|||
|
|
Юнона имеет 2 голоса и право вето. Свидетели — по 1 голосу. Кворум > 50%.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# ЧАСТЬ VII. КОММУНИКАЦИИ
|
|||
|
|
|
|||
|
|
## 7.1 Принцип
|
|||
|
|
|
|||
|
|
Телефон = адрес кошелька. SMS = транзакция. Звонок = стриминг времени.
|
|||
|
|
|
|||
|
|
## 7.2 Тарификация
|
|||
|
|
|
|||
|
|
| Услуга | Стоимость |
|
|||
|
|
|--------|-----------|
|
|||
|
|
| SMS команда | 1 Ɉ |
|
|||
|
|
| Голосовой звонок | 1 Ɉ/сек |
|
|||
|
|
| Видеозвонок | 2 Ɉ/сек |
|
|||
|
|
|
|||
|
|
## 7.3 WebRTC P2P
|
|||
|
|
|
|||
|
|
Голос и видео идут напрямую между устройствами. Montana обеспечивает только signaling и биллинг. Montana не слышит разговор, не хранит медиа.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# ЧАСТЬ VIII. СВЯЗЬ МЕЖДУ СЛОЯМИ
|
|||
|
|
|
|||
|
|
## 8.1 Принцип
|
|||
|
|
|
|||
|
|
Три слоя Montana **нигде не «регистрируют» друг друга**. Связь между ними — только математика:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
КРИПТО-СЛОЙ ←── математика ──→ ТАЙМЧЕЙН ←── протокол ──→ КОШЕЛЁК
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 8.2 Крипто-слой → Таймчейн
|
|||
|
|
|
|||
|
|
Крипто-слой ничего не знает о таймчейне. Таймчейн использует крипто-слой для:
|
|||
|
|
- Верификации подписей транзакций (`ML_DSA_65.verify`)
|
|||
|
|
- Проверки что адрес соответствует публичному ключу (`address == mt + SHA256(pubkey)[:18] + checksum`)
|
|||
|
|
- Подписания слайсов (`ML_DSA_65.sign`)
|
|||
|
|
- Подписания доказательств присутствия
|
|||
|
|
|
|||
|
|
Таймчейн не хранит приватные ключи. Он принимает подпись и проверяет её математически.
|
|||
|
|
|
|||
|
|
## 8.3 Таймчейн → Кошелёк
|
|||
|
|
|
|||
|
|
Таймчейн ничего не знает о кошельках. Кошелёк сканирует таймчейн для:
|
|||
|
|
- Поиска UTXO по адресу → вычисление баланса
|
|||
|
|
- Отслеживания входящих транзакций
|
|||
|
|
- Подтверждения отправленных транзакций
|
|||
|
|
|
|||
|
|
Таймчейн не знает, кому принадлежит адрес. Он просто хранит записи.
|
|||
|
|
|
|||
|
|
## 8.4 Кошелёк → Крипто-слой
|
|||
|
|
|
|||
|
|
Кошелёк использует крипто-слой для:
|
|||
|
|
- Генерации ключей из мнемоники
|
|||
|
|
- Вычисления адреса из публичного ключа
|
|||
|
|
- Подписания транзакций приватным ключом
|
|||
|
|
|
|||
|
|
Крипто-слой не знает, что такое «кошелёк» или «баланс».
|
|||
|
|
|
|||
|
|
## 8.5 Полная диаграмма
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|||
|
|
│ КОШЕЛЁК │
|
|||
|
|
│ seed → ключи → адрес → сканирование → баланс → подпись → send │
|
|||
|
|
│ │
|
|||
|
|
│ Использует: │
|
|||
|
|
│ ├── Крипто-слой: генерация ключей, подпись транзакций │
|
|||
|
|
│ └── Таймчейн: поиск UTXO, отправка транзакций │
|
|||
|
|
└──────────────┬───────────────────────┬──────────────────────────┘
|
|||
|
|
│ │
|
|||
|
|
▼ ▼
|
|||
|
|
┌──────────────────────┐ ┌──────────────────────────────────────┐
|
|||
|
|
│ КРИПТО-СЛОЙ │ │ ТАЙМЧЕЙН │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ ML-DSA-65 │ │ Слайсы: τ₁ → τ₂ → τ₃ → τ₄ │
|
|||
|
|
│ BIP-39 │ │ UTXO set │
|
|||
|
|
│ Keygen, Sign, Verify │ │ Консенсус ACP │
|
|||
|
|
│ │ │ Эмиссия + Халвинг │
|
|||
|
|
│ Офлайн. │ │ 5 узлов, P2P │
|
|||
|
|
│ Не знает о сети. │ │ Не знает о ключах. │
|
|||
|
|
└──────────────────────┘ └──────────────────────────────────────┘
|
|||
|
|
|
|||
|
|
Связь: только математика и протокол.
|
|||
|
|
Нет центра, который бы сводил ключи и адреса воедино.
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# ЧАСТЬ IX. РЕАЛИЗАЦИЯ
|
|||
|
|
|
|||
|
|
## 9.1 Файловая структура
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Русский/
|
|||
|
|
├── Протокол/ # Спецификации протокола
|
|||
|
|
│ ├── 001_ВКП.md # ACP консенсус
|
|||
|
|
│ ├── 002_ВРЕМЕННАЯ_ЕДИНИЦА.md # 金元Ɉ
|
|||
|
|
│ ├── 003_ТРОЙНОЕ_ЗЕРКАЛО.md # 3-Mirror failover
|
|||
|
|
│ ├── 004_АДАПТИВНОЕ_ОХЛАЖДЕНИЕ.md # Sybil protection
|
|||
|
|
│ ├── 007_ПОСТКВАНТОВЫЙ.md # Post-quantum
|
|||
|
|
│ └── 008_ЯКОРЬ_БИПЛА.md # Beeple anchor
|
|||
|
|
│
|
|||
|
|
├── Бот/ # Ядро протокола (Python)
|
|||
|
|
│ ├── node_crypto.py # ML-DSA-65 криптография
|
|||
|
|
│ ├── time_bank.py # TIME_BANK + Presence Proofs
|
|||
|
|
│ ├── timechain.py # Структура слайсов таймчейна
|
|||
|
|
│ ├── leader_election.py # Leader Election + AttackDetector
|
|||
|
|
│ ├── breathing_sync.py # Git-синхронизация
|
|||
|
|
│ ├── montana_api.py # HTTP API
|
|||
|
|
│ └── montana_db.py # База данных
|
|||
|
|
│
|
|||
|
|
├── Экономика/ # Экономическая модель
|
|||
|
|
│ ├── 金元_WHITEPAPER.md # Whitepaper
|
|||
|
|
│ └── банк_времени/ # TIME_BANK v3.0
|
|||
|
|
│
|
|||
|
|
├── Контракты/ # Умные контракты
|
|||
|
|
│ └── СПЕЦИФИКАЦИЯ.md
|
|||
|
|
│
|
|||
|
|
├── Коммуникация/ # SMS + WebRTC
|
|||
|
|
│ └── СПЕЦИФИКАЦИЯ.md
|
|||
|
|
│
|
|||
|
|
├── Ключи/ # Система ключей
|
|||
|
|
│ └── СПЕЦИФИКАЦИЯ.md
|
|||
|
|
│
|
|||
|
|
├── Сеть/ # P2P сеть
|
|||
|
|
│ ├── ПИРИНГОВАЯ_БЕЛАЯ_КНИГА.md
|
|||
|
|
│ └── ЗАЩИТА_СЕТИ_MONTANA.md
|
|||
|
|
│
|
|||
|
|
├── Генезис/ # Генезис
|
|||
|
|
│ └── GENESIS_PRICE.md
|
|||
|
|
│
|
|||
|
|
└── Юнона/ # AI Security Agent
|
|||
|
|
└── junona_security.py
|
|||
|
|
|
|||
|
|
macOS/MontanaPresence/ # Кошелёк macOS
|
|||
|
|
├── Crypto/
|
|||
|
|
│ ├── MLDSA65.swift # ML-DSA-65 (liboqs)
|
|||
|
|
│ ├── MontanaSeed.swift # BIP-39 + PBKDF2
|
|||
|
|
│ └── BIP39Wordlist.swift # 2048 слов
|
|||
|
|
├── CryptoManager.swift # Управление идентичностью
|
|||
|
|
├── KeychainManager.swift # Хранение ключей
|
|||
|
|
└── PresenceEngine.swift # Присутствие и датчики
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 9.2 Статус реализации
|
|||
|
|
|
|||
|
|
| Компонент | Статус |
|
|||
|
|
|-----------|--------|
|
|||
|
|
| ML-DSA-65 keygen/sign/verify | ✅ Работает |
|
|||
|
|
| BIP-39 мнемоника (24 слова) | ✅ Работает |
|
|||
|
|
| Детерминированная деривация ключей | ✅ Работает |
|
|||
|
|
| Адреса mt... с контрольной суммой | ✅ Работает |
|
|||
|
|
| Presence Proof (цепочка подписей) | ✅ Работает |
|
|||
|
|
| TIME_BANK (эмиссия, халвинг, τ₁–τ₄) | ✅ Работает |
|
|||
|
|
| TimeChain (структура слайсов) | ✅ Работает |
|
|||
|
|
| 5-Node Leader Election | ✅ Работает |
|
|||
|
|
| Breathing Sync | ✅ Работает |
|
|||
|
|
| Attack Detection + Random Failover | ✅ Работает |
|
|||
|
|
| Adaptive Cooldown (Sybil) | ✅ Работает |
|
|||
|
|
| TLS 1.3 между узлами | ✅ Работает |
|
|||
|
|
| macOS кошелёк | ✅ Работает |
|
|||
|
|
| iOS кошелёк | ✅ Работает |
|
|||
|
|
| HTTP API (баланс, присутствие) | ✅ Работает |
|
|||
|
|
| Контракты с escrow | ✅ Работает |
|
|||
|
|
| ML-KEM-768 (шифрование) | ⏳ Запланировано |
|
|||
|
|
| Noise XX (гибридный обмен ключами) | ⏳ Запланировано |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Заключение
|
|||
|
|
|
|||
|
|
Montana Protocol — три независимых слоя, связанных только математикой:
|
|||
|
|
|
|||
|
|
1. **Криптография** генерирует ключи и подписи. Офлайн. Чистая математика.
|
|||
|
|
2. **Таймчейн** хранит транзакции и проверяет подписи. Не знает владельцев.
|
|||
|
|
3. **Кошелёк** соединяет первое и второе. Показывает баланс, отправляет транзакции.
|
|||
|
|
|
|||
|
|
Консенсус ACP основан на единственном ресурсе, который невозможно подделать, купить или ускорить — **времени**.
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Время — единственная реальная валюта.
|
|||
|
|
1 Ɉ = 1 секунда доказанного присутствия.
|
|||
|
|
ML-DSA-65 MAINNET — постквантовая защита с первого дня.
|
|||
|
|
FIPS 204 compliant.
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# КРАТКИЙ СПРАВОЧНИК
|
|||
|
|
|
|||
|
|
## Что такое Montana Protocol?
|
|||
|
|
|
|||
|
|
Протокол идеальных денег. Валюта 金元Ɉ основана на времени — единственном ресурсе, распределённом одинаково между всеми людьми. 1 Ɉ асимптотически стремится к 1 секунде. Постквантовая криптография ML-DSA-65 с первого дня.
|
|||
|
|
|
|||
|
|
## Ключевые числа
|
|||
|
|
|
|||
|
|
| Параметр | Значение |
|
|||
|
|
|----------|----------|
|
|||
|
|
| Алгоритм подписи | ML-DSA-65 (FIPS 204) |
|
|||
|
|
| Private key | 4032 байт |
|
|||
|
|
| Public key | 1952 байт |
|
|||
|
|
| Signature | 3309 байт |
|
|||
|
|
| Адрес | 42 символа (mt + 36 hex + 4 checksum) |
|
|||
|
|
| Seed | BIP-39, 24 слова, PBKDF2-SHA512 |
|
|||
|
|
| 1 Ɉ | $0.1605 USD = 12.04₽ RUB |
|
|||
|
|
| Генезис цены | 12.03.2021 (Beeple: $69.3M / 5000 дней) |
|
|||
|
|
| Генезис сети | 09.01.2026 |
|
|||
|
|
| Узлов | 5 (Amsterdam, Moscow, Almaty, SPB, Novosibirsk) |
|
|||
|
|
| Резерв | 21,000,000 минут (~40 лет) |
|
|||
|
|
| Модель | UTXO (как Bitcoin) |
|
|||
|
|
| Транзакции | Моментальные |
|
|||
|
|
|
|||
|
|
## Временные координаты
|
|||
|
|
|
|||
|
|
| Единица | Длительность | Что финализирует |
|
|||
|
|
|---------|-------------|------------------|
|
|||
|
|
| τ₁ | 1 минута | Транзакции |
|
|||
|
|
| τ₂ | 10 минут | Эмиссия |
|
|||
|
|
| τ₃ | 14 дней | Кулдауны, балансировка |
|
|||
|
|
| τ₄ | 4 года | Халвинг ÷2 |
|
|||
|
|
|
|||
|
|
## Три слоя — кратко
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
КРИПТО: seed → ключи → адрес → подпись (офлайн, чистая математика)
|
|||
|
|
ТАЙМЧЕЙН: слайсы τ₁→τ₂→τ₃→τ₄ (матрёшка), UTXO, ACP консенсус, эмиссия, халвинг
|
|||
|
|
КОШЕЛЁК: мост (ключи + таймчейн → баланс, отправка)
|
|||
|
|
|
|||
|
|
Связь между слоями = только математика. Нет центра.
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Консенсус ACP
|
|||
|
|
|
|||
|
|
Присутствие во времени. Время нельзя ускорить. 14 дней = 14 дней для всех.
|
|||
|
|
```
|
|||
|
|
1 секунда присутствия = 1 Ɉ × halving_coefficient
|
|||
|
|
halving_coefficient = 1.0 / (2^n), где n — номер эпохи τ₄
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Отличие от Bitcoin/Ethereum
|
|||
|
|
|
|||
|
|
| | Bitcoin | Ethereum | Montana |
|
|||
|
|
|---|---------|----------|---------|
|
|||
|
|
| Консенсус | PoW (вычисления) | PoS (stake) | ACP (время) |
|
|||
|
|
| Можно ускорить? | Да (ASIC) | Да (купить ETH) | **Нет** |
|
|||
|
|
| Квантовая защита | Нет | Нет | **Да, с генезиса** |
|
|||
|
|
| Транзакции | ~10 мин | ~12 сек | **Моментальные** (финализация τ₁ = 1 мин) |
|
|||
|
|
|
|||
|
|
## Юнона
|
|||
|
|
|
|||
|
|
AI-арбитр протокола. Совет Безопасности: Председатель (Claude) + Джипити (GPT) + Джемини (Gemini). Disney Strategy: Критик → Реалист → Мечтатель.
|
|||
|
|
|
|||
|
|
## Автор
|
|||
|
|
|
|||
|
|
**Alejandro Montana** — как Satoshi Nakamoto. Псевдоним.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Alejandro Montana
|
|||
|
|
Montana Protocol v1.0
|
|||
|
|
Февраль 2026
|
|||
|
|
|
|||
|
|
Ничто_Nothing_无_金元Ɉ
|
|||
|
|
```
|