ほぼ知ったところで意味ない情報ですが、サービスを開発してる際にガス代の計算方法が壁として現れたので備忘録代わりです。
EIP-1559という計算モデルが登場したのでそれまでに使われていた計算方法はlegacy transactionと呼ばれてる
EIP-1559によりガス代の高騰が期待される
ガス代=ガス単価(Gas price)×ガス量
Gas limitの設定で上限額を決めておく
オークション的にGas priceが高いトランザクションから処理される
ガス代=min(max fee, base fee + max priority fee) × ガス量
max fee: ガス代の上限(=Gas limit)
base fee: 基本料金
ブロック毎に自動的に決まる
バーンされる
max priority fee: マイナーへのチップ代
つまり、マイナーにチップを多く払ったら速く処理される
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やねんから全然足りひんねん!アホ!