レッスン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を含むそのツールは常に変化していることを念頭に置いてください。 最新の状態に保ち、最適化のために定期的に契約をテストおよび改善します。 イーサリアムのコミュニティは大規模で役立つので、ガイダンスやベストプラクティスを求めることを恐れないでください。 コーディングを楽しんでください!

免責事項
* 暗号資産投資には重大なリスクが伴います。注意して進めてください。このコースは投資アドバイスを目的としたものではありません。
※ このコースはGate Learnに参加しているメンバーが作成したものです。作成者が共有した意見はGate Learnを代表するものではありません。
カタログ
レッスン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を含むそのツールは常に変化していることを念頭に置いてください。 最新の状態に保ち、最適化のために定期的に契約をテストおよび改善します。 イーサリアムのコミュニティは大規模で役立つので、ガイダンスやベストプラクティスを求めることを恐れないでください。 コーディングを楽しんでください!

免責事項
* 暗号資産投資には重大なリスクが伴います。注意して進めてください。このコースは投資アドバイスを目的としたものではありません。
※ このコースはGate Learnに参加しているメンバーが作成したものです。作成者が共有した意見はGate Learnを代表するものではありません。
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.