導入
「ブロックチェーンって結局なんだっけ」を一度整理しておくと、この先の話がぐっと理解しやすくなります。すでに知っている人にとっても、Solana の話をするうえで前提になる言葉の確認だと思って読んでください。
説明
ブロックチェーンは、取引の記録を「ブロック」という単位でまとめ、それを鎖(チェーン)のようにつなげていく台帳の技術です。特定の1社が管理するサーバーではなく、世界中に散らばった多数のコンピュータ(ノード)が同じ記録のコピーを持ち合う 分散台帳 になっています。
各ブロックには、直前のブロックの内容から計算した ハッシュ(データを固定長の値に変換した「指紋」のようなもの。少しでも元データが変わると値が別物になる)が含まれています。ブロック2はブロック1のハッシュを含み、ブロック3はブロック2のハッシュを含み……という形で連結されているため、過去のブロックの中身を1つでも書き換えると、そこから後ろのハッシュがすべて食い違ってしまいます。これが「ブロックチェーンは改ざんに強い」と言われる理由です。
graph LR
B1["ブロック1<br/>取引データ + hash0"] --> B2["ブロック2<br/>取引データ + hash1"]
B2 --> B3["ブロック3<br/>取引データ + hash2"]
B3 --> B4["ブロック4<br/>取引データ + hash3"]
ブロックチェーンの初期の主な用途は「誰が誰にいくら送ったか」を記録する送金台帳(ビットコインなど)でした。そこからさらに一歩進めたのが スマートコントラクト という考え方です。スマートコントラクトは、ブロックチェーン上に置かれた「プログラム」で、条件を満たすと自動的に実行されます。人間の管理者を介さずに、決められたルールどおりにお金やデータのやり取りが行われる点がポイントです。
この考え方を大きく広めたのが Ethereum(イーサリアム)です。Ethereum は、単なる送金台帳ではなく「ブロックチェーン上で動く汎用コンピュータ(world computer)」を目指して設計されました。世界中のノードが同じプログラムを同じ入力で実行し、同じ結果に到達する ―― これによって、誰か1台のサーバーが止まっても、改ざんされても困らない形でプログラムを動かせます。Ethereum のスマートコントラクトは主に Solidity という言語で書かれます(Solidityコースで扱っています)。
Solana もこの「ブロックチェーン上で動く汎用コンピュータ」という発想を受け継いでいます。ただし、プログラムの書き方も、内部の仕組みも Ethereum とはかなり違います。次のレッスンから、その違いを見ていきます。
演習
Ethereum のスマートコントラクトと、銀行の送金システムを比べたとき、決定的に違う点はどこでしょうか。「誰が実行ルールを決めているか」「誰か1つの主体が止まると全体が止まるか」の2つの観点で考えてみましょう。
ヒント1を見る
銀行の送金は、その銀行のサーバーとルールに依存しています。銀行が停止すればその処理も止まります。
ヒント2を見る
スマートコントラクトは多数のノードが同じルールを共有して実行するため、特定の1台に依存しません。