Перейти к содержимому
← Назад к документации

Логика исполнения свапа

Модуль исполняет свапы в обоих направлениях пары: пользователь продаёт BTC за USDT (фаза Inventory Fill) или покупает BTC за USDT (фаза Inventory Release). Ниже — пошаговые сценарии обоих направлений и точные изменения балансов инвентаря.

5.1 Пользователь продаёт BTC (BTC → USDT)

Это фаза Inventory Fill: система покупает BTC у пользователя и накапливает его.

Последовательность:

  1. Фиксация курса. Фиксируется курс BTC/USDT путём хеджирования: цена сделки определяется в момент создания свапа и не меняется, пока пользователь выполняет свою часть.
  2. Пользователь отправляет BTC на адрес, выданный системой.
  3. Ожидание подтверждений. Система ждёт требуемое число подтверждений сети.
  4. Зачисление в инвентарь и выплата. После подтверждений система увеличивает BTC-инвентарь и отправляет пользователю USDT.

Изменение балансов:

inventory_BTC  += amount_BTC     # инвентарь BTC растёт (покупка)
inventory_USDT -= amount_USDT    # запас USDT уменьшается (выплата пользователю)
Псевдокод исполнения:

on_swap_btc_to_usdt(amount_BTC):
rate = pricing_engine.final_rate(“BTC/USDT”)   # фиксация курса (хеджирование)
amount_USDT = amount_BTC * rate

btc_tx = await_user_deposit(amount_BTC)         # пользователь отправляет BTC
wait_confirmations(btc_tx)                      # подтверждения сети

inventory_BTC  += amount_BTC                    # Inventory Fill
inventory_USDT -= amount_USDT
send_usdt_to_user(amount_USDT)                  # выплата

5.2 Пользователь покупает BTC (USDT → BTC)

Это фаза Inventory Release: система продаёт BTC из ранее накопленного инвентаря.

Последовательность:

  1. Проверка инвентаря. Проверяется наличие BTC в inventory: available_balance >= amount_BTC. Если доступного BTC недостаточно, сделка из инвентаря не исполняется.
  2. Фиксация курса и создание свапа.
  3. Пользователь отправляет USDT.
  4. Выплата из инвентаря. Используется ранее накопленный BTC: система списывает его из инвентаря, и пользователь получает BTC.

Изменение балансов:

inventory_BTC  -= amount_BTC     # инвентарь BTC уменьшается (продажа из запаса)
inventory_USDT += amount_USDT    # запас USDT растёт (оплата пользователя)
Псевдокод исполнения:

on_swap_usdt_to_btc(amount_BTC):
require inventory_BTC.available_balance >= amount_BTC   # проверка инвентаря

rate = pricing_engine.final_rate(“BTC/USDT”)
amount_USDT = amount_BTC * rate

usdt_tx = await_user_payment(amount_USDT)               # пользователь платит USDT
wait_confirmations(usdt_tx)

inventory_BTC  -= amount_BTC                            # Inventory Release
inventory_USDT += amount_USDT
send_btc_to_user(amount_BTC)                            # выплата из инвентаря

Симметрия модели

Два сценария зеркальны: заявка одного пользователя пополняет инвентарь, заявка следующего — расходует его. BTC, купленный на фазе Fill у пользователя A, становится источником выплаты на фазе Release пользователю B. Состояние позиции между фазами отслеживает Inventory Model, а цену, которая балансирует поток, формирует Pricing Engine.

См. также