Костыли, которые горят, пока всё лопается: как выглядит разработка под децентрализованные финансы

image
Из рекламы МММ: он не халявщик, а партнёр!

Тут на днях один молодой бомж с филфака СПбГУ дал интервью Карлсону (тому, что живёт в Х). После чего куча моих знакомых стала задавать вопросы про блокчейн-разработку (крипту). Ну и ещё в Телеге запустили переводы в один клик, и мне есть что про это рассказать.

Большая часть кода — это опенсорс от разных проектов и сетей. Криптовалюты образовали несколько веток развития, и внутри каждой сети плюс-минус свой набор инфраструктурных решений. Между собой они соединены примерно никак или костылями. Интерфейсы так же дружелюбны, как у Vim в сравнении с Word. API есть, иногда задокументированы, иногда нет (тогда приходится реверсить смарт-контакты или шаблоны кода), иногда работают не так, как в документации.

Стартап работает на стартапе: например, кто-то может долго контрибьютить в библиотеку и инфраструктуру, а потом за неделю свернуться и всё прикрыть. И когда я говорю «инфраструктуру» — это значит, что какая-то часть маршрутов обмена тех же криптовалют будет закрыта одномоментно. Если вы это имплементировали — это ваши проблемы. Мы в процессе разработки омничейн-продукта столкнулись с таким не раз.

Одна из самых больших ценностей — смарт-контракты. Это (упрощая) своего рода боты, которые умеют выполнять какую-то часть работы. Они открыты, их могут читать все, и через это строится доверие. Чтобы выпустить смарт-контракт, обычно нужно позвать аудиторов, они подтвердят, что он работает так, как описано, и затем только его загрузят на прод. Ну или автор смарт-контракта может внезапно обновить его на отъём всех денег у населения, и тогда пострадает только его репутация.

В общем, добро пожаловать в мир разработки на ончейн-данных. Ща познакомлю вас с некоторым дерьмом. Начнём с того, как одномоментно полтора миллиона человек потеряли свои деньги после краха FTX.

Кто я вообще нахер такой


В принципе, вам пофиг, вы завтра забудете. Поэтому имя, если надо, смотрите в профиле. Важно то, что я пару лет работал в разработке крупного обменника в области централизованных финансов, а вообще в разработке с 2014-го, а в крипте с 2017 года. Централизованные финансы (цефай, CeFi) и появление в противовес им децентрализованных (дефай) — это самые большие изменения, которые случились в мире примерно в 2021 году.

Децентрализованная финансовая система — это когда нет центра, который процессит операции или что-то обеспечивает. Простой пример: в CeFi биржа решает, как применять правила безопасности, с кем из клиентов соглашаться, кому отказывать в транзакции и т. п. Если биржа решит вас прокатить с закрытием счёта по подозрительной операции, вы об этом узнаете постфактум и даже не поймёте, в чём дело. Потому что биржа создаёт правила, меняет их, трактует их и так далее. И вы же должны доверять ей, что те деньги, которые вы туда положили, используются именно так, как они говорит.

В крипте цефай означает, что вы можете сделать некий аналог инвестиции с известным риском, а в ответ вам централизованная система подмешает риск, который в разы выше. Это как вкладываться в ПИФы банков, но не знать, что внутрь они пихают мусорные компании.

Дефай задумывался как противоположность этому. В децентрализованных финансах главное — смарт-контракты. Условно говоря, вы пишете правило и придаёте ему самостоятельное существование. Начиная с момента релиза смарт-контракта, правило начинает применяться прозрачно и одинаково для всех игроков рынка. То есть вы не можете взять и сделать исключение «для своего», скрыть часть данных или ещё что-то намутить. Собственно, Павел Дуров как раз много говорил про такую свободу в коммуникациях, а мне очень хотелось верить в это интервью.

У нашей CeDeFi-платформы было под управлением 360 млн долларов на пике, от 50 тысяч инвесторов из 83 стран. Модель такая: конечный юзер заносил деньги с карты или USDT, получал токен, а мы под капотом агрегировали все лучшие стратегии доходности в DeFi, тем самым упрощая юзер-экспириенс для конечного пользователя.

