У меня 20 USDT на Tron, 20 USDC на Solana, еще 30 USDC мне прислали в Base и где-то лежали 15 USDT в Ethereum. А да, там еще $100 должны были на USD счет прислать.
Есть два пути, чтобы с этим жить. Первый – дать клиенту полное управление каждым токеном (пусть даже это только стейбл токены) и пусть сам решает что с этим делать, гоняет их туда-сюда. Второй – показать человеку баланс в $185 и сказать – не парься, мы позаботимся, если ты захочешь сделать транзакцию на $68.
Мы выбрали второй путь, потому что он понятнее людям и снижает барьер входа. Для того чтобы реализовать этот подход мы попробовали два разных пути.
Как мы стартанули?
Начали с того что мы делаем внутренние exchange транзакции, если они нужны. Например, если у тебя транзакция на 68 в USDT Tron, а там у тебя пока всего 20 USDT, мы добавим в трон 48 USDT из других твоих владений и сделаем транзакцию на 68 (про gas fee пока не говорю, работа с ним – тема для отдельного поста).
Такой подход не самый простой в реализации, потому что ограничения провайдера могут тебя подловить. Например, мы не можем сделать трансфер на сумму меньше $1, поэтому калькуляция consolidation plan для таких вещей заковыристая и может приводить к ошибкам.
Самый главный минус этой схемы в другом. Когда ты делаешь эти 3 внутренних перевода, чтобы получить 68 USDT на троне, начинаются пляски с балансом. Токены на обмен уже ушли, но еще не дошли, приходится химичить и вот тут уже ошибки будут сыпаться просто регулярно. Нужно точная и выверенная работа. Или приходит письмо о том что пользователь перевел 3 USDC (а это была та самая нужная нам консолидация). Естественно, будут жалобы в саппорт и непонимание откуда эта транзакция, я ее не делал, че за бред. И пользователи будут правы, ругая нас за такое.
Ключевой плюс этой схемы – цена. Каждый обмен токенов меж сетями стоит нам денег. Когда мы сами можем оптимизировать обмен или использовать prefunded wallets, цена обмена падает драматически.
Как работает сейчас?
Мы решили упростить жизнь себе сейчас, хоть и сделать ее чуть более дорогой. Мы создаем для пользователя кошельки в разных сетях и один кошелек делаем, своего рода, главным. При переводе на любой адрес, работает автоматическая конвертация в главный кошелек и фактически баланс всегда находится в одном месте, в одном кошельке, в одном токене.
Просто, быстро, эффективно. Но дороже.
Способы оптимизировать это по цене тоже есть. Например, мы можем динамически определять какой твой кошелек сделать главным. Если мы видим что ты транзактишь в Ethereum, главный кошелек твой будет там. Если мы знаем что в твоем регионе USDT и Tron сильно популярнее остального, мы сделаем его главный прям на старте. А дальше – та же схема с prefunded wallets как и в первом случае, хоть она будет несколько сложнее в реализации, но это мелочи.
PS. В качестве шутки (а может и не шутки) обсуждали идею сделать в сервисе advanced mode для гиков, где таки дать возможность полностью рулить сетями и дать в полное управление non-custodial wallet. Поглядим, мож сделаем )
Post #319
1.03K
- 🔥 9
- 👍 4