2025/10/27 16:27 How blocks are chained in a blockchain

やあ、ロボ子。今日はブロックチェーンの仕組みについて深掘りするのじゃ!よく「各ブロックは前のブロックのハッシュを含む」って説明されるけど、実はもっと複雑なのじゃ。

なるほど、ブロックチェーンの基本的な説明には、省略されている詳細があるということですね。具体的にはどう違うのでしょうか?

例えば、Bitcoinのブロック920993と920994を見てみるのじゃ。ブロック920993のハッシュがブロック920994に含まれるべきだけど、正確にはブロック920993のヘッダーのハッシュがブロック920994に含まれているのじゃ。

ブロック全体のハッシュではなく、ヘッダーのハッシュが含まれているんですね。ヘッダーとは具体的にどの部分を指すのでしょうか?

Bitcoinブロックのヘッダーは通常最初の80バイトと言われるけど、厳密には最初の4バイトはマジックナンバー(0xf9beb4d9)なのじゃ。だから、ヘッダーはファイルの5バイト目から84バイト目までの80バイトなのじゃ。

マジックナンバーを除いた部分がヘッダーなのですね。そして、Bitcoinはハッシュ関数としてダブルSHA256を使用しているとのことですが、これはどういうことでしょうか?

ダブルSHA256は、SHA256を2回適用するということじゃ。つまり、SHA256(SHA256(header))という計算をするのじゃ。

なるほど。ブロック920993のヘッダーのハッシュを計算すると、末尾に多くのゼロが並ぶハッシュ値が得られるとのことですが、これはなぜでしょうか?

それはPoW(プルーフ・オブ・ワーク)によるものじゃ。ハッシュの末尾にゼロが多いのは、ブロックをチェーンに追加するために解決が必要な計算の結果なのじゃ。

PoWによってハッシュ値にゼロが並ぶように調整されているんですね。記事には、Bitcoinのヘッダーと`openssl dgst`は、ハッシュをリトルエンディアンで表示するとありますが、これはどういう意味でしょうか?

リトルエンディアンは、バイトの並び順が逆になっているということじゃ。例えば、16進数の「1234」は、リトルエンディアンでは「3412」と表示されるのじゃ。

理解しました。ブロックのヘッダーにはマークル木のルートが含まれているとのことですが、これはどういう役割を果たすのでしょうか?

マークル木のルートは、ブロックの本文(トランザクションデータ)が変更されると変わるのじゃ。本文が少しでも変わると、マークル木のルートが変わり、ヘッダーとハッシュも変わるのじゃ。

データの整合性を保つために重要な役割を果たしているんですね。マイナーはトランザクションの順序を変更したり、nonce値を変更したりして、ハッシュの先頭に必要な数のゼロを生成するとありますが、これはなぜでしょうか?

マイナーは、PoWの条件を満たすハッシュ値を見つけるために、試行錯誤しているのじゃ。必要なのは特定の数の先頭のゼロを生成することではなく、ターゲット値よりも小さいハッシュ値を見つけることなのじゃ。

ターゲット値よりも小さいハッシュ値を見つけることが、PoWの目的ということですね。ブロックチェーンの仕組み、奥が深いですね!

そうじゃろう?ところでロボ子、ブロックチェーンの勉強ばかりしてると、頭がブロックされちゃうぞ!…なんちゃって!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。