Lido V2 Unleashed
Дмитрий Гусаков, Core Tech Lead из Lido, выступил с докладом на The Scaling Meetup в Тбилиси, где подробно рассказал про самый большой на данный момент апгрейд протокола ликвидного стейкинга Lido on Ethereum V2. Сделали краткий конспект доклада!
About Lido
Lido - это ликвидный стейкинг протокол в сети Ethereum. В основе блокчейнов лежат два механизма консенсуса: Proof of Work и Proof of Stake. Хотя есть и другие, но эти два самые популярные. Механизм Proof of Stake требует от участника сети, который хочет стать валидатором, депонировать определенную сумму в качестве залога. Это гарантирует добросовестность работы валидатора, а также дает возможность получать вознаграждение за выполненную работу.
Однако такая ситуация делит комьюнити на две части: на тех, кто готов ответственно заниматься валидацией блоков, прогонять софт, поддерживать инфраструктуру, но не имеют достаточных средств для депозита. И на всех остальных, у которых есть достаточно средств и которые готовы вложиться своими депозитами, чтобы получать вознаграждение тоже. Именно для того, чтобы объединить эти две категории, существуют стейкинг пулы.
Lido позволяет обойти ограничение на количество депозита и позволяет любому участнику сети стать валидатором и получать соответствующее вознаграждение. Для этого каждый может открыть стейк на Lido, застейкать любое количество ETH и получить в обмен stETH. Уже со следующего отчета оракула будет возможность получать награды за стейкинг.
Стейкинг является механизмом консенсуса сети, и стейкинг-протоколы делают его доступным для широкой аудитории. Стейкинг на Lido является ликвидным, потому что пользователь получает не просто залоченные где-то награды или NFT, которая позволит их когда-то забрать, или просто сидеть и смотреть на мониторе числа. Вместо этого юзеры получают ликвидный токен stETH, который в будущем могут продать или использовать в других DeFi-приложениях, например, как collateral в DAOMaker для получения xDAIi, или в AAVE-протоколе.

Introducing Lido v2
12 апреля 2023 состоялся последний большой хардфорк сети Ethereum под названием Shanghai & Capella. На данный момент сеть Ethereum состоит из двух блокчейнов:
-
Execution Layer - это тот самый привычный нам всем Ethereum, где происходят транзакции и находится смарт-контракты и с которыми взаимодействуют пользователи.
-
Consensys Layer - бывший BeaconChain, на котором валидаторы договариваются о том, какой блок следующим идет в Execution Layer, собирают аттестации, проползают блоки и так далее.
Именно поэтому хардфорки на Ethereum сейчас называются двумя названиями:
-
Shanghai - обновление для Execution Layer.
-
Capella - обновление для Consensys Layer.
И главная фишка этих хардфорков - это возможность анстейкинга.
Ethereum - это интересный блокчейн, который осенью 2022 года перешел с механизма Proof of Work на Proof of Stake. Однако, поскольку это достаточно сложная задача, переход на Proof of Stake происходил частями, и только вторая его часть произошла весной 2023 года, и в Ethereum появилась возможность антсейкинга. Ранее, чтобы стать валидатором, необходимо было депонировать средства в качестве залога collateral, и вывод этих средств был невозможен. Теперь же после обновления Capella, валидаторы могут забрать свой эфир и перестать валидировать сеть.

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

Архитектура протокола
На данный момент архитектура протокола Lido соответствует предыдущей архитектуре Ethereum. Стейкинг с Lido - это "One way ticket". Пользователь приносит свой ETH и получает взамен stETH, которым может распоряжаться в дальнейшем. Однако, в данный момент в Lido невозможно обменять свои stETH обратно на ETH.

Будущее обновление Lido v2, которое уже находится на финальной стадии и готовится к запуску в production, будет решать эту проблему. Будет добавлен второй смарт-контракт, который будет называться Withdrawal Queue. Это будет очередь, в которую пользователи смогут посылать свои запросы на вывод средств.

