nBitsとは?

まず、ブロックチェーンのハッシュを求める80バイトのヘッダです。
ぴったり80バイトになり、どのアーキテクチャのCPUであっても、境界は合っていますね。
※ なお、リトルエンディアンによる処理は必要です。int32_t, uint32_tがあります。
ビッグエンディアンの場合はByteswapで配置を入れ替えてからハッシュを取る事になります。

int32_t nVersion;
uint256 hashPrevBlock;
uint256 hashMerkleRoot;
uint32_t nTime;
uint32_t nBits;
uint32_t nNonce;

まず、nVersion, hashPrevBlock, hashMerkleRoot, nTimeには、生成時に「決まった値」が入ります。
※ 詳しくは「CBlockHeader」にまとめます。

ここで大事な点はnBitsです。
こちらも生成時に「難易度のターゲット」として値が割り当てられます。
そして「nBitsから導かれるターゲットより小さな値となるハッシュ値」を探します。

nNonceとは?

nBitsから導かれるターゲットより小さな値となるハッシュ値について、
このnNonceを探す作業が……機材を並べたあの「マイニング」です。
1バイトでも変わるとハッシュ値は大きく変化しますので、その性質を大きく利用しているわけです。
そして、そう簡単にはみつかりません。
イメージ的には、無数の乱雑なハッシュ値の中に、ごく僅かに混ざり込む「小さな値」となります。
さらには予測はできませんので「確率的にこのあたりのnNonceが怪しい」とかも、できません。

これは果たして、電気代のムダなのか?

よく、この計算については電気代のムダという批判がございます。
ただ、ハッシュを使えばコンピュータから予測不能な乱数を生み出せる検証と考えれば……一理あるかもです。
まあ……コストパフォーマンスが非常に悪い乱数生成器になってしまいますが……、です。
ただその分、みなが納得する結果にはなります。

□ 本ページをご覧いただきました方は、以下のページもよくご覧いただいております。
■ 集計中.....