montana/Русский/Контракты/СПЕЦИФИКАЦИЯ.md

461 lines
17 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.

# Montana Contracts — Техническая Спецификация
**Версия:** 1.0
**Дата:** 2026-01-21
**Автор:** Alejandro Montana
---
## Обзор
Montana Contracts — система умных контрактов с человеческим арбитражем. В отличие от автоматических смарт-контрактов блокчейна, Montana Contracts используют AI-арбитра (Юнона) для валидации условий и разрешения споров.
**Ключевое отличие:** Юнона понимает естественный язык и может оценить выполнимость условий, в то время как классические смарт-контракты слепо исполняют код.
---
## Архитектура
```
┌─────────────────────────────────────────────────────────────┐
│ КОНТРАКТНАЯ КОМНАТА
│ (Telegram группа) │
├─────────────────────────────────────────────────────────────┤
│ │
│ Сторона А ──────► КОНТРАКТ ◄────── Сторона Б │
│ (creator) │ │ (target) │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────────┐ │
│ │ СВИДЕТЕЛИ │ │
│ │ (witnesses) │ │
│ │ голосуют >50% │ │
│ └────────┬─────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ ЮНОНА │ │
│ │ (AI-арбитр) │ │
│ │ ПОСЛЕДНЕЕ СЛОВО │ │
│ └────────┬─────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ ESCROW │ │
│ │ (заморозка Ɉ) │ │
│ └──────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
```
---
## Жизненный цикл контракта
### Статусы
| Статус | Описание |
|--------|----------|
| `DRAFT` | Черновик. Собирает голоса участников |
| `PENDING` | Одобрен Юноной. Ждёт подтверждения Стороны Б |
| `ACCEPTED` | Принят. Условия исполняются |
| `COMPLETION_VOTING` | Голосование за завершение. Свидетели подтверждают исполнение |
| `COMPLETED` | Исполнен. Escrow переведён Стороне Б |
| `CANCELLED` | Отменён. Escrow возвращён Стороне А |
| `REJECTED` | Отклонён Юноной или большинством |
### Диаграмма переходов
```
создание
┌─────────┐
│ DRAFT │◄──────────────┐
└────┬────┘ │
│ │
голосование │ >50% ЗА │ изменения
▼ │
┌───────────┐ │
│ ЮНОНА │──────────────┘
│ проверяет │ отклонение
└─────┬─────┘
│ одобрение
┌───────────┐
│ PENDING │
└─────┬─────┘
│ Сторона Б принимает
┌───────────┐
│ ACCEPTED │
└─────┬─────┘
│ /contract done
┌───────────────────┐
│ COMPLETION_VOTING │
│ (Bitcoin Pizza) │
└─────┬─────────────┘
│ кворум + Юнона
┌───────────┴───────────┐
│ │
▼ ▼
┌───────────┐ ┌───────────┐
│ COMPLETED │ │ CANCELLED │
│ (escrow→Б)│ │ (escrow→А)│
└───────────┘ └───────────┘
```
---
## Механизм консенсуса
### Кворум
Контракт требует одобрения **большинства** участников комнаты (>50%).
```python
def has_quorum(votes_approve, total_witnesses):
return len(votes_approve) > total_witnesses / 2
```
**Пример:**
- 5 участников → нужно 3+ голоса ЗА
- 12 участников → нужно 7+ голосов ЗА
### Последнее слово Юноны
Даже при достижении кворума, Юнона может **отклонить** контракт если:
1. Условия невыполнимы или размыты
2. Нет объективных критериев исполнения
3. Условия противоречат протоколу Montana
4. Обнаружены признаки мошенничества
```python
def junona_decision(contract, approve, reason=None):
"""
ПОСЛЕДНЕЕ СЛОВО: Юнона может отклонить даже с кворумом
"""
if not contract.has_quorum():
return False, "Нет кворума"
contract.junona_approved = approve
contract.junona_reason = reason
if approve:
contract.status = PENDING
else:
contract.status = REJECTED
release_escrow_to_creator(contract)
return True, "Решение принято"
```
---
## Escrow механизм
### Заморозка средств
При создании контракта средства Стороны А **замораживаются** на специальном escrow-адресе:
```
escrow:{contract_id}
```
**Пример:** `escrow:PIZZA-001`
### Движение средств
```
СОЗДАНИЕ: Сторона А ──[amount]──► escrow:CONTRACT-ID
ИСПОЛНЕНИЕ: escrow:CONTRACT-ID ──[amount]──► Сторона Б
ОТМЕНА: escrow:CONTRACT-ID ──[amount]──► Сторона А
```
### Безопасность
- Escrow-адрес не контролируется ни одной стороной
- Перевод возможен только при смене статуса контракта
- Все операции подписаны ML-DSA-65
---
## Голосование за завершение (Bitcoin Pizza Style)
### Концепция
Как в истории с Bitcoin Pizza — свидетели должны подтвердить что сделка выполнена. Не только стороны А и Б, но ВСЕ участники группы голосуют за валидность исполнения.
### Веса голосов
| Участник | Вес голоса |
|----------|------------|
| **Юнона** | 2 голоса |
| **Свидетель** | 1 голос |
### Процесс завершения
1. Сторона А выполняет условия контракта
2. Стороны предоставляют доказательства в группу (фото, видео, документы)
3. Команда `/contract done ID` запускает голосование
4. Свидетели голосуют `/contract verify ID` (за) или `/contract reject ID` (против)
5. Юнона анализирует и голосует (2 голоса)
6. При кворуме (>50%) + одобрении Юноны → COMPLETED
### Кворум для завершения
```python
total_weight = len(witnesses) * 1 + 2 # Свидетели + Юнона
approve_weight = len(votes_approve) * 1 + (2 if junona_approved else 0)
has_quorum = approve_weight > total_weight / 2
ready_to_complete = has_quorum and junona_approved
```
### Доказательства
Для подтверждения исполнения участники могут использовать:
- Фото чека/товара/результата
- Видео кружки (Telegram video circles)
- Документы (PDF, контракты)
- Скриншоты
- Любые другие медиа
Свидетели видят доказательства и голосуют исходя из увиденного.
### API
```python
# Запуск голосования за завершение
contract.start_completion_voting()
# Голосование свидетеля
contract.vote_completion(user_id="123", approve=True)
# Голос Юноны (2 голоса)
contract.vote_completion(user_id="JUNONA", approve=True, is_junona=True)
# Проверка кворума
quorum = contract.get_completion_quorum_status()
# {
# "total_weight": 7,
# "approve_weight": 5,
# "has_quorum": True,
# "junona_approved": True,
# "ready_to_complete": True
# }
```
---
## Контрактная комната
### Ограничения
| Параметр | Значение |
|----------|----------|
| Максимум участников | 12 |
| Минимум для контракта | 2 (стороны А и Б) |
| Минимум для голосования | 1 голос (при 2 участниках) |
### Верификация участников
Только реальные участники Telegram-группы могут:
- Голосовать за/против контракта
- Быть стороной контракта
```python
def validate_witnesses(group_members, claimed_witnesses):
"""
DISNEY-SAFE: Нельзя указать произвольные ID как свидетелей
"""
valid = []
for wid in claimed_witnesses:
if wid in group_members:
valid.append(wid)
return valid
```
---
## Валидация условий
Юнона анализирует описание контракта по критериям:
### Критерии выполнимости
1. **Конкретность** — есть ли чёткие критерии?
2. **Измеримость** — можно ли объективно проверить?
3. **Достижимость** — реалистично ли условие?
4. **Временные рамки** — указан ли срок?
### ExecutabilityResult
```python
@dataclass
class ExecutabilityResult:
executable: bool # Выполнимо ли условие
confidence: float # Уверенность (0.0-1.0)
concerns: List[str] # Проблемы
suggestions: List[str] # Рекомендации
```
**Порог одобрения:** `confidence >= 0.6`
---
## API
### Создание контракта
```python
db.create_contract(
contract_id="PIZZA-001",
creator_id="123456789",
target_id="987654321",
amount=500,
description="Доставка пиццы до 18:00",
chat_id="-100123456789",
witnesses=["123456789", "987654321", "111222333"],
freeze_escrow=True
)
```
### Голосование
```python
contract.vote(user_id="111222333", approve=True)
# Returns: (True, "Голос принят")
```
### Решение Юноны
```python
contract.junona_decision(approve=True, reason=None)
# Returns: (True, "Контракт одобрен")
```
### Завершение
```python
db.complete_contract_escrow(contract_id="PIZZA-001")
# Returns: (True, "Контракт исполнен! 500 Ɉ переведено.")
```
---
## База данных
### Таблица contracts
```sql
CREATE TABLE IF NOT EXISTS contracts (
contract_id TEXT PRIMARY KEY,
creator_id TEXT NOT NULL,
target_id TEXT NOT NULL,
amount INTEGER NOT NULL,
description TEXT,
chat_id TEXT,
witnesses TEXT, -- JSON array
status TEXT DEFAULT 'draft',
created_at TEXT,
accepted_at TEXT,
completed_at TEXT,
cancelled_at TEXT,
escrow_tx_id TEXT,
votes_approve TEXT, -- JSON array
votes_reject TEXT, -- JSON array
junona_approved INTEGER, -- 0/1/NULL
junona_reason TEXT
);
```
### Индексы
```sql
CREATE INDEX idx_contracts_creator ON contracts(creator_id);
CREATE INDEX idx_contracts_target ON contracts(target_id);
CREATE INDEX idx_contracts_status ON contracts(status);
```
---
## Безопасность
### Защита от атак
| Атака | Защита |
|-------|--------|
| Fake witnesses | Верификация через Telegram API |
| Double-spend escrow | Атомарные транзакции |
| Сговор большинства | Право вето Юноны |
| Размытые условия | Валидация ExecutabilityResult |
| Escrow theft | ML-DSA-65 подписи |
### Криптография
- Все транзакции подписаны **ML-DSA-65** (FIPS 204)
- Постквантовая устойчивость
- Размер подписи: 3309 байт
---
## Команды бота
| Команда | Описание |
|---------|----------|
| `/contract` | Начать диалог о контракте |
| `/contract @user 100 условие` | Создать контракт |
| `/contract accept ID` | Принять (Сторона Б) |
| `/contract complete ID` | Завершить (Сторона А) |
| `/contract cancel ID` | Отменить |
| `/contract yes ID` | Голосовать ЗА |
| `/contract no ID` | Голосовать ПРОТИВ |
---
## Примеры использования
### Доставка еды
```
/contract @delivery 500 Доставка пиццы Маргарита до 18:00 по адресу ул. Ленина 15
```
### Фриланс
```
/contract @designer 5000 Дизайн логотипа в 3 вариантах, исходники в Figma, срок 7 дней
```
### Аренда
```
/contract @landlord 50000 Аренда квартиры на ул. Пушкина 10 на январь 2026
```
---
## Roadmap
### v1.0 (текущая)
- [x] Создание контрактов в группах
- [x] Голосование участников
- [x] Escrow механизм
- [x] Решение Юноны
### v1.1 (планируется)
- [ ] Многоэтапные контракты
- [ ] Автоматические триггеры (время, события)
- [ ] Интеграция с внешними оракулами
### v2.0 (будущее)
- [ ] Кросс-чейн escrow
- [ ] Шаблоны контрактов
- [ ] Репутационная система сторон
---
**Montana Protocol — Time is the only real currency.**