構造体を可変長にする。これはC言語の有名な手法です。
構造体の先頭に構造体のサイズを示すメンバを入れ、最下部にサイズが[1]の配列メンバ(unsigned char)を加えると可変長になります。構造体メモリは連続して確保されますから、構造体のサイズさえわかれば先頭にキャストしてあげるだけで、可変長として機能し、最下部に置いた配列メンバを正常に読み書きできます。
20年以上正常に改良・稼働する「NTFS」がSSDに対応できたのは、このような仕組みのおかげです。あとからSSD機能を追加・最適化をするには、最初の設計で「可変長」にしておいて、その仕組みを利用してSSDなどの新機能を追加していくのです。サイズを変えていくだけなので、いくらでも拡張できます。
ブロックヘッダは80バイトで固定です。ハッシュを交換するにはサイズを拡張する必要がありますから、80バイト固定では厳しいです。そのため新しく定義しなおすので、拡張後は一斉にノードをあたらしくすればいい、そんな感じなのでしょうか。でも、古い80バイトのノードを一気に排除できないのでブロックチェーンが分岐してしまい、80バイトのチェーンと、新しいチェーンでまたトラブルかな。
