Як працює обмін USDT на Monero в MoneroP2P
Коротко: ваші USDT лежать у смарт-контракті, який може заплатити продавцю, лише якщо той розкриє секрет. Цей самий секрет — половина ключа, якої вам бракує, від адреси Monero, куди продавець поклав XMR. Тому своп «атомарний»: або завершуються обидві сторони, або жодна. Якщо щось піде не так, контракт поверне ваші USDT.
Для новачків
Уявіть сейф із двома замками:
- Ви й продавець («мейкер») разом створюєте адресу Monero, і кожен має лише половину ключа. Без обох половин ніхто не може перемістити те, що там лежить.
- Ви вносите USDT у контракт. Контракт уміє перевіряти половину ключа мейкера, але не знає її.
- Мейкер вносить XMR на спільну адресу. Застосунок перевіряє, що надійшла потрібна сума.
- Ви підтверджуєте в контракті, що все гаразд.
- Мейкер забирає USDT і для цього має передати контракту свою половину ключа, а контракт публікує її в блокчейні.
- Застосунок бере цю половину ключа, поєднує з вашою й надсилає XMR на вашу адресу.
Якщо мейкер так і не внесе XMR, ви не підтверджуєте й отримуєте свої USDT назад через повернення.
Що потрібно
| Що потрібно | Навіщо |
|---|---|
| Браузерний гаманець (MetaMask або сумісний) з USDT | Внести депозит у контракт |
| Трохи монети мережі (наприклад, ETH в Arbitrum) | Сплатити газ |
| Адреса Monero | Отримати XMR (як створити гаманець) |
| Файл відновлення, захищений паролем | Продовжити своп, якщо ви закриєте вкладку |
Два строки (t0 і t1)
| Момент | Що можете ви | Що може мейкер |
|---|---|---|
| До t0, ще без підтвердження | Підтвердити або зробити повернення | Нічого |
| Після підтвердження або між t0 і t1 | Чекати | Забрати оплату (розкривши свій секрет) |
| Починаючи з t1 | Зробити повернення | Нічого |
Важливо: якщо ви не підтвердите й не зробите повернення до t0, контракт дозволить мейкеру забрати оплату, навіть якщо він не вніс XMR. Тому застосунок сам просить зробити повернення, коли XMR не перевірено до наближення t0, і тому потрібно зберігати файл відновлення.
Технічне пояснення
- Половини ключа. Кожна сторона обирає 252-бітний скаляр
s. Ключ витрачання спільної адреси —S_taker + S_maker(ed25519); ключ перегляду —v_taker + v_maker. - Доказ DLEQ. Кожна сторона доводить, не розкриваючи його, що за її ключем ed25519 (Monero) і ключем secp256k1 стоїть той самий
s— саме це перевіряє контракт. Ми використовуємо конструкціюsigma_fun, як в eigenwallet. - Контракт. Один ескроу на своп (клон EIP-1167) зберігає
keccak(s_maker·G)іkeccak(s_taker·G).claim(s_maker)іrefund(s_taker)перевіряють секрет за допомогою трюку зecrecover. Їхні вікна ніколи не перетинаються. - Перевірка XMR. Мейкер надсилає ID транзакції та ключ транзакції; застосунок перевіряє платіж через
check_tx_key, не синхронізуючи весь гаманець. - Виведення. Щойно секрет мейкера з’являється в події
Claimed, застосунок обчислюєs_taker + s_makerі надсилає XMR на вашу адресу.
Повний опис — у документі про архітектуру (іспанською); протокол ґрунтується на роботі AthanorLabs.