Как мы в @Alchemy разработали и запустили абсолютно самый газоэффективный смарт-аккаунт в истории смарт-аккаунтов. 🕶️ Все это началось с идеи, которой уже около 3 лет. Мало ли я знал тогда, что это в конечном итоге сэкономит пользователям огромные суммы денег.
В мае 2023 года в Твиттере был бум вокруг прокси (например, ERC1967, клоны и т.д.) У людей были неизменяемые переменные, но они хотели прокси. Это было невозможно сделать — но некоторые из нас приняли вызов. Проблема не была в EVM. Дело было в том, как мы думали о прокси.
Так что мы создали его - появилось несколько версий. И мой, и @wighawag следовали одной и той же концепции - мы могли просто добавить неизменяемые элементы, скопировав выделенный кусок памяти в конец возвращаемого байт-кода при конструировании. Сам код был довольно коротким и приятным.
(Вы можете увидеть мою старую реализацию, которую я создал для удовольствия 3 года назад, здесь лол: )
Существовало также два способа доступа к неизменяемым аргументам во время выполнения. Первый — мой способ, это просто прочитать байт-код прокси, начиная с постоянного смещения. Просто! Просто загрузите неизменяемые данные в память и декодируйте их в соответствии с той схемой, которую вы настроили.
Второй вариант был гораздо более сложным, но немного более газоэффективным и чертовски интересным. Идея заключалась в том, что вы добавляли бы неизменяемые данные к каждому вызову, который делегировал прокси. Это приводило к более дешевому доступу к неизменяемым данным за счет сложности и более высокой базовой стоимости газа.
Интересно, что Solady (библиотека, которую мы сейчас используем, не используйте мою маленькую демо-версию в продакшене, хех) изначально выбрала второй подход! Но теперь мы все пришли к простоте, я не знаю о каких-либо неизменяемых данных, добавляющих calldata в продакшене, и Solady выбирает тот же подход, который использовал я.
Так как это связано с аккаунтами? Самый базовый и распространенный случай использования смарт-аккаунтов заключается в том, что они "принадлежат" другому подписанту. Обычно вы делаете это, инициализируя смарт-аккаунт с адресом владельца. Но, брат мой, есть и лучший способ.
Вы, вероятно, уже поняли это — мы просто добавляем адрес подписанта к байт-коду прокси. Просто. Затем мы полностью пропускаем инициализацию. Легко. И реализация точно знает, где находится этот владелец в байт-коде (что еще лучше, Solady заботится об этом за нас).
И вот, самый мощный смарт-аккаунт, когда-либо созданный, теперь также дешевле, чем обмен на Uniswap. Так что мы можем из этого извлечь?
1. Всегда следуйте своему любопытству Возможно, никогда не существовало бы умного аккаунта, использующего эту технологию, если бы мы не преследовали идею клонов с неизменяемыми аргументами много лет назад — просто потому, что нам это показалось интересным.
2. Почти всегда есть простое решение Когда вы не можете избежать сложности, разбейте сложность на более мелкие, простые части. Вы должны быть в состоянии объяснить весь свой код кому-то, кто нов в кодовой базе. Если вы не можете, ваше решение почти наверняка слишком сложное.
3. На самом деле, вас ничто не останавливает. Если у вас есть идея, как сделать что-то лучше, сделайте это. Вас ничто не останавливает. Я думал, что это может сработать, попробовал, и это сработало. Вы способны на невероятные вещи, если только перестанете сдерживать себя, аноним.
Ваш стек уже слишком глубокий? Надеюсь, эта тема была хоть сколько-нибудь интересной. Если вы нашли это неприятным, станьте другом и поставьте своему мальчику лайк, чтобы я мог охватить более 5 человек своими постами здесь. Кроме того, бенчмарки 😸 Мы не просто дешевы в развертывании.
5,46K