montana/Монтана-Протокол/Архив/TimeChain v9.0.0.md

402 lines
20 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.

# TimeChain — Спецификация протокола Montana
**Версия:** 9.0.0 (2026-03-30)
## Определение
Децентрализованная сеть. Время — единственная реальная валюта. 1 секунда присутствия узла в сети = 1 Ɉ.
Консенсус: **Proof of Time (PoT)** — последовательное SHA-256 хэширование (VDF) как доказательство прошедшего времени. Один криптографический примитив — SHA-256. Временные окна возникают из вычислений.
Генезис: 09.01.2026 00:00:00 MSK.
---
## Криптография
Единственный примитив — SHA-256. Подписи, адреса, консенсус, Merkle-деревья построены на SHA-256.
Квантовая устойчивость обеспечивается природой хэш-функции: алгоритм Гровера сокращает безопасность с 256 до 128 бит.
### Подписи — WOTS+ (Winternitz One-Time Signature)
Хэш-подпись на SHA-256. Каждый ключ используется однократно — одна подпись на один UTXO. Приватный ключ представляет собой начальные значения хэш-цепочек. Подпись содержит промежуточные точки цепочек, позиция которых кодирует подписываемое сообщение. Подпись математически привязана к конкретной транзакции.
Параметр w=256:
| Компонент | Размер |
|-----------|--------|
| Приватный ключ (seed) | 32B |
| Публичный ключ (сжатый) | 32B |
| Подпись | 1 120B |
Деривация ключей: `secret_n = SHA-256("montana-tx" || seed || n)`. Один seed (32B) порождает цепочку одноразовых ключей через инкрементальный counter.
### Адреса
Формат: `mt` + Base58(SHA-256(pubkey) + checksum). Деривация ключей и адресов описана в разделе «Ключи».
---
## Транзакции — UTXO модель
Модель неизрасходованных выходов. Каждая транзакция потребляет существующие UTXO и создаёт новые.
### Формат транзакции
| Компонент | Размер |
|-----------|--------|
| WOTS+ подпись | 1 120B |
| UTXO reference (tx_hash + index) | 36B |
| Выходы (2 × (address 49B + amount 8B)) | 114B |
| VDF позиция | 32B |
| **Итого** | **~1.3 KB** |
Вход: WOTS+ подпись (привязана к данным транзакции) + ссылка на UTXO.
Выход: адрес получателя + сумма.
### Верификация баланса
sum(входы) = sum(выходы) + fee. Каждый узел проверяет баланс арифметическим сложением.
Dust limit: каждый выход ≥ 1 Ɉ (MINIMUM_UTXO).
### Комиссия
Комиссия = разница между суммой входов и суммой выходов. Минимум 1 mɈ (миллисекунда). Размер адаптивный — рассчитывается по формуле на основе заполненности окон τ₁. Пользователь знает комиссию до отправки.
Победитель окна τ₂ получает сумму всех комиссий транзакций в окне.
### UTXO
Формат: `{address, amount, tx_hash, output_index}`.
UTXO существует до момента траты. Трата фиксируется использованием WOTS+ подписи. Повторная трата исключена конструкцией данных.
### Coinbase
Победитель τ₂ создаёт coinbase-транзакцию. Входов нет. Выходы содержат эмиссию за τ₂ + сумму комиссий всех транзакций окна.
Supply audit при финализации τ₂: суммарная эмиссия coinbase от генезиса сверяется с расчётной по формуле халвинга.
---
## Таймчейн
Один Таймчейн = два ядра с разделёнными функциями:
### Ядро 1 — Proof of Time (чистый VDF)
Непрерывное последовательное SHA-256 хэширование (100% загрузка). Чистая цепочка времени:
```
T₁ = SHA-256(seed)
T₂ = SHA-256(T₁)
T₃ = SHA-256(T₂)
...
T_N = лотерейный билет
```
Seed = SHA-256(node_id || previous_τ₂_merkle_root). Seed фиксирован на весь τ₂ (10 минут). VDF вычисляется непрерывно ~9.6 млрд хэшей за τ₂. T_final — лотерейный билет. Детерминирован, зависит только от seed. Транзакции цепочку времени не касаются.
### Ядро 2 — Proof of History (TX-цепочка)
Приём, верификация транзакций (WOTS+ подписи, баланс) и построение цепочки порядка:
```
G₁ = SHA-256(T_k || tx_A) ← tx_A привязана к VDF-позиции T_k
G₂ = SHA-256(G₁ || tx_B) ← tx_B после tx_A, криптографически
G₃ = SHA-256(G₂ || tx_C)
...
```
Каждая транзакция привязана к позиции T_k чистого VDF (точная метка времени) и связана с предыдущей в хэш-цепочке (криптографический порядок). Изменить порядок = пересчитать цепочку.
С ростом TPS сети дополнительные ядра подключаются для верификации транзакций (1 ядро ≈ 1 785 верификаций/сек). Минимум: 2 ядра. Структура: 1 Proof of Time + 1..N Proof of History.
### Входной барьер
Node_id допускается к лотерее после 28 дней (2 × τ₃) непрерывного VDF. Node_id регистрируется до того как будущий merkle_root станет известен — предвычисление лотерейных билетов исключено.
## Потоковая модель транзакций
Транзакции текут непрерывно. Узел получает транзакцию → проверяет подпись и баланс → вплетает в TX-цепочку с привязкой к VDF-позиции → передаёт в P2P gossip. Время подтверждения определяется скоростью интернета отправителя и P2P-распространением (~2-5 секунд).
τ₁ и τ₂ — чекпоинты, транзакции их появления не ожидают.
## Временные слои (τ)
```
τ₁ (≈60с) → τ₂ (10 × τ₁) → τ₃ (2016 × τ₂) → τ₄ (~104 × τ₃)
```
### τ₁ — Чекпоинт синхронизации (промежуточная позиция VDF ≈ каждые 60 секунд)
- Промежуточное значение VDF (H на позиции k×N) публикуется как чекпоинт
- Seed VDF при этом не меняется — VDF непрерывный в рамках τ₂
- Узлы обмениваются чекпоинтами и Merkle root транзакций по P2P
- Недостающие транзакции запрашиваются у пиров
- Подтверждение синхронизации, транзакции к этому моменту уже в сети
### τ₂ — Финализация и эмиссия (10 × τ₁ ≈ 10 минут)
- VDF завершён → T_final (лотерейный билет)
- Победитель τ₂ (min effective_ticket): публикует каноничный набор транзакций и coinbase
- Coinbase: вся эмиссия + все комиссии → победителю
- Участие в лотерее: валидный VDF (обработано ≥ 80% транзакций сети) + допуск (28 дней)
- T_final кристаллизует порядок транзакций: победитель публикует свою TX-цепочку как каноничную
- Merkle root победителя становится seed-компонентом для следующего τ₂
- Сеть верифицирует VDF-цепочку победителя (O(1))
- Supply audit: суммарная эмиссия coinbase от генезиса сверяется с расчётной
- Разрешение форков: приоритет ветки с наибольшим суммарным VDF-доказательством
### τ₃ — Адаптация (2016 × τ₂ ≈ 14 дней)
- Калибровка N: медиана peer-timestamps сверяется с VDF-тиками, цель ≈ 60 сек UTC
- UTXO Merkle Root: победитель последнего τ₂ включает UTXO_merkle_root в coinbase, ратифицируется консенсусом
- Криптографическая амнезия: потраченные транзакции, WOTS+ подписи и TX-цепочки старше 8 × τ₃ удаляются
- Вызов архивных узлов: SHA-256(τ₃_merkle_root) % total_blocks → случайный исторический блок, архивный узел предоставляет данные + Merkle proof → weight × 2
- Пересчёт параметров окна τ₁
### τ₄ — Халвинг (~104 × τ₃ ≈ 4 года)
- Коэффициент эмиссии делится на 2
---
## Консенсус — Proof of Time (PoT)
### Два механизма на двух ядрах
**Proof of Time** (ядро 1) — чистый VDF. Доказательство прошедшего времени и лотерейный билет:
```
seed = SHA-256(node_id || previous_τ₂_merkle_root)
T₁ = SHA-256(seed)
T₂ = SHA-256(T₁)
...
T_N = SHA-256(T_{N-1})
```
T_N — детерминированный, зависит только от seed. Один CPU ядро, ~16 млн SHA-256/сек, N ≈ 960 млн хэшей ≈ 60 секунд.
**Proof of History** (ядро 2) — TX-цепочка. Криптографический порядок транзакций с привязкой к VDF-позициям.
### Стаж и вес цепочки
Вес цепочки определяется продолжительностью непрерывного присутствия:
```
weight = min(total_signed_τ₂, MAX_WEIGHT)
MAX_WEIGHT = количество τ₂ в одном τ₄ (~105 000)
```
Три зоны:
- **028 дней (< 2 × τ₃):** допуск закрыт, вес = 0
- **28 дней 4 года:** вес растёт линейно с каждым подписанным τ
- **4+ года (≥ τ₄):** вес = MAX_WEIGHT, дальнейшее накопление ограничено потолком
Потолок τ предотвращает бесконечный рост преимущества ранних участников. Все цепочки старше 4 лет равны между собой.
Здоровье цепочки в текущем τ: медиана длин непрерывных серий подписанных τ₂. Участие в τ = завершение 80% VDF-циклов (τ₁) внутри τ₂. Пропуск целого τ (< 80% τ₂) = обнуление веса τ₃.
### Победитель τ₂
Победитель определяется взвешенной лотереей:
```
effective_ticket = T_N / weight
winner = min(effective_ticket) среди допущенных цепочек
```
Длинная цепочка делит T_N на большее число меньший effective_ticket выше вероятность победы. Аналог доли хэшрейта:
```
P(chain) = weight(chain) / Σ weight(all_chains)
```
Победитель публикует каноничный набор транзакций (из своей TX-цепочки), их порядок и coinbase-транзакцию. Coinbase: вся эмиссия + все комиссии победителю. Верификация O(1).
T_N детерминирован seed-ом. Манипуляция T_N через подбор транзакций исключена транзакции в TX-цепочке (ядро 2), T_N в чистом VDF (ядро 1).
### Верификация
Победитель публикует: `{node_id, seed, T_N, checkpoints[]}`. Контрольные точки через каждые ~1 млн хэшей (~960 точек).
Верификация: пересчёт 960 сегментов параллельно. На 8-ядерном CPU: ~7.5 сек. На 64-ядерном: ~1 сек.
### Устойчивость
- **Манипуляция T_N** исключена: чистый VDF, транзакции в отдельной цепочке
- **Node_id гриндинг** исключён: 28-дневный входной барьер, merkle_root неизвестен при регистрации
- **Предвычисление** исключено: seed содержит Merkle root предыдущего τ
- **Replay** исключён: seed уникален для каждого τ
- **Аппаратное преимущество** ограничено ~1.5-2x для последовательных вычислений
- **Sybil-барьер**: 28-дневный входной барьер + физическое CPU ядро + стаж-вес (время ценнее денег)
- **Аристократия** ограничена: потолок веса τ₄, после 4 лет все равны
---
## Адреса и переводы
### Полный флоу перевода
```
1. Боб: кошелёк генерирует keypair_7 → address_7
2. Боб → Алисе: "отправь на mt4ZGfe..." (address_7)
3. Алиса формирует транзакцию:
Вход: UTXO на 80 Ɉ (address_3)
Выход: 50 Ɉ → address_7 (Бобу)
Выход: 30 Ɉ → address_12 (сдача, новый адрес)
4. Алиса подписывает WOTS+ (привязано к выходам)
5. Алиса рассылает транзакцию узлам сети
6. Каждый узел проверяет:
WOTS+ подпись валидна для pubkey address_3 ✓
80 = 50 + 30 ✓
VDF-позиция приёма зафиксирована ✓
7. UTXO address_3 потрачен
8. Созданы UTXO: 50 Ɉ @ address_7, 30 Ɉ @ address_12
```
### Баланс
Кошелёк деривирует все адреса из seed, сканирует UTXO set. Сумма непотраченных UTXO = баланс.
Бэкап = seed (32 байта).
---
## Эмиссия
### Единица
1 секунда Montana = 1 $MONT = 1 Ɉ = 1 000 = 1 000 000 μɈ = 1 000 000 000
Точность: 9 знаков после запятой (наносекунда).
`lim(t → ∞) 1 Ɉ → 1 секунда`. Халвинг делает Ɉ дефицитнее, секунды идут с постоянной скоростью. Чем дальше от генезиса, тем ценнее каждый Ɉ, тем ближе он к реальной секунде.
| Параметр | Значение |
|----------|----------|
| Генезис | 09.01.2026 00:00:00 MSK |
| Эмиссия за τ | 50 минут (3 000 Ɉ) |
| Халвинг | ÷2 каждые τ |
| TIME_BANK | 21 000 000 минут (~40 лет) |
| После истощения | Oracle Mode (верификация) |
| Эпоха | Годы | Эмиссия за τ |
|-------|------|--------------|
| τ #0 | 0-4 | 50 мин (3 000 Ɉ) |
| τ #1 | 4-8 | 25 мин (1 500 Ɉ) |
| τ #2 | 8-12 | 12.5 мин (750 Ɉ) |
| τ #3 | 12-16 | 6.25 мин (375 Ɉ) |
### Распределение
Победитель τ (min H_N) получает всю эмиссию + все комиссии окна. Один выход в coinbase. Компактно, верификация O(1).
### Якорь цены — Bitcoin
```
1 BTC = block_interval ÷ block_reward
1 BTC = 600 ÷ 3.125 = 192 Ɉ (эпоха 2024-2028)
```
| Эпоха | Награда за блок | 1 BTC = Ɉ |
|-------|----------------|-----------|
| 2024-2028 | 3.125 BTC | 192 |
| 2028-2032 | 1.5625 BTC | 384 |
| 2032-2036 | 0.78125 BTC | 768 |
Константа между халвингами. Справочная привязка, протокол функционирует автономно.
---
## Пропускная способность
Размер транзакции: ~1.3 KB.
| Канал узла | TPS |
|-----------|-----|
| 10 Mbps | ~960 |
| 100 Mbps | ~9 600 |
| 1 Gbps | ~96 000 |
### Адаптивный размер окна
Пересчёт в τ:
- Заполненность > 80% → увеличение размера окна
- Заполненность < 20% уменьшение размера окна
- Шаг: ±20% за τ
- Диапазон: 1 MB 100 MB
---
## Хранение
| TPS | Архивный (20 лет) | Полный (112 дней) | Pruned | SPV |
|-----|-------------------|-------------------|--------|-----|
| 7 | ~6 TB | ~80 GB | ~15 GB | ~1 GB |
| 100 | ~88 TB | ~1.1 TB | ~15 GB | ~1 GB |
| 960 | ~850 TB | ~10.5 TB | ~15 GB | ~1 GB |
| Тип узла | Содержимое | Лотерея |
|----------|-----------|---------|
| Полный | Скользящее окно 8 × τ + UTXO set + заголовки | weight × 1 |
| Архивный | Полная история от генезиса | weight × 2 |
| Pruned | UTXO set + заголовки + UTXO snapshots τ | Наблюдатель |
| SPV | Заголовки + собственные транзакции | Наблюдатель |
Узел самостоятельно выбирает тип. Участие в лотерее: полный или архивный узел.
### Fast Sync (новый узел)
1. Заголовки τ от генезиса проверка VDF-цепочки (мегабайты)
2. UTXO Merkle Root из последнего τ
3. UTXO snapshot проверка SHA-256(snapshot) == UTXO Merkle Root (гигабайты)
4. Транзакции с подписями за последние 112 дней (скользящее окно)
5. Узел синхронизирован и готов к участию
---
## Ключи
```
seed (32B)
├── Транзакции: SHA-256("montana-tx" || seed || counter)
└── Идентификатор узла: SHA-256("montana-node" || seed)
```
Все деривации SHA-256.
---
## Зависимости
| Библиотека | Назначение |
|------------|------------|
| `hashlib` (stdlib) | SHA-256 |
| `sqlite3` (stdlib) | Хранение |
| `socket` (stdlib) | P2P сеть |
Base58, Merkle-деревья, WOTS+, VDF собственная реализация. Production: C/Rust.
---
## Архитектура
```
┌─────────────────────────────────┐
│ Wallet │
│ Кошелёк, баланс, переводы │
└──────────────┬──────────────────┘
┌──────────────┴──────────────────┐
│ TimeChain │
│ τ₁/τ₂/τ₃/τ₄, UTXO │
│ Proof of Time (PoT), VDF │
│ WOTS+, SHA-256, Base58 │
└─────────────────────────────────┘
```