EIP-1559 学んだこと整理
概要
トランザクション手数料モデルの変更が提案された。
従来方式(ファーストプライスオークション)の欠点を改善した。
ロンドン(London)ハードフォークで対応された。(2021年8月)
詳細
従来方式(ファーストプライスオークション)の欠点
利用者にとってGasPriceの予測が難しい。(そもそも、マイナーはGasPriceの大きい順にブロックに格納する。利用者からすると、ブロックに含めてもらいやすくしたい一方で過払いは避けたいものというジレンマがある)
マイナーが手数料引き上げを目的として、GasPriceの高いトランザクションを送るという攻撃が可能。GasPriceが高騰し、市場に影響を与えかねない。
新しい方式の特徴
方針としては、市場の混雑度に応じてGasPriceを予測しやすいモデルになった。
ブロック毎に基本手数料 BaseFee が決定される。BaseFeeはブロック毎に増減する。
BaseFee の増減のアルゴリズムは、混雑度を調整するように設計されている。具体的には、1ブロックに格納される大体のGas量としてGasTargetが定義され、ブロックのGasLimitに対するUsedGasの割合(つまり、どれだけTxがいっぱいになったか)で決まる。UsedGasがGasTargetより大きければBaseFeeは上がり、逆に、UsedGasがGasTargetより小さければBaseFeeは下がる。
GasLimitはTxの増減に対して幅を持たせるようにすることで、ネットワークの急な需要に対応できるようになっている。(GasTargetは上限ではなく、あくまでBaseFee の変動ベクトルを決定するための閾値である。)
GasLimit = GasTarget × 2
BaseFeeに応じたEthはburnされる。これは、マイナーによる手数料引き上げ(GasPriceの高いトランザクションを送る攻撃)によるインセンティブを排除するための設計である。
利用者からマイナーに対するインセンティブとしてのトランザクション手数料は、maxPriorityFeePerGasとして設定できる。
BaseFee+maxPriorityFeePerGasが実際のGasPriceとなる。
ただし、手数料の過払いを防ぎたいための措置として、利用者はGasPriceの上限としてmaxFeePerGasを設定できる。BaseFee+maxPriorityFeePerGasがmaxFeePerGasを超えた場合、maxFeePerGasが実際のGasPriceとなる。
開発への影響
トランザクションパラメータが変更された。
(廃止)gasPrice
(追加)maxPriorityFeePerGas: マイナーにTipとして追加で支払うGasPrice
(追加)maxFeePerGas:最大で払っても良いGasPrice
web3.jsはv1.5.1からサポートされた。
トランザクションオブジェクトで "type" : "0x2" を指定することで、EIP-1559対応トランザクションを送信できる。
"type" : "0x2"を指定するだけで、maxPriorityFeePerGasとmaxFeePerGasは省略してもEIP-1559対応トランザクションを送信できる。このとき、maxPriorityFeePerGasとmaxFeePerGasは自動で設定された(ライブラリが自動計算したか?)
"type" : "0x2"を省けば、旧来方式のTxを送信できる。
さらに調べたいこと
web3.jsで、利用者がmaxPriorityFeePerGasとmaxFeePerGasは省略したときに、実際にトランザクションで設定される値は何によって決まるか?
Txn Savingsとは?
参考サイト
この記事が気に入ったらサポートをしてみませんか?