Lido on DotSama — Дмитрий Захаров

Cyber Academy
6 min readSep 29, 2022

--

Представляем конспект доклада Дмитрия Захарова, CTO MixBytes, про опыт запуска протокола ликвидного стейкинга Lido на Polkadot. Спикер подробно рассказал про валидаторов, номинаторов, коллатеров, XCM-сообщения и другие элементы экосистемы. Приятного чтения!

Бэкграунд спикера

Работаю в компании MixBytes, мы занимаемся аудитами по безопасности, также запустили MixBytes Farm — выращиваем аудиторов. Люди, незнакомые с этой специальностью, за интенсив в полтора месяца становятся джунами. Набравшись опыта в аудитах, мы решили запустить свой DeFi-проект ликвидного стейкинга на Kusama и Polkadot.

Из чего состоит Polkadot

Я разделяю сеть Polkadot на два уровня: транспортный уровень, соединяющий парачейны, и уровень секьюрити, который обеспечивает безопасность каждого парачейна (parachain) и паратреда (parathread) наравне с основной сетью. В Relay Chain нет возможности писать смарт-контракты, но есть возможность трансфера нативных токенов и стейкинга. И также есть еще система передачи сообщений — XCM.

Парачейны и паратреды — уровень логики. Парачейн — выигрывается в аукционе на год, а владелец паратреда выкупает слот на короткое время, чтобы передать сети свое состояние или другие данные.

На SDK Substrate можно быстро собрать свой блокчейн, можно кастомизировать под себя какие-то функции в блокчейне, запустить свой консенсус, добавить EVM-палету, которая позволяет запускать смарт-контракты (палета — небольшой блок, отвечающий за какую-то конкретную функциональность в блокчейне. Из разных палет, как из кубиков можно собирать разные блокчейны. В Substrate (это как магазин палет, условно) есть палета, которая позволяет подключить EVM в блокчейн, и сеть Polkadot с ней совместима).

Про устройство стейкинга

Номинаторы, валидаторы, коллаторы. Номинаторы — участники голосований, голосуют токенами и поддерживают ими валидаторов, которых считают надежными. Валидаторы участвуют в консенсусе, создают блоки в Polkadot и валидируют блоки их парачейнов. Коллаторы производят блоки в парачейнах. Они отправляют состояние парачейнов в основую сеть на валидацию. В сети достаточно одного коллатерала для ее работы. Не стоит создавать слишком много коллатералов, потому что большее количество увеличивает времени на достижение консенсуса.

Доходность номинатора зависит от выбора добросовестного валидатора. Алгоритм работает так, что вознаграждения за эру (эра длится 24 часа) распределяются примерно одинаково. Но, например, два номинатора с одинаковым стейком, выбравшие разных валидаторов, получат разное количество токенов на выходе после эры. Разница может составлять 50% и даже больше.

У номинаторов есть возможность выбрать до 16 валидаторов. Эти номинации распределяются по валидаторам при помощи алгоритма Phragmen. 297 лучших валидаторов, которые набрали больше всего стейка, попадают в активный сет валидаторов на следующую эру. Через 24 часа, после истечения эры, сет активных валидаторов снова меняется.

Благодаря тому, что у каждого номинатора есть возможность сделать 16 номинаций, граф получается очень плотным. Поэтому, чтобы сеть не перегружалась на моменте выплат вознаграждений валидаторами после окончания эры, — Phragmen убирает связи между номинаторами и валидаторами, чтобы в списке осталось всего 2-3 валидатора.

Про устройство XCM

XCM — это не протокол, это формат пересылки сообщений в блокчейне. Каждый разработчик подключает его сам, но там все строго описано. Есть возможность отправлять сообщения в Relay Chain (и получать сообщения из него). Также есть возможность общения между парачейнами, но сообщения, которые отправляются между парачейнами проходят через Relay Chain. Поэтому XCM-общение между парачейнами еще довольно дорогое из-за необходимости хранить информацию в Relay Chain. Каналы однонаправленные, поэтому для обратной связи необходимо открыть два канала. Открытие канала — отдельное XCM-сообщение, запрос из парачейна в Relay Chain.

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

В нашем проекте XCM используется довольно часто и много. Мы проверяем, дошло ли сообщение, специальным сервисом, который отслеживает наши XCM-сообщения.

Про реализацию Lido на Polkadot

Lido на Polkadot имеет довольно сложную архитектуру из-за того, что логика стейкинга производится через XCM-сообщения. Проект запущен в парачейне Moonbeam из-за его поддержки EVM. Контракты нашего проекта написаны на Solidity.

