12 KiB
Atomic Swap Протокол Montana ↔ Monero
Версия: 1.0 draft Тип интеропа: trustless, без bridge, без custodial endpoint, без wrapped токенов
1. Цель
Дать пользователю возможность обменять XMR ↔ TC (Junona) атомарно — либо обмен происходит для обеих сторон, либо не происходит ни для одной. Никто никому не должен доверять.
2. Принципиальная схема
Используется классическая HTLC (Hash Time Lock Contract)-схема, адаптированная под особенности обеих цепей:
Алиса хочет обменять X XMR на Y TC.
Боб хочет обменять Y TC на X XMR.
1. Алиса генерирует secret S, вычисляет H = SHA-256(S).
2. Алиса публикует H публично.
3. Алиса блокирует X XMR на Monero с условием:
"Боб может потратить если предъявит S таком что SHA-256(S)=H,
OR Алиса может вернуть после 24 часов".
4. Боб видит блокировку Алисы, проверяет H, блокирует Y TC на Montana с условием:
"Алиса может потратить если предъявит S таком что SHA-256(S)=H,
OR Боб может вернуть после 12 часов".
5. Алиса предъявляет S и забирает Y TC на Montana.
В этот момент S становится публично известен (в Montana блокчейне).
6. Боб видит S в Montana блокчейне, использует его чтобы забрать X XMR на Monero.
Если Алиса не предъявит S в первые 12 часов — Боб откатывает Y TC.
Если Боб не блокирует Y TC в Monero после Алисы — Алиса откатывает X XMR через 24 часа.
Атомарность: либо оба обмена произойдут, либо оба откатятся.
3. Адаптация под Monero (challenges)
3.1 Monero не поддерживает HTLC native
Monero — UTXO с ring signatures, без Turing-complete VM. Прямой HTLC через скрипт невозможен.
Решение через Adaptor Signatures (Adaptor Sigs):
Используется паттерн из Joint Multi-Asset Atomic Swaps (COMIT 2020-2024). Аналог BTC-XMR atomic swap уже работает в production.
Идея:
- Вместо HTLC на Monero — adaptor signature: Боб создаёт partially-signed transaction которую может завершить только зная S.
- Когда Алиса предъявляет S на Montana чтобы забрать Y TC, S становится публичным.
- Боб видит S, завершает adaptor signature, потребляет UTXO Алисы на Monero.
3.2 Адаптация под Montana
Montana поддерживает HTLC через расширение Account Chain:
HTLC Operation:
- lock_amount: TC
- hash_target: H = SHA-256(secret)
- claimer_pk: ML-DSA-65 PK получателя при предъявлении secret
- refund_pk: ML-DSA-65 PK отправителя при истечении timeout
- τ_timeout: окно после которого refund возможен
Это требует расширение типов операций на уровне спеки Монтаны (см. 04 Спецификация §«Типы операций»).
4. Полный протокол с PQ-учётом
=== Phase 1: Setup ===
Алиса:
S ← random(256 bits)
H = SHA-256(S)
Sign(H) using ML-DSA-65 # подтверждение что Алиса знает S
Алиса публикует H + signature через off-chain communication channel
(messenger / IRC / etc.) — это ваш choice, не часть протокола.
=== Phase 2: Lock на Monero ===
Алиса публикует Monero transaction:
- input: X XMR (Алиса owns)
- output: blocked under spendable-by-knowledge-of-S
- использует Schnorr adaptor signature pattern
(детали Monero adaptor sig: см. реализацию COMIT xmr-btc-swap)
=== Phase 3: Verify + Lock на Montana ===
Боб видит Monero transaction Алисы.
Боб проверяет hash_target = H, amount = X XMR, structure correct.
Боб публикует Montana HTLC operation:
- lock_amount: Y TC
- hash_target: H
- claimer_pk: Alice_ML-DSA-65_PK
- refund_pk: Bob_ML-DSA-65_PK
- τ_timeout: текущее окно + (12 часов / 60 секунд) = +720 окон
=== Phase 4: Алиса забирает TC ===
Алиса публикует Montana claim operation:
- reveals S
- signs with Alice_ML-DSA-65_SK
- Montana verifies SHA-256(S) == H ✓
- Montana transfers Y TC to Alice's account.
- S теперь публичен в Montana блокчейне.
=== Phase 5: Боб забирает XMR ===
Боб видит S в Montana блокчейне (читает события window τ_claim).
Боб использует S чтобы завершить Monero adaptor signature.
Боб spends Алисин Monero UTXO → X XMR теперь у Боба.
=== Phase 6: Refund (если что-то пошло не так) ===
Если Алиса не публикует S в первые 720 окон Montana (12 часов):
Боб публикует Montana refund operation, забирает Y TC обратно.
Если Боб не публикует Monero lock после Алисы:
Алиса публикует Monero refund (через 24 часа = 1440 окон).
5. Безопасность
5.1 Атомарность
Теорема (informal): при честных Монтане и Monero (валидаторы обеих сетей следуют протоколу), либо обе стороны получают желаемое, либо обе сохраняют исходные средства.
Доказательство опирается на:
- HTLC на Montana гарантирует что либо Алиса предъявит S и получит Y TC, либо Боб откатит после τ_timeout.
- Adaptor signature на Monero гарантирует что Боб может завершить swap iff S известен; знание S следует из факта что Алиса опубликовала claim на Montana.
- Timeout на Monero (24 часа) > Timeout на Montana (12 часов): даёт Алисе window забрать TC до того как её XMR откатится. Это критическое условие.
5.2 Атаки
| Атака | Защита |
|---|---|
| Алиса не публикует S | Боб откатывает после 12 часов |
| Боб не лочит TC после XMR | Алиса откатывает после 24 часов |
| Race condition: Алиса claim'ит TC в последний момент перед Боб refund'ом | Buffer 12 часов разница timeout'ов |
| Front-running S в Montana mempool | После Алисиного claim'а Боб уже знает S; новых "крадущих" Бобов на Monero нет |
| Reorganization Montana блокчейна | Подождать N окон финальности перед предъявлением (см. 01 Консенсус) |
6. Что должно быть на стороне Monero
Реализация на Monero:
- Wallet RPC расширение или standalone tool который выполняет:
- Создание adaptor signature lock'а.
- Проверка blockchain Montana на появление S.
- Завершение adaptor signature после получения S.
Это можно реализовать как Monero wallet plugin или как standalone bridge daemon работающий рядом с обычным Monero wallet.
Не требует хард-форка Monero. Используются существующие primitives.
7. Что должно быть на стороне Montana
Расширение Account Chain (см. 04 Спецификация):
- Новый тип операции:
HTLCLock. - Новый тип операции:
HTLCClaim(предъявление S). - Новый тип операции:
HTLCRefund(после timeout).
Это breaking change в спеке → требует MIP в 12 Управление.
8. Численный пример
Алиса меняет 0.5 XMR на 100 Ɉ TC.
Phase 2 — Алиса лочит 0.5 XMR на Monero:
size: ~3 КБ tx (стандартный Monero)
fee: ~0.0001 XMR
Phase 3 — Боб лочит 100 Ɉ TC на Montana:
size: ~5 КБ tx (стандартный Montana HTLC)
fee: ~0.001 Ɉ (1 секунда времени, по поокнной модели)
Phase 4 — Алиса claim 100 Ɉ:
size: ~5 КБ tx
fee: ~0.001 Ɉ
reveals S in window τ.
Phase 5 — Боб spends 0.5 XMR using S:
size: ~3 КБ tx Monero
fee: ~0.0001 XMR
Total time: ≈ 10 минут (зависит от network confirmations).
Total fees: ~0.0002 XMR + ~0.002 Ɉ.
9. Какие проблемы остались
- Atomicity при partition. Если Montana или Monero сеть split'ится в момент swap — может произойти неоднозначность. Стандартная защита — длительный timeout.
- Frontrunning Алисы со своим transaction. Mitigation — публикация S через коммитмент со временем reveal'а.
- MEV на Montana. Если оператор-победитель окна смотрит на содержимое его блока, он мог бы reorder. Лотерея определяется детерминированно из VDF — тяжело manipulate (см. 07 Модель угроз §2.10).
10. Roadmap реализации
См. Дорожная карта, milestone M11:
- Спецификация HTLC operations в Montana (MIP-001).
- Reference implementation на Rust в
mt-htlccrate. - Adaptor signature wrapper для Monero (либо использовать существующий xmr-btc-swap код, переориентировав на Montana вместо Bitcoin).
- Тестовая сеть atomic swap mos↔Monero stagenet.
- Audit обеих стороны: Monero adaptor sig + Montana HTLC.
- Mainnet activation.
11. Связанные документы
- Архитектура — общий контекст приватного слоя.
- Вызов Монеро-сообществу — Path 2 включает совместное ревью этого протокола.
- 04 Спецификация — куда добавятся HTLC operations.
- 12 Управление — MIP-процедура.
12. Источники
- COMIT (2020). XMR-BTC Atomic Swap. github.com/comit-network/xmr-btc-swap.
- Pieter Wuille (2018). Schnorr Signatures and Adaptor Signatures.
- Andrew Poelstra (2017). Mimblewimble. (Adaptor sigs theory).
- Tairi, E., Moreno-Sanchez, P., Maffei, M. (2021). A2L: Anonymous Atomic Locks for Scalability in Payment Channel Hubs. IEEE S&P.
- Hash Time Locked Contracts (HTLC) — Bitcoin Wiki.