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

◇ これは果たしてエネルギーのムダなのか?

この計算については電気代のムダという批判がございます。ただ、ハッシュを使えばコンピュータから予測不能な乱数を生み出せる検証と考えれば一理あるかもです。またはハッシュ値自体に何かの大きな手掛かりがあるのかもしれません。このあたりが判明するのは10年後でしょうか(^^;。