บทเรียนที่ 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