Bitcoinの仕組み
ブロックチェーン技術の中でも本記事ではbitcoinの仕組みに焦点をしぼって解説します.
bitcoin のnetwork
まず,bitcoinのwhitepaper(サトシナカモトが書いた仕様書)からbitocoin network が動くステップを紹介します.
(1) 新しいTransaction(取引)が全てのNode(参加者のコンピューター)に発信される.
(2) それぞれのNodeがTransactionsを自分のBlockにまとめる.
(3) それぞれのNodeが”Proof of Work”と呼ばれる問題に取り組む.
(4) Proof of workに成功したNodeが他のNodeにBlockの情報を発信する.
(5)他のNodeはブロックの中のTransactionsがすべて有効であればそのBlockを受け入れ,次のBlockに新しいTransaction(ステップ(1))をまとめる(ステップ(2))
以上がブロックチェーンの全体像です.このように,TransactionsをまとめたBlockがNodeによって連なっていくという構造から「ブロックチェーン」と呼ばれています.
現状ですと,ステップ(2)-(5)のようにBlockをのばすことは我々一般人の持つPCではProof of Workには勝てないため,ビットコインに関わるのは一つ一つのTransactionぐらいかと思われます.
bitcoinの流れでまず理解しなければいけないのは,
・Transaction(取引)がどのようになされるか
・TransactionがどのようにBlockにまとめられるか
・Proof of Workは何か
という三つです.
二つの道具
これらを説明するために二つの道具を用意します.
・Hash生成器:あらゆるデータから一定長のデータ(Hash)を複雑な法則で生成する.同じデータからは同じHashが得られる.Hashから元のデータを当てることは不可能.
・暗号ダイヤル:入力と出力を持つ.まず数値を入れ「秘密の回数」だけ暗号ダイヤルを回す.表示された数字を入力エリアに入れた暗号ダイヤルを人に渡す.渡された人は「公開の回数」だけ暗号ダイヤルを回すと元の数字が表示される.
暗号ダイヤルに関しては詳しく別記事で解説しました.
Transactionとは?
これらの道具を用いてまずは一つ一つのTransactionについて説明します.Transactionは以下のデータからなります.B(ネットワーク上では325752という名前)がAからもらったbitcoinをC(752495という名前)に渡す状況を考えます.
・入力:どこからもらったbitcoinか(Aが生成したHash)
・出力:だれに渡すbitcoinか(渡す相手Cの名前(752495))
・Hash:入力と出力をまとめて「Hash生成器」にかけたもの.
・Sign:Hashを入力した「暗号ダイヤル」を「秘密の回数」だけ回したときに表示された数字を入力した暗号ダイヤル.
これらをすべてHash生成器にかけたものが次にCがだれかにBitcoinを渡すときの入力になります.
このTransactionはたしかにBが行ったものだという証明のためにsignをつけています.SignはHash値を暗号ダイヤルに入れてBさんが「秘密の回数」だけ回した結果得られた値です.他の人はこのSignが正しいとどのように確認するでしょうか?
BさんのSignを入力した暗号ダイヤルは「Bさんの公開の回数」だけ回すと,Hash値を表示します.ここでBさんの公開鍵はBさんのネットワーク上での名前そのものですのでAさんがBさんにbitcoinを渡したtransactionをみれば誰でもわかります.そして暗号ダイヤルをBさんの名前分だけ回してHashがtransactionに含まれているHashと一致することで,たしかにBさんが秘密の回数だけ回した暗号ダイヤルが添付されていることがわかるのです.
TransactionのBlockへのまとめ方
ブロックにまとめるときはこのTransactionをさらにHash生成器にかけてHashを生成,他のTransactionから生成されたHashと二つ合わせてまたHash生成器にかける.という作業を繰り返し,木構造を作成します.木構造の一番上に位置するのがRoot Hashです.前のBlockのHashと現在のブロックのTransactionをまとめたRoot Hash,そして好きな文字列”Nonce”を合わせたものをBlock Headerといいます.
ここでポイントとなるのはこの”Nonce”です.好きな文字列と言いましたが,条件があります,Block Headerをハッシュ生成器にかけたときに特定の範囲のHashが生成されるようにNonceを見つけなければいけないのです.たとえば「Hashの先頭に0が5つつく」などの条件です.Hash生成器の挙動は複雑であるため,条件を満たすNonceを見つけるには一つずつためすしかありません.かなり大変です.そして勘のいい人なら気づかれたかもしれませんが,この条件を満たす作業こそがProof of Workなのです.一番最初にNonceを見つけた人が「見つけたぞ!」と発信し,他の人はその人がつくったBlockを確認し,そのHashを受け入れるのです.
以上がbitcoinの仕組みの簡単な全体像です.
なぜ,この仕組みでうまくいくのか等につきましては別記事で解説してまいります.