それではいよいよ、暗号通貨のコア技術である「ブロックチェイン」についてみていきましょう。
非中央集権的な電子マネーの大きな困難の一つであった多重支払を確実に検知するにはどうすればいいでしょうか?
基本的なアイディアは単純で、トランザクションに順序をつけるというものです。 トランザクションに順序をつけたうえで過去のトランザクションに矛盾するもの(多重支払トランザクション)がやってきた場合には単純にそれを拒否して破棄してしまえばよいのです。 そしてこの順序情報をネットワーク全体で共有すれば、多重支払を確実に検知し除去することができます。
ところがトランザクション単位でいちいち順序付けをしていると、取引量が増えた時に大変なことになってしまいます。 そこでBitcoinでは一定期間(約10分)に発生したトランザクションを一纏めにすることで効率化をはかっています。 このトランザクションを一纏めにしたもののことを「ブロック」といいます。
そしてこのブロックに対して順序付けをすればよいのです。 順序付けを行うとブロック達が次々と鎖状につながり伸びていくことから、この構造のことを「ブロックチェイン」と呼びます。
ブロックチェインが具体的にどのように構成されているのかを示したのが本スライドです。
図のように複数のトランザクションを定期的(例えばBitcoinなら10分、Monacoinなら90秒)にブロックという形で一纏めにし、 それを鎖状につなげて順序化することで多重支払を確実に検知することができるのです。
ブロックの内部ではトランザクション同士の順序付けは行わないため、多重支払などの矛盾のあるトランザクションが同時にブロックに入ってしまうのではないか、 と思われる方もいらっしゃるかもしれませんが、過去のブロックに対する多重支払のチェックに加えて同一ブロック内に対する多重支払のチェックも行っていますので、 そういった心配はありません。 多重支払のトランザクションがブロックを作成するタイミングで同時にやってきてしまった場合には、 採掘者の裁量によって[1]どちらか一方のトランザクションのみを取り入れることとされています。
なお、一番初めのブロックから数えて何番目につながったブロックなのかを、積み上がったブロックの高さに例えて「ブロック高(block height)」といいます。
さて、暗号通貨はオープンな(誰でも自由に参加できる)ネットワークですから、いつ誰がブロックを生成するのかは分かりません。 すると異なるノード(参加者)が同時にブロックを生成してしまうことがあり得るわけですが、 そういう事態が発生してしまうとブロックチェインが「分岐」してしまいます。 図では異なるノードがたまたま同時に3番目のブロックを作成してしまった様子を表しています。
こういった場合には、どのブランチ(分岐した枝)を採用するのか(どちらを捨てるのか)を決めなければいけません。
様々な取捨選択ルールが考えられると思いますが、Bitcoinでは最も長いブランチ[2]を選択するようにしています。
コメント