ガス代の計算方法

前提

ほぼ知ったところで意味ない情報ですが、サービスを開発してる際にガス代の計算方法が壁として現れたので備忘録代わりです。

概要

  • EIP-1559という計算モデルが登場したのでそれまでに使われていた計算方法はlegacy transactionと呼ばれてる

  • EIP-1559によりガス代の高騰が期待される

    • 実際高騰が抑えられてるかどうかは分からん

legacy transaction

  • ガス代=ガス単価(Gas price)×ガス量

  • Gas limitの設定で上限額を決めておく

  • オークション的にGas priceが高いトランザクションから処理される

    • なので理論的にはガス代は高騰し続ける

EIP-1559

  • ガス代=min(max fee, base fee + max priority fee) × ガス量

    • max fee: ガス代の上限(=Gas limit)

    • base fee: 基本料金

      • ブロック毎に自動的に決まる

      • バーンされる

    • max priority fee: マイナーへのチップ代

      • 任意の価格を設定できる
  • つまり、マイナーにチップを多く払ったら速く処理される

    • 結局legacyと同じな気もするけど

ethers.jsを使った実装時の注意点

ethers.jsでこれらの情報が取れるはずのgetFeeData()が返してくるmax priority feeが固定値!アホ!しかも足りないねん!

なので、getFeeData()は使っちゃダメ~🙅

しばくぞ
しばくぞ

代替策

https://gasstation-mainnet.matic.network/v2 を叩いて返ってくる値を使えばOK。

例えば👇のような返り値

{
  "safeLow": {
    "maxPriorityFee": 30,
    "maxFee": 601.734167868
  },
  "standard": {
    "maxPriorityFee": 31.328285049933335,
    "maxFee": 603.0624529179333
  },
  "fast": {
    "maxPriorityFee": 62.222247813066666,
    "maxFee": 633.9564156810667
  },
  "estimatedBaseFee": 571.734167868,
  "blockTime": 3,
  "blockNumber": 42051639
}

maxPriorityFeeの単位はGwei。つまり、ethers.jsが固定にしてる1,500,000,000wei=1.5Gweiで、safeLowですら30Gweiやねんから全然足りひんねん!アホ!

Subscribe to Something about Web3
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.