Pelajaran 5

スマートコントラクト最適化フィナーレ - 高度なヒントとコツ

前回のレッスンでは、イーサリアムのスマートコントラクト、特にRemix IDEを使用してガスを最適化するために必要な基本的な概念とツールについて説明しました。 このコースの締めくくりとして、いくつかの高度なテクニックとベストプラクティスを掘り下げてみましょう。 この最後のレッスンでは、私たちが蓄積した知識を組み合わせて、イーサリアムのスマートコントラクトにおけるガス最適化を包括的に理解できるようにします。

リファクタリングとコードの複雑さの軽減

ガスを節約する最も簡単な方法の 1 つは、コードをシンプルにすることです。 実行するコードが少ないほど、消費されるガスは少なくなります。

実践例

次の関数について考えてみます。

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

コントラクトの最適化例 {
    住所[] public admins;

function isUserAdmin(address user) public view returns (bool) {
        for (uint i = 0; i < admins.length; i++) {
            if (admins[i] == user) return true;
        }
        falseを返します。
    }
}

上記の関数はループを使用しますが、管理者が追加されるとコストが高くなります。 よりガス効率の高い構造では、マッピングを使用します。

硬度
コントラクト 最適化ExampleOptimized {
    mapping(address => bool) public admins;

function isUserAdmin(address user) public view returns (bool) {
        return admins[user];
    }
}

データの再利用

イーサリアムを利用するときは、ストレージのすべてのビットにお金を払っていることを忘れないでください。 同じデータを複数の場所に保存している場合は、一度保存して別の場所で参照する方法を検討してください。

ライブラリの使用

Solidityのライブラリは、再利用可能なコードです。 モジュラーコードの記述を支援し、一度だけデプロイされ、他のコントラクトにリンクされるため、長期的にはガスを節約できます。

硬度
ライブラリ SafeMath {
    function add(uint a, uint b) 内部純粋リターン (uint) {
        uint c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }
    //...その他の数学関数
}

コントラクト UsingSafeMath {
    uintにSafeMathを使用します。

uint public value;

関数インクリメント(uint _value) public {
        value = value.add(_value);
    }
}

不要なストレージを削除する

Solidityのキーワードを使用すると delete 、変数を無効にして、ガスの一部を返金することができます。 特定の保存容量を使い終わった場合は、その保存容量を削除して払い戻しを請求してください。

イベントログの検討

ブロックチェーンにデータを保存するにはコストがかかりますが、イベントのログ記録は比較的安価です。 コントラクトから読み取る必要はないが、検証可能なデータがある場合は、イベント ログの使用を検討してください。

コストのかかる操作の使用を避ける

一部の操作は、他の操作よりもガスを大量に消費します。 例えば:

  • 外部関数呼び出しは、内部関数呼び出しよりもコストがかかります。
  • ストレージとの対話は、メモリとの対話よりもコストがかかります。
  • 動的配列は、固定サイズの配列よりもガスを消費する場合があります。

結論

ガスのスマートコントラクトの最適化は、芸術であり科学でもあります。 このコースで説明するアプローチを組み合わせると、契約のガスコストを大幅に削減できる可能性があります。 イーサリアムのエコシステムと、Remixを含むそのツールは常に変化していることを念頭に置いてください。 最新の状態に保ち、最適化のために定期的に契約をテストおよび改善します。 イーサリアムのコミュニティは大規模で役立つので、ガイダンスやベストプラクティスを求めることを恐れないでください。 コーディングを楽しんでください!

Pernyataan Formal
* Investasi Kripto melibatkan risiko besar. Lanjutkan dengan hati-hati. Kursus ini tidak dimaksudkan sebagai nasihat investasi.
* Kursus ini dibuat oleh penulis yang telah bergabung dengan Gate Learn. Setiap opini yang dibagikan oleh penulis tidak mewakili Gate Learn.
Katalog
Pelajaran 5

スマートコントラクト最適化フィナーレ - 高度なヒントとコツ

前回のレッスンでは、イーサリアムのスマートコントラクト、特にRemix IDEを使用してガスを最適化するために必要な基本的な概念とツールについて説明しました。 このコースの締めくくりとして、いくつかの高度なテクニックとベストプラクティスを掘り下げてみましょう。 この最後のレッスンでは、私たちが蓄積した知識を組み合わせて、イーサリアムのスマートコントラクトにおけるガス最適化を包括的に理解できるようにします。

リファクタリングとコードの複雑さの軽減

ガスを節約する最も簡単な方法の 1 つは、コードをシンプルにすることです。 実行するコードが少ないほど、消費されるガスは少なくなります。

実践例

次の関数について考えてみます。

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

コントラクトの最適化例 {
    住所[] public admins;

function isUserAdmin(address user) public view returns (bool) {
        for (uint i = 0; i < admins.length; i++) {
            if (admins[i] == user) return true;
        }
        falseを返します。
    }
}

上記の関数はループを使用しますが、管理者が追加されるとコストが高くなります。 よりガス効率の高い構造では、マッピングを使用します。

硬度
コントラクト 最適化ExampleOptimized {
    mapping(address => bool) public admins;

function isUserAdmin(address user) public view returns (bool) {
        return admins[user];
    }
}

データの再利用

イーサリアムを利用するときは、ストレージのすべてのビットにお金を払っていることを忘れないでください。 同じデータを複数の場所に保存している場合は、一度保存して別の場所で参照する方法を検討してください。

ライブラリの使用

Solidityのライブラリは、再利用可能なコードです。 モジュラーコードの記述を支援し、一度だけデプロイされ、他のコントラクトにリンクされるため、長期的にはガスを節約できます。

硬度
ライブラリ SafeMath {
    function add(uint a, uint b) 内部純粋リターン (uint) {
        uint c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }
    //...その他の数学関数
}

コントラクト UsingSafeMath {
    uintにSafeMathを使用します。

uint public value;

関数インクリメント(uint _value) public {
        value = value.add(_value);
    }
}

不要なストレージを削除する

Solidityのキーワードを使用すると delete 、変数を無効にして、ガスの一部を返金することができます。 特定の保存容量を使い終わった場合は、その保存容量を削除して払い戻しを請求してください。

イベントログの検討

ブロックチェーンにデータを保存するにはコストがかかりますが、イベントのログ記録は比較的安価です。 コントラクトから読み取る必要はないが、検証可能なデータがある場合は、イベント ログの使用を検討してください。

コストのかかる操作の使用を避ける

一部の操作は、他の操作よりもガスを大量に消費します。 例えば:

  • 外部関数呼び出しは、内部関数呼び出しよりもコストがかかります。
  • ストレージとの対話は、メモリとの対話よりもコストがかかります。
  • 動的配列は、固定サイズの配列よりもガスを消費する場合があります。

結論

ガスのスマートコントラクトの最適化は、芸術であり科学でもあります。 このコースで説明するアプローチを組み合わせると、契約のガスコストを大幅に削減できる可能性があります。 イーサリアムのエコシステムと、Remixを含むそのツールは常に変化していることを念頭に置いてください。 最新の状態に保ち、最適化のために定期的に契約をテストおよび改善します。 イーサリアムのコミュニティは大規模で役立つので、ガイダンスやベストプラクティスを求めることを恐れないでください。 コーディングを楽しんでください!

Pernyataan Formal
* Investasi Kripto melibatkan risiko besar. Lanjutkan dengan hati-hati. Kursus ini tidak dimaksudkan sebagai nasihat investasi.
* Kursus ini dibuat oleh penulis yang telah bergabung dengan Gate Learn. Setiap opini yang dibagikan oleh penulis tidak mewakili Gate Learn.