
◇ 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が怪しい」などの
当たりを付ける作業もできません。