本文へスキップ
BecomeCoder

Solanaコース · 第1章 Solanaとは何か · レッスン3

Solanaのホワイトペーパーが解いた問題 ― 「時刻」をどう合意するか

ローカル実施

導入

「今何時か」を全員で合わせる ―― 私たちが普段まったく意識しないこの当たり前のことが、実は分散システムにとって驚くほど難しい問題です。Solana の出発点は、まさにこの問題でした。

説明

Solana は、2017年に Anatoly Yakovenko が発表したホワイトペーパー “Solana: A New Architecture for a High Performance Blockchain” から始まりました。彼は Qualcomm でネットワーク分散システムの開発に携わった経験を持ち、そこで分散システム特有のある課題に何度も突き当たっていました。それが「時刻の合意」です。

1台のコンピュータの中であれば「何が先に起きたか」を判断するのは簡単です。1つの時計を見ればよいからです。しかし、世界中に散らばった多数のノードで構成されるブロックチェーンでは話が変わります。各ノードはそれぞれ自分の時計を持っていますが、ネットワークの遅延はノードごとにバラバラで、時計にもわずかなズレがあります。そのため「取引Aと取引B、どちらが先に発生したか」を、各ノードが独力で正確に判断することはできません。

sequenceDiagram
    participant N1 as ノード1
    participant N2 as ノード2
    participant N3 as ノード3
    N1->>N2: 取引Aを受信(自分の時計で10:00:01)
    N3->>N2: 取引Bを受信(自分の時計で10:00:01)
    Note over N2: AとB、本当はどちらが先?<br/>自分の時計だけでは判断できない

これまでのブロックチェーンは、この問題を「ノードどうしがメッセージを何度もやり取りして、多数決で順序に合意する」という方法で解決してきました。これは確実ですが、合意を取るためのやり取り(通信)が増えるほど時間がかかり、スループットの足かせになります。つまり、「時刻・順序の合意にかかるコスト」こそが、ブロックチェーンが速くなれない根本原因の1つだった、というのが Yakovenko の着眼点です。

そこで彼が考え出したのが、ノードどうしが逐一やり取りしなくても「これくらいの時間が経った」という証拠を作れる仕組みでした。それが Proof of HistoryPoH)です。次の章では、この PoH がどんな仕組みで「時計」を作り出すのかを見ていきます。

演習

「1台のパソコンの中では時刻の合意が問題にならないのに、複数のコンピュータが関わると問題になる」のはなぜでしょうか。ネットワーク遅延という言葉を使って説明してみましょう。

ヒント1を見る

1台の中では、すべての処理が同じ1つの時計(システムクロック)を基準にしています。

ヒント2を見る

複数のコンピュータでは、メッセージが届くまでの時間がそれぞれ違い、しかも一定ではありません。