Это круто работало, пока не случился очередной трешняк. Сначала сломался алгоритмический стейбл, рынок сильно упал. Чуть позже продолжилось тотальным падением из-за FTX. Вот очень подробный пост на эту тему. Процитирую главное про биржу: «Неудивительно, что среди клиентов FTX началась паника: к 8 ноября объём изъятий средств с криптобиржи достиг 6 млрд долларов, а токен FTT просел уже на 80% с начала месяца».

Причина — централизованная компания оказалась фактически пирамидой, устраивавшей дичь взакрытую. Весь рынок обвалился примерно на 70%. Вместе с токеном нашей платформы. Собственно, это похоронило и наш проект. Как и ещё сотни проектов по всему рынку.

Так вот, после этих событий я и ещё несколько человек со всем этим опытом пришли делать инфраструктурный, но уже децентрализованный проект. Наш план был в создании омничейн-платформы над всеми сетями для того, чтобы можно было, условно, совершать сделки в один клик.

При чём тут один клик и что вообще творится с интерфейсами


Работа в децентрализованных финансах несёт весьма ощутимые неудобства и проблемы. Неудобств много.

Проблемы тоже существенные. Основная проблема в том, что рынок состоит из множества сетей. Каждая сеть, как правило, это какие-то раздельные кошельки. Для того чтобы использовать дефай, юзеру нужны 3–5–10 кошельков (стандартная норма по нашему исследованию дефай-юзеров). Чтобы хранить эти кошельки, нужно надёжно хранить сид-фразы, и если вы потеряете эти грёбаные 12–24 слова, вы лишитесь всех денег.

А между делом, пока вы подключаетесь к разным протоколам, вокруг сплошной скам и мошенники на охотничьей тропе. И нужно быть уверенным, что этот протокол безопасен. То есть безопасность в дефае — это вообще одна из ключевых проблем. Нужно найти адекватный протокол, адекватную стратегию и разобраться в них, чтобы ваши деньги куда-нибудь не увели на фишинговом сайте или левом протоколе. Ещё одна глобальная проблема — обмен токенов с одной сети на другую.

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

То, что на днях сделал Телеграм с возможностью в один клик конвертировать доллар в токен и переводить этот токен, — это подвиг масштабов всего рынка. Так вот, мы делаем что-то такое не для одной сети, а для всех сетей. Сейчас расскажу про особенности разработки для этого ада.

Итак, основа инвестиций дефая — это смарт-контракты со стратегиями, что покупать, как покупать и когда покупать. Условно, вы платите смарт-контракту, а он дальше распоряжается вашими деньгами, и, если вы запросите вывод, — выдаёт ликвидность обратно.

Выбор стратегии сейчас напоминает выбор вклада в банке без знания рынка. Надо пойти в 10 банков ногами физически, в каждом открыть счёт, пройти все проверки, комплаенс, показать паспорт и жопу, дать согласие на обработку персональных данных и сдать кровь. После этого вам скажут, какой процент на вклад и другие условия. То есть первая задача — научиться хотя бы собирать информацию в одном месте. Информация, кстати, вся открыта и лежит в ончейн-данных, просто нужно её прочитать, разметить и обработать. Ну и реализаций стандартов там зоопарк, как их самих стандартов.

Предположим, вы даже выбрали стратегию после всего этого. Осталось, утрируя, дать денег смарт-контракту. Это тоже проблема — вам надо будет зайти в 3–4 кошелька, точно подсчитать, что сделать, произвести массу расчётов, обменов, подтверждений и т. п. То есть у вас это займёт пускай 10–20 кликов вместо трёх. Чтобы воспользоваться 5 разными продуктами на разных сетях, надо иметь 5 кошельков, к каждому нужно получить доступ через сложные механики, которые абсолютно неестественны для юзера.

Этот порог входа очень сильно отпугивает людей. Из финансов я хорошо знаю, что если бы ваши переводы с карты на карту Васе занимали бы 20 кликов в день, то все бы пользовались наличными.

