EthereumのハードフォークであるConstantinopleがブロックナンバー7280000、日本時間の3月1日に行われました。ハードフォーク前後によって変わった事をデータから見てみる趣旨の記事です。
利用ツールは以下です。
- Tableau Desktop 2018.3
- Google BigQuery
Constantinopleで取り込まれたEIP
Constantinopleのアナウンスは以下記事です。
Ethereum Constantinople/St. Petersburg Upgrade Announcement
https://blog.ethereum.org/2019/02/22/ethereum-constantinople-st-petersburg-upgrade-announcement/
EIP 145: Bitwise shifting instructions in EVM
- EVMにおけるBit単位のシフト命令の実装。これまでも同様の実装はできたがコストが高かった。
- 0x1cを右シフト(SHRオペコード)、0x1dを左シフト(SHLオペコード)として実装する
EIP 1014: Skinny CREATE2
- これまでとは異なるアドレス生成の提案。まだオンチェーンで生成されていないアドレスを通信できる
- こちらのブログが詳しい(https://y-nakajo.hatenablog.com/entry/2019/01/11/204547)
EIP 1052: EXTCODEHASH opcode
EIP 1234: Constantinople Difficulty Bomb Delay and Block Reward Adjustment
- 採掘難易度が徐々に上がっていくディフィカルティボムを12ヶ月遅らせるのと、ブロック報酬を3から2ETHへの減少提案
BigQueryからデータの抽出
Google BigQueryからEthereumのデータを抽出してみます。リアルタイム性はないのですが、BigQueryによってデータが取りやすくなっています。
Gasと生成時刻データの抽出
"Constantinopleで取り込まれたEIP"から察するに、消費Gasが減少している、ブロック生成時間が早まっているなどの変化があるのではという仮説があります。
そのため生成時刻とブロックに取り込まれたトランザクションで利用されたガスを取得してみます。
SELECT timestamp, gas_used FROM `bigquery-public-data.ethereum_blockchain.blocks` WHERE /*Constantinople Hardfork Feb-28-2019 07:52:04 PM +UTC*/ timestamp BETWEEN timestamp("2019-02-21 00:00:00 UTC") AND timestamp("2019-03-07 00:00:00 UTC")
Tableauでハードフォーク前後の情報をもろもろ可視化
データの可視化にTableauを使います。GUIで簡単にグラフを作成できるおすすめツールです。有料ソフトウェアですが無料トライアルもあります。
ディフィカルティの中央値
1分ごとのディフィカルティについて中央値を視覚化しています。がくっと下がっていますね
ブロック生成時間の中央値
1分ごとのブロック生成時間の中央値を視覚化しています。
Constantinopleを境に20秒程度だったのが12秒くらいまで早まっています。
1時間ごとのブロック生成数
生成時間が早まったことにより、当然ながら、1時間ごとのブロック生成数も100~200程度だったのが、250~300程度まで増加しています。視覚化するとわかりやすいですね。
ブロックに取り込まれたトランザクションで利用されたガスの中央値
ブロック単位のガスは減少しています。EIPの効果も考えられますが、ブロック生成が早くなってブロックに取り込まれるトランザクションが少なくなった影響が大きいのではないかと推測しています。(トランザクションごとのGasを深掘りすればより詳細が分かるかもしれません)
まとめ
Constantinople前後の大きな変化は
- ブロック生成時間が20秒程度だったのが12秒くらいに
- 1時間ごとのブロック生成数も100~200程度だったのが、250~300程度まで増加
となっています。
報酬は3ETH->2ETHとなり約3分の2程度になりましたが、直後のブロック生成数は1.5〜2.0倍程度となっていたので、ETHを増やすという意味ではハードフォーク前後のマイニングはお得なのかもしれません。