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

461 lines
17 KiB
Markdown
Raw Permalink Normal View History

# 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.**