Основные операция по движению денегсредств пользователя:
Ввод средств делится на два типа: прямой депозит на горячий кошелек системы (direct deposit) и на прокси-кошелек пользователя (deposit). В последнем случае для eth-подобных блокчейнов - система несет затраты по сбору средств с прокси-кошельков на горячий кошелек системы.
Вывод средств (withdrawal)
Обмен валют без ввода/вывода средств (off-chain swap)
Ввод валюты с единовременным обменом (swap-in)
Обмен валюты с выводом результата (swap-out)
Обмен валюты, пришедшей извне, с одновременным выводом результата (on-chain swap)
...
Первые три вида комиссий direct-deposit fee, deposit fee и withdraw fee настраиваются для связки валюта+платежный интерфейс. Swap fee определяется для маркета.
Методика расчета комиссии при вводе средств:
Существует четыре параметраПараметры расчета для комиссии при депозите на прокси-кошелек/горячий кошелек системы (сущность currencyPaymentInterfaces):
minDepositAmount / minDirectDepositAmount
depositFee / directDepositFee
minDepositFee / minDirectDepositFee
maxDepositFee / maxDirectDepositFee
...
3 и 4 - граничные значения комиссии.
Методика расчета комиссии
...
при выводе средств:
Параметры для расчета вывода средств (сущность currencyPaymentInterfaces):
maxWithdrawAmount
maxWithdrawAmount24h
maxWithdrawAmount72h
withdrawFee
minWithdrawFee
maxWithdrawFee
1 параметр определяет максимальную сумму одноразового вывода денег для данной валюты в рамках указанного платежного интерфейса
2 и 3 параметры определяют максимальный лимит вывода средств за последние 24 и 72 часа соответственно.
Во всех трех случаях отказа на вывод не происходит, система требует подтверждение/отмену операции оператором.
4 параметр - это процент комиссии, взымаемой с депозита.
5 и 6 - граничные значения комиссии.
Методика расчета комиссии при обмене средств:
Параметры для расчета комиссии (сущность markets):
sell_
maxWithdrawAmount24h
maxWithdrawAmount72h
withdrawFee
minWithdrawFee
maxWithdrawFee
1 параметр определяет максимальную сумму одноразового вывода денег для данной валюты в рамках указанного платежного интерфейса
2 и 3 параметры определяют максимальный лимит вывода средств за последние 24 и 72 часа соответственно.
Во всех трех случаях отказа на вывод не происходит, система требует подтверждение/отмену операции оператором.
4 параметр - это процент комиссии, взымаемой с депозита.
5 и 6 - граничные значения комиссии.
Механизмы инициации операций по движению средств:
deposit
Генерируется На запрос от фронтенда генерируется (или если уже был создан показывается существующий) прокси-адрес (mutation generateWallet). После отправки пользователем на указанный адрес средств ). Для eth-подобных блокчейнов создается единый адрес для ввода всех валют (N.B. обязательно должен быть настроен coin для данного платежного интерфейса).
Пользователь создает транзакции по перечислению денег на указанный адрес. В процессе разбора блоков сервис платежного интерфейса получает информацию об этом и система автоматически создает операцию custodial_deposit
direct deposit
Пользователь открывает Фронтенд запрашивает ссылку для создания коннекта сессии с wallet connect 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
После запуска блокируется сумма к обмену, затем происходит конвертация средств с взыманием комиссии, затем вывод средств на указанный адрес с соответствующей комиссией.