◇ ハッシュ値とは?

任意の情報について一方的な方向性(ハッシュ値から任意の情報には戻せません)で
2の256乗(SHA256,Blake2s等)のうちの任意の数値に変化させたときの値を「ハッシュ値」と呼びます。ブロックチェーンはこの「ハッシュ値」を至る所で取得して一意性を確保しながら動いております。

ハッシュ関数と呼ばれるものに情報を入れハッシュ値を取得しております。そのとき、まったく同じ情報であれば同じハッシュ値になります。そして、僅かでも(1ビット)でも異なれば全然異なるハッシュ値が出ます。

◇ どのような場面でハッシュ値をみられますか?

ブロックチェーンでよくみかけるハッシュ値は「トランザクションID……txid」です。コインを送ったあとにtxidをくださいと言われます。そのとき相手に送金した証として渡すtxidが「ハッシュ値」です。コインを送るアドレスは「Base58」または「Bech32」と呼ばれこのハッシュ値とは異なります。

◇ その他にハッシュ値が使われている場面

ブロックチェーンは「ブロックエクスプローラ」と呼ばれるものが必須とされています。このエクスプローラをじっくり観察すると面白い性質に気が付きます。トランザクションIDの他にブロックハッシュと呼ばれるハッシュが並んでおり そのブロックハッシュをよくみてみると……。トランザクションIDとは異なり0が先頭から並んでおります。きれいに揃っているのでわざと揃えたのかと考えたくなります。 そしてその答えは「イエス」です。

実は0が先頭からきれいに並んでいるブロックハッシュはマイナーが探して見つけ出したものだからです。ごつい機材が並ぶ、あれらが探し出してきます。ハッシュ値が0より先頭から並ぶ……地道に探すしかない大変な作業です。0が先頭から並ぶハッシュが条件を満たすとき新規ブロックとして承認され報酬が得られます。そしてブロックハッシュとしてブロックチェーンに記録されブロックエクスプローラからみることができるのです。

◇ 計算コスト

はい。ものすごくかかります。そのためコインを「新規で掘り当てる」とコインベースという特殊なトランザクションでコインが得られます。コインベース……聞いたことありますよね。ここのトランザクションを名前にしたようですね。マイナーはその報酬を目当てに「ブロックハッシュ」を計算する作業に励んでおります。そしてこのような作業を「マイニング」と呼びます。
※ 採掘のイメージとなるため「掘る」という表現が使われております。

◇ ブロックハッシュが0から始まっていないブロックがあります。……バグでしょうか?

いいえ大丈夫です。正常です。それらは違う承認方式で割り当てておりハッシュ値で承認された訳ではないため0から始まっておりません。それらはマッピングのパラメタ「nNonce」が0のままでハッシュ値を取得するためです。
※ 本来はそのパラメタを変動させて0が並ぶハッシュを探しております。それゆえに数字やAからFが入り乱れたハッシュ値になっております。

SORAではProof Of Stakeがそれらのトランザクションに相当します。コインベースのトランザクションと区別するためそこにはダミーを投入し新たにコイン生成のトランザクションを多層にする構造で組み込まています。欠点としてコインベースではなく一般的なトランザクションになるため トランザクションの検証に「アンロック」が必要になります。それゆえにStakeなコインはみな「ステークのためのアンロック」が付属し必須です。PoSのコインでは最初にアンロックしますよね? あの手間が必要になるのです。

◇ ハッシュ値はuint64_tを使うのですか?

いいえ。uint64_tにも収まりません。オーバーフローします。uint256と呼ばれるuint8_tを32個連結させて256ビットにした「独自定義のクラス」を使います。
※ クラスにoperatorが実装されており専用関数の経由が必要なく便利に扱うことができます。もう一つの主役である楕円曲線暗号ではuint32_tを8個連結になっておりました。