イーサリアムのガス料金計算の解釈: 取引コストを削減するには?

著者: ロザリオ・ボルゲージ

翻訳: Huohuo、各国のブロックチェーン

イーサリアム ブロックチェーンは分散型アプリケーションとスマート コントラクトに革命をもたらしましたが、すべてのトランザクションにはイーサリアム ガス料金が発生します。このガイドでは、イーサリアムのガス料金をわかりやすく解説し、その基本原理、計算方法、コストに影響を与える要因、コストを管理しながら取引を最適化するための効果的な戦略について学びます。

1. イーサリアムガスを理解する

ガスは、イーサリアム ブロックチェーン上でのトランザクションとスマート コントラクトの実行のための燃料です。これは、これらの操作を処理するために必要な計算作業を表し、gwei (1 gwei = 10^-9 ETH) と呼ばれる少額のイーサ単位で価格が設定されます。

言い換えれば、ガスは計算作業の測定単位であり、一定量のエーテルに相当します。

これが、イーサリアムのエコシステムにおいてガス料金が重要である理由です。

  1. リソースの割り当て: ガス料金は、ネットワーク リソースを割り当てるメカニズムとして機能します。ユーザーが使用するコンピューティング能力とストレージ容量の支払いを要求することで、ネットワークは公平なアクセスを保証し、リソースの乱用を防ぎます。

  2. ネットワーク スパムの防止: ガス料金がなければ、悪意のある攻撃者がネットワークにスパム トランザクションを大量に送り込み、システムに過負荷をかけ、正規のトランザクションを遅くする可能性があります。ガス料金により、ネットワークへのスパム送信は高価になり、経済的に非現実的になります。

  3. マイナーのインセンティブ: ガス料金は、マイナーにトランザクションをブロックに含めるようにインセンティブを与えます。マイナーはガス料金が高いトランザクションを優先し、タイムリーなトランザクション処理のために競争力のある料金をユーザーに提供するよう奨励します。

  4. ネットワークセキュリティ: ガス料金はイーサリアムネットワークのセキュリティに貢献します。ユーザーに関連する計算ステップの支払いを要求することで、トランザクションとスマート コントラクトの正しい実行を保証します。これにより、潜在的な攻撃や脆弱性がブロックされます。

  5. スケーラビリティと効率: 各操作にコストを付加することで、ガス料金は開発者が効率的で最適化されたコードを書くことを奨励します。効率を重視することは、ベストプラクティスを促進し、ブロックチェーンへのストレスを軽減するため、ネットワークを拡張するために重要です。

  6. 経済モデル: ガス料金はイーサリアムの経済モデルに不可欠な部分です。これらは、マイナーがその努力に対して報酬を得る持続可能なエコシステムを促進し、ネットワークの成長と安定性を促進します。

2. ガス料金の構成要素

イーサリアムのガス料金を構成する主な要素を理解します。

  1. 基本料金: 契約によって設定されており、取引が有効であるとみなされるためには、少なくともこの金額を支払う必要があります。

  2. 優先料金: バリデーターにとってトランザクションを魅力的にし、次のブロックに含めることを選択するために、基本料金に追加されるチップです。

基本料金のみを支払うトランザクションは技術的には有効ですが、バリデーターがそれを選択するインセンティブを提供しないため、含まれる可能性は低いです。

優先料金は、トランザクション送信時のネットワーク使用量によって異なります。需要が多い場合は、優先料金を高く設定する必要がある場合がありますが、需要が少ない場合は、支払う料金を低くすることができます。

3. 取引手数料の計算

たとえば、ジョーダンがテイラー 1 ETH を支払わなければならないとします。 ETH 送金には 21,000 ユニットのガスが必要で、基本料金は 10 グウェイです。ジョーダンには 2 グウェイ チップが含まれていました。

合計コストは次のようになります。

使用ガス単位 * (基本料金 + 優先料金)

基本料金はプロトコルによって設定された値であり、優先料金はバリデータプロンプトとしてユーザーによって設定された値です。

