Ethereumの「フルノード」のお話
定期的に上がるイーサリアムのFull NodeとArchive Nodeについてのお話です
定期的に「EthereumのArchive Nodeこそがフルノードだ!5TBを超えた!」的な論題が出るので、今回はそれについて書いて行こうかと思います。
EthereumのNodeの種類
Ethereumには大きく3つのノードの種類があります。(データ保管方法による分類)
1. Light Node
これはチェーンのヘッダー情報だけを格納して、必要があったら他のノードにリクエストするタイプのノードです。スマホとかそういう数十GBとか保存しておきたくないノードが使います
2. Full Node
これがEthereumにおける"Full Node"です
- 全てのブロック情報を保有してます。
- Stateの推移を検証することができ、また過去のStateも復元することができます。
- 新規ブロックの検証も行えます。
ネットワークが始まった時からのブロック情報を保有し、またStateを復元することができるため、FullNodeと呼んでいます。(Block情報を「そのまま」保管しています)
3. Archive Node
Archive Nodeは、過去のStateをいち早く取って来るためにStateの変更が起きたらそのブロック時点でのStateの情報を取っておくNodeです。Full Nodeでは過去のStateを再現するのに一定程度時間がかかるので、ブロックチェーン分析やエクスプローラーのためなど、過去の情報を素早く取って来たい場合などに有効です。
Full NodeとArchive Nodeの違い
何のこっちゃ?とお思いかと思いますのでいかに例をあげます。
Full Nodeの場合
ERC20トークンの残高
No. A | 5
No. B | -2
No. C | +3
No. D | ×2
最終残高 12
というように、どのようにState変化したのか、という情報のみ保存されます。B blockとC Blockの間での残高に戻りたければ➗2をして-3をすれば3というその時の状態(State)が算出できます。
Archive Nodeの場合
ERC20トークンの残高
No. A | 5
No. B | 5 - 2 = 3
No. C | 3 + 3= 6
No. D | 6 × 2 = 12
最終残高 12
というように、そのBlock時点での状態(State)も一緒に保管します。なので過去のStateを楽に取ってきたい!という場合に向いているNodeなのです。Explorerだったり分析ツールとかを提供しているところとかですね。
このArchive Nodeの場合、実際のブロックの情報に加えてその時点でのStateも一緒に保管するため、保存しなくてはいけないデータが格段に増えます。ではどのくらいなのでしょうか?そして「実際のブロックの情報」のデータサイズはどれくらいなのでしょうか?
Ethereumの本当のブロックサイズ
さて、適当に拾って来たブロックです。
Block Size上限にあたるTotal Gas Limitは上限近くまで行っているので、Empty Blockとかではないです。
これを見ると分かる通り、(50Blockで平均した場合) 0.044 MB/Block、
これがおおよそ15秒に一回生成されるので1日で253.44MB、年間で約92GBほど増える計算になります。
(ちなみにBitcoinは(50Blockで平均した場合)1Blockあたり1.3MB、これがおおよそ10分に一回生成されるので、1日で187.2MB、年間で約68GB増える計算になります。)
ただ、実際にEthereumのクライアントが保存する量はそれよりも多いです。
Gethクライアントは1年間で300GB、Parityは123GBほど増えています。
そしてArchive Nodeの伸びはすごいですw 追加で保存しなくてはいけない情報の多さを感じます。
3ヶ月ほどで700GB以上も伸びていますw
これは1Blockあたりで換算すると約1.23 MBも増えてる計算になります。Block本体の情報としては0.044 MBくらいなのに...。その時のStateの情報が約1.18MBくらいある計算になります。
(実際はクライアントはFull nodeの伸びと同様、他の情報も保存しているかと思うのである程度はこれより少ないでしょうが)