Bài học 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 є великою та корисною, тому ніколи не бійтеся шукати порад або найкращих практик. Отримуйте задоволення від кодування!

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.
Danh mục
Bài học 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 є великою та корисною, тому ніколи не бійтеся шукати порад або найкращих практик. Отримуйте задоволення від кодування!

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.