Важно отметить, что процесс вывода в Lido будет таким же асинхронным, как и в Ethereum. Что это значит? Представим, что пользователь является одним из валидаторов Ethereum и депонировал свои 32 ETH и выполняет работу по поддержанию сети. В какой-то момент пользователь принимает решение о том, что больше не хочет быть валидатором в сети. Тогда он публикует подписанный Exit Message, и в течение еще некоторого времени обязан продолжать работать как валидатор до тех пор, пока в сети не подойдет очередь на то, чтобы его вывести. Соответственно, когда пользователь захочет разстейкать свой ETH, это не произойдет в моменте. Исходя из этого в Lido точно также выводы будут асинхронными и будут состоять из трех основных этапов:
-
Запрос помещается в очередь.
-
Запрос удовлетворяется, то есть протокол должен найти где-то ETH, который будет выдан пользователю взамен его stETH.
-
Пользователь получает возможность забрать свои средства.

Withdrawals queue
Очередь используется, потому что процесс вывода средств на Ethereum является асинхронным, и моментально вернуть средства всем пользователям невозможно. Следовательно, необходимо установить очередность на вывод, и пользователи поочередно подают свои заявки на вывод.

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

Удовлетворение заявок на вывод происходит в момент репорта оракула. Оракулы - это off-chain приложения, которые работают за пределами блокчейна и могут переносить в блокчейн какую-то информацию. Ethereum состоит из двух блокчейнов: Execution Layer и Consensys Layer. Связь между ними на уровне Ethereum иногда слабая или местами отсутствует. В этом смысле оракулы являются очень важными, так как они могут перенести информацию между из Consensys Layer на Execution Layer.
Как начисление наград, так и удовлетворение заявок на вывод происходят в момент репорта оракула, и именно оракулы будут решать когда и какое количество заявок можно будет удовлетворить.

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

Возникает важный вопрос: откуда Lido протокол будет брать ETH для возврата взамен stETH? На первый взгляд может показаться, что если пользователь захотел вернуть свои ETH, то протоколу нужно обратно вывести валидатора из сети и отдать часть из 32 ETH, которые полагаются пользователю. Но на самом деле процесс ввода и вывода валидатора это достаточно длинные и затратные процессы и в идеальной ситуации протокол не хотел бы выполнять операции вывода валидаторов. Поэтому существует три источника ETH, которые могут быть использованы для вывода:
-
Execution Layer Rewards Vault - это те самые priority fee, которые можно добавить к транзакции, для того, чтобы транзакция прошла быстрее. Иными словами, одна из разновидностей MEV, которую блок билдеры собирают с пользователей, которые хотят, чтобы их транзакции были построены в определённом порядке или прошли через приватный мемпул. В данный момент на это прихдится 2% APR от всего APR Lido.
-
Withdrawals Vault от выводов средства от выводов валидаторов. После обновления Capella все балансы валидаторов выше 32 ETH, которые они заработали на Consensys Layer автоматически снимаются и отправляются на его withdrawal credentials - указанный адрес на Execution Layer.
-
Users deposits - средства пользователей, которые ещё не были продвинуты дальше на Consensys Layer.
В результате получается некий Lido Buffer, из которого мы можем удовлетворять withdrawals requests, или если большая часть из них удовлетворена, отправлять в staking.

Smooth UI experience
Пользователи хотят, чтобы протоколом было удобно пользоваться. Рассмотрим три ключевые особенности UI, разработанные в Lido.
1.Использование пермита - позволяет пользователю не выполнять первую транзакцию, разрешающую использование определенного количества ERC-20 токенов, определенному адресу и до определенного времени, а просто подписать предварительно сообщение-подтверждение и передать его в основной транзакции. Таким образом анстейкинг в Lido будет происходить в одну транзакцию.
-
Помимо stETH, баланс которого изменяется каждый репорт оракула в связи с вашими ревордами, в Lido есть еще и обернутый эфир wstETH, который был сделан для удобства интеграции с DeFi приложениями, которые не умеют работать с токенами с изменяемым балансом.
-
Когда запрос на вывод становится очередь, он не может быть меньше минимального и больше максимального, но при этом запрещать пользователям выводить больше максимального объёма было бы нелогично. Поэтому UI позволят разбить запрос любого размера на несколько запросов почти максимального размера.

