本文へスキップ
BecomeCoder

Solanaコース · 第2章 Proof of History ― 分散システムに時計を · レッスン6

取引を時間順に並べる ― PoH列にデータを差し込む

ローカル実施

導入

ただハッシュを繰り返すだけでは、単なる「重い計算の証明」にしかなりません。PoH が本当に役立つのは、この連鎖に取引などの出来事を組み込んだときです。

説明

PoH の連鎖を計算している途中で、ある取引(トランザクション)のデータのハッシュを、次の入力に混ぜ込むことができます。

次のhash = SHA-256(直前のhash + 取引データのハッシュ)

こうすると、その取引は「連鎖のこの地点よりも前には存在しなかったが、この地点以降には確かに存在していた」ことが記録に刻まれます。取引の内容そのものだけでなく、「いつ(連鎖のどの時点で)その取引が persisted されたか」という順序の情報が、ハッシュの中に暗号学的に埋め込まれるわけです。

sequenceDiagram
    participant User as ユーザー
    participant Leader as リーダー(PoH生成者)
    participant PoH as PoH列
    User->>Leader: 取引Txを送信
    Leader->>PoH: hash(直前hash + hash(Tx)) を計算
    PoH-->>Leader: 新しいhash Hn(Txを含む証拠)
    Note over PoH: この時点でTxは「Hnより前には存在しなかった」<br/>と暗号学的に証明される
    Leader->>PoH: 次の取引・次のhashへ連鎖を継続

これが PoH が「タイムスタンプ係」と呼ばれる理由です。従来のブロックチェーンのように、ノードどうしが「どちらが先か」をメッセージのやり取りで確認し合う必要がありません。連鎖に取引データを差し込んだ順番そのものが、そのまま出来事の時間的な順序を表しているからです。

ただし、ここまでの話には注意点があります。PoH はあくまで「順序を記録する」仕組みであり、「その順序が正しい・改ざんされていないと全ノードで合意する」仕組みそのものではありません。順序の記録(PoH)と、その記録に全員が合意する仕組み(コンセンサス)は別の役割です。次のレッスンでは、この合意の部分を見ていきます。

演習

PoH 列に取引データのハッシュを差し込むと、なぜ「その取引がいつ発生したか」を後から検証できるようになるのでしょうか。前のレッスンで学んだハッシュ連鎖の逐次性と結びつけて考えてみましょう。

ヒント1を見る

連鎖のどの地点にそのハッシュが混ぜ込まれているかを見れば、それより前の計算ステップ数がわかります。

ヒント2を見る

ステップ数がわかれば、そこまで計算するのにかかった(動かせない)時間の目安がわかります。