Один із найпростіших способів заощадити газ – це спростити код. Чим менше коду потрібно виконати, тим менше газу споживається.
Розглянемо таку функцію:
Solidity
pragma solidity ^0.8.9;
contract OptimizationExample {
address[] public admins;
функція isUserAdmin(адреса користувача) публічний перегляд повертає (bool) {
for (uint i = 0; i < admins.length; i++) {
if (admins[i] == user) return true;
}
повертає false;
}
}
Наведена вище функція використовує цикл, який стає дорожчим, оскільки додається більше адміністраторів. Більш ефективна структура використовує відображення:
Solidity
contract OptimizationExampleOptimized {
mapping(address => bool) public admins;
функція isUserAdmin(адреса користувача) загальнодоступний вигляд повертає (bool) {
return admins[user];
}
}
Працюючи з Ethereum, пам’ятайте, що ви платите за кожну частину пам’яті. Якщо ви зберігаєте одні й ті самі дані в кількох місцях, подумайте, як ви можете зберегти їх один раз і посилатися на них в іншому місці.
Бібліотеки в Solidity — це фрагменти коду, які можна багаторазово використовувати. Вони можуть допомогти вам написати модульний код, а оскільки вони розгортаються лише один раз і пов’язані з іншими контрактами, вони можуть заощадити газ у довгостроковій перспективі.
Бібліотека Solidity
SafeMath {
функція add(uint a, uint b) внутрішні чисті повернення (uint) {
uint c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
//... інші математичні функції
}
контракт UsingSafeMath {
використання SafeMath для uint;
одиниця суспільної цінності;
приріст функції (uint _value) public {
value = value.add(_value);
}
}
Ключове слово delete
у Solidity дозволяє обнулити змінні, які повертають частину газу. Якщо ви закінчили з певною частиною пам’яті, видаліть її, щоб отримати відшкодування.
Хоча зберігання даних у блокчейні може бути дорогим, реєстрація подій порівняно дешевша. Якщо у вас є дані, які не потрібно зчитувати з контракту, але їх можна перевірити, подумайте про використання журналів подій.
Деякі операції є більш інтенсивними, ніж інші. Наприклад:
Оптимізація смарт-контрактів для газу — це і мистецтво, і наука. Об’єднані підходи, розглянуті в цьому курсі, можуть значно знизити витрати на газ за вашими контрактами. Майте на увазі, що екосистема Ethereum та її інструменти, включаючи Remix, постійно змінюються. Слідкуйте за останніми новинами, регулярно тестуйте та покращуйте свої контракти для оптимізації. Спільнота Ethereum є великою та корисною, тому ніколи не бійтеся шукати порад або найкращих практик. Отримуйте задоволення від кодування!
Один із найпростіших способів заощадити газ – це спростити код. Чим менше коду потрібно виконати, тим менше газу споживається.
Розглянемо таку функцію:
Solidity
pragma solidity ^0.8.9;
contract OptimizationExample {
address[] public admins;
функція isUserAdmin(адреса користувача) публічний перегляд повертає (bool) {
for (uint i = 0; i < admins.length; i++) {
if (admins[i] == user) return true;
}
повертає false;
}
}
Наведена вище функція використовує цикл, який стає дорожчим, оскільки додається більше адміністраторів. Більш ефективна структура використовує відображення:
Solidity
contract OptimizationExampleOptimized {
mapping(address => bool) public admins;
функція isUserAdmin(адреса користувача) загальнодоступний вигляд повертає (bool) {
return admins[user];
}
}
Працюючи з Ethereum, пам’ятайте, що ви платите за кожну частину пам’яті. Якщо ви зберігаєте одні й ті самі дані в кількох місцях, подумайте, як ви можете зберегти їх один раз і посилатися на них в іншому місці.
Бібліотеки в Solidity — це фрагменти коду, які можна багаторазово використовувати. Вони можуть допомогти вам написати модульний код, а оскільки вони розгортаються лише один раз і пов’язані з іншими контрактами, вони можуть заощадити газ у довгостроковій перспективі.
Бібліотека Solidity
SafeMath {
функція add(uint a, uint b) внутрішні чисті повернення (uint) {
uint c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
//... інші математичні функції
}
контракт UsingSafeMath {
використання SafeMath для uint;
одиниця суспільної цінності;
приріст функції (uint _value) public {
value = value.add(_value);
}
}
Ключове слово delete
у Solidity дозволяє обнулити змінні, які повертають частину газу. Якщо ви закінчили з певною частиною пам’яті, видаліть її, щоб отримати відшкодування.
Хоча зберігання даних у блокчейні може бути дорогим, реєстрація подій порівняно дешевша. Якщо у вас є дані, які не потрібно зчитувати з контракту, але їх можна перевірити, подумайте про використання журналів подій.
Деякі операції є більш інтенсивними, ніж інші. Наприклад:
Оптимізація смарт-контрактів для газу — це і мистецтво, і наука. Об’єднані підходи, розглянуті в цьому курсі, можуть значно знизити витрати на газ за вашими контрактами. Майте на увазі, що екосистема Ethereum та її інструменти, включаючи Remix, постійно змінюються. Слідкуйте за останніми новинами, регулярно тестуйте та покращуйте свої контракти для оптимізації. Спільнота Ethereum є великою та корисною, тому ніколи не бійтеся шукати порад або найкращих практик. Отримуйте задоволення від кодування!