Основной контракт — контракт Lido, куда пользователи делают депозиты. После обновления эры, сервисы оракулов это фиксируют и сообщают на контракт Lido. Есть алгоритм, который распределяет токены DOT равномерно между леджерами (ledger - контракт, который следит за состоянием stash account в Relay chain и управляет им через отправку XCM-сообщений). Леджеры сообщают про пополнение контроллеру (еще один алгоритм), который передает эту информацию Relay Chain, и обновляется состояние stash account для этого стейка. При этом, необходимое количество xcDOT (обернутых/wrapped DOT в Moonbeam) будут отправлены через XCM-сообщение в Relay Chain. Получается такая схема: Ledgers → Controller → XCM → Stash Account.

xcDOT работают, как и любые обернутые активы — приносите в протокол Moonbeam токены DOT, они блокируются в контракте, и Moonbeam минтит обернутые токены. При обратной операции — xcDOT сжигаются в Moonbeam, и контракт высвобождает замороженные токены DOT, пересылая их обратно в Relay Chain.

Типы сообщений в XCM

Call Bond — когда есть стейк на стэш-аккаунте, но чтобы им можно было голосовать и получать награды, нужно отправить bond-запрос. Bond вызывается один раз, все остальные разы вызывается bond extra.

Есть вызовы unbond и rebond. Есть операция по отзыву бонда, так как в Polkadot свои токены можно забрать из стейкинга при помощи этого вызова. При вызове unbond средства попадают в unlocking chunk — по сути, очередь на выход. Ассет должен прождать там 28 эр «на карантине». Это сделано, чтобы обезопасить сеть от злонамеренных операций недобросовестных номинаторов и валидаторов. Rebond — по сути, обратная операция, если номинатор решил передумать в течение этих 28 дней. Withdraw unbonded вызывается по истечению 28 эр, чтобы перевести средства на свободный аккаунт для использования.

Nominate — функция, которая позволяет балансом на своем леджере голосовать за валидаторов. Chill — если ничего не хотим делать в сети. transferToRelayChain и transferToParachain — особые вызовы для сжигания и минтинга xcDOT и наоборот.

Леджер передает вызов контроллеру, а тот — в Relay encoder, который был реализован в Moonbeam нативно, но на момент нашего запуска, эта функция еще не была задеплоена. Поэтому мы написали свой енкодер. После енкодера данные отправляются в XCM Transactor, прекомпайл, который связывает Substrate и EVM Moonbeam. XCM Transactor складывает наше сообщение в очередь на выход. Когда валидаторы из Relay Chain валидируют блок из парачейна, они выполняют и XCM вызовы заодно. Если нужно что-то отправить в другой парачейн — то нужно закинуть вызов в исходящую очередь (outcoming queue) и Relay Chain переводит их во входящую очередь (incoming queue). Еще одна особенность — execute extrinsic — можно сделать управление стейкингов, а не отправку средств. В блокчейнах надо за все платить, поэтому execute extrinsic — не бесплатная функция. За execute extrinsic платят пользователи Lido. У всех вызовов — константная плата за исполнение, но она меняется с каждым обновлением Polkadot.

Про выбор валидаторов в Lido на Polkadot

Мы решили сделать все как можно более децентрализованно. Мы решили использовать все данные: список валидаторов у номинаторов, era points, APR, стейк валидаторов, сколько было слэша у валидатора, как часто он делает выплаты и как часто он попадает в активный сет. По всем этим данным мы формируем суммарную метрику для выбора лучших валидаторов. Есть идея подключить нейросети, машинное обучение, потому что данных накопили много. Можно прогнозировать, как будет показывать себя валидатор в следуюших эрах. Сейчас мы тоже можем предсказывать, но не на длительный срок. Поэтому каждую неделю мы переноминируем валидаторов.

Про DeFi элементы проекта

Пользователи приносят xsDOT, мы обмениваем их на stDOT. Это напоминает механику стейкинга в Ethereum. Также подключен Curve pool с xsDOT и stDOT. Там можно оставить свои токены и получать комиссии от свопов. Также есть вознаграждения за счет LP-токенов. Мы работаем сейчас над внедрением еще двух пулов ликвидности. Работаем с лендинг-платформами, чтобы добавить stDOT в качестве коллатерала. Также мы занимаемся развитием стейблкоинов.

Cyber Academy — образовательная платформа для блокчейн-разработчиков. Присоединяйтесь к нам ✨

Поддержите нас на Gitcoin

Анонсы | Website | Twitter | Телеграм-чат | GitHub | Facebook | Linkedin

--

--

Cyber Academy
Cyber Academy

Written by Cyber Academy

Образовательная платформа для блокчейн-разработчиков

No responses yet