Так вот, мы взялись делать некий аналог Сравни.ру для банков (где все условия и свой банковский продукт, основанный на агрегации вкладов в разные банки), только для дефая. Сбор данных, сравнение стратегий, собственные независимые метрики к ним, математические заключения на основе их историй, обзоры экспертов и быстрые конвертеры в 1 клик для инвестирования в эти стратегии. И самое главное ― это бесшовный опыт за счёт встроенного кошелька ERC-4337: Account Abstraction.

То есть мы в дефае делаем такой же опыт, как в Web2 или цефае. Как в классических финансах это делают всякие революты, пейпалы и прочие Робингуды.

Архитектура (сейчас вы заплачете)


Три основных модуля.

1. Агрегировать данные кошелька и суммаризировать все доступные юзеру активы.

То есть это управление счетами условно: система должна уметь открывать кошельки в разных местах, подключаться по API для совершения всех транзакций и тянуть данные.

Как я уже говорил, рынок представляет собой зоопарк реализаций ончейн-данных. Здесь нам понадобилось что-то, что просто умеет правильно собирать и грепать эти данные. Мы подключили поначалу Ковалент — проект, который агрегирует данные блокчейна, делает разметку, и можно дальше отображать всё в нужном качестве. Например, можно получить историю транзакций по кошельку, которую дальше можно разбить на поля или наложить что-то сверху. В общем, это API к данным через SaaS. С ним всё было хорошо, пока через 3 месяца не выяснилось, что он делает недостаточную разметку и пропускает часть операций.

Стали искать, что даёт максимально точный результат. Пошли в Дебанк — они занимаются аналитикой всех ончейн-данных. Размечают и визуализируют под себя, но предоставляют API наружу. Справлялись они до 1000 первых юзеров, то есть до второго дня интеграции (мы постепенно переключали аудиторию на него). На второй день выяснилось, что у красоты есть цена — за 3000 пользователей мы заплатили 2500 долларов. Запросы в таком количестве на нужные нам данные были очень дорогие, с такими расходами экономика просто не сходилась бы.

Третий план — использовать собственные индексеры (indexer) для сбора и разметки данных. Задача не из лёгких и быстрых. Ещё раз посчитали и оставили это на потом.

Четвёртый план — провайдер Zerion с API. У них свой кошелёк и своя аналитика, и внутри кошелька можно эту аналитику видеть. Чтобы вы понимали уровень костыльности, представьте, что то же мобильное приложение Тинькофф хочет показать вам, сколько денег у вас на рублёвом счету. Для этого оно стучит в СБП, СБП стучит в Сбер, Сбер узнаёт у Тинькофф, сколько денег на счету, отдаёт в СБП, СБП отдаёт вам в приложение. Вот примерно через такую хитро закрученную задницу в нашем мире всё и работает.

Угадайте, что будет, если очередной провайдер вдруг закроется. И да, сейчас расскажу на другом примере в третьем архитектурном блоке, но пока второй.

2. Маркет, который подключается к разным протоколам. То есть набор смарт-контрактов, каждый из которых отдаёт данные.

Ситуация примерно такая же, как с сетями с кошельками, только тут мы смотрим не активы юзера, а активы аккаунтов в местах, где юзер зарегистрировался. Подключаемся к разным смарт-контрактам и тянем с них данные по любым изменениям.

Тут всё чуть проще, поэтому мы сами идём в разбор протоколов. У каждого есть своя документация. Сами смарт-контракты в открытом доступе. Код можно скопировать и поковырять. По этому коду мы видим, куда и за что дёргать. В документации протокола есть всё нужное обычно. Иногда нет, тогда можно разбирать сам смарт-контракт или спросить у поддержки или сообщества.

3. Последний кубик — свопы, кросс-чейн и ZAP. Это, по сути, и есть перемещение денег.

Это основной и самый сложный модуль, мостик из одного места в другое. То есть из кошелька в кошелёк или в смарт-контракт. По сути, очень грубо, это наша самописная костыльная СБП для дефая. Но, в отличие от СБП, куда меньше и страшнее внутри.

