Практическое руководство по оптимизации Gas для смарт-контрактов Ethereum
Газовые сборы на основную сеть Ethereum всегда были сложной проблемой, особенно это проявляется в периоды перегрузки сети. В пиковые часы пользователи часто вынуждены платить высокие комиссии за транзакции. Поэтому оптимизация газовых сборов на этапе разработки смарт-контрактов имеет решающее значение. Оптимизация потребления газа не только может эффективно снизить транзакционные затраты, но и повысить эффективность транзакций, обеспечивая пользователям более экономичный и эффективный опыт использования блокчейна.
В этой статье будет рассмотрена механика Gas-страт, Эфирной виртуальной машины ( EVM ), основные концепции оптимизации Gas-страт, а также лучшие практики оптимизации Gas-страт в разработке смарт-контрактов. Надеемся, что эти материалы вдохновят разработчиков и окажут практическую помощь, а также помогут обычным пользователям лучше понять, как работают Gas-расходы EVM, чтобы совместно справляться с вызовами экосистемы блокчейна.
Введение в механику Gas-стоимости EVM
В совместимых с EVM сетях "Gas" является единицей измерения вычислительной мощности, необходимой для выполнения конкретных операций.
В структуре EVM расходы газа делятся на три части: выполнение операций, вызовы внешних сообщений, а также чтение и запись в память и хранилище.
Поскольку выполнение каждой транзакции требует вычислительных ресурсов, взыскивается определенная плата для предотвращения бесконечных циклов и атак отказа в обслуживании (DoS). Плата, необходимая для завершения транзакции, называется "Gas fee".
С момента вступления в силу лондонского хардфорка EIP-1559( ), Gas-стоимость рассчитывается по следующей формуле:
Базовый сбор будет уничтожен, а приоритетный сбор будет использоваться в качестве стимула, побуждая валидаторов добавлять транзакции в блокчейн. Установка более высокого приоритетного сбора при отправке транзакции может увеличить вероятность ее включения в следующий блок. Это похоже на "чаевые", которые пользователь платит валидатору.
Понимание оптимизации Gas в EVM
Когда смарт-контракт компилируется с помощью Solidity, контракт преобразуется в ряд "операционных кодов", то есть opcodes.
Любой фрагмент операционного кода (, например, создание контракта, выполнение вызова сообщений, доступ к хранилищу аккаунтов и выполнение операций на виртуальной машине ) имеет общепринятые затраты на газ, которые записаны в желтой книге Ethereum.
После нескольких изменений EIP некоторые газовые затраты для операций были скорректированы и могут отличаться от указанных в жёлтой книге.
Основные концепции оптимизации Газ
Основная идея оптимизации газа заключается в приоритете выбора операций с высокой стоимостью эффективности на блокчейне EVM, избегая операций с высокими затратами на газ.
В EVM следующие операции имеют низкую стоимость:
Чтение и запись переменных в памяти
Чтение констант и неизменяемых переменных
Чтение и запись локальных переменных
Чтение переменной calldata, например массива и структуры calldata
Вызов внутренних функций
Операции с высокой стоимостью включают:
Чтение и запись состояния переменных, хранящихся в смарт-контрактах
Вызов внешних функций
Циклическая операция
Оптимизация затрат на газ EVM: лучшие практики
Основываясь на вышеуказанных основных концепциях, мы подготовили для сообщества разработчиков список лучших практик по оптимизации затрат на Gas. Следуя этим практикам, разработчики могут снизить потребление Gas смарт-контрактов, уменьшить затраты на транзакции и создать более эффективные и удобные для пользователей приложения.
1. Старайтесь минимизировать использование хранения
В Solidity, Storage( хранилище) является ограниченным ресурсом, его потребление газа значительно превышает Memory( память). Каждый раз, когда смарт-контракт читает или записывает данные из хранилища, возникают высокие затраты на газ.
Согласно определению из желтой книги Ethereum, стоимость операций хранения превышает стоимость операций с памятью более чем в 100 раз. Например, инструкции OPcodesmload и mstore требуют всего 3 единицы газа, в то время как операции хранения, такие как sload и sstore, даже в самых оптимальных условиях, требуют по меньшей мере 100 единиц.
Ограничение методов использования хранилища включает:
Хранить непостоянные данные в памяти
Уменьшение количества изменений в хранилище: сохраняя промежуточные результаты в памяти, а затем распределяя результаты переменным хранения после завершения всех вычислений.
2. Упаковка переменных
Количество хранилищ, используемых в смарт-контрактах, и способ, которым разработчики представляют данные в хранилище slot(, будет значительно влиять на потребление Газов.
Компилятор Solidity упаковывает последовательные переменные хранения в процессе компиляции и использует 32-байтовый слот хранения в качестве базовой единицы хранения переменных. Упаковка переменных означает разумное расположение переменных, чтобы несколько переменных могли поместиться в одном слоте хранения.
С помощью этой настройки разработчики могут сэкономить 20 000 единиц газа ), так как для хранения неиспользуемого слота необходимо было бы израсходовать 20 000 газа (, но теперь требуется всего два слота.
Поскольку каждый слот хранения потребляет Gas, упаковка переменных оптимизирует использование Gas, уменьшая количество необходимых слотов хранения.
![Оптимизация 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 смарт-контрактов Gas оптимизация десяти лучших практик])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, когда это возможно.
![Оптимизация газа для смарт-контрактов Ethereum: 10 лучших практик]###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 для смарт-контрактов Ethereum: десять лучших практик])https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 10. Оптимизация короткого замыкания
Для || и && операторов логические операции будут подвергнуты короткому оцениванию, то есть, если первое условие уже может определить результат логического выражения, второе условие не будет оцениваться.
Чтобы оптимизировать потребление газа, условия с низкими затратами на вычисления должны быть помещены впереди, что может позволить избежать дорогостоящих вычислений.
![Ethereum смарт-контрактов Gas оптимизация десятка лучших практик]###https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp(
Дополнительные общие рекомендации
) 1. Удалить ненужный код
Если в смарт-контракте есть неиспользуемые функции или переменные, рекомендуется их удалить. Это самый прямой способ снизить стоимость развертывания контракта и поддерживать его небольшой объем.
Вот некоторые полезные советы:
Используйте самые эффективные алгоритмы для вычислений. Если в смарт-контрактах напрямую используются результаты некоторых вычислений, то следует устранить эти избыточные вычислительные процессы. По сути, любые неиспользуемые вычисления должны быть удалены.
В Ethereum разработчики могут получать вознаграждение в виде газа, освобождая пространство для хранения. Если переменная больше не нужна, следует удалить ее с помощью ключевого слова delete или установить ее в значение по умолчанию.
Оптимизация циклов: избегайте высокозатратных операций в циклах, по возможности объединяйте циклы и выносите повторные вычисления за пределы тела цикла.
![Ethereum смарт-контрактов Gas оптимизация десяти лучших практик]###https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(
) 2. Использование предкомпилированных смарт-контрактов
Предварительно скомпилированные контракты предоставляют сложные библиотечные функции, такие как операции шифрования и хеширования. Поскольку код выполняется не на EVM, а локально на клиентском узле, требуется меньше газа. Использование предварительно скомпилированных контрактов может сэкономить газ, уменьшая вычислительные затраты, необходимые для выполнения смарт-контрактов.
Примеры предкомпилированных контрактов включают алгоритм цифровой подписи на эллиптических кривых ###ECDSA( и алгоритм хеширования SHA2-256. Используя эти предкомпилированные контракты в смарт-контрактах, разработчики могут снизить стоимость газа и повысить эффективность работы приложений.
) 3. Использование встроенного ассемблера
Встраиваемая сборка ### in-line assembly ( позволяет разработчикам писать низкоуровневый, но эффективный код, который может быть выполнен непосредственно EVM, без необходимости использования дорогих операций Solidity. Встраиваемая сборка также позволяет более точно контролировать использование памяти и хранилища, что дополнительно снижает расход газа. Кроме того, встраиваемая сборка может выполнять некоторые сложные операции, которые трудно реализовать только с использованием Solidity, предоставляя больше гибкости для оптимизации расхода газа.
Однако использование встроенного ассемблера также может привести к рискам и быть подверженным ошибкам. Поэтому следует использовать его с осторожностью, только опытным разработчикам.
![Ethereum смарт-контракты Gas оптимизация十大最佳实践])
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
14 Лайков
Награда
14
8
Поделиться
комментарий
0/400
WalletInspector
· 18ч назад
Газ слишком дорог, лучше L2
Посмотреть ОригиналОтветить0
CryptoCross-TalkClub
· 07-11 01:06
Смешно, Gas fees высоки, кошелек неудачников горит
Посмотреть ОригиналОтветить0
liquiditea_sipper
· 07-11 01:03
Газ действительно дорогой до неприличия.
Посмотреть ОригиналОтветить0
AirdropChaser
· 07-11 01:03
Теперь Газ может быть более человечным! Деньги уходят, как вода.
Посмотреть ОригиналОтветить0
MEVSandwichVictim
· 07-11 01:02
Все еще оптимизирую, каждый день меня высасывает Gas.
Посмотреть ОригиналОтветить0
LiquidityNinja
· 07-11 01:01
Я ниндзя в мире шифрования. Слишком высокие комиссии за Gas просто разбивают мне сердце. Торговля на точках — это путь к успеху.
Пожалуйста, напишите комментарий на китайском к этой статье.
Посмотреть ОригиналОтветить0
DaoDeveloper
· 07-11 00:56
только развернул газ-оптимизированный смарт-контракт... вы бы не поверили, сколько я сэкономил
Руководство по оптимизации Gas-расходов смарт-контрактов Ethereum
Практическое руководство по оптимизации Gas для смарт-контрактов Ethereum
Газовые сборы на основную сеть Ethereum всегда были сложной проблемой, особенно это проявляется в периоды перегрузки сети. В пиковые часы пользователи часто вынуждены платить высокие комиссии за транзакции. Поэтому оптимизация газовых сборов на этапе разработки смарт-контрактов имеет решающее значение. Оптимизация потребления газа не только может эффективно снизить транзакционные затраты, но и повысить эффективность транзакций, обеспечивая пользователям более экономичный и эффективный опыт использования блокчейна.
В этой статье будет рассмотрена механика Gas-страт, Эфирной виртуальной машины ( EVM ), основные концепции оптимизации Gas-страт, а также лучшие практики оптимизации Gas-страт в разработке смарт-контрактов. Надеемся, что эти материалы вдохновят разработчиков и окажут практическую помощь, а также помогут обычным пользователям лучше понять, как работают Gas-расходы EVM, чтобы совместно справляться с вызовами экосистемы блокчейна.
Введение в механику Gas-стоимости EVM
В совместимых с EVM сетях "Gas" является единицей измерения вычислительной мощности, необходимой для выполнения конкретных операций.
В структуре EVM расходы газа делятся на три части: выполнение операций, вызовы внешних сообщений, а также чтение и запись в память и хранилище.
Поскольку выполнение каждой транзакции требует вычислительных ресурсов, взыскивается определенная плата для предотвращения бесконечных циклов и атак отказа в обслуживании (DoS). Плата, необходимая для завершения транзакции, называется "Gas fee".
С момента вступления в силу лондонского хардфорка EIP-1559( ), Gas-стоимость рассчитывается по следующей формуле:
Газовая плата = единицы газа, использованные * ( базовая плата + приоритетная плата )
Базовый сбор будет уничтожен, а приоритетный сбор будет использоваться в качестве стимула, побуждая валидаторов добавлять транзакции в блокчейн. Установка более высокого приоритетного сбора при отправке транзакции может увеличить вероятность ее включения в следующий блок. Это похоже на "чаевые", которые пользователь платит валидатору.
Понимание оптимизации Gas в EVM
Когда смарт-контракт компилируется с помощью Solidity, контракт преобразуется в ряд "операционных кодов", то есть opcodes.
Любой фрагмент операционного кода (, например, создание контракта, выполнение вызова сообщений, доступ к хранилищу аккаунтов и выполнение операций на виртуальной машине ) имеет общепринятые затраты на газ, которые записаны в желтой книге Ethereum.
После нескольких изменений EIP некоторые газовые затраты для операций были скорректированы и могут отличаться от указанных в жёлтой книге.
Основные концепции оптимизации Газ
Основная идея оптимизации газа заключается в приоритете выбора операций с высокой стоимостью эффективности на блокчейне EVM, избегая операций с высокими затратами на газ.
В EVM следующие операции имеют низкую стоимость:
Операции с высокой стоимостью включают:
Оптимизация затрат на газ EVM: лучшие практики
Основываясь на вышеуказанных основных концепциях, мы подготовили для сообщества разработчиков список лучших практик по оптимизации затрат на Gas. Следуя этим практикам, разработчики могут снизить потребление Gas смарт-контрактов, уменьшить затраты на транзакции и создать более эффективные и удобные для пользователей приложения.
1. Старайтесь минимизировать использование хранения
В Solidity, Storage( хранилище) является ограниченным ресурсом, его потребление газа значительно превышает Memory( память). Каждый раз, когда смарт-контракт читает или записывает данные из хранилища, возникают высокие затраты на газ.
Согласно определению из желтой книги Ethereum, стоимость операций хранения превышает стоимость операций с памятью более чем в 100 раз. Например, инструкции OPcodesmload и mstore требуют всего 3 единицы газа, в то время как операции хранения, такие как sload и sstore, даже в самых оптимальных условиях, требуют по меньшей мере 100 единиц.
Ограничение методов использования хранилища включает:
2. Упаковка переменных
Количество хранилищ, используемых в смарт-контрактах, и способ, которым разработчики представляют данные в хранилище slot(, будет значительно влиять на потребление Газов.
Компилятор Solidity упаковывает последовательные переменные хранения в процессе компиляции и использует 32-байтовый слот хранения в качестве базовой единицы хранения переменных. Упаковка переменных означает разумное расположение переменных, чтобы несколько переменных могли поместиться в одном слоте хранения.
С помощью этой настройки разработчики могут сэкономить 20 000 единиц газа ), так как для хранения неиспользуемого слота необходимо было бы израсходовать 20 000 газа (, но теперь требуется всего два слота.
Поскольку каждый слот хранения потребляет Gas, упаковка переменных оптимизирует использование Gas, уменьшая количество необходимых слотов хранения.
![Оптимизация 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 смарт-контрактов Gas оптимизация десяти лучших практик])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, когда это возможно.
![Оптимизация газа для смарт-контрактов Ethereum: 10 лучших практик]###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 для смарт-контрактов Ethereum: десять лучших практик])https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 10. Оптимизация короткого замыкания
Для || и && операторов логические операции будут подвергнуты короткому оцениванию, то есть, если первое условие уже может определить результат логического выражения, второе условие не будет оцениваться.
Чтобы оптимизировать потребление газа, условия с низкими затратами на вычисления должны быть помещены впереди, что может позволить избежать дорогостоящих вычислений.
![Ethereum смарт-контрактов Gas оптимизация десятка лучших практик]###https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp(
Дополнительные общие рекомендации
) 1. Удалить ненужный код
Если в смарт-контракте есть неиспользуемые функции или переменные, рекомендуется их удалить. Это самый прямой способ снизить стоимость развертывания контракта и поддерживать его небольшой объем.
Вот некоторые полезные советы:
Используйте самые эффективные алгоритмы для вычислений. Если в смарт-контрактах напрямую используются результаты некоторых вычислений, то следует устранить эти избыточные вычислительные процессы. По сути, любые неиспользуемые вычисления должны быть удалены.
В Ethereum разработчики могут получать вознаграждение в виде газа, освобождая пространство для хранения. Если переменная больше не нужна, следует удалить ее с помощью ключевого слова delete или установить ее в значение по умолчанию.
Оптимизация циклов: избегайте высокозатратных операций в циклах, по возможности объединяйте циклы и выносите повторные вычисления за пределы тела цикла.
![Ethereum смарт-контрактов Gas оптимизация десяти лучших практик]###https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(
) 2. Использование предкомпилированных смарт-контрактов
Предварительно скомпилированные контракты предоставляют сложные библиотечные функции, такие как операции шифрования и хеширования. Поскольку код выполняется не на EVM, а локально на клиентском узле, требуется меньше газа. Использование предварительно скомпилированных контрактов может сэкономить газ, уменьшая вычислительные затраты, необходимые для выполнения смарт-контрактов.
Примеры предкомпилированных контрактов включают алгоритм цифровой подписи на эллиптических кривых ###ECDSA( и алгоритм хеширования SHA2-256. Используя эти предкомпилированные контракты в смарт-контрактах, разработчики могут снизить стоимость газа и повысить эффективность работы приложений.
) 3. Использование встроенного ассемблера
Встраиваемая сборка ### in-line assembly ( позволяет разработчикам писать низкоуровневый, но эффективный код, который может быть выполнен непосредственно EVM, без необходимости использования дорогих операций Solidity. Встраиваемая сборка также позволяет более точно контролировать использование памяти и хранилища, что дополнительно снижает расход газа. Кроме того, встраиваемая сборка может выполнять некоторые сложные операции, которые трудно реализовать только с использованием Solidity, предоставляя больше гибкости для оптимизации расхода газа.
Однако использование встроенного ассемблера также может привести к рискам и быть подверженным ошибкам. Поэтому следует использовать его с осторожностью, только опытным разработчикам.
![Ethereum смарт-контракты Gas оптимизация十大最佳实践])
Пожалуйста, напишите комментарий на китайском к этой статье.