E-Crypto: ТЗ?
Нужно реализовать криптовалютную биржу и p2p функционал на внутренней системе для приложения в VK.
Для общения с блокчейном предоставляется "ядро", которое имеет документацию и функционал:
- Создание кошелька для пользователя (кастодиальный) - выдача номера кошелька (hash) пользователю (user_id)
- Пополнение (прием валюты) - БД получает инфу от "ядра", кто (user_id) пополнил биржу какой валютой (currency)
- Выпуск криптовалюты (вывод крипты из приложения на внешний некастодиальный кошелек)
Что нужно реализовать
Биржа
Типичная биржа, как везде, работающая по принципу peer-to-peer (p2p). Единственное отличие в том, что все сделки обрабатываются автоматически, без взаимодействия двух сторон в реальном времени.
Имеется общий список заявок от разных людей на покупку/продажу чего-то за сколько-то (один токен на другой токен).
Так условно выглядит текущий стакан и может "висеть" в таком состоянии долгое время, прежде, чем появятся пересечения, которые их закроют.
По логике, первый и третий заявки закрываются автоматически друг другом. Тот и тот имеют одинаковую цену и типы токенов. В итоге первый автоматически покупает 100А у третьего за 50Б. При этом третий остается, но с 150А за 50Б, тк у него купили на все. Точно так же работает и когда покупают больше, чем продают.
Чтобы купить/продать на бирже, есть два способа:
- Лимитный ордер — указываешь, что продаешь/покупаешь и за какую цену (потом ждешь, когда совпадет)
- Рыночный ордере — указываешь, что продаешь/покупаешь без цены (для срочного, тк работает немного иначе, но сделка закрывается сразу: цена выставляется автоматически по минимальной на покупку/продажу в стакане)
В итоге будут куплены 3*70 + 4*80 + 3*90
В стакане останутся 3А за 90 и 5А за 100.
С продажей работает точно так же.
P2P Сделки
Похожи на принцип биржи, но есть отличия:
- согласование двух сторон о сделке
- обмен крипты и реальных денег (в нашем случае)
- только лимитный ордер
Такой же список заявок (стакан), только теперь мы например продаем рубли и покупаем крипту. Мы выбираем заявку и тому человеку отправляется уведомление о сделке. Он ее принимает и его крипта замораживается беком. Нам приходят его реквизиты для отправки денег. Мы отправляем и жмем подтверждение. Тот человек получает и жмет выпуск валюты. Мы получаем крипту на свой кошелек (необязательно внутренний, то есть может быть некастодиальный).
Если где-то нарушен этап с подтверждением и одна из сторон хочет удержать деньги, обычно крипту, то тогда обращение в ТП. Замороженную крипту потом все равно вышлют тому, кто покупал.
От числа успешно закрытых сделок и просто совершенных строится рейтинг человека в процентах.
Перевод / Получение
Перевод n токенов на указанный номер кошелька
Видишь номер своего кошелька, чтобы поделиться им для перевода