Один из самых простых способов экономии газа - это упрощение Вашего кода. Чем меньше кода нужно выполнить, тем меньше расходуется газа.
Рассмотрим следующую функцию:
Solidity pragma solidity ^0.8.9;
contract OptimizationExample { address[] public admins;
function isUserAdmin(address user) public view returns (bool) { for (uint i = 0; i В приведенной выше функции используется цикл, который становится все более затратным по мере добавления большего количества администраторов. В более газоэффективной структуре будет использоваться картирование:
Solidity contract OptimizationExampleOptimized { mapping(address => bool) public admins;
function isUserAdmin(address user) public view returns (bool) { return admins[user]; } }
Работая с Ethereum, помните, что Вы платите за каждый бит хранения. Если Вы обнаружите, что храните одни и те же данные в нескольких местах, подумайте, как Вы можете хранить их один раз и ссылаться на них в других местах.
Библиотеки в Solidity - это многократно используемые фрагменты кода. Они могут помочь Вам написать модульный код, а поскольку они развертываются только один раз и связаны с другими контрактами, то в долгосрочной перспективе они могут сэкономить газ.
Solidity библиотека SafeMath { function add(uint a, uint b) internal pure returns (uint) { uint c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } //... другие математические функции }
contract UsingSafeMath { using SafeMath for uint;
uint public value;
function increment(uint _value) public { value = value.add(_value); } }
Ключевое слово delete в Solidity позволяет Вам обнулять переменные, что возвращает часть газа. Если Вы закончили работу с определенной частью хранилища, удалите ее, чтобы потребовать возврата денег.
В то время как хранение данных в блокчейне может быть дорогостоящим, протоколирование событий обходится сравнительно дешевле. Если у Вас есть данные, которые не нужно считывать из контракта, но которые должны быть проверяемы, рассмотрите возможность использования журналов событий.
Некоторые операции являются более газоемкими, чем другие. Например:
Вызовы внешних функций стоят дороже, чем внутренних.
Взаимодействие с хранилищем обходится дороже, чем взаимодействие с памятью.
Динамические массивы иногда могут стоить больше газа, чем массивы фиксированного размера.
Оптимизация смарт-контрактов для газа - это и искусство, и наука. Подходы, обсуждаемые в этом курсе, в сочетании друг с другом способны значительно снизить газовые расходы по Вашим контрактам. Имейте в виду, что экосистема Ethereum и ее инструменты, включая Remix, постоянно меняются. Постоянно обновляйте, тестируйте и улучшайте свои контракты для оптимизации. Сообщество Ethereum очень многочисленно и полезно, поэтому никогда не бойтесь обращаться за советом или передовым опытом. Получайте удовольствие от кодирования!
Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.