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

17 KiB
Raw Blame 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%).

def has_quorum(votes_approve, total_witnesses):
    return len(votes_approve) > total_witnesses / 2

Пример:

  • 5 участников → нужно 3+ голоса ЗА
  • 12 участников → нужно 7+ голосов ЗА

Последнее слово Юноны

Даже при достижении кворума, Юнона может отклонить контракт если:

  1. Условия невыполнимы или размыты
  2. Нет объективных критериев исполнения
  3. Условия противоречат протоколу Montana
  4. Обнаружены признаки мошенничества
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

Кворум для завершения

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

# Запуск голосования за завершение
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-группы могут:

  • Голосовать за/против контракта
  • Быть стороной контракта
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

@dataclass
class ExecutabilityResult:
    executable: bool        # Выполнимо ли условие
    confidence: float       # Уверенность (0.0-1.0)
    concerns: List[str]     # Проблемы
    suggestions: List[str]  # Рекомендации

Порог одобрения: confidence >= 0.6


API

Создание контракта

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
)

Голосование

contract.vote(user_id="111222333", approve=True)
# Returns: (True, "Голос принят")

Решение Юноны

contract.junona_decision(approve=True, reason=None)
# Returns: (True, "Контракт одобрен")

Завершение

db.complete_contract_escrow(contract_id="PIZZA-001")
# Returns: (True, "Контракт исполнен! 500 Ɉ переведено.")

База данных

Таблица contracts

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
);

Индексы

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 (текущая)

  • Создание контрактов в группах
  • Голосование участников
  • Escrow механизм
  • Решение Юноны

v1.1 (планируется)

  • Многоэтапные контракты
  • Автоматические триггеры (время, события)
  • Интеграция с внешними оракулами

v2.0 (будущее)

  • Кросс-чейн escrow
  • Шаблоны контрактов
  • Репутационная система сторон

Montana Protocol — Time is the only real currency.