Обновить
19
0
Роман Ярлыков@yarlykovrv

MetaLamp. Разработчик смарт-контрактов на Solidity

Отправить сообщение

В конце добавлю, что ERC-4337 разрабатывался при поддержки и консультациях ребят из GSN) Yoav Weiss, Dror Tirosh, Shahaf Nacson, Alex Forshtat, если посмотреть их профили, они все в организации OpenGSN.

Я бы добавил, что GSN в некоторых аспектах стал прототипом для некоторых решений ERC-4337, особенно оплата через Paymaster. Так что они точно не антагонисты, в целом их сложно противопоставлять друг другу, это же концептуально разные решения, по крайней мере AA создавался далеко не только для решения проблемы оплаты газа.

Вопросы к автору. Насколько сейчас актуален GSN? Кто-то его использует из крупных ребят? Я честно говоря не встречал хороших примеров, да и плохих наверное тоже. Ну и если их все же противопоставить, есть ли кошельки, которые внедрили GSN?

По применению можно посмотреть тут:

Примеры кода на solidity

Теперь зная про сдвиги можно взять этот код и потыкать в Remix. Это 4 примера использования побитовых операций которые мы разбирали выше:

или здесь:

Варианты использования

1. Работа с флагами и масками.
...
Изящный пример работы с флагами в solidity можно увидеть в контракте Universal Router от Uniswap где они в один байт зашивают большое количество команд.

и далее:

2. Компактное представление данных.
...
3. Оптимизация производительности.
...
4. Шифрование и хеширование.

То есть статья не про "10 советов как оптимизировать код по газу", а про то, как вообще работают побитовые сдвиги и где применяются, в том числе на смарт-контрактах. Этих знаний уже достаточно чтобы понимать что происходит в таких библиотеках как Solady, Solmate, PRBMath, некоторых контрактах от OpenZeppelin или например в нфт сделанных на базе ERC721A. Вставки с побитовыми операциями можно встретить во многих крупных протоколах, а также в EIP.

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

Отличный вопрос. Дело в токеномике эфира, на эту тему можно сделать отдельную статью, но я попытаюсь объяснить коротко.

Как эфир выпускался в обращение (чеканился) на разных этапах своего существования?


1. История начинается с ICO которое проводит Ethereum в 2014 году, на котором за биткоин было продано 60 млн. ETH. Еще порядка 12 млн. ETH были выделены на ранних участников проекта и некоммерческий фонд Ethereum Foundation, который был создан для поддержки и развития платформы Ethereum. Это точка отсчета, стадия проекта, которая называется "pre-mine".

2. После запуска в 2015 году выпуск эфира в обращение осуществляется только посредством вознаграждения майнеров за добавление транзакций в блок. Далее с каждым последующим хардфорком количество выплат майнерам постепенно сокращается:

  • от genesis блока до хардфорка byzantim награда 5 ETH/block

  • от byzantim до constantinople 3 ETH/block

  • начиная с хардфорка constantinople 2 ETH/block

Общее предложение ETH по годам
Общее предложение ETH по годам
  1. Следующий этап - переход с консенсуса PoW на PoS. Первым шагом была т.н. "phase 0", это создание параллельно основному блокчейну (Ethereum mainnet) - Beacon Chain, то есть это тот же Ethereum, но уже работающий на консенсусе PoS, где вместо майнеров были валидаторы, которым нужно застейкать 32 ETH для возможности валидировать и добавлять блоки (+ получать priority fee). На этом этапе общее предложение эфира продолжает расти.

  2. Далее идет хардфорк london, в котором реализуется EIP-1559, т.е. вводится base fee, который сжагается в каждом блоке. Это начинает сдерживать увеличение общего предложения эфира, майнеры начинают зарабатывать меньше, но конечная цель - полный отказ от майнинга и переход на Beacon Chain, который работает на PoS.

  3. Наконец случается хардфорк "The Merge" (слияние), его еще называют "PoW removal", потому что он объединяет Beacon Chain и mainnet Ethereum, таким образом полностью перейдя на консенсус PoS. Это ключевое событие которое как раз делает эфир "потенциально" дефляционным.

    Почему потенциально? Потому что теперь новые монеты выпускаются в обращение посредством наград за стейкинг эфира и чаевых валидаторам за добавление блоков. Но при этом в каждом блоке происходит сжигание base fee. Если в сети высокие цены на газ и большое количество транзакций - сжигается эфира больше, чем чеканиться, что уменьшает количество монет в обращении и может влиять на рост цены (потому что предложение сокращается). А рост цены мотивирует стейкать больше эфира. Стейкаем больше эфира - выплачивается больше вознаградений. Таким образом система уравновешивает саму себя, но с перекосом скорее в дефляцию, чем в инфляцию.

    Теперь отвечая на вопрос возможны два сценария:

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

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

