# 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> | | Предложения операторов | `proposed` | <> | | Локальная цепь оператора | `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*.