Урок 5

Фінал оптимізації смарт-контракту – додаткові поради та підказки

У наших попередніх уроках ми розглянули основні концепції та інструменти, необхідні для оптимізації газу на смарт-контрактах Ethereum, особливо за допомогою Remix IDE. Підсумовуючи цей курс, давайте заглибимося в деякі передові техніки та найкращі практики. Цей заключний урок об’єднає знання, які ми накопичили, гарантуючи, що ви підете з повним розумінням оптимізації газу в смарт-контрактах 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 є великою та корисною, тому ніколи не бійтеся шукати порад або найкращих практик. Отримуйте задоволення від кодування!

Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.
Каталог
Урок 5

Фінал оптимізації смарт-контракту – додаткові поради та підказки

У наших попередніх уроках ми розглянули основні концепції та інструменти, необхідні для оптимізації газу на смарт-контрактах Ethereum, особливо за допомогою Remix IDE. Підсумовуючи цей курс, давайте заглибимося в деякі передові техніки та найкращі практики. Цей заключний урок об’єднає знання, які ми накопичили, гарантуючи, що ви підете з повним розумінням оптимізації газу в смарт-контрактах 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 є великою та корисною, тому ніколи не бійтеся шукати порад або найкращих практик. Отримуйте задоволення від кодування!

Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.