Ethereumのトランザクションフィー市場の改善提案 - ファースト&セカンドプライス・オークション
Title: First and second-price auctions and improved transaction-fee markets
現在上記スレッドで議論が行われている。
提案内容について分かりにくい点が多いので、ここでは原文ではされていない式の解説などを含めて説明を行う。
hiroingk.icon < これが導入される方向になれば、EthereumのGasに関する考え方が大きく変わってくるので要注目。
CasperやShardingに依存しないため、十分に監査されれば、すぐにEthereum mainnetに取り込むことができる、ということを主張している。 Vitalikは、FCoinを引き合いに出して、この改善案の必要性を強調している Fcoinのようなスパム的にトランザクションを発生させる仕組みがEthereumのGas costを引き上げている中で、「プロのギーク集団が、ユーザーに、出来るだけ低いコストで確実にトランザクションを送信することを手助けしている」状況を持ち出し、Gasの設定が一般ユーザーにとって難解になってしまっていることを指摘している。
そこで、この状況下でも誰でも最適な価格が得られる方式を提案している。
課題
この方式は、最終的に最も高い価格を入札した買い手に販売され、支払額も最も高い価格に設定される方式であり、限りあるブロックの中に入れるトランザクションを、Feeによってそれぞれ取り入れている。
しかしこの方式の問題点として、他のTransaction Feeを確認できないため、優先度の高いTransactionを発行したい際に、無駄にFeeが高くなってしまうという点がある。
他のTransaction Feeをリアルタイムに確認できれば、戦略が生まれ最適化を行えるが、それには複雑な経済モデルと、リアルタイムなブロックチェーン性能が必要となってしまうため、現実的ではない。
シンプルな (しかし問題がある) 解決案
これは、オークションのすべての参加者が、最も低い入札者によって支払われた価格と同じ価格を支払う方式である。
例えば、ブロックに5つしか枠がないものに対して、以下のような金額の入札がなされたとする。
0.02, 0.03, 0.05, 0.08, 0.13, 0.19, 1.00
このうちトランザクションの送信が完了するのは、上位5人の 0.05, 0.08, 0.13, 0.19, 1.00 である。そして、送信に成功した5人は全員0.05しか払わなくても良い。これが Uniform price auction である。
これによって、トランザクション送信者の戦略がシンプルになる。なぜなら、高めの金額で入札を行っても、その金額を丸々支払う必要はないためである。
Uniform price auction の弱点
一方で、これには2つの脆弱性がある。
1. Block proposer (Miner) 自らが、ブロック内に自分のトランザクションを含め、清算価格を釣り上げる。これにより、自分の総収入が増える。
2. Block proposer自らが、トランザクション送信者の一部と結託して、「実際の」入札額よりも高い入札価格を提示し、別のチャネルで払い戻すよう求める。これも総収入が増える。
https://ethresear.ch/uploads/default/original/2X/d/d4d3a45aa14dd05c0bae7cfe97bbcc32e38348ab.png
(自らのトランザクションを含めることで、Miner収益が高くなるよ、ということを表した図)
この仕組みの下では、トランザクション送信者が入札単価を1ドル引き上げると、Block proposerの総収益が1ドル以上増加するため、両方の攻撃が可能になる。
これは、First-price auctionには無い弱点である。
hiroingk.icon < Ethereum関連の話ではメカニズム・デザインに関する資料が引用されることが多くなっている。
Vitalikたちのアプローチ
目標
以下のような複雑性を排除し、様々な形態の危険な結託を阻止すること。
ユーザー側
複雑な計算
経済モデリング
利益最大化のための結託
複雑なマイニング戦略の開発
複雑な取引センダ戦略の開発
以下、最小限のプロトコルの変更提案。
メカニズム
hiroingk.icon < First-price auction と Second-price auction のハイブリット型(タイトル回収)
このメカニズムはminimum fee F (最低手数料) を維持し、すべての取引で料金が指定される。 取引がブロックに含まれるためには、 取引は少なくともFを支払う必要がある。 料金は次の式でブロックごとに調整される。
$ curBlockFee = prevBlockFee * (1 + k * (\frac{prevBlockGas}{prevBlockMaxGas} - \frac{1}{2}))
この式における$ \frac{prevBlockGas}{prevBlockMaxGas} は、前回ブロックのBlock Gas Limit (最大量) に対する合計Block Gasの比率。
また、$ k は常に $ (0 < k < 2) である。
hiroingk.icon < Vitalikはこの$ kを仮に0.5くらいの値だと考えているとのこと
現在のところこの式は、数学的に完璧な最適性を実現していないとしている。
---.icon
hiroingk.icon < 式の解説が無くて分かりにくいので、解説する
1. 前回ブロックの合計Block Gas比率$ \frac{prevBlockGas}{prevBlockMaxGas} が$ \frac{1}{2} (つまりBlock Gas Limitの50%) を超えた時、$ curBlockFeeは上昇する。
上昇すると、トランザクションを送信しようとする人が少なくなり、合計Block Gas比率は下がるので、$ curBlockGasも下がる
2. 逆に前回ブロックのBlock Gas比率が 50% を超えなければ、$ curBlockFeeは下落する。
この間は以前より安く送信できるので、この間にトランザクションを送信しようとする人が増え、$ curBlockGasも上がる
3. つまり、トランザクション送信者が経済合理性ある行動を取ると、ブロックは常に50%が埋まった状態になるよう修正されていく。ここが重要なアイデア。
---.icon
マイナーは、 支払われた取引手数料から最低手数料を差し引いた収入を受け取る。トランザクションは最小のブロック数で取り込まれる。以上がメカニズムの全て。
hiroingk.icon < つまり、minimum feeはプロトコルに徴収・もしくはBurnされる。
これにより、Block proposer (Miner) は自分のトランザクションフィーを釣り上げようとすると損失が発生してしまう。
hiroingk.icon < もしプロトコルが徴収した場合は、再分配するという設計の選択肢が取れる。今後さらにインセンティブ設計の幅が広がる。
マイナーのインセンティブは、First-priceモデルと同じ。できるだけ高価な取引を集めて、そのブロックに入れることを試みる。 トランザクション送信者の戦略は以下の通り。
1) 通常のケース
送信金額によって、最小フィー(minfee)が高いか低いかを確認する
高い場合は、トランザクションを送信しない。
低い場合は、minfee + 1% を入札してトランザクションを送信。
2) 需要が非常に高い時期のケース。ブロックがいっぱいになるのは短期間だけになると考えられるため、min feeが追いつくので、このケースを用いるのは稀。
現在使用しているような、不完全なアルゴリズムによって設定された料金で発行。
また、トランザクション送信者がもっと複雑な条件を設定する改善を加えることもできる。例えば、以下のようなことが実現できる。
遅れを気にしないので、できるだけ低いFeeで送る
5ブロックの間低いFeeで抑えるように試して、ダメなら高いFeeで送る