Lesson 3

リミックスによるガス最適化技術

基本的なストレージ最適化のアプローチをマスターした今、練習することが重要です。 提供されている例に取り組み、独自の例を作成してみてください。 次のセッションでは、関数の可視性の最適化とライブラリでのコードの再利用について詳しく説明します。 最適化は芸術であり、科学でもあることを心に留めておいてください。 実験を続けてください!

ストレージの最適化

イーサリアムのガス支出の大部分はストレージに集中しています。 イーサリアムネットワークの状態(ストレージ)を変更する各操作は、通常、コストがかかります。 その結果、データの保持方法とアクセス方法に集中することで、大幅なコスト削減につながる可能性があります。 このセッションでは、Remixでストレージを最適化する方法をいくつか見ていきます。

ストレージはなぜ高価なのですか?

イーサリアムブロックチェーンは、恒久的なストレージを提供します。 ブロックチェーンに保存されたすべてのものは、ブロックチェーンが存続する限り利用できますが、この永続性にはコストがかかります。 ストレージを最適化することで、コストが削減されるだけでなく、イーサリアムのグローバル状態が効率的に使用されるようになります。

パッキング保管変数

紹介

Solidityは変数をスロットに格納します。 各スロットは 32 バイトです。 変数が 1 つのスロットに収まる場合は、それぞれ 1 回の SLOAD または SSTORE 操作で読み取りまたは更新できます。

次の 2 つの契約について考えてみます。

硬度
最適化なし
プラグマの堅実さ^0.8.9;

コントラクト UnoptimizedStorage {
    uint256 public value1;
    uint256 public value2;
}
硬度
最適化あり
プラグマの堅実さ^0.8.9;

contract OptimizedStorage {
    uint128 public value1;
    uint128 public value2;
}
  1. 両方のコントラクトを Remix にデプロイし、変数を操作するときにガスの違いを確認します。

  2. 最適化されたバージョンでは、両方value1value2と が 1 つの 32 バイト スロットを共有します。

ストレージ・スロットの再利用

紹介

ストレージスロット、特に一時的なデータストレージを使い終わったら、スロットを削除またはゼロにして、ガスの払い戻しを受けることができます。

硬度
プラグマの堅実さ^0.8.9;

contract 返金例 {
    uint256 public temporaryDataです。

function storeTemporaryData(uint256 data) public {
        temporaryData = data;
    }

関数 clearTemporaryData() public {
        delete temporaryData;
    }
}
  1. このコントラクトを Remix にデプロイします。

  2. 一時データを格納し、クリアします。

  3. ガス代を確認してください。 手術で delete 得られるガスの払い戻しに注目してください。

ヒストリカル・データに対するストレージの代わりにイベントの使用

紹介

オンチェーンでデータにアクセスする必要がない場合は、保存するのではなく、イベントとして記録することを検討してください。 イベントは、ストレージ操作よりもはるかに安価です。

硬度
プラグマの堅実さ^0.8.9;

contract EventExample {
    イベントDataStored(uint256データ);

function storeData(uint256 data) public {
        emit DataStored(data);
    }
}
  1. Remix でコントラクトを展開して操作します。

  2. 貯蔵と比較すると、ガス代が安いことに注意してください。

今後の展望

基本的なストレージ最適化のアプローチをマスターした今、練習することが重要です。 提供されている例に取り組み、独自の例を作成してみてください。 次のセッションでは、関数の可視性の最適化とライブラリでのコードの再利用について詳しく説明します。 最適化は芸術であり、科学でもあることを心に留めておいてください。 実験を続けてください!

Disclaimer
* Crypto investment involves significant risks. Please proceed with caution. The course is not intended as investment advice.
* The course is created by the author who has joined Gate Learn. Any opinion shared by the author does not represent Gate Learn.
Catalog
Lesson 3

リミックスによるガス最適化技術

基本的なストレージ最適化のアプローチをマスターした今、練習することが重要です。 提供されている例に取り組み、独自の例を作成してみてください。 次のセッションでは、関数の可視性の最適化とライブラリでのコードの再利用について詳しく説明します。 最適化は芸術であり、科学でもあることを心に留めておいてください。 実験を続けてください!

ストレージの最適化

イーサリアムのガス支出の大部分はストレージに集中しています。 イーサリアムネットワークの状態(ストレージ)を変更する各操作は、通常、コストがかかります。 その結果、データの保持方法とアクセス方法に集中することで、大幅なコスト削減につながる可能性があります。 このセッションでは、Remixでストレージを最適化する方法をいくつか見ていきます。

ストレージはなぜ高価なのですか?

イーサリアムブロックチェーンは、恒久的なストレージを提供します。 ブロックチェーンに保存されたすべてのものは、ブロックチェーンが存続する限り利用できますが、この永続性にはコストがかかります。 ストレージを最適化することで、コストが削減されるだけでなく、イーサリアムのグローバル状態が効率的に使用されるようになります。

パッキング保管変数

紹介

Solidityは変数をスロットに格納します。 各スロットは 32 バイトです。 変数が 1 つのスロットに収まる場合は、それぞれ 1 回の SLOAD または SSTORE 操作で読み取りまたは更新できます。

次の 2 つの契約について考えてみます。

硬度
最適化なし
プラグマの堅実さ^0.8.9;

コントラクト UnoptimizedStorage {
    uint256 public value1;
    uint256 public value2;
}
硬度
最適化あり
プラグマの堅実さ^0.8.9;

contract OptimizedStorage {
    uint128 public value1;
    uint128 public value2;
}
  1. 両方のコントラクトを Remix にデプロイし、変数を操作するときにガスの違いを確認します。

  2. 最適化されたバージョンでは、両方value1value2と が 1 つの 32 バイト スロットを共有します。

ストレージ・スロットの再利用

紹介

ストレージスロット、特に一時的なデータストレージを使い終わったら、スロットを削除またはゼロにして、ガスの払い戻しを受けることができます。

硬度
プラグマの堅実さ^0.8.9;

contract 返金例 {
    uint256 public temporaryDataです。

function storeTemporaryData(uint256 data) public {
        temporaryData = data;
    }

関数 clearTemporaryData() public {
        delete temporaryData;
    }
}
  1. このコントラクトを Remix にデプロイします。

  2. 一時データを格納し、クリアします。

  3. ガス代を確認してください。 手術で delete 得られるガスの払い戻しに注目してください。

ヒストリカル・データに対するストレージの代わりにイベントの使用

紹介

オンチェーンでデータにアクセスする必要がない場合は、保存するのではなく、イベントとして記録することを検討してください。 イベントは、ストレージ操作よりもはるかに安価です。

硬度
プラグマの堅実さ^0.8.9;

contract EventExample {
    イベントDataStored(uint256データ);

function storeData(uint256 data) public {
        emit DataStored(data);
    }
}
  1. Remix でコントラクトを展開して操作します。

  2. 貯蔵と比較すると、ガス代が安いことに注意してください。

今後の展望

基本的なストレージ最適化のアプローチをマスターした今、練習することが重要です。 提供されている例に取り組み、独自の例を作成してみてください。 次のセッションでは、関数の可視性の最適化とライブラリでのコードの再利用について詳しく説明します。 最適化は芸術であり、科学でもあることを心に留めておいてください。 実験を続けてください!

Disclaimer
* Crypto investment involves significant risks. Please proceed with caution. The course is not intended as investment advice.
* The course is created by the author who has joined Gate Learn. Any opinion shared by the author does not represent Gate Learn.