Move.

Допис

Діліться своїми знаннями.

Ramirez.
Feb 13, 2025
Обговорення

Взяття плати з монети в операції обміну DEX

Я протягом тижня боровся з виконанням контракту, який стягує плату за монету, яка використовується у свопі DEX. Здається, я не можу прочитати суму SUI монети з виводу через те, що вона споживається в транзакції. Як взяти комісію атомно, якщо такі функції, як, swap_a2bне повертають монету?

  • Move CLI
  • Move Bug
0
2
Поділитися
Коментарі
.

Відповіді

2
1 Luca.
Feb 13 2025, 11:08

Якщо ви споживаєте монету для транзакції, її не можна використовувати знову. Якщо ви використовуєте його для оплати за газ, це одноразове використання. Коли справа доходить до свопів DEX, як тільки ви передаєте монету, таку як OutCoinA, у своп функцій, вона споживається, і наступні виклики не розпізнають її, якщо не повернуться явно. Основна проблема може полягати в тому, що swap_a2b нічого не повертає, тобто ви не можете безпосередньо брати комісію після операції свопу. Вихід може полягати в тому, щоб взяти право власності на монету, яку потрібно обміняти, і після виконання свопу відняти плату перед тим, як передати результат назад користувачеві.

0
Коментарі
.
CarlkawIy.
Feb 13 2025, 11:10

Обгортання функціоналу свопу в смарт-контракт може вирішити цю проблему. Виконуючи своп у рамках контракту, ви можете керувати власністю та розподілом, щоб обробляти збори атомно. Контракт виконає своп, обробляє віднімання комісії, а потім розподіляє решту суми назад користувачеві. Ось підхід у контексті PTB: 1. розділіть монету на окрему монету, 2. передайте цю монету в смарт-контракт для свопу, обробки комісій та повернення до кроку користувача. Вам не обов'язково передавати об'єкт монети явно до кроку 2, якщо смарт-контракт приймає CoinIn за вартістю.

0
Коментарі
.

Ви знаєте відповідь?

Будь ласка, увійдіть та поділіться нею.

Ми використовуємо файли cookie, щоб гарантувати вам найкращий досвід на нашому сайті.
Детальніше