118 lines
6.0 KiB
Markdown
118 lines
6.0 KiB
Markdown
# TLA+ формальная верификация Proof of Time
|
||
|
||
**Статус:** 🟡 v0.1 — базовая модель безопасности готова, проверка через TLC + TLAPS остаётся.
|
||
|
||
## Что это
|
||
|
||
Формальная модель консенсуса Монтаны на языке TLA+ (Temporal Logic of Actions+, Lamport 2002).
|
||
|
||
Файлы:
|
||
- [`PoT.tla`](PoT.tla) — спецификация модели + 4 теоремы безопасности.
|
||
- [`PoT.cfg`](PoT.cfg) — конфигурация для TLC model checker (4 оператора, 3 аккаунта, 10 окон).
|
||
|
||
## Что моделируется
|
||
|
||
Уровень абстракции: **Safety + Liveness** при византийском противнике f<n/3 в частично синхронной сети.
|
||
|
||
| Сущность | TLA+ переменная | Абстракция |
|
||
|----------|-----------------|------------|
|
||
| VDF-цепь | `vdf_chain` | Монотонная функция от окна (детали SHA-256 не моделируются) |
|
||
| Текущее окно | `window` | Натуральное число, монотонно растёт |
|
||
| Зафиксированные операции | `committed` | window → SUBSET <<account, op>> |
|
||
| Предложения операторов | `proposed` | <<operator, window, op>> |
|
||
| Локальная цепь оператора | `operator_chain` | operator → Seq(window) |
|
||
| Победитель лотереи | `selection_winner` | window → operator |
|
||
|
||
## Что НЕ моделируется (вне scope)
|
||
|
||
- Конкретные SHA-256 байты — VDF аппроксимирован монотонной функцией.
|
||
- Криптография подписей (предполагается EUF-CMA-стойкость, см. [02 Криптография](../02%20Криптография/)).
|
||
- Сетевая сериализация (предполагается канонической).
|
||
- Тонкости gossip-распространения (предполагается eventual delivery после GST).
|
||
|
||
## Доказываемые свойства
|
||
|
||
### Инварианты (Safety)
|
||
|
||
| ID | Свойство | TLA+ имя |
|
||
|----|----------|----------|
|
||
| S1 | Невозможность двойной траты в окне | `NoDoubleSpendInWindow` |
|
||
| S2 | VDF монотонна (каждое окно даёт новый выход) | `VDFMonotone` |
|
||
| S3 | Только победитель лотереи коммитит | `OnlyWinnerCommits` |
|
||
| S4 | Окно монотонно растёт | `WindowMonotone` |
|
||
|
||
### Темпоральные свойства (Liveness)
|
||
|
||
| ID | Свойство | TLA+ имя |
|
||
|----|----------|----------|
|
||
| L1 | После GST честная операция в конце концов коммитится | `EventuallyCommitted` |
|
||
| L2 | Окно бесконечно продвигается при ≥1 честном операторе | `WindowProgresses` |
|
||
|
||
## Теоремы
|
||
|
||
```tla
|
||
THEOREM Safety == Spec => []NoDoubleSpendInWindow
|
||
THEOREM VDFCorrect == Spec => []VDFMonotone
|
||
THEOREM CommitProvenance == Spec => []OnlyWinnerCommits
|
||
THEOREM ChainProgress == Spec => []WindowMonotone
|
||
```
|
||
|
||
## Как проверить
|
||
|
||
### Установка TLC + TLAPS
|
||
|
||
```bash
|
||
brew install --cask tla-plus-toolbox # macOS
|
||
# или скачать TLA+ Toolbox с https://lamport.azurewebsites.net/tla/toolbox.html
|
||
```
|
||
|
||
### Запуск model checker
|
||
|
||
```bash
|
||
cd "Формальная Документация/10 Формальная Верификация/"
|
||
tlc -config PoT.cfg PoT.tla
|
||
```
|
||
|
||
Ожидание:
|
||
- 4 оператора × 3 аккаунта × 10 окон → state space ≈ 10^6 состояний
|
||
- Проверка занимает ~1-5 минут на современном CPU
|
||
- Все 4 инварианта должны быть satisfied
|
||
- Property `WindowProgresses` должна быть satisfied
|
||
|
||
### Запуск TLAPS proof checker (опц.)
|
||
|
||
Для формального доказательства теорем (а не только model check):
|
||
|
||
```bash
|
||
tlapm PoT.tla
|
||
```
|
||
|
||
Это требует доразвития proof obligations внутри спеки — открытый вопрос для следующей итерации.
|
||
|
||
## Ограничения текущей модели
|
||
|
||
1. **Модель малая.** 4 оператора, 3 аккаунта, 10 окон — model check на полной формальной полной структуре.
|
||
2. **VDF абстрактна.** Не моделируется, что D итераций SHA-256 несжимаемы — это допущение из криптографии.
|
||
3. **Сеть упрощена.** Нет явного моделирования gossip, latency, partition.
|
||
4. **Liveness частична.** L1 формализована, но не везде проверена через TLC.
|
||
|
||
## Roadmap
|
||
|
||
- [x] Базовая модель безопасности (этот документ)
|
||
- [ ] Расширение до 7+ операторов с symmetry reduction
|
||
- [ ] TLAPS proof obligations для всех 4 теорем
|
||
- [ ] Модель сетевого partition + GST поведение
|
||
- [ ] Coq-формализация криптографических редукций (отдельная работа)
|
||
|
||
## Связанные документы
|
||
|
||
- [01 Консенсус](../01%20Консенсус/) — теоремы Safety/Liveness в неформальном виде.
|
||
- [07 Модель угроз](../07%20Модель%20Угроз/) — допущения, которые модель охватывает.
|
||
- [Mainnet Readiness](../Mainnet-Readiness.md) — гейт G2.
|
||
|
||
## Источники
|
||
|
||
1. Lamport, L. (2002). *Specifying Systems: The TLA+ Language and Tools*.
|
||
2. Buchman, E., Kwon, J., Milosevic, Z. (2018). *The latest gossip on BFT consensus* (Tendermint TLA+).
|
||
3. Hawblitzel, C., et al. (2015). *IronFleet: Proving Practical Distributed Systems Correct*.
|