第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. Зверніть увагу на нижчу вартість газу порівняно зі сховищем.

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

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

免责声明
* 投资有风险,入市须谨慎。本课程不作为投资理财建议。
* 本课程由入驻Gate Learn的作者创作,观点仅代表作者本人,绝不代表Gate Learn赞同其观点或证实其描述。
目录
第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. Зверніть увагу на нижчу вартість газу порівняно зі сховищем.

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

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

免责声明
* 投资有风险,入市须谨慎。本课程不作为投资理财建议。
* 本课程由入驻Gate Learn的作者创作,观点仅代表作者本人,绝不代表Gate Learn赞同其观点或证实其描述。