Для того чтобы всё это делать, нужны смарт-контракты, которые реализуют операции. Напоминаю, смарт-контракт — это вроде бота, а бот — это вроде банковского оператора. Ему дали доллары и платёжку, он что-то забил в компьютер (обратился по API), у вашего друга Васи на счету появились цифры в рублях. Смарт-контракты так и делают. То есть это роуты между всем, что есть в сети.

Писать смарт-контракты люто дорого. Технически это свод правил операции (код), написанный на одном из языков. Около 80% смарт-контрактов пишутся на Солидити, и это должен как минимум уметь читать на лету любой дефай-разработчик.

Хорошие смарт-контракты не поставляются по лицензии AS IS. Они обычно неразрывно связаны с разработчиком, и разработчик отвечает за их надёжность и безбажность как минимум своей репутацией. Для того чтобы разработать хороший смарт-контракт, обычно стоит обратиться к компании, которая специализируется на том, что он будет реально хорошим.

Как в реальном мире вы идёте к юристам, чтобы составить договор, так и тут вам стоит сходить к разработчикам, чтобы получить смарт-контракт. Они напишут его с гарантией хорошо, потом отдадут аудиторам, потом покажут сообществу, только потом отрелизят. Если нужно будет что-то поменять или внести апдейт — путь такой же. Расскажут сообществу, покажут изменения кода, покажут заключение аудиторов, подождут, пока все всё обсудят, потом отрелизят. В проде смарт-контракт становится самостоятельным без таких апдейтов. Это похоже на опенсорс как таковой.

То есть писать собственный смарт-контракт дорого. Мы брали смарт-контракты из пула готовых у провайдера Wido. Там классический 1-click для пользователя, хорошие роуты, хорошее API. Но через месяц они присылают письмо: уважаемые друзья, у вас месяц собрать чемоданы и переехать отсюда на хер. К слову, сейчас они закрылись и делают что-то другое. Спасибо, что хотя бы предупредили. У нас тогда уже были тысячи юзеров, мы пребывали в лёгком шоке. Спешно пошли в новую архитектуру со смарт-роутингом, где существует несколько провайдеров одновременно для получения лучшего курса и подстраховки на случай закрытия проекта. Они специализируются на роутах в 1 клик. Заменили кубик.

В этот момент ко мне пришёл CTO Кирилл и сказал, что он в рот … такие истории не хочет повторения сюжета. Поэтому предлагает делать минимум 2 провайдера на каждую задачу. Сейчас их по 2, мы хотим больше — потому что знаем, что проекты регулярно выпадают. В мире крипты они это делают довольно часто.

Итак, у нас получилось сделать агрегацию активов в одном месте, варианты «вкладов в разных банках» (точнее, инвестиционных стратегий от разных площадок) и механизмы для перекидывания активов между этим всем. Сверху мы наложили аудиты, риск-скоринг, плюсы-минусы от экспертов и удобные интерфейсы, понятные обывателям. Зарабатываем на 0,3% за транзакцию, позже будем писать свои финансовые стратегии и будем брать 5–8% performance fee, то есть только с выведенной прибыли и с наших стратегий.

image
Вот так это выглядит (но постоянно меняется)

Это всё заняло около года.

Люди


В дефай приходят те, кто верит во что-то светлое и децентрализованное. Кто в детстве вешал постеры Information must be free на стены и так далее. Кто не хочет, чтобы банки или другие рептилоиды управляли финансовой системой и мутили втёмную свои дела. Потому что дефай прозрачный, просто пока что очень сложный для юзера.

Вот Кирилл рассказывает про себя. Его история, наверное, типичная:

«Учился я на инженера. Где-то с 2012 года начал проявлять интерес к программированию. Это я ещё учился в институте и начал заниматься фрилансом. Поначалу пошёл инженером-конструктором по профессии. Спустя примерно семь месяцев, работая по специальности, я плюнул на неё и устроился в web-студию. Это 2018-й был, в конце года перешёл в блокчейн-компанию. Шёл в сомнениях, потому что казалось пирамидой какой-то. На тот момент у меня только на слуху было про биткоин и всё такое. Я особо в это не вникал. Когда пришёл туда, там нормальный такой СТО был, прям мозговитый. Он построил целиком всю эту сеть, блокчейн развернул. Она была в России номер один. Называлась сеть ACRYL на базе Waves. Набрался до фига этого опыта. Это всё прям нормально бустануло, что я начал специализироваться именно на блокчейн-продуктах.

