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