Lição 3

Методи оптимізації газу з реміксом

Тепер, коли ви опанували деякі фундаментальні підходи до оптимізації сховища, важливо потренуватися. Скористайтеся запропонованими прикладами та експериментуйте, створюючи власні. У наступній сесії ми глибше розглянемо оптимізацію видимості функцій і повторне використання коду з бібліотеками. Пам’ятайте, що оптимізація – це мистецтво і наука. Продовжуйте експериментувати!

Оптимізація зберігання

Більшість витрат на газ Ethereum зосереджена навколо сховища. Кожна операція, яка змінює стан (зберігання) мережі Ethereum, як правило, дорога. У результаті зосередження на тому, як дані зберігаються та доступні, може призвести до значного скорочення витрат. У цій сесії ми розглянемо кілька способів оптимізації пам’яті за допомогою Remix.

Чому зберігання коштує дорого?

Блокчейн Ethereum забезпечує постійне зберігання. Усе, що зберігається в блокчейні, буде доступним до тих пір, поки блокчейн живе, але ця постійність має свою ціну. Оптимізація сховища не тільки знижує витрати, але й забезпечує ефективне використання глобального стану Ethereum.

Упаковка Змінні зберігання

Вступ

Solidity зберігає змінні в слотах. Кожен слот має 32 байти. Коли змінні можуть поміститися в один слот, їх можна прочитати або оновити за допомогою однієї операції SLOAD або SSTORE відповідно.

Приклад

Розглянемо два договори:

Solidity 
 // Без оптимізації 
 pragma solidity ^0.8.9; 

 контракт UnoptimizedStorage {
    uint256 public value1;
    uint256 public value2;
}
Solidity 
 // З прагмою Optimization 
 solidity ^0.8.9; 

 контракт OptimizedStorage {
    uint128 public value1;
    uint128 public value2;
}
  1. Розгорніть обидва контракти в Remix і зверніть увагу на відмінності газу під час взаємодії з їхніми змінними.

  2. В оптимізованій версії value1 і value2 мають один 32-байтовий слот.

Повторне використання слотів для зберігання

Вступ

Коли ви закінчите використовувати слот для зберігання, особливо для тимчасового зберігання даних, ви можете видалити або обнулити слот, щоб отримати відшкодування за газ.

Приклад

Solidity 
 pragma solidity ^0.8.9; 

 contract RefundExample { 
 uint256 public temporaryData; 

 функція storeTemporaryData(дані uint256) public {
        temporaryData = data;
    }

    функція clearTemporaryData() public {
        delete temporaryData;
    }
}
  1. Розгорніть цей контракт у Remix.

  2. Збережіть деякі тимчасові дані, а потім очистіть їх.

  3. Перевірте вартість газу. Зверніть увагу на відшкодування газу, яке ви отримуєте за операцію delete .

Використання подій замість зберігання історичних даних

Вступ

Якщо доступ до даних у ланцюжку не потрібен, подумайте про те, щоб реєструвати їх як подію, а не зберігати. Події набагато дешевші, ніж операції зберігання.

Приклад

Solidity 
 pragma solidity ^0.8.9; 

 контракт EventExample { 
 подія DataStored(uint256 data); 

 функція storeData(uint256 дані) public {
        emit DataStored(data);
    }
}
  1. Розгортайте контракт і взаємодійте з ним у Remix.

  2. Зверніть увагу на нижчу вартість газу порівняно зі сховищем.

Дивлячись вперед

Тепер, коли ви опанували деякі фундаментальні підходи до оптимізації сховища, важливо потренуватися. Скористайтеся запропонованими прикладами та експериментуйте, створюючи власні. У наступній сесії ми глибше розглянемо оптимізацію видимості функцій і повторне використання коду з бібліотеками. Пам’ятайте, що оптимізація – це мистецтво і наука. Продовжуйте експериментувати!

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.
Catálogo
Lição 3

Методи оптимізації газу з реміксом

Тепер, коли ви опанували деякі фундаментальні підходи до оптимізації сховища, важливо потренуватися. Скористайтеся запропонованими прикладами та експериментуйте, створюючи власні. У наступній сесії ми глибше розглянемо оптимізацію видимості функцій і повторне використання коду з бібліотеками. Пам’ятайте, що оптимізація – це мистецтво і наука. Продовжуйте експериментувати!

Оптимізація зберігання

Більшість витрат на газ Ethereum зосереджена навколо сховища. Кожна операція, яка змінює стан (зберігання) мережі Ethereum, як правило, дорога. У результаті зосередження на тому, як дані зберігаються та доступні, може призвести до значного скорочення витрат. У цій сесії ми розглянемо кілька способів оптимізації пам’яті за допомогою Remix.

Чому зберігання коштує дорого?

Блокчейн Ethereum забезпечує постійне зберігання. Усе, що зберігається в блокчейні, буде доступним до тих пір, поки блокчейн живе, але ця постійність має свою ціну. Оптимізація сховища не тільки знижує витрати, але й забезпечує ефективне використання глобального стану Ethereum.

Упаковка Змінні зберігання

Вступ

Solidity зберігає змінні в слотах. Кожен слот має 32 байти. Коли змінні можуть поміститися в один слот, їх можна прочитати або оновити за допомогою однієї операції SLOAD або SSTORE відповідно.

Приклад

Розглянемо два договори:

Solidity 
 // Без оптимізації 
 pragma solidity ^0.8.9; 

 контракт UnoptimizedStorage {
    uint256 public value1;
    uint256 public value2;
}
Solidity 
 // З прагмою Optimization 
 solidity ^0.8.9; 

 контракт OptimizedStorage {
    uint128 public value1;
    uint128 public value2;
}
  1. Розгорніть обидва контракти в Remix і зверніть увагу на відмінності газу під час взаємодії з їхніми змінними.

  2. В оптимізованій версії value1 і value2 мають один 32-байтовий слот.

Повторне використання слотів для зберігання

Вступ

Коли ви закінчите використовувати слот для зберігання, особливо для тимчасового зберігання даних, ви можете видалити або обнулити слот, щоб отримати відшкодування за газ.

Приклад

Solidity 
 pragma solidity ^0.8.9; 

 contract RefundExample { 
 uint256 public temporaryData; 

 функція storeTemporaryData(дані uint256) public {
        temporaryData = data;
    }

    функція clearTemporaryData() public {
        delete temporaryData;
    }
}
  1. Розгорніть цей контракт у Remix.

  2. Збережіть деякі тимчасові дані, а потім очистіть їх.

  3. Перевірте вартість газу. Зверніть увагу на відшкодування газу, яке ви отримуєте за операцію delete .

Використання подій замість зберігання історичних даних

Вступ

Якщо доступ до даних у ланцюжку не потрібен, подумайте про те, щоб реєструвати їх як подію, а не зберігати. Події набагато дешевші, ніж операції зберігання.

Приклад

Solidity 
 pragma solidity ^0.8.9; 

 контракт EventExample { 
 подія DataStored(uint256 data); 

 функція storeData(uint256 дані) public {
        emit DataStored(data);
    }
}
  1. Розгортайте контракт і взаємодійте з ним у Remix.

  2. Зверніть увагу на нижчу вартість газу порівняно зі сховищем.

Дивлячись вперед

Тепер, коли ви опанували деякі фундаментальні підходи до оптимізації сховища, важливо потренуватися. Скористайтеся запропонованими прикладами та експериментуйте, створюючи власні. У наступній сесії ми глибше розглянемо оптимізацію видимості функцій і повторне використання коду з бібліотеками. Пам’ятайте, що оптимізація – це мистецтво і наука. Продовжуйте експериментувати!

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.