Руководство по оптимизации Gas-стоимости смарт-контрактов Ethereum: подробное описание десяти лучших практик

Руководство по лучшим практикам оптимизации Gas для смарт-контрактов Ethereum

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

В данной статье будет рассмотрена механика Gas-стоимости Ethereum Virtual Machine (EVM), основные концепции оптимизации Gas-стоимости, а также лучшие практики оптимизации Gas-стоимости при разработке смарт-контрактов. Надеюсь, что этот материал вдохновит разработчиков и окажет практическую помощь, а также поможет обычным пользователям лучше понять, как работает Gas-стоимость в EVM, чтобы совместно справляться с вызовами в экосистеме блокчейна.

Оптимизация Gas для смарт-контрактов Ethereum: 10 лучших практик

Введение в механизм газовых сборов EVM

В совместимых с EVM сетях "Gas" является единицей измерения вычислительной мощности, необходимой для выполнения определённых операций.

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

Каждая операция требует вычислительных ресурсов, поэтому взимается плата, чтобы предотвратить бесконечные циклы и атаки отказа в обслуживании (DoS). Плата за выполнение операции называется "Gas 费".

С момента вступления в силу EIP-1559, Gas-расходы рассчитываются по следующей формуле:

Комиссия за газ = единицы газа, использованные * (базовая комиссия + приоритетная комиссия)

Базовый сбор будет уничтожен, а приоритетный сбор будет использоваться в качестве стимула, чтобы побудить валидаторов добавлять транзакции в блокчейн. Установка более высокого приоритетного сбора может повысить вероятность того, что транзакция будет быстро упакована. Это похоже на "чаевые", которые платятся валидаторам.

Газовая оптимизация смарт-контрактов Ethereum: десять лучших практик

Понимание оптимизации газа в EVM

При компиляции смарт-контрактов на Solidity контракт преобразуется в ряд "операционных кодов". Каждый операционный код имеет признанную стоимость потребления газа.

Основные концепции оптимизации газа

Основной принцип оптимизации Gas заключается в том, чтобы на блокчейне EVM в первую очередь выбирать операции с высокой стоимостью эффективности, избегая операций с дорогими затратами Gas.

Операции с низкой стоимостью в EVM:

  • Чтение и запись переменных в памяти
  • Чтение констант и неизменяемых переменных
  • Чтение и запись локальных переменных
  • Чтение переменной calldata
  • Внутренний вызов функции

Дорогие операции:

  • Чтение и запись состояния переменных, хранящихся в смарт-контрактах
  • Вызов внешних функций
  • Циклическая операция

Оптимизация Gas смарт-контрактов Ethereum: десять лучших практик

Оптимизация затрат на газ EVM: лучшие практики

1. Сведите использование хранилища к минимуму

Стоимость операций со存储 более чем в 100 раз выше, чем стоимость операций с памятью. Методы ограничения использования存储 включают:

  • Хранить непостоянные данные в памяти
  • Уменьшение количества изменений в хранилище: сохраняйте промежуточные результаты в памяти и после завершения всех вычислений распределяйте результаты переменным хранилища.

Оптимизация Gas для смарт-контрактов Ethereum: десять лучших практик

2. Упаковка переменных

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

Оптимизация Gas для смарт-контрактов Ethereum: десять лучших практик

3. Оптимизация типов данных

Выбор подходящего типа данных помогает оптимизировать использование газа. Например, использование uint256 обычно экономичнее, чем uint8, если только не удается упаковать несколько переменных uint8 в один слот памяти.

Ethereum смарт-контрактов Gas оптимизация десятка лучших практик

4. Используйте переменные фиксированного размера вместо динамических переменных

Если данные могут быть ограничены 32 байтами, рекомендуется использовать тип данных bytes32 вместо bytes или strings. Переменные фиксированного размера обычно потребляют меньше газа, чем переменные переменного размера.

Оптимизация газа смарт-контрактов Ethereum: десять лучших практик

5. Отображения и массивы

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

Оптимизация Gas для смарт-контрактов Ethereum: десять лучших практик

6. Используйте calldata вместо памяти

Если параметры функции являются только для чтения, следует предпочесть использование calldata вместо memory. Это поможет избежать ненужного копирования данных.

! 10 лучших практик оптимизации газа смарт-контрактов Ethereum

7. Используйте ключевые слова Constant/Immutable по возможности

Постоянные/неизменяемые переменные не хранятся в хранилище контракта, стоимость доступа ниже.

Оптимизация газа смарт-контрактов Ethereum: десять лучших практик

8. Используйте Unchecked, чтобы гарантировать, что переполнение/недостаток не произойдет

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

Оптимизация газа смарт-контрактов Ethereum: 10 лучших практик

9. Оптимизация модификатора

Путем рефакторинга логики модификатора в внутренние функции можно уменьшить размер байт-кода и снизить расходы на газ.

Оптимизация газа смарт-контрактов Ethereum: десять лучших практик

10. Оптимизация короткого замыкания

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

Газовая оптимизация смарт-контрактов Ethereum: десять лучших практик

Дополнительные рекомендации

  1. Удалить ненужный код
  2. Использование предкомпилированных смарт-контрактов
  3. Осторожно используйте встроенный ассемблерный код
  4. Рассмотрите возможность использования решений второго уровня
  5. Использование инструментов оптимизации и библиотек

Заключение

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

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.
  • Награда
  • 8
  • Поделиться
комментарий
0/400
ChainSpyvip
· 11м назад
Сколько можно сэкономить, сэкономим.
Посмотреть ОригиналОтветить0
SchrodingerAirdropvip
· 07-03 19:36
Газ жжет деньги, это действительно эффективно.
Посмотреть ОригиналОтветить0
SundayDegenvip
· 07-02 07:39
Слишком дорого, ничего страшного.
Посмотреть ОригиналОтветить0
LayerZeroHerovip
· 07-02 07:37
Лояльные фанаты L0 Протокол
Посмотреть ОригиналОтветить0
Whale_Whisperervip
· 07-02 07:34
Оптимизация необходима
Посмотреть ОригиналОтветить0
RooftopVIPvip
· 07-02 07:33
Газовые комиссии разрушают мир
Посмотреть ОригиналОтветить0
PrivateKeyParanoiavip
· 07-02 07:29
Газ费赶紧 оптимизировать
Посмотреть ОригиналОтветить0
StakeWhisperervip
· 07-02 07:23
Оптимизация действительно не сэкономит много.
Посмотреть ОригиналОтветить0
  • Закрепить