6.0 KiB
6.0 KiB
TLA+ формальная верификация Proof of Time
Статус: 🟡 v0.1 — базовая модель безопасности готова, проверка через TLC + TLAPS остаётся.
Что это
Формальная модель консенсуса Монтаны на языке TLA+ (Temporal Logic of Actions+, Lamport 2002).
Файлы:
PoT.tla— спецификация модели + 4 теоремы безопасности.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 Криптография).
- Сетевая сериализация (предполагается канонической).
- Тонкости 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 |
Теоремы
THEOREM Safety == Spec => []NoDoubleSpendInWindow
THEOREM VDFCorrect == Spec => []VDFMonotone
THEOREM CommitProvenance == Spec => []OnlyWinnerCommits
THEOREM ChainProgress == Spec => []WindowMonotone
Как проверить
Установка TLC + TLAPS
brew install --cask tla-plus-toolbox # macOS
# или скачать TLA+ Toolbox с https://lamport.azurewebsites.net/tla/toolbox.html
Запуск model checker
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):
tlapm PoT.tla
Это требует доразвития proof obligations внутри спеки — открытый вопрос для следующей итерации.
Ограничения текущей модели
- Модель малая. 4 оператора, 3 аккаунта, 10 окон — model check на полной формальной полной структуре.
- VDF абстрактна. Не моделируется, что D итераций SHA-256 несжимаемы — это допущение из криптографии.
- Сеть упрощена. Нет явного моделирования gossip, latency, partition.
- Liveness частична. L1 формализована, но не везде проверена через TLC.
Roadmap
- Базовая модель безопасности (этот документ)
- Расширение до 7+ операторов с symmetry reduction
- TLAPS proof obligations для всех 4 теорем
- Модель сетевого partition + GST поведение
- Coq-формализация криптографических редукций (отдельная работа)
Связанные документы
- 01 Консенсус — теоремы Safety/Liveness в неформальном виде.
- 07 Модель угроз — допущения, которые модель охватывает.
- Mainnet Readiness — гейт G2.
Источники
- Lamport, L. (2002). Specifying Systems: The TLA+ Language and Tools.
- Buchman, E., Kwon, J., Milosevic, Z. (2018). The latest gossip on BFT consensus (Tendermint TLA+).
- Hawblitzel, C., et al. (2015). IronFleet: Proving Practical Distributed Systems Correct.