とってもやさしいビットコイン

とってもやさしいビットコイン

ビットコインの知識が全くない初心者の方でもビットコインがどういうものなのか分かりやすく理解できるブログを目指してます。

ビットコインシステムで伝播するトランザクションの仕組み

f:id:jyutakugyoseiku:20170628085826p:plain

 

サーバーの無いビットコインは全ての参加者(ノード)が対等な立場でブロックチェーンを保存し更新情報を共有します。サーバーが無いので取引データ(トランザクション)は個々のノードが伝播する事によって共通のデータ群を作り上げなくてはいけません。トランザクションがそれぞれのノードへ伝わる仕組みとそれによってどのような事が起こるかを初心者の方にも分かりやすく解説をしていきたいと思います。

 

 

 bitFlyer ビットコインを始めるなら安心・安全な取引所で

 

サーバーとP2P

 

まず、ビットコインの仕組みを理解する上では「サーバーネットワーク」と「P2Pネットワーク(分散型ネットワーク)」の違いを理解しなくてはいけません。

 

f:id:jyutakugyoseiku:20170628080251p:plain

 

上の図のようなイメージでご理解いただければと思います。

「サーバー型」では情報はサーバーに集められて正しい情報が参加者に配信されます。P2Pネットワークではそれぞれのノード(ノードとは)がいくつかの他のノードに接続する事により情報が共有されます。

 

「Winny」などのファイル共有ソフトをご存知の方もいらっしゃるかと思います。WinnyはP2Pネットワークでファイルを共有するソフトウェアです。それぞれの情報(ファイル)をサーバーを介さずに接続されたノードへ送受信するのです。

 

ビットコインも同様にP2Pネットワークを使用しており、全てのノードが対等で権力のあるノードは存在しません。このようなシステムで共通のブロックチェーン(ビットコインの取引帳簿。ブロックチェーンとは)を作り上げ無くてはなりません。

 

トランザクションが伝播

 

トランザクションとは「取引データ」の事です。P2Pネットワークで全体に自身の作ったトランザクションを行きわたらせなければなりません。ビットコインのブロックチェーンは10分に1回ネットワークの中の誰かが帳簿を作りその帳簿に記載されている取引が成立していきます。

 

もし誰にもトランザクションを教える事なく帳簿に記載したいとなれば自身で10分に1度の帳簿作成チャンスを確実にものにしなければいつになってもそのトランザクションは帳簿に載る事はありません。

 

利用者目線で考えればトランザクション(つまり送信した、受信したという結果)は一刻も早く全体に認められ取引を完了したいものです。そうなれば自分1人でトランザクションを持っているよりも全体に示していた方がいい事は自明の理です。

 

その為に自分が作成したトランザクションを接続しているノードに伝える事が必要です。

 

f:id:jyutakugyoseiku:20170628081942p:plain

 

一つのノードが全てのノードに接続されているわけではありません。一つのノードはいくつかのノードに接続され、そのノードはまた他のいくつかのノードに接続される事によって全体が繋がっている状態になります。

 

ですのでまずトランザクションは隣り合う(地理的にではなくネットワーク的に)ノードへ伝えられます(上図赤矢印)。

 

f:id:jyutakugyoseiku:20170628082353p:plain

 

そしてトランザクションを受けたノードは他の隣り合うノードへそのトランザクションを伝えます(上図青矢印)。このようにして全体へとトランザクションは伝播していくのです。


スポンサー

 

 

既知のトランザクション

 

伝播をする過程で同じトランザクションを既に受け取っている事があります。隣り合うノードへそれぞれがトランザクションを伝えるので接続されたノードAから受け取ったトランザクションは既にノードBから先に受け取っている、という状態です。

 

f:id:jyutakugyoseiku:20170628083016p:plain

 

上図の紫色の丸枠のようにトランザクションのかぶりが起きる事があります。

 

この場合は「後から受け取ったトランザクション」は破棄されます。個々のノードは「トランザクションプール(ビットコインのトランザクションプールとは)」を持っていて自分が保管しているトランザクションを確認する事ができます。

 

それを確認する事で既知のトランザクションについては破棄されるようになっているのです。これにより一つのノード内で複数の同じトランザクションを保管する事が無くなります。

 

二重支払い防止

 

また、個々のノードはそのトランザクションが正当なものかどうかも判断します。正当かどうか、と言うのは「A⇒B 1BTC」というトランザクションであれば「Aは1BTC持っているか」という判断です。これはビットコインの二重支払いも判断する事になります。(ビットコインの二重支払いとは

 

もし同じビットコインを「A⇒B」「A⇒C」とAが送ろうとしていたとします。その時に両方のトランザクションを受け取ったノードは二重支払いをAがしようとしていると理解できるのでどちらかを破棄します。

 

どちらを破棄するかと言えば「後に受け取ったトランザクション」です。

 

先に「A⇒B」を受け取っていれば「A⇒C」を破棄しますし逆であれば「A⇒B」を破棄します。そこに「BとCどちらが本当の支払か」という概念は存在せずに早い順で処理されるのです。

 

しかし、先ほど述べたようにトランザクションは全体に一気に行きわたるのではなく順番に伝播していきます。その為全体に行きわたるまでトランザクション毎に時間がかかります。

 

そうなれば「A⇒B」「A⇒C」どちらを先に受け取るかでトランザクションプールに保存するトランザクションはノードで違いが出てきます。

つまり「A⇒B」を先に受け取り「A⇒C」を破棄するノードと「A⇒C」を先に受け取り「A⇒B」を破棄するノードが生まれる、という事です。

 

このようにノードはそれぞれ独自のトランザクションプールを参照する事によって成り立ち、全体が全く同じトランザクションを処理する訳ではなくなる事がしばし起こります。

 

このような時はブロックチェーンに先に記載されたトランザクションが優先されます。「A⇒B」を保管していたのにも関わらず他のノードがブロックチェーンに先に「A⇒C」を記載したとします。

 

そうなれば「A⇒B」を保管していたノードは「A⇒Bをブロックチェーンに記載すると二重支払いになってしまう」と考えてトランザクションプールから「A⇒B」を削除するのです。

 

このように一時トランザクションプールは全体で考えればバラバラになってしまうのですが、長期的に見れば一つのだいたい同じトランザクションを全体のノードは処理をしていく事になるのです。

 

まとめ

 

ビットコインのトランザクションはP2Pネットワークなので全体に行きわたる為に時間がかかります。それによって多少の誤差がノード間で生じますが段々と同じ方向へ全体が向かっていく仕組みになっております。このようにシステムのルールを使う事でサーバーが無くても稼働するシステムが形成されているのです。

 

また、このようなシステムを知る事はブロックチェーンや他の仮想通貨を学ぶ際の糧に必ずなります。ビットコインを知ればブロックチェーンや他の仮想通貨の事を知れる、と言うくらいビットコインは基礎なのです。是非情報を収集して様々な場面で役立たせていただければと思います!

 

<関連記事>

ビットコインの合意形成アルゴリズム①

ビットコインのフルノードとは?

 

 bitFlyer ビットコインを始めるなら安心・安全な取引所で

最初に手に取るビットコインの教科書

最初に手に取るビットコインの教科書