Security constraints
Две основные Security constraints, которые предусмотрены в механизмах Withdrawals в Lido.
-
Запрос на вывод не может быть отменен.
-
Когда пользователь запрашивает вывод эфира, то есть обмен stETH на ETH, фиксируется тариф, который по умолчанию для пользователей: 1 stETH = 1 ETH. Поскольку request на вывод занимает какое-то время, и в течение этого времени реварды уже не начисляются, то в случае, например, Атаки-51 на Consensys Layer, возможна ситуация, при которой следующий репорт оракулов принесет ложную информацию. В этом случае запросы на вывод делят вместе со всеми остальными стейкерами. Курс, по которому выводится stETH в момент создания запроса и в момент завершения запроса не может быть выше, чем в момент его создания. Риски социализируются, награды нет.

Slashings
Самая плохое, что может произойти с валидатором на Consensys Layer Ethereum - это Slashing.
Slashing - это наказание для валидатора, это его насильственный вывод из сети, который предусмотрен в случае, если валидатор как-то значительно нарушает правила участия в сети. И основная задача slashing заключается не в сжигании чьих-то денег, а в обеспечении безопасности Ethereum. Если валидатор или группа валидаторов начинает вести себя плохо, то они должны нести экономические риски.
Нужно понимать, что Slashing длится долго. С момента выявления незаконного действия валидатора до его фактического вывода займет минимум 36 дней. При этом объем штрафа который получит валидатор не определяется сразу, то есть в моменте срезается с валидатора 1 ETH из его депозита, а затем следует Midterm Penalty. Ровно посередине процедуры слэшинга сеть смотрит сколько на данный момент еще валидаторов находится в процессе слэшинга, и в зависимости от этого определяет среднюю штрафную санкцию. Если валидатор послэшился по ошибке, допустим DevOps разработчики случайно запустили на одних и тех же ключах две виртуальных машины, и произошёл “double sign”, но в остальном сеть себя чувствует хорошо, то ваш штраф будет порядка 1 ETH на валидатора. Но если же это координированная атака в которой прямо конкретно кто-то пытается завалить сеть Ethereum, то это penalty может быть вплоть до полного объёма депозита. Именно поэтому нельзя с самого начала знать какие будут риски.

Это важно, потому что риски потенциальной потери денег протокола, должны быть грамотно социализированы между стейкерами. И не должно быть ситуации, когда кто-то обладает инсайдерской информацией или являясь атакующим, заранее сделает запрос на вывод, а потом послэшит Lido валидаторов или сожжет дата-центр.
В этом случае у предусмотрено два варианта:
-
Eсли slashing произошел по незначительной причине, и это касается нескольких валидаторов - потери будут небольшие, и остальные валидаторы Lido заработают денег кратно больше, а для пользователей это событие будет незаметно.
-
Если происходит массовый slashing, то у протокола есть Bunker Mode.

Bunker Mode - это режим работы протоколов, в котором все withdrawal requests, сделанные за какое-то время до и после включения режима, не становятся доступными для клейма. В момент запроса на массовый слэшинг, оракулы, понимая что происходит некая атака, которая потенциально может принести большие риски, могут принять решение о переводе протокола в Bunker Mode.

Как только quorum оракулов в следующий репорт понимает, что ситуация стабилизировалась, все штрафы известны и уже отразились в изменениях балансов, то есть были социализированы между стейкерами, протокол возвращается в Turbo Mode и снова работает в обычном режиме.

Важно понимать, что Bunker Mode скорее всего никогда не наступит, потому что по подсчётам Lido аналитиков на данный момент для того чтобы произошла активация Bunker Mode одновременно должно послэшиться как минимум 600 Lido валидаторов. Это событие крайне маловероятно, потому что на данный момент самый большой слэшинг одновременно за всю историю Ethereum - это 100 валидаторов.

