作者: 李
作者: 李
ガス料金問題は現在イーサリアム 1.0 チェーンが直面している最も深刻な問題の 1 つであり、イーサリアムは多くの計算能力を備えていますが、タスク能力はブロックチェーンの構造上の問題 (すべてのフルノードが同じデータを計算し、単一ノードのコンピューティングリソース)、大量のタスクを処理するとイーサリアムが混雑し、混雑後のガス料金が高くなります。
DeFiアプリケーションの爆発的な成長により、この現象はさらに激化しました。ここで言及したいのは、ブロックチェーントランザクションをパッケージ化することに加えて、イーサリアムはチェーン上でスマートコントラクトも公開するため、スマートコントラクトはチェーン上で実行されるときにリソースを消費するため、ユーザーがDeFiで行うほぼすべてのステップでGasを支払う必要があるということですこれはガスモデルの問題でもあります。
最近、イーサリアムコミュニティでの EIP-1559 に関する議論も激化しています, 多くのマイニングプールがこの提案の導入に同意していないためです. この提案は、ガス料金の構成を調整するものです. 高額なガス料金の問題を解決することはできませんが、ガス代が高くなる可能性があります。期待どおりの完璧な体験です。
最近の関連ニュースとしては、3 月 16 日、イーサリアムの開発者である Philippe Castonguay 氏が別の提案 EIP-3382 を提案し、ブロックのガス制限をブロックあたり 12,500,000 ガスに固定することを提案しました。また、ブロック検証ルールを更新します。ガス制限が 12,500,000 に等しくない場合、ブロックは無効になります。これはブロックガス制限に関する合意を形成するためのものであり、マイナーによる制限はありません。
元のルールでは、ブロックガス制限はイーサリアム内のノードの合意によって決定されない唯一のデータ部分であり、マイナーによって選択されるパラメーターです。同氏は、これが、少数の参加者によってネットワークの残りの部分に強制される突然の有害な変更を回避するためにノードの合意を必要とする重要なパラメータであると考えています。
ガス料金はイーサリアムの運営において重要な位置を占めているため、EIP1559 や EIP-3382 など、ガス料金を調整するための提案が数多くあり、ガス料金に関する歴史的な話も数多くあります。ガス料金を解決するのは簡単ではないことがわかります。
ガス料金を知りたい場合は、TXStreetのダイナミックな画像から鮮明に理解できます。
画像の説明
TXStreet はイーサリアム ブロックのパッケージ化プロセスを輸送として視覚化します
車が走る道路が基本的な資源であり、そのために支払う「通行料」と、梱包に必要なガソリン代が「ガソリン代」です。したがって、Gas 料金 (ガス料金) は、イーサリアムのリソース使用量に対する最終的な支払いとなります。
副題
初期のガスに関する最初の鍵
ガスの概念はコンピュータ分野から来ています。イーサリアムで見ることができます。それは最初にイーサリアムのイエロー ペーパーから来ました。イエロー ペーパーの著者は、Polkadot の創設者である Gavin です。理論的にはもっと多くの値があるため、これは任意の値です最大 2^256 までのトランザクションをカバーできます (これは、既知の宇宙に存在するアトムとほぼ同じ数のトランザクションをカバーできます)。
このバージョンが確認される前に、もう 1 つの興味深い詳細があります。Vitalik が設計した Ethereum Gas モデルでは、契約におけるガス料金の支払いプロセスがデフォルトになっており、契約の実行中に契約の残高が減少します。約定消費により残高が不足した場合は契約が停止されます。
画像の説明
その後、Gavin氏はイーサリアムに参加し始め、参入後はGasの支払いメカニズムを、この契約執行者支払いから譲渡者支払い、つまり契約執行者支払いに変更しました。 Vitalik氏は、個々の取引ステップごとに一度に少額のETHを受け取る代わりに、「契約支払い」アプローチから「送信者支払い」アプローチへの移行について説明しています。
画像の説明
イーサリアムの初期の頃、ヴィタリクとギャビンはミニハッカソンに参加しており、真ん中のマスターはジェフリーでした
わかりやすい「ガス料金支払い」です。より詳細な部分を分析する場合は、イエロー ペーパーのガスに関連する部分を見なければなりません。
Gas はイーサリアムのすべての計算の計算単位であり、イーサリアムで実行したい計算が増えるほど、支払わなければならないガスも増えます。
このユーザー支払いモードでは、リソースの乱用を回避できます。開発者が各オペレーションの料金を支払うと、コードをできる限り簡潔かつ効率的に記述するようになることがわかります。さらに、Gas の存在により、攻撃者が無効なオペレーションを渡すことを防ぐこともできます (非常に多くのオペレーションに Gas のコストがかかります)。 Fang ネットワーク上で攻撃が実行される場合、以下にカウントされる EIP は、攻撃の可能性を減らすためにアカウント アクセスの Gas 値を増やすことを目的としています。
Gas の支払い先を知ることに加えて、GasPrice と GasLimit についても理解する必要があります。
GasPrice は、トランザクション送信者が支払うガスの単位あたりの価格 (ウェイで測定) であり、トランザクション送信者は、トランザクションの送信者が支払うガスの単位あたりの価格をカスタマイズできます。トランザクションのコストが 10 ガスで、送信者が 3 ウェイ/ガスを支払うと仮定すると、トランザクションの合計コストは 30 ウェイになります。私たちが使用するウォレットには、ガス料金を調整する高度なオプションがあります。
さらに、GasLimit をプリペイド Gas として定義することもできます。ノードがトランザクションを検証するとき、まず、GasPrice に GasLimit を乗算してトランザクションの固定コストを計算します。トランザクション送信者の口座残高がトランザクションの固定費よりも少ない場合、トランザクションは無効とみなされます。トランザクションが実行された後、残りの Gas は送信者のアカウントに返されます。そのため、MetMask を使用してコントラクトを実行する場合、Gas は非常に高価であると推定されますが、約定価格はそれほど高くありません。
画像の説明
ブロックに含まれるコンテンツ
これはブロックに固有の内容で、トランザクション部分では、送金が 237 件、内部契約トランザクションが 39 件あり、トランザクションを具体的に見ると、より詳細なガス料金が表示されます。また、ガス制限が 12493113 であることもわかります。記事の冒頭で説明した EIP-3382 では、各ブロックのガス制限が 12500000 に制限されており、これがこの部分です。このようにして、各ブロックで得られる報酬の合計をより制御しやすくなります。
固有コスト =
Gtransaction+Gtxdatazero*Nzeros+Gtxdatanonzero* Nnonzeros+Gtxcreate
で:
Gtransaction=21,000Wei
Gtxcreate=32,000Wei
Gtxdatazero=4Wei
で:
次のオペコードを使用できます。
画像の説明
上記の紹介によると、Gas 料金はイーサリアム チェーン上のリソースを使用して生成されるという基本的な理解が得られます。計算が多ければ多いほど、Gas の料金は高くなります。スマート コントラクトの契約操作では、それぞれのステップを調整する必要があります。ガスを払った。さらに、送信者がGasを非常に高く設定した場合、マイナーは特定のトランザクションを最初にパッケージ化することを選択できるため、マイナーはトランザクションの実行を優先することを付け加えておく必要があります。
副題
ガス料金に密接に関連する 20 の EIP
次に、ガスに関する EIP 提案を詳しく見ていきます。提案はほぼ時系列順に並べられています。
EIP-5: RETURN と CALL のガス使用量を調整する
この EIP により、文字列やその他の動的サイズの配列を返す関数を呼び出すことができます。現在、イーサリアム仮想マシン内から別のコントラクト/関数を呼び出す場合、出力のサイズを事前に指定する必要があります。また、書き込まれていないメモリに対しても料金を支払う必要があるため、動的サイズのデータを返すのは非常に高価で柔軟性が低く、実際には使用できません。この EIP で提案されている解決策は、CALL が戻ったときに実際に書き込まれたメモリに対してのみ料金を支払うことです。
EIP-150: 多数の IO 操作のガスコストの変化
EXTCODESIZE のガスコストが 20 から 700 に増加しました。
EXTCODECOPY のベースガスコストが 20 から 700 に増加しました。
BALANCEのガスコストを20から400に増加しました。
SLOAD ガスのコストが 50 から 200 に増加しました。
CALL、DELEGATECALL、CALLCODEのガス料金を40から700に値上げします。
SELFDESTRUCTのガスコストを0から5000に増加しました。
SELFDESTRUCT が新しく作成されたアカウントにヒットすると、25000 の追加ガス料金が発生します (CALL と同様)。
推奨されるガス制限目標を 550 万に増加しました。
EIP-158: 状態のクリーンアップ
いずれの場合も、コール残高が 0 のアカウントでは、25,000 のアカウント作成ガスのコストが消費されなくなります。
EIP-1108: alt_bn128 プリコンパイル済みのガス コストを削減する
プリコンパイルされた楕円曲線計算は現在、価格が高すぎます。プリコンパイルの価格を再設定することは、イーサリアム上の多くのプライバシーおよびスケーリング ソリューションに大いに役立ちます。イーサリアムベースの zk-SNARK ベースのプロトコルの場合、EIP-1108 は zk-SNARK の検証にかかるガスコストを大幅に削減するだけでなく、複数の zk-SNARK 証明をバッチで組み合わせるのにも役立ちます。これは、モノリシック zk-SNARK 回路を、個々の回路サイズが小さい zk-SNARK のバッチに分割するために使用できる手法でもあり、これにより、両方の zk-SNARK の構築と展開が容易になります。
現在、これらの取引には約 6,000,000 ガスの費用がかかります。この EIP ではそれを 1,000,000Gas に削減でき、プロトコルがより実用的になります。
EIP-1283: SSTORE オペコードのガス調整
この EIP は、コントラクト ストレージの新しい使用を可能にし、ほとんどの実装の動作と一致しない過剰なガス コストを削減するために、SSTORE オペコードに対するメータリングの変更を提案しています。これは、キャッシュを変更するためにさまざまな最適化戦略を使用する実装に親しみやすくすることを目的とした EIP-1087 の代替として機能する可能性があります。
EIP-2028: トランザクション データ ガス コストの削減
Calldata (GTXDATANONZERO) の Gas コストを現在の 68 バイトから 16 バイトに削減し、数学的モデリングと経験的推定を通じてサポートすることが推奨されます。
EIP-2200: 正味ガス計量の構造定義
この EIP は、SSTORE オペコードの正味ガス メータリング変更の構造化された定義を提供し、コントラクト ストレージの新しい使用を可能にし、ほとんどの実装の仕組みと一致しない過剰なガス コストを削減します。これは、EIP-1283 と EIP-1706 の組み合わせと考えることができます。
EIP-2565: ModExpGas コスト
ModExp プリコンパイルの実際の操作コストを正確に反映するために、この EIP はガス コストを計算するためのアルゴリズムを指定します。このアルゴリズムは乗算の複雑さのコストを推定し、それを累乗の実行に必要な反復回数の近似値で乗算します。
EIP-1559: ETH 1.0 チェーンの手数料市場の変化
イーサリアムは、単純なオークション メカニズムを使用して取引手数料を過去の価格で価格設定し、ユーザーは取引を入札 (「ガスプライス」) で送信し、マイナーは最も高い入札で取引を選択し、含まれる取引は指定された入札で支払われます。これは非効率につながります。
この EIP での提案は、ネットワークの輻輳に基づいてプロトコルによって下方調整される基本料金の額から開始するというものです。基本料金は、ネットワークがガスのブロックごとの目標使用量を超えるとわずかに増加し、容量が目標量を下回るとわずかに減少します。
これらの基本料金の変動は制限されているため、異なるブロック間の基本料金の最大差は予測可能です。これにより、ウォレットは信頼性の高い方法でユーザーのガス料金を自動的に設定できるようになります。ほとんどのユーザーは、ネットワーク活動がアクティブな期間であっても、ガス料金を手動で調整する必要がないことが予想されます。ほとんどのユーザーの場合、基本料金は自分の財布によって見積もられます。
EIP-2929: 状態アクセス オペコードのガス コストの増加
ガスコスト SLOAD (0x54) を 2100 に増加し、*CALL オペコード ファミリ (0xf1、f2、f4、fA)、BALANCE 0x31 および EXT* オペコード ファミリ (0x3b、0x3c、0x3f)、および 2600 CD フリー (i) プリコンパイル済み。さらに、SSTORE メータリングは、これらの SELFDESTRUCT オペコードに固有の「実際のストレージ負荷」の正しい価格設定を保証するために改革される可能性があります。
通常、オペコードのガス コストの主な機能は、ガス制限をブロックの処理にかかる時間の制限に対応させることを目的として、そのオペコードの処理にかかる時間を推定することです。ただし、ストレージ アクセスのオペコード (SLOAD、および *CALL、BALANCE、および EXT* オペコード) は歴史的に過小評価されてきました。 2016 年の上海 DoS 攻撃では、最も深刻なクライアント側のバグを修正した後、攻撃者が常に効果を発揮してきた戦術の 1 つは、多数のアカウントにアクセスまたは呼び出しできるトランザクションを送信するだけでした。
提案された EIP は、これらのオペコードのコストを約 3 倍に増加させ、最悪の場合の処理時間を約 7 ~ 27 秒に短縮します。マークル ツリーにジャンプする代わりにストアを直接読み取るようにクライアントを再設計することを含むデータベース レイアウトの改善により、この問題はさらに削減されるはずですが、これらのテクノロジが完全に展開されるまでには長い時間がかかる可能性があり、このテクノロジを使用した場合でも、アクセス ストレージ IO オーバーヘッドが発生します。も実質的に残っています。
EIP-1077: 契約通話用のガスリレー
DApps の導入に対する主な障害は、チェーン操作を実行するために複数のトークンが必要になることです。ユーザーはメッセージに署名して実行の意図を示すことができますが、サードパーティの中継者にメッセージの実行を許可すると、この問題が回避されます。イーサリアムのトランザクションには常に ETH が必要ですが、スマート コントラクトは EIP-191 署名を採用し、支払いインセンティブを ETH 当事者に信頼されないよう転送できます。トランザクションを実行します。標準化できる共通フォーマットと、ユーザーがトランザクションの支払いをトークンで行えるようにする方法は、アプリケーション開発者に大きな柔軟性を提供し、アプリケーション ユーザーがブロックチェーンと対話する主要な方法になる可能性があります。
EIP-1087: SSTORE 操作のガス計測
この EIP は、不必要なガスコストを削減し、契約ストレージの新しいユースケースを提供するために、EVMSSTORE 運営のガスチャージ方法の変更を提案しています。
EIP-1285: GcallstipendGas を CALL オペコードに追加
Gcallstipend は、CALL オペコードの 料金パラメーターを 2,300 ガス単位から 3,500 ガス単位に増加します。
EIP-1380: 内線通話のガスコストを削減
Solidity や Vyper などのスマート コントラクト言語は、内部呼び出しのガス コストを削減することで大きな恩恵を受けるため、オペコードを使用するために JUMP 内部操作呼び出しの代わりに CALL を使用できるようになります。
EIP-1613: ガソリンスタンドネットワーク
契約が「COI」を受け入れてガス料金を支払うことを許可することで、ETH 以外のユーザーもスマート コントラクト (例: dapps) にアクセスできるようにします。
現在、dapp との通信にはガス料金を ETH で支払う必要があるため、dapp の導入はイーサリアム ユーザーのみに限定されています。したがって、契約所有者は、ユーザー獲得を増やすためにガス代を支払ったり、ユーザーに法定通貨でガス代を支払わせたりしたい場合があります。あるいは、第三者が特定の契約のガス料金の補助を希望する場合もあります。 EIP-1077 で説明されているソリューションでは、ETH を含まないアドレスからのトランザクションが許可される可能性があります。
EIP-1930: 厳密なガス セマンティクスを使用した CALL。ガスが足りない場合は元に戻す
特定の量のガスで CALL を実行するスマート コントラクト機能を追加します。それが不可能な場合は、実行を戻す必要があります。
EIP-2045: EVM オペコードの詳細なガスコスト
計算 EVM オペコード (ADD、SUB、MUL など) は通常、オペコード (SLOAD、SSTORE など) を格納するために使用される I/O に比べて過大評価されます。現在、最小のガスコストは 1 (つまり、ガスの単位) であり、ほとんどの計算オペコードのコストは 1 に近い (例: 3、5、または 8) ため、コストを削減できる範囲には限界があります。ガスの一部である「グラニュール」と呼ばれる新しい最小ガス単位により、ガスコストの範囲が拡大され、現在の最小値よりも引き下げられるようになります。
EIP-2046: プリコンパイルのための静的呼び出しのガスコストの削減
プリコンパイルされた STATICCALL を呼び出す際の基本ガスコストを 700 から 40 に削減しました。これにより、プリコンパイルだけでなく、プリコンパイルもより効率的に使用できるようになり、総コストは 700 未満になります。
EIP-2542: 新しいオペコード TXGASLIMIT および CALLGASLIMIT
スマート コントラクトが現在のトランザクションと実行フレームのガス制限に関する情報にアクセスできるようにします。リレー、メタトランザクション、ガス料金、アカウントの抽象化などの概念が人気を集めているため、特定の契約ではガスの支出を絶対的な精度で追跡できることが重要になっています。
EIP-3322: アカウント ガス ストレージのオペコード
ガス供給の弾力性と価格の安定は、ガスを需要の少ないブロックから需要の多いブロックに移動することによってもたらされます。残念なことに、これは不必要な状態の成長を報います。高度なガス貯蔵メカニズムを導入することにより、ガス市場で必要な貯蔵量と計算量が減ります。
EIP-2780: 内部トランザクション ガスを削減する
内部トランザクションのコストが 21,000 ガスから 7,000 ガスに削減されました。
現在の 21,000 件のトランザクションのガスコストにより、ETH の送金は非常に高価になり、少量のバッチ (数十ドル) のコストは通常法外に高くなります。他の EIP (EIP-1559 など) もガス価格やファーストプライスオークションの変更を考慮していますが、安全な方法で実行されれば、ETH の送金コストを大幅に削減し、より多くのそのような取引を可能にすることは有益です。
2 番目のキー: ロールアップとガス
初期の Gas の話は、Ethereum の Gas 料金モデルの策定に関するものでしたが、現時点では、Gas 料金の削減に加えて、Gas 料金を拡大および削減する最善の方法は、トランザクション データを圧縮することです。
これはロールアップと大きく関係しています。
単純な Ethereum トランザクション (ETH の送信) には約 110 バイトかかります。ただし、Rollup での ETH 送信には 12 バイトしかかからないため、Rollup によってベース チェーンのスケーラビリティが約 10 倍向上する可能性があり、特定の計算では、Rollup を使用することでスケーラビリティが 100 倍以上向上することもあります。
これは本当に素晴らしい成果であり、これが Eth2.0 がロールアップ中心の開発ルートとなった理由です。