Был полный развал, особенно технический. Куча багов, не было нормальных метрик даже технических. В общем, я там начал этим заниматься. Сначала для себя, потому что я был единственным бэкендом в команде. Потом уже меня назначили техлидом в команде, которая именно занималась обменом. В дальнейшем уже, когда было три команды.

После этого только ими и занимался. Потом ACRYL этот немножко соскамился, то есть я был прав, что это пирамида. У компании было два направления: B2B и B2C. B2B было связано с людьми, которые покупали ноды для обеспечения сети, им было гарантировано 200 долларов в месяц дохода. B2C-направление было связано с пользователями блокчейна. Пользователей было не так много, чтобы оплачивать все эти 200 долларов на каждого держателя нода ежемесячно, поэтому это оплачивалось с продажи новых нод. Звучит, как полный МММ. Гендир был на должности политика в Алтайском крае, вроде против него даже за взятки судились.

После ACRYL оказался в роли бэкенда одного из самых крупных крипто-обменников, только-только набиравшего обороты. Преодолев все стартаперские челленджи, я трансформировался из мидла в сеньора, а несколько позже и в CTO. И всё бы супергуд, но бэкенд перерос в ералаш с бесконечными созвонами и рутиной типичного менагера. Моей новой реальностью стали сообщения в бесконечных тредах Слака, гуглмиты и мониторинг досок в Jira. Иногда в Grafana заходил посмотреть, что у нас лежит. Я почти забыл, как выглядит написание кода. Это нужно было срочно менять. Так я попал в Rivo, дефайный стартап».

В последнем предложении — это он про нас. Но от нас он тоже уже скоро уходит, потому что его новой реальностью стали сообщения в бесконечных тредах Слака, гуглмиты и мониторинг досок в Notion.

Из важного — он нам поставил архитектуру по вот тем кубикам, как выше, и взаимозаменой провайдеров на лету (если один не отвечает, делаем через другого) и переписал все вычисления с бэкенда с Node.js на микросервисы Golang. Почему Го — потому что при обработке ончейн-данных настоящий хайлоад нужно сагрегировать очень много разношёрстного. Точнее, сам JS у нас так и остался JS. Все запросы до сих пор летят в Node.js-стек, а он уже распределяет, иногда в го-часть.

Так что поначалу это был CTO, который пишет код (говорят, ужасная ситуация), а потом стал CTO, который остался на встречах. Собственно, сейчас он решил попробовать себя в предпринимательстве и пойдёт пилить свой проект. Как мы когда-то начинали пилить свой. А нам по-прежнему нужен играющий тренер, который пишет код.

Дефай сделан пока из палок


Палок много, но они — костыли. Инфраструктура и рынок очень молодые, поэтому пока можно приходить на всё ещё развал (где мы как раз наводим порядок) и творить любую дичь. В сферу приходят люди с горящими глазами, которых мотивируют самые разные люди — от Дурова до сотрудников военкомата.

Главное, чего сейчас не хватает, — абстракции аккаунтов. То есть смарт-контракта, который позволяет программировать различные функции для юзера. По сути, его можно будет завернуть в обычную упаковку: вход через гугл-аккаунт, оплата любым токеном или валютой и так далее.

Вот примерно так оно всё выглядит. Готов ответить на тупые вопросы. И на умные тоже.

Вот тут я уже писал про технологию запов (смарт-контрактов для роутинга активов), вот про абстракцию аккаунтов и куда мы все бежим, вот тут наша открытая документация проекта, начинающаяся с проблем. Есть проект манифеста — я был очень серьёзен, когда говорил про идейных разработчиков (деньги тоже большие, но идейность важнее). И вот моя Телега: t.me/ha1ex

Habrahabr.ru прочитано 3159 раз