# Staking Router v2. Outline Это первый документ из предстоящей серии документов по спецификации Staking Router. Объём видится огромным и я бы хотел подойти к этом процессу итеративно. Документ представляет собой заголовки и размышления о тех частях, который на мой взгляд должны быть включены в грядущую спецификацию и следующий апгрейд роутера. На этой стадии хотелось бы определиться со скоупом того, что мы хотим проработать детальнее, а что отбросить. TLDR: SR был наивный, чтобы работали DVT и CSM в нем не хватает фичей. Мы думаем в сторону модулей для институцианалов и рестейкинга (?) TODO: - Придумать вехи ## Scope ### Bonds Эта часть мне видится одной из фундаментальных, которая может затронуть многие части протокола и потянуть за собой много изменений. Этот раздел должен ответить на следующие вопросы: - Зачем нужен бонд - К кому привязываются бонды. Считаю, что это должно быть свойство Нод операторов, которые в свою очередь должны иметь общий реестр. Бонд можно перемещать из одного модуля в другой, а пенальти (например в случае кражи мева) распространяется на бонд оператора во всех модулях - Как обрабатывается сжигание бонда. - Влияние бонда на порядок вывода валидаторов - Зачем нужен бонд - Слешинг - Кража block fee - Компенсация плохого перформанса - Во время выхода. Проще, страховка может применится в некоторых случаях и через год и никогда. Другие части можно привязывать к фрейму - Или сразу (за фрейм)? Лучше, так как страховка применяется тем же холдерам, что были во фрейме - Может ли быть трешхолд? Работа с DVT: валидатор может состоять из забондованных и не забондованных частей MEV может украсть релей, а не валидатор. Нужен способ компенсации? (от ДАО или релея или самого НО) Бонды - сущность оператора Бонды не шарятся между модулями (?) нельзя сжигать бонд оператора в другом модуле. иначе в двт кластер может в момент стать недобонденным. С другой стороне надо выгонять такого оператора, если он не компенсирует. - Должны ли мы расформировывать такой кластер? Почему бы и нет. Если мы хотим офборднуть малишиос НО, то стоит офбордить отовсюду В каком порядке выводить валидаторов в случае если бонд нужно применить? что делать с кластерами? Нужно ли депозитить бонд? Или хранить в steth - Если считаем отдельно, то похоже нужен эфир - Но конвертить сразу выгоднее Можно попробовть зайти с количества валидаторов при расчёте пенальти (может быть деинсентивом для CSM) Халвинг ревордов (любая невостребованная штука) можно отправлять в страховой фонд ### Automatic insurance cover (?) - Автоприменение страховки это более общая штука чем бонды. Стоит рассмотреть их вместе - Что будет если валидатор плохо перформит и уходит в минус - В какой момент применить страховку? - Нужно ли объединять валидаторов в группу (по нод оператору или кластеру)? - валидатор всё же - Что компенсировать? - Если в рамках фрейма валидатор ушёл в минус? - Если в рамках фрейма оператор ушёл в минус? - Если валидатора на выходе имеет баланс меньше задепозиченного - Как посчитать простои - Через дельту балансов сложно. Непонятно как хэндлить скиминг. проверять каждый блок дорого, считать дельту балансов без скиминга не корректно - Можно считать через экспериментальные эндпоинты https://ethereum.github.io/beacon-APIs/#/Rewards но в этом случае - Можно по аттестациям. Добавить некоторый трешхолд, считать дельту до трешхолда, считать реворды ### Common operators registry (MVP) - Нужен чтобы иметь перераспределять бонд между модулями - Связывает оператора с: - Репутацией - Типом: соло, профи и т.д. ### IStakingModule interface update Если у нас есть реджестри операторов, то нужны общие методы для работы с ними ### Trigerable exits (protocol) - Иметь инструмент, который может тригерить вывод валидаторов, которые не вышли в отведённый срок через VEBO - Иметь ручку для DAO, способную выводить валидаторов напрямую ### Fractional validator counts Для DVT нужен особый аккаунтинг, дробное хранение числа валидаторов у нод оператора может решить проблемы: - начисления наград - бонда Не факт что нужно на уровне стейкинг роутера Если подружить это с MEB, то дробные депозиты хорошо ложатся. Можно считать в gwei ### MEB support #### Изменения в протоколе - Как хранить ключи и сигнатуры, должны ли сигнатуры быть кратны 32, все ли модули должны работать одинаково - Как вести аккаунтинг депозитов на ключ - Как мигрировать текущие модули и аккаунтинг задепозиченных валидаторов - Нужно ли поддерживать несколько WC в протоколе на время миграции? Или срежем ключи? #### Миграция на WC 2.0 Описать как будет происходить миграция - Как объединять валидаторов (подписанное сообщение на CL?) // Oracles ### Performance oracle (?) Хорошо бы его иметь на уровне стейкинг роутера - Распределение ревордов по разным параметрам (активные ключи, а внутри модуля по аттестациям) может привести к несправедливому распределению между участниками - Это первый шаг к маркетплейсу между модулями. Распределение ревордов должно быть справедливым - Репортить рут полного дерева во всем модулям (включая валидаторов), чтобы можно было использовать его для распределения ревордов по операторам внутри модулей. Подумать о DVT при распределении - Репорт отрицательных значений - Если только по оператору, должно ли это тригерить применение страховки? а по одному валидатору ### Extended oracle stage 3 - Уметь отправлять несколько транзакций чтобы доставлять больше данных (больше модулей – жирнее транза) - Клейм ревордов внутри модулей (может быть аут оф скоуп) - Возможно сделать на уровне роутера репорт withdrawn валидаторов ### Bunker - Нужно пересмотреть бункер режим - Если мы будем получать стейт по каждому слоту, то можем правильнее считать скимед реворды. Закроет часть найденных "уязвимостей" по входу в бункер режим. ### Reuse validator index // TODO ### Vetting via DSM ## Out of the scope ### Restaking Можно прикрутить сбоку от существующего SR, достаточно поменять только WC контракт. ### Institutional staking Непонятно как делать, не лезет сейчас. Не факт, что потребуются отдельные WC и EL волты. Возможно можно по-другому дизайнить. Может вообще не нужно ничего делать, а обучить институционалов. Не похоже, что это должен быть стейкинг модуль: там больше про аккаунтинг, нежели про хранение ключей и нод операторов.