По факту при текущих уровнях застейканого эфира и количества сжигаемого - мы имеем небольшую дефляцию. Пик предложения составлял 120.5 млн. ETH, это было перед хардфорком "The Merge".

Есть отличный сайт ultrasound.money, в котором очень много инфографики на эту тему. Например есть расчет "равновесия", который отражает количество эфира через 200 лет при текущих уровнях потребления газа и выпуска эфира в обращение. Даже через 200 лет это все еще 83 млн. ETH.

Равновесие сжигания и чеканки ETH
Равновесие сжигания и чеканки ETH

На сайте можно поиграться с этим графиком и с другими. Но в целом я сомневаюсь что нам когда-то грозит полное сжегание всего предложения эфира) Надеюсь ответил.

Понимаю. Столкнулся с той же проблемой, так и появилась эта статья)
Спасибо за обратную связь! Это мотивирует делать больше подобных материалов.

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

Безусловно, крипта одна из самых важных частей, без которой ничего не поедет (бесплатно никто не будет хранить или обрабатывать данные, это логично). Но у самой технологии большой потенциал: децентрализованное хранение данных, повышение прозрачности и надежности цепочек поставок, авторизация на сервисах без смс и регистраций, цифровые активы, голосование, интеллектуальная собственность. Это некоторые кейсы, которые уже реализованы в разных проектах.
Примеры можно погуглить, мне понравился вот этот, потому что ближе всего к нам. И да, он про корпоративный блокчейн, но тем не менее, мы говорим про технологию, а делать подобное на блокчейне типа Ethereum как раз сложнее из-за проблем которые сейчас пытаются решить, в том числе с помощью L2 типа zkSync и других. Мы в компании, например, делали систему смарт-контрактов, которая помогает в хранении и продаже вина, также делали проект связанный с ипотечным кредитованием, есть примеры с играми и т.д.

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

Исследование оставило противоречивые чувства. С одной стороны, существуют стандарты по улучшению юзабилити в Ethereum-сетях. С другой стороны, анализ показал, что из 30 рассмотренных токенов на популярных сетях, только на 8 можно выпускать доверенности на аппрув, из них для трех придется писать отдельные обработчики (два для version и один для нестандартного permit).

Это не совсем так. Например если смотреть смарт-контракты Polygon, многие токены (чтобы не быть голословным я проверил несколько - WETH, USDT, BNB, BUSD, но я думаю их больше) имеют функцию executeMetaTransaction, фактически она позволяет делать делать то же, что и permit, при этом позволяет вызывать через подпись любую функцию смарт-контракта. Эта функция тоже поддерживает EIP712.

Оптимизм не проверял, возможно там что-то подобное. На счет Ethereum - думаю это связано с тем, что рассматриваемые токены были туда задеплоены еще до появления стандарта ERC-2612.

Красным отмечен один токен (DAI на Mainnet), у которого есть функция permit, но не по ERC2612 (sic!). Она позволяет два варианта создании доверенности на аппрув: (1) на максимально возможную сумму или (2) вообще отозвать его. Почему так сделано – загадка. permit принимает параметр allowed: bool.

Думаю тут все просто. Они почему-то решили, что выдавать апрув на определенную сумму через подпись не нужно, а вот сделать переключатель (вкл/выкл апрув) вполне можно) Скорее всего тут нужно ковырять протокол MakerDAO.

А еще существую другие подходы, например ERC-1363: Payable Token, и чуть более простой ERC-677 (он по смыслу такой же как 1363, но чуть проще, используется в токене Link). Они идут как расширение ERC20 и добавляю колбэк-функции типа transferAndCall или approveAndCall. В некоторых протоколах это может сработать даже лучше permit.

А вообще за статью спасибо, тема важная, было интересно почитать)

Вроде бы раньше это называлось ZkSync 1.0 и 2.0. Да? Смысл переименование в том, что решили развивать два направления (Lite and Era) параллельно? Почему?