Staking Router
Второй частью обновления Lido v2 является Staking Router. Поскольку Lido протокол имеет достаточно большой кусок стейка на Ethereum, одной из его миссий является поддержка децентрализации Ethereum.

Lido - это посредник между стейкерами, между пользователями, у которых есть эфириум, и между 29-ю, на данный момент, профессиональными node операторами. Между ними достаточно равномерно распределен стейк, ни у кого из них нет больше 2% от общего стейка эфира, они расположены в разных географических локациях, используют разные клиенты, но этого все равно недостаточно для, того чтобы назвать децентрализацию в том смысле слова, в котором это понимает Ethereum Foundation.

Улучшить эту ситуацию можно несколькими путями:
-
Допустить комьюнити стейкеров к валидатор сету Lido. Не смотря на то, что они не являются крупными и, возможно, сильно надежными валидаторами, которые могут приносить большой доход, но помогают с децентрализацией Ethereum.
-
Distributed Validator Technology - превращает обычного валидатора в аналог кворума оракулов. То есть несколько участников должны договориться о том, какое будет следующее действие валидатора, и только после этого оно будет совершено. Это сильно повышает, как надежность работы самого валидатора, так и децентрализацию.

Принцип работы текущей работы протокола Lido, заключается в том, что сверху располагается NodeOperatorRegistry - смарт-контракт, в котором записана информация об 29-ти node-операторах. Именно через этот контракт происходит определение того, какому следующему node-оператору, на какой следующий ключ улетит стейк.

На самом деле вместо одного контракта NodeOperatorRegistry - целая палитра всевозможных контрактов, которые сами определяют способ работы с валидаторами. Например, один из этих контрактов работает с solo-стейкерами и требует от них некоторый залог в качестве гарантии их работы как валидатора Lido.

Staking Router будет работать похожим образом на текущий NodeOperatorRegistry. Но в отличие от него, будет отдавать стейк стейкинг-модулям. И NodeOperatorRegistry в свою очередь будет одним из модулей.

В Staking Router записанные модули будут представлять простые записи, а именно: адрес для вознаграждения, количество активных валидаторов, количество вышедших валидаторов и количество доступных ключей.

Staking Router будет отвечать за:
-
То, какие модули работают в нем
-
Депонирование средств под ключи
-
Управление этими модулями
-
Включение/отключение модулей
Staking Module будет отвечать:
-
Как именно в конкретном модуле работают валидаторы
-
Какой принцип входа/выхода в модуль
-
Какой принцип управления
-
Какое управление ключами
-
Какое в данный момент управление ревардами. В данный момент, комиссия в Lido делится на две части: 5% treasury fee и 5% node operator fee. В Staking Modules это распределение может быть другим. Например, в комьюнити модуле для поддержки активных валидаторов, комиссия, которая уходит в Lido, может быть уменьшена до минимума или вовсе отключена.

Stake balancing algorithm
Stake Balancing Algorithm - работает похожим образом на NodeOperatorRegistry. Происходит настройка, какой целевой процент стейка должен уйти в тот или иной модуль. Потенциально, это приводит к ситуации, когда в модули А и В идет 10% и 20% соответственно, но в действительности получается не 10 и 20%, а меньше. К сожалению в них нет доступных ключей, то есть нет валидаторов, которые готовы принять ещё стейк. На помощь приходит Fallback Module, в который по умолчанию будет улетать стейк, если он не помещается в основные модули. Таким образом, концепция Staking Router позволит сделать:
-
Валидатор сет Lido сильно более децентрализованным
-
Даст возможность любой команде/компании/корпорации/человеку написать свой staking module, и в случае его успеха даже получить поддержку от Ethereum Foundation.

The Timeline
Роадмап по запуску обновления Lido v2:
-
Первый проползал - декабрь 2022 года
-
Деплой в Goerli - февраль/март 2023 года
-
Деплой в Mainnet - апрель/май 2023 года
-
Еще один/несколько Staking Modules - август/декабрь 2023 года