即ち、21,000 * (10 + 2) = 252,000 ウェイ(0.000252 ETH)。

ジョーダンが送金すると、1.000252 ETH がジョーダンの口座から引き落とされます。テイラーは1.0000 ETHを受け取ります。バリデーターは 0.000042 ETH のチップを受け取ります。 0.00021 ETHbase 料金は焼かれます。つまり、流通から削除されます。

4. データの読み取りと書き込み

Ethereum ネットワークは、ネットワークへのデータの書き込みとネットワークからのデータの読み取りを区別します。この区別は、アプリケーションの作成方法において重要な役割を果たします。一般に、データの書き込みをトランザクションと呼び、データの読み取りをコールと呼びます。

  1. トランザクション: トランザクションは、データの書き込みまたは変更時にネットワーク状態を変更します。イーサを別のアカウントに送信するという単純なものもあれば、コントラクト機能の実行やネットワークへの新しいコントラクトの追加といった複雑なものもありえます。取引を行うにはガス料金を支払う必要があり、その処理には時間がかかります。

  2. 呼び出し: 呼び出しはネットワーク上でコードを実行するために使用できますが、データは永続的に変更されません。基本的にはデータの読み取りに使用されるため、無料で実行されます (ガスは消費されません)。コントラクト関数を呼び出して実行すると、戻り値がすぐに返されます。

5. トランザクションオブジェクト

トランザクション オブジェクトで次のパラメータを設定することで、トランザクションを送信するときに支払うガスの量を設定できます。

  1. GasLimit: トランザクションで消費できるガスユニットの最大量。 EVM は、各計算ステップに必要なガス単位を指定します。

  2. maxPriorityFeePerGas: バリデーターチップとして消費されるガスの最大価格。

  3. maxFeePerGas: トランザクションに対して支払うガスの単位あたりの最大料金 (baseFeePerGas と maxPriorityFeePerGas を含む)

6. ロンドンのアップグレード (EIP-1559)

ロンドンアップグレード前は、基本料金と優先料金を区別せずに料金が計算されていました。

トランザクション オブジェクトでは以下を設定できます。

  1. GasLimit/startGas: トランザクションが消費できる Gas ユニットの最大量。以前と同じです。

  2. GasPrice: ガスの単位当たりに支払ってもよい金額。

アリスがボブに 1 ETH を支払わなければならないとします。この取引では、ガスの制限は 21,000 ユニット、ガス価格は 200 グウェイです。

合計コストは次のとおりです: ガスユニット (制限) * ユニットあたりのガス価格は 21,000 * 200 = 4,200,000 gwei0.0042 ETH

7. 複雑なトランザクションにおけるコスト計算

トランザクションコストをより深く理解するために、EVM オペコードを見てみましょう。それでは、この関数の実行コストを計算してみましょう。

函数doMath ( uint a, uint b ) { a + b; b - a; a * b; a== 0;}

a + b (ADD) は 3 ガス単位のコスト b - a (SUB) は 3 ガス単位のコスト a * b (MUL) は 5 ガス単位のコスト a == 0 (EQ) は 3 ガス単位のコスト

したがって、このトランザクションの合計コストは 14 ガスユニットです。

理解しておくべき重要なことは、トランザクション オブジェクトで GasLimit を 6 に指定した場合、最初の 2 つの操作のみが実行され、その後トランザクションは停止され、作業の対価を支払う必要があるため、支払った GasFee は復元されないということです。完了しました。

したがって、イーサを失わずにトランザクションを実行できるように、パラメータ GasLimit を十分な値に設定する必要がある場合。

この特定の例では、ガス料金の計算は比較的簡単です。ただし、より複雑な関数、特にさまざまなサイズの変数のループを含む関数の場合、事前にガスコストを決定するのは困難な場合があります。

この場合、estimateGas の 2 つの最も有名な開発ライブラリである ethers.js と web3.js によって提供される機能を利用できます。この関数を使用すると、イーサリアム ブロックチェーン上で特定の関数の実行に関連するガスコストを見積もることができます。