Верно. На счет развития Lite не готов ответить, в этот вопрос не углублялся, возможно там будет не развитие, а поддержка работоспособности. По неймингу могу предположить, что изначально у них просто не было названия для 2.0, но т.к. это принципиально другой блокчейн с другими задачами, возможно было принято решение более четко провести между ними границу. Напомню, что Lite отвечает только за переводы в ETH и ERC20-токенах, там нет возможности разворачивать смарт-контракты. Era выступает в качестве полноценного блокчейна.

И ещё один вопрос: в чём смысл "совместимости с кошельком"? Вот есть у меня MEW (MyEtherWallet), а ZkSync Era вроде бы заточен работать с MetaMask.

Для меня MyEtherWallet более удобный.

Не совсем, MetaMask я упомянул только в качестве примера, тут важнее поддержка методов web3 API, которые позволяют работать с такими кошельками, как MetaMask, MyEtherWallet, TrustWallet и т.д.

Вопрос: а в чём вообще роль кошельков? Если у меня есть private key, то могу ли я из этого ключа сгенерировать и один и другой кошелёк? В общем, не могу понять, что же такое "кошелёк", и как он может быть несовместим с ZkSync Era?

Кошелек здесь - это любой клиент, который может взаимодействовать с блокчейном для подписания и отправки транзакций в сеть. А еще это скорее "упрощение", потому что в контексте private key более правильно будет оперировать термином "аккаунт", который включает в себя приватный и публичные ключи.


Будет ли аккаунт созданный к примеру для Ethereum работать в другой сети зависит от способа его создания, то есть от применяемой криптографии и от пути деривации адресов. В случае с zkSync, аккаунт, созданный для сети Ethereum будет работать, как и во многих других EVM-совместимых сетях. Но есть исключения, например Tron evm-совместимый, но аккаунты в нем создаются по-другому, для этой сети нужны отдельные "кошельки" для работы с аккаунтами их блокчейна.

Обо всем по порядку.

И как это решение поможет покинуть трилемму блокчейна?

Покинуть не поможет, поможет сбалансировать, т.е. подразумевается увеличение масштабирования, но при этом без сильного ущерба по безопасности и децентрализации.

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

Это хороший тезис, но поэтому и существует так много различных подходов к масштабированию, у каждого есть перекосы к одному из факторов трилеммы. Не стоит воспринимать L2, как просто “боковую” цепь, которую можно сломать атакой 51, потому что они, как правило, полагаются на консенсус основной  сети (Layer 1), в нашем случае это Ethereum. Консенсус Layer 2 обычно направлен на уменьшение других рисков (предположение о работоспособности, проблема массового выхода, экономические уязвимости и т.д.)

К тому же это все становится уже слишком сложным, чтобы быть подвластным аудиту.

В том и дело, что внедрять подобные решения на уровне L1 довольно сложно, отдельные же решения в виде L2 напротив гораздо легче проаудировать и запустить “поверх” основной сети или как ее расширение. Советую статью Виталика “Should Ethereum be okay with enshrining more things in the protocol?” где он как раз рассуждает о том, что в идеале “ядро” должно быть простым и понятным. Еще к слову про аудит, конкретно у zkSync неплохая документация, весь код в свободном доступе, уже есть проведенные аудиты. То есть да, лично все проверить стало сложнее, но разобраться самому все еще реальная задача.

Кто кроме любителей шальных денег в это все вложится?

Этот вопрос я не понял, он в целом про крипту или конкретно про L2 или zkSync?

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

Да, десятки, только тех, кому можно доверять - единицы. Не все выкладывают свой код и архитектуру, все это очень хорошо прослеживается на l2beat.com (они категоризируют l2 решения по степени децентрализации). А проблема есть, достаточно зайти на etherscan в раздел про газ и посмотреть средние цены на распространенные транзакции. "Все вместе" они то может и потянут, только доверяют все еще преимущественно эфиру.

Рады слышать! Мы любим копнуть поглубже, поэтому когда разбираем какую-то тему - стараемся структурировать и зафиксировать найденную информацию, так и родилась вики. Это способ обмена опытом с коллегами и сообществом, плюс возможность похоливарить)

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность

Специализация

Solidity-разработчик
Средний
Solidity
Ethereum
Blockchain
JavaScript
TypeScript
Английский язык