開発日報

窓際エンジニアの開発備忘。日報は嘘です。

【忘備】イーサリアム基礎 ~ガスとトランザクションコスト~

はじめに

イーサリアムブロックチェーン上でトランザクションを実行するためには、トランザクションに伴うコストを実行者が負担しなければならない。

この「コスト」の概念が何を意味するか、またコストの算出・支払いの仕組みについて以下の本文で説明する。

ガス

  • ガスイーサリアム上のトランザクションは、イーサリアムにおける計算の基本単位である「ガス」に基づいて動作する。トランザクションで主に用いられるガス用語は以下の通り。
    • gasLimit : 当該ブロックの使えるガスの最大量(ネットワークの活動に応じて動的な値)
    • gasPrice : 単位当たりのガスの値段(値段の単位はwei)。ユーザーによって設定される。
    • トランザクションコスト:gasPrice × ガス量(gasUsed)
      • これによって、不必要な処理の増加や、無限ループなどのDos攻撃につながるコードの混入を防げる。

トランザクションコストはどう決まる?

「計算ステップ(トランザクション、メッセージ、サブメッセージ)によって消費されたガスの合計」が、

  • ガスリミット以下の場合:マイナーによってトランザクションが処理される
  • ガスリミットを超えた場合:マイナーによって回収できる手数料を除した後、すべての変更を取り消し
    • 変更取り消しにもかかわらず手数料が引かれている点に注意。

この時トランザクションが正常に処理されるケースについては、余ったガスはETHで払い戻される。

また、トランザクションコストの概算はWeb3.jsというライブラリのweb3.eth.getGasPriceという関数で算出可能。