この記事は前回の続きです。
ようやく本論に入るので、なんならここから読んだって構いません。
もくじ
今回のお品書き
前回までで概念的なお話にケリがついたので、今回はついに技術的な話にはいっていきます。
「ブロックチェーン」です。
皆さん言葉は聞いたことあるでしょう。ブロックチェーンをやりますよ。
ブロックチェーンとは
さあブロックチェーンです。ブロックチェーンってなんでしょうか。
ブロックチェーンとは、分散台帳を実現するデータ管理方式です。難しい言い回しですね。
これまで、「分散台帳っていうのがあれば便利」という話をしてきました。
しかしその実装、つまり、「分散台帳ってどうやって作ればいいの?」というのはあまり答えてきませんでした。
ブロックチェーンは、分散台帳を作る方法の一つです。
そして、ビットコインはブロックチェーンを使った分散台帳の実物です。
別の例を交えて説明しましょう。下の図を見て下さい。
「空を飛ぶ」という概念を実現する方法の一つが「ジェットエンジン」で、その実例が「ボーイング787」です。
同じように、「分散台帳」という概念を実現する方法の一つが「ブロックチェーン」で、その実例が「ビットコイン」です。
ブロックチェーンは「やりかたの一つ」でしかなくて、ビットコインもまた「実例の一つ」でしかないわけです。
さて、ブロックチェーンとはどういう「やりかた」なんでしょうか。
「台帳」という言葉を一旦忘れる
ブロックチェーンは分散台帳です。より正確に言えばブロックチェーンを使えば分散台帳を実現できます。
台帳と聞いてどういうのを思い浮かべるでしょうか。
こういうのですね。
はい、違います。
正解はこうです。なお、左側の灰色の列はわかりやすくするために書いているだけで、実際のデータには載りません。だって他の情報から求められるので。
わっかりにくい形をしてますね。少しずつ見ていきましょう。
ちなみに「0.8枚」などという中途半端な額が出てますが、これはビットコインの最小単位が「1枚」ではなく「0.00000001枚」なので問題ないです。ドルの最小単位が1ドルではなくて0.01ドル(=1セント)なのと同じです。
取引の記録がずらっと並んでいる
たとえばAさんの残高が知りたいとします。
ブロックチェーンには実は「Aさんの残高」という項目はありません。無いんです。
そのかわり、Aさんが行った取引(トランザクション)の情報が全て書いてあります。
Aさんがビットコインの世界に足を踏み入れたその瞬間から、イチから全部です。
なので、「理論上は、全部の取引の結果を足したり引いたりすれば残高がわかる」わけです。
バスの乗車人数のクイズに似ていますね。
「バス停Aで3人乗って、バス停Bで5人乗って、バス停Cで2人降りて5人乗って、バス停Dで1人降りました。今バスにいるのは何人?」みたいな感じです。
たかが残高出すのにそんな計算するヤツがいるでしょうか。
ブロックチェーンはマジでそれをやります。全ての取引の結果を足したり引いたりして残高を出します。
もちろん、実際にやるのはコンピュータですし、上記の形じゃ使いづらいので別の形に書き直したデータベースを別に持っていますが。
自分から自分に送金してない?
上の表をよく見てみましょう。自分から自分に送金しているトランザクションがいくつかあることがわかりますか?
これは、ブロックチェーンが「未使用トランザクション」と「使用済トランザクション」を厳密に分けて管理するからです。
「1枚もらったトランザクション」があるときに、「トランザクションの1部分だけ使う」というのはできないんです。
なので、「0.8枚は相手に渡して、0.2枚を自分から自分に送り直す」という風に、きちんと前のトランザクションでもらった額を使い切る必要があります。
ちなみに、「複数の少額トランザクションを束ねて大金を送る」とかいうのもできます。
「ブロック」って単位は何?
ブロックチェーンにはトランザクションのデータがずらっと並んでいる。
トランザクションは、お金を送りたい本人が作ります。
……「ブロック」って単位、いらなくないですか?
「トランザクションチェーン」とかで良いのでは?
いいえ、必要です。
なぜなら、「この取引がビットコインの世界で承認されましたよ」という証拠が必要だからです。
ビットコインはP2Pネットワーク上でやり取りされます。なので、一度データを送信した程度ではどこかで通信が途切れるかもしれないんですね。
「ブロック」に載ったトランザクションは「承認された」とみなされます。
より正確には、「ブロックに載って、十分に長い後続ブロックが繋がったトランザクション」が承認されたとみなされます。トランザクションだけでなく、ブロック自体も承認されない可能性があるからです。
つまり、「AさんからBさんにビットコインを送る」というのは、より細かく言えば以下の手順を踏みます。
- Bさんのアドレス宛にお金を送るトランザクションを作り、Aさんの秘密鍵で署名する
- 上記のトランザクションを、ネットワーク上に流す
- しばらく待つ
- ネットワークから流れてきたブロックの中に、自分の書いたトランザクションが含まれていることを確認する
- さらにしばらく待つ
- さっきのブロックの後ろに別のブロックが繋がっていることを確認する
- 取引成立!!
……長いですね。でも、きちんと待たないと「取引したつもりがビットコインのネットワーク上では認められなかった」なんてことになるかもしれません。
トランザクションを送信したはずなのにブロックに乗らなかった場合、取引不成立としてもういちどやり直す必要があります。
「ブロック」って誰が作るの?
さっきの例では待っていればブロックが送られてきました。実際、待ってればどんどん送られてきます。
じゃあ誰がブロックを作っているんでしょうか。銀行?開発者?いいえ、違います。参加者のうちの誰かです。
だって、決まった誰かがブロックを作っていたら、その人がやりたい放題になってしまうでしょう?
例えば自分がキライな人のトランザクションを無視したり、ショバ代を払わないとトランザクションを受け入れないことだって出来るでしょう。
なので、参加者の中からランダムで一人選ばれて、ブロックを作る権利を得ます。
ランダムで選ぶ?誰がそのランダムを決めるの?誰かがサイコロを振るの?
違います。マイニングです。
皆さん好きですねマイニング。お金が儲かるやつです。
「ブロックを作る権利を得ること」をマイニングと呼びます。
「マイニング」って?
ちなみにマイニング(採掘)はビットコイン用語で、他の仮想通貨では様々な呼び方をします。
マイニングに関わるPoWを始めとしたコンセンサスアルゴリズムについてはまた別の機会に詳しく話すことにして、今はビットコインに焦点を置きます。
マイニングは具体的には「ハッシュ値が特定の値以下になるようなnonceを探す」というものですが、詳細は割愛です。
とにかくマイニングという競争が1ブロックごとに行われて、そのブロックの勝者がブロックを生成する権利を得ます。
ブロックを生成する人に選ばれると何が嬉しいんでしょうか。ご存知ですね。お金が貰えるからです。
ブロックを生成すると、そのブロックで発生する新規ビットコインを得ることができます。
んー、難しいですね。「ビットコインが発生する」というのはどういうことでしょうか。
実はなんてことはない、そういうルールだからそうなっているというだけです。
例えばジャンケンをしたとしましょう。ジャンケンに勝ったら1点です。
……ジャンケンに勝ったときにもらえる1点はどこから来たと思いますか?
別にどこからも来ませんね?「そういうルールだから、ジャンケンに勝ったら1点」。ですよね。
ビットコインも同じです。「ブロックを作ったらビットコインげっと」というルールだから、ビットコインがもらえます。
参加者は全員、そのルールで納得しています。
なお、上の表で各ブロックの一番上にある署名などが「-」になっているトランザクションが、ブロック報酬です。
このトランザクションのことを「コインベーストランザクション」と言います。
ブロック作成者は、コインベーストランザクションを自分のアドレス宛に作成して良い、というルールなわけです。
ブロックの分岐について
ブロックチェーンはたまに分岐します。
たとえば、偶然にも同じタイミングでマイニングに成功した人が出た場合に、同じ番号のブロックが二重に現れます。このような場合、参加者はどちらか片方のブロックのみを信じます。ここにもルールがありますが私も詳しくないので割愛させてください。
そしてさらに次のブロック、次の次のブロックを生成していきます。最終的により長いチェーンが繋がったブロックがホンモノとします。
偶然以外にも、ブロックチェーンが分岐することがあります。わざと分岐させるケースです。これを「フォーク」といいます。
……前回は違う言葉で「フォーク」を説明した気がしますね。「通貨のルールを変えることがフォークだ」と言いました。
実は同じイミです。
仮想通貨は、様々な事情で様々なバージョンアップをします。単にソフトウェアのバグ修正であればフォークする必要は無いですが、通貨のルールを変えるような変更をした場合、その時点で過去のブロックと互換性がなくなります。
しかし仮想通貨は開発者でなく参加者のモノです。開発者が「新しいルールを作った」と言っても、前のルールのまま使い続ける人たちが居ます。
すると、「前のルールのままのビットコインがいい派閥」と「新しいルールのビットコインがいい派閥」に別れます。
そしてそれぞれの間では通信が行われなくなり、仮想通貨が分裂して別のルールの2つの通貨になります。これがフォーク(ハードフォーク)です。
ハードフォークにはいくつかの段階が必要です。
- どんなルールに変えるのか
- どのブロックからルールを変えるか
- 新ルールに対応したソフトウェアは用意されているか
などを明確にした上で、「ちゃんと参加者が着いてくるか」を見極めてからでないと、「ルールは変えたけど参加者がぜんぜんいない…」となることもしばしばです。
ちなみにビットコインのように巨大なネットワークを形成している仮想通貨ではハードフォークに対して強烈な反発があることが多く、ほとんどの場合「前のルール」の方が多く支持されますが、いわゆる「草コイン」では仕様変更は「より良い仮想通貨になるためのバージョンアップ」であり、ほとんどの場合「新しいルール」が支持されます。
ブロックチェーンのまとめ
かなりとっ散らかってしまいましたが、ブロックチェーンがどういうものかイメージできたでしょうか。
マイニングという方法でブロック生成者をランダムに選出し通貨の独占状態を防ぐとともに、ユーザがビットコインという仕組みに参加するモチベーションを維持させているわけです。
ここまでで、ビットコインに関する主だった技術については説明ができたかと思います。
しかしビットコインだけが仮想通貨でなく、ビットコインにはいくつもの問題点があります。
それらについて次回説明…する気力があれば。
では。
(追記)続きできました。