ブロックヘッダーについてさらに詳しく
メニューを表示するにはスワイプしてください
ブロックヘッダーを詳しく探る前に、まずビッグエンディアン形式とリトルエンディアン形式の違いを理解しておく必要があります。
リトルエンディアンとビッグエンディアン
まず、エンディアンとは何かを理解する必要があります。
エンディアンとは、コンピュータのメモリ内でバイト(1バイトは8ビットに相当)が大きなデータ型の中でどのような順序で配置されるかを指します。
ビッグエンディアン形式は、最上位バイトを最初に格納する方式であり、人間が通常数字を読む方法と一致しています。例として10進数の234567890を使用し、Pythonで16進数と2進数に変換し、その結果を出力します:
123decimal_number = 234567890 print(hex(decimal_number)) print(bin(decimal_number))
コンピュータは整数をバイト単位で格納し、2桁の16進数ごとに1バイトに対応するため、偶数桁の数字が必要です。今回の数値の16進表現0xDFB38D2は7桁なので、左側にゼロ0を追加する必要があります。結果として0x0DFB38D2となり、8桁(ちょうど4バイト)となり、値は同じです。
同様に、2進数は28ビットで、8ビットごとに1バイトに対応するため、8で割り切れるビット数にするために左側にゼロ0を4つ追加します。結果として0b00001101111110110011100011010010となり、32ビット(ちょうど4バイト)となり、値は同じです。
Pythonを使うことで、ビッグエンディアン形式が得られ、手動で変換した場合も同じ結果となります。数値の表現は以下の通りです:
- 16進数:
0x0DFB38D2 - 2進数:
0b00001101111110110011100011010010
ビッグエンディアン形式を理解するために、以下の表を見てみましょう:
一方、リトルエンディアン形式は最下位バイトを最初に格納し、直感的な順序を逆にします:
ご覧のとおり、リトルエンディアン形式でのこの数値は次のようになります:
-
16進数では
0xD238FB0D; -
2進数では
0b11010010001110001111101100001101。
ブロックヘッダーに戻る
まとめると、ヘッダーは正確に80バイトで構成されており、6つのデータフィールドが含まれています。各フィールドはリトルエンディアン形式です。次に、 ブロック645536のヘッダーを見てみましょう:
ブロックヘッダーは正確に80バイトで構成されているため、ちょうど160個の16進数桁(各バイトは2つの16進数桁に対応)が存在します。例えば、versionフィールドは4バイトを占めるため、8つの16進数桁となります。
以下は、エクスプローラーでのこのブロックに関する詳細情報です。
ここに示されている各フィールドはビッグエンディアン形式で表示されています。例えば、bitsフィールドを確認し、ブロックヘッダー内での表現と比較してみましょう。その16進数表現はビッグエンディアン形式で0x171007eaです。
これをリトルエンディアン形式に変換すると、次のようになります。
ご覧のとおり、これはまさにブロックヘッダーに含まれていた内容です。
1. ブロックチェーンやコンピュータシステムの文脈で、**「エンディアンネス」**とは何を指しますか?
2. ブロックの各要素とその定義を対応させてください。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください