Оптимизация газовых сборов при разработке смарт-контрактов
Газовые сборы в основной сети Ethereum всегда были основной проблемой для разработчиков и пользователей, особенно в периоды перегрузки сети. Оптимизация газовых сборов на этапе разработки смарт-контрактов имеет решающее значение. Это не только эффективно снижает затраты на транзакции, но и повышает эффективность транзакций, предоставляя пользователям более экономичный и эффективный опыт работы с блокчейном.
В этой статье будет рассмотрен механизм комиссии за Gas в Ethereum Virtual Machine (EVM), основные концепции оптимизации комиссий за Gas, а также лучшие практики оптимизации комиссий за Gas при разработке смарт-контрактов. Эти материалы предназначены для предоставления практического руководства разработчикам, а также для помощи обычным пользователям в лучшем понимании того, как функционируют комиссии за Gas в EVM.
Введение в механизм Gas-оплат EVM
В совместимых с EVM сетях «Gas» является единицей измерения вычислительной мощности, необходимой для выполнения конкретных операций. Расход Gas в EVM в основном делится на три части: выполнение операций, вызов внешних сообщений и чтение/запись в память и хранилище.
Каждое выполнение транзакции требует вычислительных ресурсов, поэтому взимается определенная плата для предотвращения бесконечных циклов и атак отказа в обслуживании (DoS) (. Плата, необходимая для завершения транзакции, называется "Gas 费".
С момента хард-форка Лондон, Gas-цена рассчитывается по следующей формуле:
Базовая плата будет уничтожена, в то время как приоритетные сборы будут использоваться в качестве стимула, побуждающего валидаторов добавлять транзакции в блокчейн. Установка более высокой приоритетной платы может увеличить вероятность быстрой обработки транзакции.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum])https://img-cdn.gateio.im/webp-social/moments-187da99010b8fe26c21280bf193d1373.webp(
) Понимание оптимизации газа в EVM
Смарт-контракты, скомпилированные на Solidity, будут преобразованы в серию операций ### opcodes (. Каждый opcode имеет определенную стоимость потребления газа. Основная идея оптимизации газа заключается в том, чтобы отдать предпочтение операциям с высокой стоимостью эффективности, избегая операций с дорогими затратами на газ.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum])https://img-cdn.gateio.im/webp-social/moments-b237228ebe933741fb60f2e8bcb38405.webp(
Оптимизация расходов на газ: лучшие практики
) 1. Снижение использования хранилища
Потребление газа для хранилища значительно выше, чем для памяти. Старайтесь хранить непостоянные данные в памяти, чтобы сократить количество изменений в хранилище.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-30f0bc370a7b9ca65f3d623c31262b76.webp(
) 2. Упаковка переменных
Рационально распределите переменные, чтобы несколько переменных могли поместиться в одном хранилище размером 32 байта, чтобы уменьшить количество необходимых хранилищ.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.webp(
) 3. Оптимизация типов данных
Выбор подходящего типа данных может оптимизировать использование Gas. Например, в некоторых случаях использование uint256 может быть более эффективным, чем uint8.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-55fcdb765912ef9cd238c46b1d248cff.webp(
) 4. Использование переменных фиксированного размера
Если данные могут быть ограничены 32 байтами, предпочтительно использовать bytes32, а не bytes или strings.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(
) 5. Приоритетное использование отображения
При управлении списком данных, если не требуется итерация или оптимизация за счет упаковки через тип данных, следует предпочитать использование отображений, а не массивов.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 6. Используйте calldata вместо memory
Для параметров функций только для чтения использование calldata позволяет избежать ненужного копирования данных, что экономит Gas.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 7. Использование ключевых слов Constant/Immutable
Эти переменные хранятся в байт-коде контракта, стоимость доступа ниже, чем стоимость хранения переменных.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp(
) 8. Используйте ключевое слово Unchecked
При условии, что переполнение/недостаток не произойдет, использование unchecked может избежать лишних проверок и сэкономить Gas.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(
) 9. Оптимизация модификатора
Перепишите логику модификатора как внутреннюю функцию, чтобы уменьшить размер байт-кода и снизить стоимость Gas.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-a141884dcdcdc56faff12eee2601b7b7.webp(
) 10. Оптимизация короткого замыкания
Для логических операций условия с низкой стоимостью вычислений следует ставить вперед, чтобы, возможно, пропустить вычисления с высокой стоимостью.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-248337b15929868ed1250ffb9fcfa289.webp(
Дополнительные рекомендации
Удалить бесполезный код и переменные
Использование предкомпилированных смарт-контрактов для сложных операций
Рассмотрите возможность использования решений второго уровня
Используйте инструменты и библиотеки для оптимизации, такие как оптимизатор solc, оптимизатор сборки Truffle и другие.
При оптимизации потребления газа разработчики должны находить баланс между эффективностью и безопасностью, чтобы не ввести уязвимости в результате чрезмерной оптимизации. Применяя эти лучшие практики, можно существенно снизить потребление газа смарт-контрактами и повысить их эффективность работы в EVM-совместимых сетях.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum])https://img-cdn.gateio.im/webp-social/moments-d61d61e86a5ce7eda62877be81e809cd.webp(
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.
6 Лайков
Награда
6
5
Поделиться
комментарий
0/400
AirdropSweaterFan
· 7ч назад
Хороший парень, оптимизация газа написана довольно полно.
Посмотреть ОригиналОтветить0
ContractExplorer
· 7ч назад
принадлежит к ценным идеям и является хардкорным
Посмотреть ОригиналОтветить0
YieldWhisperer
· 7ч назад
видел, как эти "оптимизации" проваливались с треском в проде... просто проверь 0xb4c перед тем, как влезать
Анализ 10 стратегий оптимизации Gas-стоимости для EVM смарт-контрактов
Оптимизация газовых сборов при разработке смарт-контрактов
Газовые сборы в основной сети Ethereum всегда были основной проблемой для разработчиков и пользователей, особенно в периоды перегрузки сети. Оптимизация газовых сборов на этапе разработки смарт-контрактов имеет решающее значение. Это не только эффективно снижает затраты на транзакции, но и повышает эффективность транзакций, предоставляя пользователям более экономичный и эффективный опыт работы с блокчейном.
В этой статье будет рассмотрен механизм комиссии за Gas в Ethereum Virtual Machine (EVM), основные концепции оптимизации комиссий за Gas, а также лучшие практики оптимизации комиссий за Gas при разработке смарт-контрактов. Эти материалы предназначены для предоставления практического руководства разработчикам, а также для помощи обычным пользователям в лучшем понимании того, как функционируют комиссии за Gas в EVM.
Введение в механизм Gas-оплат EVM
В совместимых с EVM сетях «Gas» является единицей измерения вычислительной мощности, необходимой для выполнения конкретных операций. Расход Gas в EVM в основном делится на три части: выполнение операций, вызов внешних сообщений и чтение/запись в память и хранилище.
Каждое выполнение транзакции требует вычислительных ресурсов, поэтому взимается определенная плата для предотвращения бесконечных циклов и атак отказа в обслуживании (DoS) (. Плата, необходимая для завершения транзакции, называется "Gas 费".
С момента хард-форка Лондон, Gas-цена рассчитывается по следующей формуле:
Газовая плата = единицы газа, использованные * )базовая плата + плата за приоритет(
Базовая плата будет уничтожена, в то время как приоритетные сборы будут использоваться в качестве стимула, побуждающего валидаторов добавлять транзакции в блокчейн. Установка более высокой приоритетной платы может увеличить вероятность быстрой обработки транзакции.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum])https://img-cdn.gateio.im/webp-social/moments-187da99010b8fe26c21280bf193d1373.webp(
) Понимание оптимизации газа в EVM
Смарт-контракты, скомпилированные на Solidity, будут преобразованы в серию операций ### opcodes (. Каждый opcode имеет определенную стоимость потребления газа. Основная идея оптимизации газа заключается в том, чтобы отдать предпочтение операциям с высокой стоимостью эффективности, избегая операций с дорогими затратами на газ.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum])https://img-cdn.gateio.im/webp-social/moments-b237228ebe933741fb60f2e8bcb38405.webp(
Оптимизация расходов на газ: лучшие практики
) 1. Снижение использования хранилища
Потребление газа для хранилища значительно выше, чем для памяти. Старайтесь хранить непостоянные данные в памяти, чтобы сократить количество изменений в хранилище.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-30f0bc370a7b9ca65f3d623c31262b76.webp(
) 2. Упаковка переменных
Рационально распределите переменные, чтобы несколько переменных могли поместиться в одном хранилище размером 32 байта, чтобы уменьшить количество необходимых хранилищ.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.webp(
) 3. Оптимизация типов данных
Выбор подходящего типа данных может оптимизировать использование Gas. Например, в некоторых случаях использование uint256 может быть более эффективным, чем uint8.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-55fcdb765912ef9cd238c46b1d248cff.webp(
) 4. Использование переменных фиксированного размера
Если данные могут быть ограничены 32 байтами, предпочтительно использовать bytes32, а не bytes или strings.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(
) 5. Приоритетное использование отображения
При управлении списком данных, если не требуется итерация или оптимизация за счет упаковки через тип данных, следует предпочитать использование отображений, а не массивов.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp(
) 6. Используйте calldata вместо memory
Для параметров функций только для чтения использование calldata позволяет избежать ненужного копирования данных, что экономит Gas.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(
) 7. Использование ключевых слов Constant/Immutable
Эти переменные хранятся в байт-коде контракта, стоимость доступа ниже, чем стоимость хранения переменных.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-a823fb7761aafa6529a6c45304e0314b.webp(
) 8. Используйте ключевое слово Unchecked
При условии, что переполнение/недостаток не произойдет, использование unchecked может избежать лишних проверок и сэкономить Gas.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(
) 9. Оптимизация модификатора
Перепишите логику модификатора как внутреннюю функцию, чтобы уменьшить размер байт-кода и снизить стоимость Gas.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-a141884dcdcdc56faff12eee2601b7b7.webp(
) 10. Оптимизация короткого замыкания
Для логических операций условия с низкой стоимостью вычислений следует ставить вперед, чтобы, возможно, пропустить вычисления с высокой стоимостью.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum]###https://img-cdn.gateio.im/webp-social/moments-248337b15929868ed1250ffb9fcfa289.webp(
Дополнительные рекомендации
При оптимизации потребления газа разработчики должны находить баланс между эффективностью и безопасностью, чтобы не ввести уязвимости в результате чрезмерной оптимизации. Применяя эти лучшие практики, можно существенно снизить потребление газа смарт-контрактами и повысить их эффективность работы в EVM-совместимых сетях.
![Десять лучших практик оптимизации Gas для смарт-контрактов Ethereum])https://img-cdn.gateio.im/webp-social/moments-d61d61e86a5ce7eda62877be81e809cd.webp(