Руководство по лучшим практикам оптимизации Gas для смарт-контрактов Ethereum
Проблема с газовыми сборами в основной сети Ethereum всегда привлекала внимание, особенно в периоды перегрузки сети. В часы пик пользователям часто приходится платить высокие сборы за транзакции. Поэтому оптимизация газовых сборов на этапе разработки смарт-контрактов имеет огромное значение. Оптимизация потребления газа не только может эффективно снизить затраты на транзакции, но и повысить эффективность транзакций, предоставляя пользователям более экономичный и эффективный опыт работы с блокчейном.
В данной статье будет рассмотрена механика Gas-стоимости Ethereum Virtual Machine (EVM), основные концепции оптимизации Gas-стоимости, а также лучшие практики оптимизации Gas-стоимости при разработке смарт-контрактов. Надеюсь, что этот материал вдохновит разработчиков и окажет практическую помощь, а также поможет обычным пользователям лучше понять, как работает Gas-стоимость в EVM, чтобы совместно справляться с вызовами в экосистеме блокчейна.
Введение в механизм газовых сборов EVM
В совместимых с EVM сетях "Gas" является единицей измерения вычислительной мощности, необходимой для выполнения определённых операций.
В структуре EVM потребление газа делится на три части: выполнение операций, вызов внешних сообщений, а также чтение и запись в память и хранилище.
Каждая операция требует вычислительных ресурсов, поэтому взимается плата, чтобы предотвратить бесконечные циклы и атаки отказа в обслуживании (DoS). Плата за выполнение операции называется "Gas 费".
С момента вступления в силу EIP-1559, Gas-расходы рассчитываются по следующей формуле:
Комиссия за газ = единицы газа, использованные * (базовая комиссия + приоритетная комиссия)
Базовый сбор будет уничтожен, а приоритетный сбор будет использоваться в качестве стимула, чтобы побудить валидаторов добавлять транзакции в блокчейн. Установка более высокого приоритетного сбора может повысить вероятность того, что транзакция будет быстро упакована. Это похоже на "чаевые", которые платятся валидаторам.
Понимание оптимизации газа в EVM
При компиляции смарт-контрактов на Solidity контракт преобразуется в ряд "операционных кодов". Каждый операционный код имеет признанную стоимость потребления газа.
Основные концепции оптимизации газа
Основной принцип оптимизации Gas заключается в том, чтобы на блокчейне EVM в первую очередь выбирать операции с высокой стоимостью эффективности, избегая операций с дорогими затратами Gas.
Операции с низкой стоимостью в EVM:
Чтение и запись переменных в памяти
Чтение констант и неизменяемых переменных
Чтение и запись локальных переменных
Чтение переменной calldata
Внутренний вызов функции
Дорогие операции:
Чтение и запись состояния переменных, хранящихся в смарт-контрактах
Вызов внешних функций
Циклическая операция
Оптимизация затрат на газ EVM: лучшие практики
1. Сведите использование хранилища к минимуму
Стоимость операций со存储 более чем в 100 раз выше, чем стоимость операций с памятью. Методы ограничения использования存储 включают:
Хранить непостоянные данные в памяти
Уменьшение количества изменений в хранилище: сохраняйте промежуточные результаты в памяти и после завершения всех вычислений распределяйте результаты переменным хранилища.
2. Упаковка переменных
Рационально организуйте переменные, чтобы несколько переменных могли вписаться в одну ячейку хранения. Это может сэкономить большое количество газа.
3. Оптимизация типов данных
Выбор подходящего типа данных помогает оптимизировать использование газа. Например, использование uint256 обычно экономичнее, чем uint8, если только не удается упаковать несколько переменных uint8 в один слот памяти.
4. Используйте переменные фиксированного размера вместо динамических переменных
Если данные могут быть ограничены 32 байтами, рекомендуется использовать тип данных bytes32 вместо bytes или strings. Переменные фиксированного размера обычно потребляют меньше газа, чем переменные переменного размера.
5. Отображения и массивы
При управлении списком данных предпочтительно использовать отображения, если не требуется итерация или можно оптимизировать потребление газа за счет упаковки по типу данных.
6. Используйте calldata вместо памяти
Если параметры функции являются только для чтения, следует предпочесть использование calldata вместо memory. Это поможет избежать ненужного копирования данных.
7. Используйте ключевые слова Constant/Immutable по возможности
Постоянные/неизменяемые переменные не хранятся в хранилище контракта, стоимость доступа ниже.
8. Используйте Unchecked, чтобы гарантировать, что переполнение/недостаток не произойдет
Когда вы уверены, что арифметические операции не приведут к переполнению или недостатку, можно использовать ключевое слово unchecked, чтобы избежать лишних проверок и сэкономить газ.
9. Оптимизация модификатора
Путем рефакторинга логики модификатора в внутренние функции можно уменьшить размер байт-кода и снизить расходы на газ.
10. Оптимизация короткого замыкания
Для логических операций желательно ставить условия с низкой стоимостью вычислений в начало, чтобы, возможно, пропустить вычисления с высокой стоимостью.
Дополнительные рекомендации
Удалить ненужный код
Использование предкомпилированных смарт-контрактов
Осторожно используйте встроенный ассемблерный код
Рассмотрите возможность использования решений второго уровня
Использование инструментов оптимизации и библиотек
Заключение
Оптимизация потребления газа является важным шагом для разработчиков, она может минимизировать затраты на транзакции и повысить эффективность смарт-контрактов. Следуя лучшим практикам, обсуждаемым в данной статье, разработчики могут эффективно снизить потребление газа контрактом. Однако в процессе оптимизации необходимо действовать осторожно, чтобы не повлиять на безопасность смарт-контракта.
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.
Руководство по оптимизации Gas-стоимости смарт-контрактов Ethereum: подробное описание десяти лучших практик
Руководство по лучшим практикам оптимизации Gas для смарт-контрактов Ethereum
Проблема с газовыми сборами в основной сети Ethereum всегда привлекала внимание, особенно в периоды перегрузки сети. В часы пик пользователям часто приходится платить высокие сборы за транзакции. Поэтому оптимизация газовых сборов на этапе разработки смарт-контрактов имеет огромное значение. Оптимизация потребления газа не только может эффективно снизить затраты на транзакции, но и повысить эффективность транзакций, предоставляя пользователям более экономичный и эффективный опыт работы с блокчейном.
В данной статье будет рассмотрена механика Gas-стоимости Ethereum Virtual Machine (EVM), основные концепции оптимизации Gas-стоимости, а также лучшие практики оптимизации Gas-стоимости при разработке смарт-контрактов. Надеюсь, что этот материал вдохновит разработчиков и окажет практическую помощь, а также поможет обычным пользователям лучше понять, как работает Gas-стоимость в EVM, чтобы совместно справляться с вызовами в экосистеме блокчейна.
Введение в механизм газовых сборов EVM
В совместимых с EVM сетях "Gas" является единицей измерения вычислительной мощности, необходимой для выполнения определённых операций.
В структуре EVM потребление газа делится на три части: выполнение операций, вызов внешних сообщений, а также чтение и запись в память и хранилище.
Каждая операция требует вычислительных ресурсов, поэтому взимается плата, чтобы предотвратить бесконечные циклы и атаки отказа в обслуживании (DoS). Плата за выполнение операции называется "Gas 费".
С момента вступления в силу EIP-1559, Gas-расходы рассчитываются по следующей формуле:
Комиссия за газ = единицы газа, использованные * (базовая комиссия + приоритетная комиссия)
Базовый сбор будет уничтожен, а приоритетный сбор будет использоваться в качестве стимула, чтобы побудить валидаторов добавлять транзакции в блокчейн. Установка более высокого приоритетного сбора может повысить вероятность того, что транзакция будет быстро упакована. Это похоже на "чаевые", которые платятся валидаторам.
Понимание оптимизации газа в EVM
При компиляции смарт-контрактов на Solidity контракт преобразуется в ряд "операционных кодов". Каждый операционный код имеет признанную стоимость потребления газа.
Основные концепции оптимизации газа
Основной принцип оптимизации Gas заключается в том, чтобы на блокчейне EVM в первую очередь выбирать операции с высокой стоимостью эффективности, избегая операций с дорогими затратами Gas.
Операции с низкой стоимостью в EVM:
Дорогие операции:
Оптимизация затрат на газ EVM: лучшие практики
1. Сведите использование хранилища к минимуму
Стоимость операций со存储 более чем в 100 раз выше, чем стоимость операций с памятью. Методы ограничения использования存储 включают:
2. Упаковка переменных
Рационально организуйте переменные, чтобы несколько переменных могли вписаться в одну ячейку хранения. Это может сэкономить большое количество газа.
3. Оптимизация типов данных
Выбор подходящего типа данных помогает оптимизировать использование газа. Например, использование uint256 обычно экономичнее, чем uint8, если только не удается упаковать несколько переменных uint8 в один слот памяти.
4. Используйте переменные фиксированного размера вместо динамических переменных
Если данные могут быть ограничены 32 байтами, рекомендуется использовать тип данных bytes32 вместо bytes или strings. Переменные фиксированного размера обычно потребляют меньше газа, чем переменные переменного размера.
5. Отображения и массивы
При управлении списком данных предпочтительно использовать отображения, если не требуется итерация или можно оптимизировать потребление газа за счет упаковки по типу данных.
6. Используйте calldata вместо памяти
Если параметры функции являются только для чтения, следует предпочесть использование calldata вместо memory. Это поможет избежать ненужного копирования данных.
! 10 лучших практик оптимизации газа смарт-контрактов Ethereum
7. Используйте ключевые слова Constant/Immutable по возможности
Постоянные/неизменяемые переменные не хранятся в хранилище контракта, стоимость доступа ниже.
8. Используйте Unchecked, чтобы гарантировать, что переполнение/недостаток не произойдет
Когда вы уверены, что арифметические операции не приведут к переполнению или недостатку, можно использовать ключевое слово unchecked, чтобы избежать лишних проверок и сэкономить газ.
9. Оптимизация модификатора
Путем рефакторинга логики модификатора в внутренние функции можно уменьшить размер байт-кода и снизить расходы на газ.
10. Оптимизация короткого замыкания
Для логических операций желательно ставить условия с низкой стоимостью вычислений в начало, чтобы, возможно, пропустить вычисления с высокой стоимостью.
Дополнительные рекомендации
Заключение
Оптимизация потребления газа является важным шагом для разработчиков, она может минимизировать затраты на транзакции и повысить эффективность смарт-контрактов. Следуя лучшим практикам, обсуждаемым в данной статье, разработчики могут эффективно снизить потребление газа контрактом. Однако в процессе оптимизации необходимо действовать осторожно, чтобы не повлиять на безопасность смарт-контракта.