• Rough draft
  • [DRAFT] Financial Operations & Commissions

    Основные операция по движению средств пользователя:

    1. Ввод средств делится на два типа: прямой депозит на горячий кошелек системы (direct deposit) и на прокси-кошелек пользователя (deposit). В последнем случае для eth-подобных блокчейнов - система несет затраты по сбору средств с прокси-кошельков на горячий кошелек системы.

    2. Вывод средств (withdrawal)

    3. Обмен валют без ввода/вывода средств (off-chain swap)

    4. Ввод валюты с единовременным обменом (swap-in)

    5. Обмен валюты с выводом результата (swap-out)

    6. Обмен валюты, пришедшей извне, с одновременным выводом результата (on-chain swap)

    Для заработка в системе могут быть настроены следующие виды комиссии:

    1. direct deposit fee

    2. deposit fee

    3. withdraw fee

    4. swap fee

    Для комбинированных операций взимаются наборы соответствующих комиссий. Так для

    • swap-in: deposit fee + swap fee

    • on-chain swap: deposit fee + swap fee + withdraw fee

    • swap-out: swap fee + withdraw fee

    Первые три вида комиссий direct-deposit fee, deposit fee и withdraw fee настраиваются для связки валюта+платежный интерфейс. Swap fee определяется для маркета.

    Методика расчета комиссии при вводе средств:

    Параметры расчета для комиссии при депозите на прокси-кошелек/горячий кошелек системы (сущность currencyPaymentInterfaces):

    1. minDepositAmount / minDirectDepositAmount

    2. depositFee / directDepositFee

    3. minDepositFee / minDirectDepositFee

    4. maxDepositFee / maxDirectDepositFee

    1 параметр определяет сумму, меньше которой невозможно осуществить ввод денег для данной валюты в рамках указанного платежного интерфейса

    2 параметр - это процент комиссии, взымаемой с депозита.

    3 и 4 - граничные значения комиссии.

    Методика расчета комиссии при выводе средств:

    Параметры для расчета вывода средств (сущность currencyPaymentInterfaces):

    1. maxWithdrawAmount

    2. maxWithdrawAmount24h

    3. maxWithdrawAmount72h

    4. withdrawFee

    5. minWithdrawFee

    6. maxWithdrawFee

    1 параметр определяет максимальную сумму одноразового вывода денег для данной валюты в рамках указанного платежного интерфейса

    2 и 3 параметры определяют максимальный лимит вывода средств за последние 24 и 72 часа соответственно.
    Во всех трех случаях отказа на вывод не происходит, система требует подтверждение/отмену операции оператором.

    4 параметр - это процент комиссии, взымаемой с депозита.

    5 и 6 - граничные значения комиссии.

    Методика расчета комиссии при обмене средств:

    Параметры для расчета комиссии (сущность markets):

    1. buy_commission / sell_commission

    2. buy_min_commission / sell_min_commission

    3. buy_max_commission / buy_max_commission

    4. commission_currency (value: ‘base’ or ‘quote’)

    1 параметр определяет процент комиссии при обмене:

    sell - базовой на квот валюту

    buy - квот валюты на базовую

    2 параметр определяет минимальную сумму комиссии обмена

    3 параметр определяет максимальную сумму комиссии обмена

    4 параметр - это в какой валюте будет браться комиссия.

    Примеры:

    • пользователь запросил операцию sell и комиссия определена в базовой валюте, то от суммы обмена сначала возьмем комиссию, потом оставшуюся сумму обменяем на квот-валюту.

    • пользователь запросил операцию sell и комиссия определена в квот-валюте, то сначала обменяем на квот-валюту, затем от результата вычтем комиссию.

    Механизмы инициации операций по движению средств:

    deposit

    На запрос от фронтенда генерируется (или если уже был создан показывается существующий) прокси-адрес (mutation generateWallet). Для eth-подобных блокчейнов создается единый адрес для ввода всех валют (N.B. обязательно должен быть настроен coin для данного платежного интерфейса).

    Пользователь создает транзакции по перечислению денег на указанный адрес. В процессе разбора блоков сервис платежного интерфейса получает информацию об этом и система автоматически создает операцию custodial_deposit

    direct deposit (еще будут вноситься изменения)

    Фронтенд запрашивает ссылку для создания сессии с WalletConnect (mutation getWalletConnectURI_v1)

    Если пользователь первый раз подключается к WC - фронтенд сообщает бекенду о готовности подписания пользователем специального сообщения (mutation connectWallet_v1).

    После подписания сообщения система зарегистрирует кошелек пользователя (при последующих заходах подписание уже не будет требоваться).

    Далее пользователь указывает необходимую сумму депозита, соответствующая транзакция формируется беком и отправляется на подпись пользователю в его программу блокчейна.

    Дальше в процессе разбора блоков сервис платежного интерфейса получает информацию об транзакции и создается операция custodial_deposit

    withdrawal

    Инициация вывода средств вызывается с помощью mutation userWithdraw

    N.B. Следует учитывать что простом выводе средств у пользователя есть два сценария: вывести указанную сумму денег includeFees=true и получить указанную сумму денег includeFees=false (эти числа могут отличаться в случае ненулевой комиссии за вывод)

    off-chain swap

    Запуск обмена с помощью mutation userExchange

    on-chain swap

    Пользователь должен получить индивидуальный адрес для перечисления нужной суммы валюты: mutation initNonCustodialExchange

    После получения платежным интерфейсом транзакции по указанному адресу создается операция non_custodial_exchange

    chain-out

    Запуск обмена с последующим выводом инициируется с помощью mutation userSwapOut
    После запуска блокируется сумма к обмену, затем происходит конвертация средств с взыманием комиссии, затем вывод средств на указанный адрес с соответствующей комиссией.

    chain-in (в процессе)