• Home
  • イーサリアム改善提案(EIP 2200)についての調査

イーサリアム改善提案(EIP 2200)についての調査

Ethereumの改善提案(EIP)についての調査結果をまとめる。
今回はGoEthereum(Geth)のv1.9.3に含まれるEIP2200(EVMのSLOAD命令のGASコスト変更に伴うSSTORE命令のGASコストの再調整)について調査する。(2019/09/20 現在)

参考:Ethereum Improvement Proposals 「EIP 2200: Rebalance net-metered SSTORE gas cost with consideration of SLOAD gas cost change

要約

ネットメーターのSSTOREオペコード書き込みを変更して、SLOADと同じGASコストを常に持つようにする。SLOADのGASコストを考慮し、SSTOREの設定後の払い戻しを変更することへの提案。

変更の利点

SSTOREおよびSLOADのGASコストに一貫性を持たせ、GASコストの価格を適正にすることが可能となる。

仕様

以下の変数を定義し、EIP-1283EIP-1706を組み合わせた新しい仕様に置き換える。
・SLOAD_GAS:200から800に変更。
・SSTORE_SET_GAS:20000(未変更)
・SSTORE_RESET_GAS:5000(未変更)
・SSTORE_CLEARS_SCHEDULE:15000(未変更)

  • 現在の値が新しい値に等しい場合、OAD_GASが控除される。(ノーオペレーション)
  • 現在の値が新しい値と等しくない場合
    • 元の値が現在の値と等しい場合
      • 元の値が0の場合、SSTORE_SET_GASが控除される。
      • それ以外の場合、SSTORE_RESET_GASが控除される。新しい値が0の場合、SSTORE_CLEARS_SCHEDULE払い戻しカウンターにGASを追加する。
    • 元の値が現在の値と等しくない場合、SLOAD_GASが控除される。
      • 元の値が0でないの場合
        • 現在の値が0の場合(新しい値≠0)、SSTORE_CLEARS_SCHEDULE払い戻しカウンターからGASを取り除く。
        • 新しい値が0の場合(現在の値≠0)、SSTORE_CLEARS_SCHEDULE払い戻しカウンターにGASを追加する。
      • 元の値が新しい値と同じ場合
        • 元の値が0の場合、SSTORE_SET_GAS – SLOAD_GASを払戻しカウンターに追加する。
        • それ以外の場合、SSTORE_RESET_GAS – SLOAD_GASを払い戻しカウンターに追加する。
  • gasleftが2300以下の場合、例外「out of gas」で現在のコールフレームを失敗させる。

変更の根拠

EIP-1283の理論的根拠と同様。EIP-1884が適用される場合、SSTOREオペコードに関連するSLOAD_GASも変更する必要がある。

特記事項

特になし

ご相談・お見積もり

03-5207-2689