ただし、イーサを過剰に消費するトランザクションの実行を避けるために、gasLimit と maxFeePerGas を設定することが常に良い習慣であることを思い出してください。

8. ガス料金を削減するための戦略 1) レイヤ 2 を使用する

レイヤ 2 は、イーサリアム ブロックチェーン上に構築された補助フレームワークまたはプロトコルです。これらのソリューションは、イーサリアム メイン チェーン (レイヤー 1 と呼ばれる) の外側でほとんどのトランザクションを処理することで、スケーラビリティを強化し、トランザクション速度を最適化するように設計されています。レイヤ 1 にはベースのイーサリアム ブロックチェーンが含まれますが、トランザクション コストが高く、需要が高いためスケーラビリティの問題に直面する可能性があります。

さまざまなレイヤー 2 手法の中に、Arbitrum と Optimism で採用されているロールアップがあります。

ロールアップは複数のトランザクションを 1 つのトランザクションに集約し、データを圧縮してイーサリアム メインネットに保存します。単一のメインネット トランザクションが多数のオフチェーン トランザクションを表す可能性があるため、これによりガス料金が大幅に削減され、スケーラビリティが向上します。

  1. ネットワークの混雑が緩和された時間帯に実行する

第 1 層で動作させたい場合、コストを節約する解決策は明白です。ネットワークが混雑していないときにトランザクションを発行する必要があります。

実際、イーサリアム ブロックチェーンでは、1 秒あたり約 20 ~ 40 のトランザクション (TPS) しか許可されておらず (これは、すべてのイーサリアム ユーザーの合計数です)、制限に達すると、ユーザーはトランザクションを取得するために互いに競争することになります。手数料が値上がりしている原因。

ネットワーク負荷を確認するには、Etherscan を使用できます。

  1. トランザクションを最小限に抑える

イーサリアム ブロックチェーン上のすべてのトランザクションには、ガス料金と呼ばれるコストが発生します。これらの手数料を削減するには、可能な限り複数の操作を 1 つのトランザクションに結合する必要があります。たとえば、複数のトークン転送やスマート コントラクトとのやり取りを 1 つのトランザクションにバンドルすると、全体のコストを大幅に削減できます。

  1. コードの複雑さを最適化する

イーサリアムのトランザクションには、ブロックチェーンに保存されたコードの実行が含まれます。複雑で非効率なコードにはより多くのコンピューティング リソースが必要となり、ガス料金が高くなります。コードを最適化して簡素化することで、実行に必要なガスを削減できます。これには、効率的なコーディングの実践、冗長な計算の最小化、効率的なプログラミング技術の利用が含まれます。

  1. 省エネスマートコントラクト

スマート コントラクトを開発する場合、ガス消費を最小限に抑える方法でスマート コントラクトを設計することが重要です。これには、不必要なストレージ操作の回避、ループの最適化、コントラクト ロジックの複雑さの軽減が含まれます。開発中には、ガス最適化ツールとベスト プラクティスを利用する必要があります。

9. 結論

要約すると、ガス料金はイーサリアムの重要な部分であり、ネットワークの整合性を維持し、正しい使用を奨励し、セキュリティを確保し、スケーラビリティをサポートし、これらすべてが一緒になって効率的で持続可能なブロックチェーン ネットワークを構築するのに役立ちます。

この記事では、ガス料金の計算と見積もりを検討し、その影響を軽減するためのさまざまな戦略についての洞察を提供します。最適化技術の採用、レイヤー 2 ソリューションの活用、ガス節約スマート コントラクト コードの実装により、ユーザーと開発者はトランザクション コストを効果的に削減し、イーサリアム ネットワーク上のアプリケーションの全体的な効率を向上させることができます。

ガス料金とそれを管理するための実践的な戦略についての理解を深めることで、イーサリアム環境を操作し、コーディング作業を最適化する準備が整いました。コーディングを楽しんでください。あなたの Ethereum インタラクションが費用対効果が高く、革新的になりますように。

原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • コメント
  • 共有
コメント
0/400
コメントなし
  • ピン
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)