Десять лучших практик по оптимизации Gas-расходов смарт-контрактов
Газовые сборы в основной сети Ethereum всегда были проблемой, особенно в периоды перегрузки сети. В часы пик пользователи часто вынуждены платить высокие комиссии за транзакции. Поэтому оптимизация газовых расходов при разработке смарт-контрактов имеет решающее значение. Оптимизация потребления газа не только может снизить затраты на транзакции, но также повысит эффективность транзакций, обеспечивая пользователям более экономичный и эффективный опыт работы с блокчейном.
В этой статье будет рассмотрена механика Gas-стоимости Ethereum Virtual Machine (EVM), основные концепции оптимизации Gas-стоимости, а также лучшие практики оптимизации Gas-стоимости при разработке смарт-контрактов. Надеемся, что этот материал вдохновит разработчиков и окажет практическую помощь, а также поможет обычным пользователям лучше понять, как работает Gas-стоимость EVM, чтобы вместе справляться с вызовами в экосистеме блокчейна.
Введение в механизм Gas-ставок EVM
В совместимых с EVM сетях "Gas" - это единица измерения вычислительной мощности, необходимой для выполнения конкретной операции.
В структуре EVM расход газа делится на три части: выполнение операций, вызовы внешних сообщений, а также чтение и запись в память и хранилище.
Поскольку выполнение каждой транзакции требует вычислительных ресурсов, будет взиматься определенная плата, чтобы предотвратить бесконечные циклы и атаки отказа в обслуживании ( DoS ). Плата, необходимая для завершения транзакции, называется "Gas-стоимость".
С момента вступления в силу EIP-1559, плата за Gas рассчитывается по следующей формуле:
Газа плата = количество использованного газа * ( базовая плата + плата за приоритет )
Базовая плата будет уничтожена, в то время как приоритетная плата будет использоваться в качестве стимула, побуждающего валидаторов добавлять транзакции в блокчейн. Установив более высокую приоритетную плату при отправке транзакции, можно увеличить вероятность того, что транзакция будет включена в следующий блок. Это похоже на "чаевые", которые пользователь платит валидатору.
1. Понимание оптимизации Gas в EVM
Когда вы компилируете смарт-контракты с помощью Solidity, контракт преобразуется в ряд "операционных кодов", то есть opcodes.
Любая операция (, например создание смарт-контракта, осуществление вызова сообщения, доступ к хранилищу аккаунта и выполнение операций на виртуальной машине ) имеет признанную стоимость потребления газа, которая зафиксирована в желтой книге Ethereum.
После многочисленных изменений EIP некоторые газовые затраты на операции были скорректированы и могут отличаться от указанных в жёлтой книге.
2. Основные понятия оптимизации газа
Основная идея оптимизации Gas заключается в приоритизации операций с высокой стоимостью эффективности на блокчейне EVM, избегая операций с дорогими затратами Gas.
В EVM следующие операции имеют низкую стоимость:
Чтение и запись переменных в памяти
Чтение констант и неизменяемых переменных
Чтение и запись локальных переменных
Чтение переменной calldata, например, массива calldata и структуры
Внутренний вызов функции
Операции с высокой стоимостью включают:
Чтение и запись состояния переменных, хранящихся в смарт-контрактах
Вызов внешних функций
Циклическая операция
Оптимизация затрат на газ EVM: лучшие практики
На основе вышеуказанных основных понятий мы подготовили список лучших практик по оптимизации Gas-расходов для сообщества разработчиков. Следуя этим практикам, разработчики могут снизить потребление Gas для смарт-контрактов, уменьшить транзакционные расходы и создать более эффективные и удобные для пользователей приложения.
1. Старайтесь минимизировать использование хранилища
В Solidity, Storage( хранение) является ограниченным ресурсом, потребление газа которого значительно выше, чем у Memory( памяти). Каждый раз, когда смарт-контракт читает или записывает данные из хранилища, возникают высокие затраты на газ.
Согласно определению из желтой книги Ethereum, стоимость операций хранения в 100 раз выше, чем стоимость операций с памятью. Например, инструкции OPcodesmload и mstore потребляют всего 3 единицы газа, тогда как операции хранения, такие как sload и sstore, даже в самых идеальных условиях, требуют как минимум 100 единиц.
Методы ограничения использования хранилища включают:
Хранить непостоянные данные в памяти
Уменьшение количества изменений в хранилище: сохраняйте промежуточные результаты в памяти и распределяйте результаты переменным хранилища только после завершения всех вычислений.
2. Упаковка переменных
Количество хранилищ, используемых в смарт-контрактах, и способ, которым разработчики представляют данные в хранилище (, будут существенно влиять на расход Gas.
Компилятор Solidity во время компиляции упаковывает последовательные переменные хранения и использует 32-байтовый слот хранения в качестве базовой единицы хранения переменной. Упаковка переменных означает разумное распределение переменных, чтобы несколько переменных могли поместиться в одном слоте хранения.
С помощью этой корректировки разработчики могут сэкономить 20 000 единиц газа. ) Хранение неиспользуемого слота памяти требует 20 000 газа (, но теперь требуется всего два слота памяти.
Поскольку каждый слот хранения требует газа, упаковка переменных оптимизирует использование газа, уменьшая количество необходимых слотов хранения.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum])https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.webp(
) 3. Оптимизация типов данных
Переменная может быть представлена несколькими типами данных, но стоимость операций, соответствующих различным типам данных, также различна. Выбор подходящего типа данных помогает оптимизировать использование газа.
Например, в Solidity целые числа могут быть разделены на разные размеры: uint8, uint16, uint32 и т.д. Поскольку EVM выполняет операции в 256 битах, использование uint8 означает, что EVM сначала должен преобразовать его в uint256, и это преобразование будет дополнительно потреблять газ.
С точки зрения отдельного использования, uint256 дешевле, чем uint8. Однако, если использовать предложенную ранее оптимизацию упаковки переменных, ситуация меняется. Если разработчик сможет упаковать четыре переменные uint8 в один слот хранения, то общая стоимость итерации по ним будет ниже, чем стоимость итерации по четырем переменным uint256. Таким образом, смарт-контракты смогут читать и записывать один слот хранения за один раз и помещать четыре переменные uint8 в память/хранение за одну операцию.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-55fcdb765912ef9cd238c46b1d248cff.webp(
) 4. Используйте фиксированные переменные вместо динамических переменных
Если данные могут быть ограничены 32 байтами, рекомендуется использовать тип данных bytes32 вместо bytes или strings. Как правило, переменные фиксированного размера потребляют меньше газа, чем переменные переменного размера. Если длина байтов может быть ограничена, старайтесь выбирать минимальную длину от bytes1 до bytes32.
5. Отображения и массивы
Списки данных Solidity могут быть представлены двумя типами данных: массивами ###Arrays ( и отображениями )Mappings (, но их синтаксис и структура совершенно различны.
В большинстве случаев отображения более эффективны и менее затратны, но массивы обладают итерабельностью и поддерживают упаковку типов данных. Поэтому рекомендуется при управлении списком данных отдавать предпочтение отображениям, если не требуется итерация или если можно оптимизировать потребление газа с помощью упаковки типов данных.
![Десять лучших практик оптимизации газа для смарт-контрактов Ethereum])https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(
) 6. Используйте calldata вместо memory
Переменные, объявленные в параметрах функции, могут храниться в calldata или memory. Основное отличие между ними заключается в том, что memory может быть изменен функцией, тогда как calldata является неизменным.
Запомните этот принцип: если параметры функции являются только для чтения, следует предпочитать использование calldata, а не memory. Это поможет избежать ненужных операций копирования из calldata функции в memory.
7. Используйте ключевые слова Constant/Immutable, насколько это возможно.
Константные/неизменяемые переменные не хранятся в хранилище контракта. Эти переменные вычисляются во время компиляции и хранятся в байт-коде контракта. Поэтому стоимость доступа к ним значительно ниже по сравнению с хранилищем, рекомендуется использовать ключевые слова Constant или Immutable, когда это возможно.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 8. Используйте Unchecked, чтобы гарантировать, что не произойдет переполнение/недополнение.
Когда разработчики могут убедиться, что арифметические операции не приведут к переполнению или недостатку, они могут использовать ключевое слово unchecked, введенное в Solidity v0.8.0, чтобы избежать избыточных проверок на переполнение или недостаток, тем самым сэкономив затраты на Gas.
Кроме того, компиляторы версии 0.8.0 и выше больше не требуют использования библиотеки SafeMath, так как сам компилятор уже встроил функции защиты от переполнения и недостатка.
9. Оптимизация модификатора
Код модификатора встроен в измененную функцию, и каждый раз при использовании модификатора его код копируется. Это увеличивает размер байт-кода и повышает потребление газа.
Путем реорганизации логики в внутреннюю функцию _checkOwner###(, разрешается повторное использование этой внутренней функции в модификаторе, что может уменьшить размер байт-кода и снизить затраты на Gas.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum])https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 10. Оптимизация короткого замыкания
Для операторов || и && логические операции будут выполнять короткое замыкание, то есть если первое условие уже может определить результат логического выражения, второе условие не будет оцениваться.
Для оптимизации потребления Gas следует ставить условия с низкой стоимостью вычислений вперед, чтобы иметь возможность пропустить дорогие вычисления.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp(
Дополнительные общие рекомендации
) 1. Удалить ненужный код
Если в смарт-контракте есть неиспользуемые функции или переменные, рекомендуется их удалить. Это самый прямой способ уменьшить стоимость развертывания контракта и сохранить его небольшой объем.
Вот несколько полезных советов:
Используйте самые эффективные алгоритмы для вычислений. Если в смарт-контрактах напрямую используются результаты некоторых вычислений, то следует исключить эти избыточные вычислительные процессы. По сути, любые неиспользуемые вычисления должны быть удалены.
В Ethereum разработчики могут получить вознаграждение Gas, освобождая место для хранения. Если переменная больше не нужна, ее следует удалить с помощью ключевого слова delete или установить в значение по умолчанию.
Оптимизация циклов: избегайте затратных операций циклов, объединяйте циклы по возможности и выносите повторные вычисления за пределы тела цикла.
Предварительно скомпилированные контракты предоставляют сложные библиотечные функции, такие как криптографические и хеш-операции. Поскольку код не выполняется на EVM, а запускается локально на узле, требуется меньше газа. Использование предварительно скомпилированных контрактов может сэкономить газ, уменьшая объем вычислительных ресурсов, необходимых для выполнения смарт-контрактов.
Примеры предкомпилированных контрактов включают алгоритм цифровой подписи на основе эллиптической кривой ###ECDSA( и хэш-алгоритм SHA2-256. Используя эти предкомпилированные контракты в смарт-контрактах, разработчики могут снизить затраты на газ и повысить эффективность работы приложений.
![10 лучших практик оптимизации Gas для смарт-контрактов Ethereum])https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(
) 3. Использование встроенного ассемблера
Встраиваемая ассемблера позволяет разработчикам писать низкоуровневый, но эффективный код, который может выполняться непосредственно EVM, без необходимости использования дорогостоящих операций Solidity. Встраиваемая ассемблера также позволяет более точно контролировать использование памяти и хранилища, что дополнительно снижает затраты на Gas. Кроме того, встраиваемая ассемблера может выполнять некоторые сложные операции, которые трудно реализовать только с помощью Solidity, обеспечивая большую гибкость для оптимизации потребления Gas.
Однако использование встроенного ассемблера также может быть рискованным и подверженным ошибкам. Поэтому его следует использовать осторожно, только опытным разработчикам.
4. Использование решений Layer 2
Использование решений Layer 2 может снизить объем данных, которые необходимо хранить и обрабатывать в основной сети Ethereum.
такие как rollups, сайдчейны и каналы состояния, решения второго уровня
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
7 Лайков
Награда
7
5
Поделиться
комментарий
0/400
GhostWalletSleuth
· 16ч назад
Падение Газ тоже ничего не дает, Виталик Бутерин не просто хочет разыгрывать людей как лохов.
Посмотреть ОригиналОтветить0
GasFeeNightmare
· 07-15 07:31
Газ действительно убивает~
Посмотреть ОригиналОтветить0
BrokenDAO
· 07-15 07:23
Ещё один пример инерции управления. Рассмотрели ли вы искажение стимулов при оптимизации расходов в блокчейне? Обычные пользователи, совершающие частые транзакции, всегда остаются плательщиками.
Посмотреть ОригиналОтветить0
DoomCanister
· 07-15 07:12
Газ не экономь на чувстве разрушения
Посмотреть ОригиналОтветить0
PumpBeforeRug
· 07-15 07:07
Газ денег уже хватит, чтобы купить бутылку Маотай.
Десять практик оптимизации Gas-расходов смарт-контрактов для повышения эффективности разработки EVM
Десять лучших практик по оптимизации Gas-расходов смарт-контрактов
Газовые сборы в основной сети Ethereum всегда были проблемой, особенно в периоды перегрузки сети. В часы пик пользователи часто вынуждены платить высокие комиссии за транзакции. Поэтому оптимизация газовых расходов при разработке смарт-контрактов имеет решающее значение. Оптимизация потребления газа не только может снизить затраты на транзакции, но также повысит эффективность транзакций, обеспечивая пользователям более экономичный и эффективный опыт работы с блокчейном.
В этой статье будет рассмотрена механика Gas-стоимости Ethereum Virtual Machine (EVM), основные концепции оптимизации Gas-стоимости, а также лучшие практики оптимизации Gas-стоимости при разработке смарт-контрактов. Надеемся, что этот материал вдохновит разработчиков и окажет практическую помощь, а также поможет обычным пользователям лучше понять, как работает Gas-стоимость EVM, чтобы вместе справляться с вызовами в экосистеме блокчейна.
Введение в механизм Gas-ставок EVM
В совместимых с EVM сетях "Gas" - это единица измерения вычислительной мощности, необходимой для выполнения конкретной операции.
В структуре EVM расход газа делится на три части: выполнение операций, вызовы внешних сообщений, а также чтение и запись в память и хранилище.
Поскольку выполнение каждой транзакции требует вычислительных ресурсов, будет взиматься определенная плата, чтобы предотвратить бесконечные циклы и атаки отказа в обслуживании ( DoS ). Плата, необходимая для завершения транзакции, называется "Gas-стоимость".
С момента вступления в силу EIP-1559, плата за Gas рассчитывается по следующей формуле:
Газа плата = количество использованного газа * ( базовая плата + плата за приоритет )
Базовая плата будет уничтожена, в то время как приоритетная плата будет использоваться в качестве стимула, побуждающего валидаторов добавлять транзакции в блокчейн. Установив более высокую приоритетную плату при отправке транзакции, можно увеличить вероятность того, что транзакция будет включена в следующий блок. Это похоже на "чаевые", которые пользователь платит валидатору.
1. Понимание оптимизации Gas в EVM
Когда вы компилируете смарт-контракты с помощью Solidity, контракт преобразуется в ряд "операционных кодов", то есть opcodes.
Любая операция (, например создание смарт-контракта, осуществление вызова сообщения, доступ к хранилищу аккаунта и выполнение операций на виртуальной машине ) имеет признанную стоимость потребления газа, которая зафиксирована в желтой книге Ethereum.
После многочисленных изменений EIP некоторые газовые затраты на операции были скорректированы и могут отличаться от указанных в жёлтой книге.
2. Основные понятия оптимизации газа
Основная идея оптимизации Gas заключается в приоритизации операций с высокой стоимостью эффективности на блокчейне EVM, избегая операций с дорогими затратами Gas.
В EVM следующие операции имеют низкую стоимость:
Операции с высокой стоимостью включают:
Оптимизация затрат на газ EVM: лучшие практики
На основе вышеуказанных основных понятий мы подготовили список лучших практик по оптимизации Gas-расходов для сообщества разработчиков. Следуя этим практикам, разработчики могут снизить потребление Gas для смарт-контрактов, уменьшить транзакционные расходы и создать более эффективные и удобные для пользователей приложения.
1. Старайтесь минимизировать использование хранилища
В Solidity, Storage( хранение) является ограниченным ресурсом, потребление газа которого значительно выше, чем у Memory( памяти). Каждый раз, когда смарт-контракт читает или записывает данные из хранилища, возникают высокие затраты на газ.
Согласно определению из желтой книги Ethereum, стоимость операций хранения в 100 раз выше, чем стоимость операций с памятью. Например, инструкции OPcodesmload и mstore потребляют всего 3 единицы газа, тогда как операции хранения, такие как sload и sstore, даже в самых идеальных условиях, требуют как минимум 100 единиц.
Методы ограничения использования хранилища включают:
2. Упаковка переменных
Количество хранилищ, используемых в смарт-контрактах, и способ, которым разработчики представляют данные в хранилище (, будут существенно влиять на расход Gas.
Компилятор Solidity во время компиляции упаковывает последовательные переменные хранения и использует 32-байтовый слот хранения в качестве базовой единицы хранения переменной. Упаковка переменных означает разумное распределение переменных, чтобы несколько переменных могли поместиться в одном слоте хранения.
С помощью этой корректировки разработчики могут сэкономить 20 000 единиц газа. ) Хранение неиспользуемого слота памяти требует 20 000 газа (, но теперь требуется всего два слота памяти.
Поскольку каждый слот хранения требует газа, упаковка переменных оптимизирует использование газа, уменьшая количество необходимых слотов хранения.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum])https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.webp(
) 3. Оптимизация типов данных
Переменная может быть представлена несколькими типами данных, но стоимость операций, соответствующих различным типам данных, также различна. Выбор подходящего типа данных помогает оптимизировать использование газа.
Например, в Solidity целые числа могут быть разделены на разные размеры: uint8, uint16, uint32 и т.д. Поскольку EVM выполняет операции в 256 битах, использование uint8 означает, что EVM сначала должен преобразовать его в uint256, и это преобразование будет дополнительно потреблять газ.
С точки зрения отдельного использования, uint256 дешевле, чем uint8. Однако, если использовать предложенную ранее оптимизацию упаковки переменных, ситуация меняется. Если разработчик сможет упаковать четыре переменные uint8 в один слот хранения, то общая стоимость итерации по ним будет ниже, чем стоимость итерации по четырем переменным uint256. Таким образом, смарт-контракты смогут читать и записывать один слот хранения за один раз и помещать четыре переменные uint8 в память/хранение за одну операцию.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-55fcdb765912ef9cd238c46b1d248cff.webp(
) 4. Используйте фиксированные переменные вместо динамических переменных
Если данные могут быть ограничены 32 байтами, рекомендуется использовать тип данных bytes32 вместо bytes или strings. Как правило, переменные фиксированного размера потребляют меньше газа, чем переменные переменного размера. Если длина байтов может быть ограничена, старайтесь выбирать минимальную длину от bytes1 до bytes32.
5. Отображения и массивы
Списки данных Solidity могут быть представлены двумя типами данных: массивами ###Arrays ( и отображениями )Mappings (, но их синтаксис и структура совершенно различны.
В большинстве случаев отображения более эффективны и менее затратны, но массивы обладают итерабельностью и поддерживают упаковку типов данных. Поэтому рекомендуется при управлении списком данных отдавать предпочтение отображениям, если не требуется итерация или если можно оптимизировать потребление газа с помощью упаковки типов данных.
![Десять лучших практик оптимизации газа для смарт-контрактов Ethereum])https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(
) 6. Используйте calldata вместо memory
Переменные, объявленные в параметрах функции, могут храниться в calldata или memory. Основное отличие между ними заключается в том, что memory может быть изменен функцией, тогда как calldata является неизменным.
Запомните этот принцип: если параметры функции являются только для чтения, следует предпочитать использование calldata, а не memory. Это поможет избежать ненужных операций копирования из calldata функции в memory.
7. Используйте ключевые слова Constant/Immutable, насколько это возможно.
Константные/неизменяемые переменные не хранятся в хранилище контракта. Эти переменные вычисляются во время компиляции и хранятся в байт-коде контракта. Поэтому стоимость доступа к ним значительно ниже по сравнению с хранилищем, рекомендуется использовать ключевые слова Constant или Immutable, когда это возможно.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 8. Используйте Unchecked, чтобы гарантировать, что не произойдет переполнение/недополнение.
Когда разработчики могут убедиться, что арифметические операции не приведут к переполнению или недостатку, они могут использовать ключевое слово unchecked, введенное в Solidity v0.8.0, чтобы избежать избыточных проверок на переполнение или недостаток, тем самым сэкономив затраты на Gas.
Кроме того, компиляторы версии 0.8.0 и выше больше не требуют использования библиотеки SafeMath, так как сам компилятор уже встроил функции защиты от переполнения и недостатка.
9. Оптимизация модификатора
Код модификатора встроен в измененную функцию, и каждый раз при использовании модификатора его код копируется. Это увеличивает размер байт-кода и повышает потребление газа.
Путем реорганизации логики в внутреннюю функцию _checkOwner###(, разрешается повторное использование этой внутренней функции в модификаторе, что может уменьшить размер байт-кода и снизить затраты на Gas.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum])https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 10. Оптимизация короткого замыкания
Для операторов || и && логические операции будут выполнять короткое замыкание, то есть если первое условие уже может определить результат логического выражения, второе условие не будет оцениваться.
Для оптимизации потребления Gas следует ставить условия с низкой стоимостью вычислений вперед, чтобы иметь возможность пропустить дорогие вычисления.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp(
Дополнительные общие рекомендации
) 1. Удалить ненужный код
Если в смарт-контракте есть неиспользуемые функции или переменные, рекомендуется их удалить. Это самый прямой способ уменьшить стоимость развертывания контракта и сохранить его небольшой объем.
Вот несколько полезных советов:
Используйте самые эффективные алгоритмы для вычислений. Если в смарт-контрактах напрямую используются результаты некоторых вычислений, то следует исключить эти избыточные вычислительные процессы. По сути, любые неиспользуемые вычисления должны быть удалены.
В Ethereum разработчики могут получить вознаграждение Gas, освобождая место для хранения. Если переменная больше не нужна, ее следует удалить с помощью ключевого слова delete или установить в значение по умолчанию.
Оптимизация циклов: избегайте затратных операций циклов, объединяйте циклы по возможности и выносите повторные вычисления за пределы тела цикла.
2. Используйте предкомпилированные смарт-контракты
Предварительно скомпилированные контракты предоставляют сложные библиотечные функции, такие как криптографические и хеш-операции. Поскольку код не выполняется на EVM, а запускается локально на узле, требуется меньше газа. Использование предварительно скомпилированных контрактов может сэкономить газ, уменьшая объем вычислительных ресурсов, необходимых для выполнения смарт-контрактов.
Примеры предкомпилированных контрактов включают алгоритм цифровой подписи на основе эллиптической кривой ###ECDSA( и хэш-алгоритм SHA2-256. Используя эти предкомпилированные контракты в смарт-контрактах, разработчики могут снизить затраты на газ и повысить эффективность работы приложений.
![10 лучших практик оптимизации Gas для смарт-контрактов Ethereum])https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(
) 3. Использование встроенного ассемблера
Встраиваемая ассемблера позволяет разработчикам писать низкоуровневый, но эффективный код, который может выполняться непосредственно EVM, без необходимости использования дорогостоящих операций Solidity. Встраиваемая ассемблера также позволяет более точно контролировать использование памяти и хранилища, что дополнительно снижает затраты на Gas. Кроме того, встраиваемая ассемблера может выполнять некоторые сложные операции, которые трудно реализовать только с помощью Solidity, обеспечивая большую гибкость для оптимизации потребления Gas.
Однако использование встроенного ассемблера также может быть рискованным и подверженным ошибкам. Поэтому его следует использовать осторожно, только опытным разработчикам.
4. Использование решений Layer 2
Использование решений Layer 2 может снизить объем данных, которые необходимо хранить и обрабатывать в основной сети Ethereum.
такие как rollups, сайдчейны и каналы состояния, решения второго уровня