ビットコインBitcoinの仕組みとは?初心者にもわかりやすく解説

Bitcoinは今や誰もが知るところとなり、取引が盛んに行われていますね。

 

Bitcoinは、取引所やウォレットを使って簡単に送金をすることができて便利です。

 

が、Bitcoinがどのような仕組みで動いているのか、具体的なところを知らない、という方も多いのではないでしょうか。

 

今回は、初心者の方にもわかりやすいよう、Bitcoinの内部的な仕組みを噛み砕いて説明していきます。

 

今さら聞けない!Bitcoinの基本を知ろう

まずは、Bitcoinの概念から解説していきます。

 

Bitcoinは多くの仮想通貨の基本形となっているので、Bitcoinの仕組みをしっかり理解することができれば、他の通貨について見るときも理解しやすくなります。

いまさらだけど、Bitcoinってどんなもの?

Bitcoinは、次世代の「通貨」を目指して作られた、1対1で直接価値を移転することを可能にしたサービスです。

 

私たちが使っている「通貨」の特徴とは?

「通貨」は、ある物に一定の価値があるという合意を前提として、価値を移転したり、物やサービスと交換することができます。

 

例えば、私たちが日常的に使っている「円」という通貨。

 

1000円札をお店に持っていけば、1000円分のご飯を食べたり、1000円分の花を買ったりすることができますよね。

 

1000円札自体はただの紙切れのはずですが、誰もが「1000円札には1000円分の価値がある」と思っているので、1000円分の何かと交換することができるわけです。

 

誰かと対面でこういったやり取りをするときには、硬貨や紙幣を直接渡せばいいのですが、遠くの人に価値を移転したいときには少し面倒です。

 

お札を運んでいくにも労力がかかり、それが大量の金額だったり、相手がたくさんいたり、海外の人とやり取りをするなら尚更です。

 

こういうとき、銀行口座に振り込んでやり取りをするのが普通ですよね。

 

「銀行がしっかりと送金をやってくれる」

 

という信頼のもとで、みんなが銀行を使っています。

BitcoinはP2Pで送金できる!銀行のような仲介役がいない

中央集権型システムとブロックチェーンの違いそれを、銀行のような仲介役を介さず、直接個人間(P2P、Peer to Peer)でやり取りできるようにしたのがBitcoinと言えます。

 

Bitcoinは、銀行のような特定の誰か(中央集権者、といったりもします)にあたる人やモノがありません。

 

Bitcoinを使う人全員(正確にはノード。後述します。)が全ての取引をお互いに監視することで、誰かを信頼する必要のない(=トラストレスな)仕組みを実現しているのです。

 

使うなら知っておきたい!Bitcoinの内部構造を詳解

では、どうやって仲介役を立てず、価値の交換をスムーズに行えるようにしているのでしょうか。

 

誰かにハッキングされたり、正常に送金処理を行えなかったりすると、とたんにシステムが機能しなくなってしまいます。

 

普通に使っている分には気がつきませんが、Bitcoinのプログラムにはそうした危険を生じさせないための構造が取り入れられているのです。

 

ここからは、Bitcoinがどのような仕組みで動いているのか、解説していきます。

Bitcoinのブロックチェーンの中身を知ろう

ブロックの中身まず、Bitcoinの基本的な構造について説明します。

 

Bitcoinは、ブロックチェーンの技術を使っています。

 

ブロックチェーンは、分散型台帳技術などと言われています。

 

それはいくつもの取引データを一つのかたまり(ブロック)としてまとめ、それを数珠つなぎのようにつないで一本の長いチェーンのようにしたものです。

 

理論的には、どんなデータでもブロックに含めて管理することができるのですが、Bitcoinでは「誰が誰にどれくらいのBTCを送ったのか」というBTCの取引情報のみを管理する、比較的シンプルな設計となっています。

 

Bitcoinがブロックに含める主なデータには、

 ブロックに含まれる主なデータ

①直前のブロックのハッシュ値

②nonce

③多数の取引情報

があります。

 

以下、それぞれについて詳しく見ていきましょう。

 

①直前のブロックのハッシュ値:ブロックをつなげる「チェーン」の役割

ブロックには、直前のブロックのハッシュ値が含まれています。

 

これは、「直前のブロックはこれですよ」という情報で、ブロックとブロックをつなげる「チェーン」の役割を果たすものです。

 

ハッシュ値とは、任意のデータにハッシュ関数による処理をかけて、元データを象徴する値として表現したものをいいます。

 

ハッシュ値は、同じデータに同じハッシュ関数をかければ、必ず同じハッシュ値になる特性を持っています。

 

逆に、ハッシュ値から元のデータを再現するのはとても難しくなっています。

 

この非対称性を利用して、様々なデータを安全かつ省容量でやり取りすることができるのがハッシュの特徴です。

 ハッシュの特徴

同じデータからは同じハッシュが得られる

少しでも違うデータだと全く違うハッシュが生成される

実際にハッシュ値への変換をやってみると、ハッシュの仕組みを感覚的に理解することができます。

 

実際にデータのハッシュ化をやってみよう

ハッシュ関数のしくみ例えば、県名をハッシュ値に置き換える作業を考えてみましょう。

 

今回は、「県名を漢字1文字ずつローマ字にして、それぞれ頭の英字を数字に変換し、その和を出す」というハッシュ関数を使って処理をかけてみます。

 

「福岡」であれば、<福Fuku 岡Oka>→F=6, O=15→6+15=21となります。

 

この「21」という数字が「福岡」を表すハッシュ値となります。

 

これにより、「福岡」という文字列データを「21」というより少ないデータ量で転送することが可能になります(この例では、2バイト文字×2=4バイトが、1バイト文字×2=2バイトで半分のデータ容量になっています。)。

 

同じように、「東京」はTK→「31」に、「北海道」はHKD→「23」になります。

 

ちなみに、北海道は3文字ですが、ハッシュ値は変わらず2ケタで出力されていますよね。

 

このように、ハッシュ値は、元データのサイズにかかわらず同じサイズの文字列に変換される、という特性も持っています。

 

Bitcoinで使われているハッシュ関数は2つある

しかし、このような簡単なハッシュ関数だと、「衝突」という現象が起こることがあります。

 

例えば、「秋田」というデータのハッシュ値をとると、秋Aki 田Ta→A=1、T=20→1+20=21になります。

 

これだと、福岡も秋田も同じ「21」になってしまうので、「21」というハッシュ値を見ただけでは、元データが福岡なのか秋田なのかの判断がつきません

 

Bitcoinでは、こういったことが起こらないよう、より複雑なハッシュ関数を使用しています。

 

それがSHA-256と、RIPEMD-160というハッシュ関数です。

 

これらは、それぞれ16進数で64文字と40文字のハッシュ値が算出されるものです。

ブロック同士はハッシュでつながっている

Bitcoinは、直前のブロックに格納されているデータをこれらのハッシュ関数にかけて、その結果得られたハッシュ値を次のブロックに格納しています。

 

ハッシュを利用することによって、2つのブロックをつなげることができるわけです。

 

ブロックのハッシュ値を算出するために3つのデータが使われる

Bitcoinでは、ブロックのハッシュ値を算出するために、主に3つのデータが使われています。

 

具体的には、

 

 ブロックのハッシュを作るためのデータ

 

①直前のブロックのハッシュ値

 

②nonce

 

③多数の取引情報をまとめてハッシュ化したRoot Hash

 

を合わせたものにハッシュ関数をかけてハッシュ値を得ます。

 

「Root Hash」とは、多数の取引情報をまとめてハッシュ化したものです。

 

詳しくは後ほど説明していきます。

②nonce

Bitcoinのブロックには、nonceという値が含まれます。

 

nonceは、「number used once」(一度だけ使われる数字)の略語。

 

それ自体には意味のない文字列の並びです。

しかし、たしかにnonce自体に特別な意味はありませんが、Bitcoinのシステムを動かしていく上では欠かせない要素です。

 

Bitcoinでnonceがどういった働きをするかというと、いわゆるマイニングと深い関係があります。

Bitcoinのマイニングってなに?

PoW(プルーフオブワーク)Bitcoinのマイニングといえば、PoW(Proof of Work)というコンセンサスアルゴリズムで動いているのは多くの方がご存知かと思います。

 

PoWは、仕事の証明と訳されることもあり、PCの計算能力(=仕事)によってブロックに含まれているデータ、つまり取引を「正しい」と証明できた者に、報酬を与える仕組みであると説明されます。

 

そして、このマイニングを行う人を「マイナー」といいます。

 

マイナーは、報酬をもらうためにPCを動かして検証作業を行っているわけです。

 

この説明だけを読むと「ふむふむ、なるほど。」と思うわけですが、PoWで行われる検証作業というのは、一つひとつの取引をチェックしている、というわけではありません

「マイニング」の中身は、nonceを探し出す作業!

Bitcoinのマイナーが行っているのは、nonceを探し出す作業です。

先ほども説明したとおり、ブロックのハッシュ値は、

 

①直前のブロックのハッシュ値

②nonce

③多数の取引情報をまとめてハッシュ化したRoot Hash

 

を合わせたデータから算出されます。

 

そして、Bitcoinのプログラムでは、「算出されたハッシュ値の先頭から一定以上の数「0」が連続して並んだハッシュ値を正しいものとする」というルールが定められています

 

このとき、①と③のデータをいじることはできませんが、②nonceは、これ自体に意味があるデータではないので、変えても問題はありません

 

この nonceを変えることで、先頭から「0」が一定数以上並ぶハッシュ値を探し出す作業が、マイニングの中身です。

 

しかも、この作業は全探索・総当たりの方法でなければ行うことができません。

 

それは、ハッシュ関数が、「少しでもデータが違うと全く違うハッシュ値が生成される」という特徴を持っているためです。

 

ハッシュ値の算出に法則性がないので、単純に試行回数を増やすしかないのです。

 

これにより、ブロック生成を誰でも公正に行えます。

 

ただ、単純にマシンパワーがある人のほうが大量に計算をすることができるので、資金力のある企業や団体がPCをたくさん用意してしまえば、個人がこれに対抗することはできないという問題点もあります。

③多数の取引情報

また、ブロックには、ビットコインに欠かせない多数の取引情報が格納されています。

この取引情報の細部を詳しく見てみましょう。

 

取引情報(トランザクション)は<インプット+アウトプット>でできている

ひとつの取引情報(トランザクション)には、

 

①誰から受け取ったBTCを

②誰に向けていくら送るか

 

の2つの情報が入っています。

 

それぞれ、①をインプット、②をアウトプットと呼びます。

 

例えば、一番単純な例で、BさんがCさんに1BTC送る場面を考えてみます。

 

Bさんが送ろうとしている1BTCは、Bさんが以前Aさんから送ってもらった1BTCです。

なので、

(例1)Bさんが、Aさんからもらった1BTCをCさんに送る

トランザクション例1

①AさんからBさんに送られた1BTCを使って

 

②BさんからCさんに1BTC送る

という具合に、取引の情報を構成します。

 

少し変えて、Cさんに0.5BTCだけ送る場合は、

(例2)Bさんが、Aさんからもらった1BTCをCさんに0.5BTCだけ送る

トランザクション例2

①AさんからBさんに送られた1BTCを使って

 

②-1 BさんからCさんに0.5BTC送る

②-2 BさんからBさんに0.5BTC送る

と構成します。

 

②-2のように、自分宛てのアウトプットを別で作らなければいけないのは、インプット部分が1BTCなので、それに合わせるためです。

 

「いや、最初から0.5BTCだけ送信すればいいじゃん」

 

と思われるかもしれませんが、これはBitcoinのシステム上不可能です。(後述します)

 

また、A1さんとA2さんからそれぞれ0.5BTCずつ送ってもらっており、それを合わせてCさんに送る、という場合には、

(例3)Bさんが、A1さんとA2さんからもらった0.5BTCをCさんに送る

トランザクション例3

①-1 A1さんからBさんに送られた0.5BTCと

①-2 A2さんからBさんに送られた0.5BTCを使って

 

②BさんからCさんに1BTC送る

となります。

 

アウトプットのみの特殊なトランザクション「coinbaseトランザクション」

以上のとおり、トランザクションはインプットとアウトプットがセットになっています。

 

しかし、アウトプットのみのトランザクションも一部存在します。

 

それが「coinbaseトランザクション」というもので、マイナーに報酬が支払われるときのトランザクションです。

 

マイナーに報酬を支払う際は、Bitcoinが新たに生み出されるので、「誰からもらった」というインプット情報がなく、「誰に報酬としてBTCを発行した」というアウトプット情報のみになるわけです。

 

したがって、全てのトランザクションは、最初まで遡ると必ずcoinbaseトランザクションになっています。

 

トランザクションは“何を”送っているのか?

トランザクション(Transaction)とは?Bitcoinは仮想通貨とかコインとか言われるため、円やドルと同じように考えがちですが、あくまでデータで、紙幣や硬貨のような実体はありません。

 

それにもかかわらず、実際のお金と同じように送金をすることができるのは、ちょっと不思議な感じもします。

 

ただ、ちょっと考えてみると、例えば銀行のATMでBの口座からCの口座に1万円送金する、というときも、実際に現金が移動しているわけではないのです。

 

銀行の口座預金は、「銀行に対して、○○円分の現金を引き出すよう請求できる権利」を表しています。

 

そして、口座間の送金というのは、「Bが銀行に対して1万円請求できる権利を、Cにつけかえる」ことをしているに過ぎないわけです。

 

これがBitcoinでは、 UTXO(Unspent Transaction Outputs)といって、「あなたには○BTCだけ、Bitcoinを使う”権利”がありますよ」という形で、BTCを使う権利がどれくらいあるかで価値を把握しています。

 

普段、取引所や自分のウォレットに表示されているBTCの保有量は、それまでの取引によって得たUTXOがどれくらいあるかを、過去の取引情報を寄せ集めて計算したものなのです。

 

「BがCに1BTC送金する」というのも、1BTC分のUTXOをBからCに渡している、という表現が正確です。

 

このUTXOは、5000円札を2000円と3000円に分けることができないように、分割不可能となっています。

 

そのため、1BTCのUTXOを使って0.5BTCだけ送信する、というときのようにお釣りが出る場合は、例2のように、そのお釣りの分だけ自分に向けてアウトプットを作らないといけないわけです。

 

多数のトランザクションを効率的に管理!マークルツリーとは?

さて、このような取引情報は、今この瞬間も生成され続けています。

 

多数の取引情報は雑多に格納されているのではなく、 マークルツリー(Merkle tree)という形に整理して格納されています。

 

マークルツリーは、多数のデータを効率的にハッシュ化することで、ひとつの取引の検証のために必要なデータ数を減らすことができる仕組みです。

 

マークルツリー

 

上の図がマークルツリーです。

 

まず、最下段を見てください。Tx0~Tx3は、それぞれ1つのトランザクションです。

 

この図では、4つの取引情報があることになります。

 

その一段上、Hash0~Hash3は、それぞれの取引情報をハッシュ化したものです。

 

さらにその上、Hash01は、Hash0とHash1を掛け合わせてハッシュ化したもので、Hash23も同様です。

 

最後のRoot Hashは、Hash01とHash23を掛け合わせてハッシュ化したものです。

 

このRoot Hashは、先ほどの説明にあったとおり、ブロックのハッシュ値を算出するためにも使われるものです。

 

次に、下の図を見てください。

 

ルートハッシュ

 

この図では、Tx3の取引が改ざんされていないかを検証するには、Root Hash、Hash01、Hash2、Tx3の4つがあれば良いことを表しています。

(例4)Tx3の検証手順

 

①Tx3→Hash3を計算

 

②Hash2+Hash3→Hash23を計算

 

③Hash01+Hash23を計算

 

④Root Hashと③の値を比較

この手順を踏んで、Root Hashと同じ値が出ればTx3は正しいデータであるということがわかるのです。

 

ちなみに、このマークルツリーを作らない場合、Tx3の検証をするには、そのほかの全ての取引情報を要求してブロック全体の検証をしなければならず、検証作業に大きなコストがかかってしまいます。

Bitcoinのブロックの全体像を見てみよう

さて、ここまで説明してきたBitcoinのブロックやトランザクションの構造をまとめて俯瞰してみましょう。

ビットコインのブロックチェーンを俯瞰する

何気なく使っているBitcoinも、その中身はこんな風になっているんです。

Bitcoinが抱える問題と導入された技術とは?

綿密にブロックチェーンの技術を練り上げようとしているBitcoinですが、プログラムにはいくつかの問題点があります。

 

ここからは、Bitcoinの技術的な問題点と、その解決のために導入されている技術について解説していきます。

 

Bitcoinには、大きく分けて2つの問題点があり、実際の運用に際しても送金ができない、取引所がハッキングされるなどして問題となりました。

 

その2つとは、スケーラビリティ問題トランザクション展性問題です。

問題1・送金詰まり・手数料高騰を引き起こす「スケーラビリティ問題」とは?

スケーラビリティ問題とは、トランザクションが増えすぎてBitcoinネットワークが処理しきれなくなり、送金が詰まったり手数料が高騰してしまう問題です。

 

みなさんも一度は耳にしたことがあるのではないでしょうか。

 

Bitcoinは、ブロックサイズが1MBに固定されています

 

そして、ブロックは10分に1つのペースで生成されていきます。

 

そのため、Bitcoinネットワークが処理できる取引数には限界があるのです。

 

ざっくり計算すると、1秒間に7件程度の処理能力しかありません。

 

それ以上のペースで取引が増えると、ブロックに自分のトランザクションが乗らないので、取引の確定が遅れてしまいます。

 

どうしても早く取引を確定させたい人は、手数料を高い料金に設定して優先的にブロックに入れてもらえるようにします。

 

この循環によって、どんどん手数料が高騰してしまうわけです。

 

このスケーラビリティ問題を解決するためには、

 

①ブロックサイズを拡大する

②ブロックの承認スピードを早める

③トランザクションの容量を節約する

④Bitcoinネットワーク外(オフチェーン)で取引を実行する

 

などの解決策が考えられます。

 

①や②は、マイナーの集中化、セキュリティの低下などの問題点があり、Bitcoinには導入されていません。

 

Bitcoinでは、③と④の解決策がとられています(後述)。

 

問題2・二重払いの危険がある「トランザクション展性問題」とは?

もうひとつの問題である、トランザクション展性問題。

 

これは、トランザクションに含まれている情報の一部を書き換えることで、二重支払いか生じてしまうという脆弱性のことです。

 

先ほど、トランザクションの内部構造の話で、インプットとアウトプットの情報が含まれている、と説明しました。

 

これをもう少し細かく見ると、インプットにはscriptSigというコードが、アウトプットにはscriptPubKeyというコードが、それぞれ含まれています。

 

一番単純な例で、BさんがCさんにBTCを送金する場合を考えてみます。

 

 補足:暗号技術の話

Bitcoinが暗号通貨と言われるのは、暗号技術を使っているからです。

 

ここでの暗号技術とは、公開鍵暗号方式と呼ばれる暗号方式のことです。

 

ちなみに、公開鍵暗号方式の逆は共通鍵暗号方式と言われます。

 

共通鍵暗号方式は、ロックをかけるのもあけるのも、同じ鍵を使う方式です。

 

日常で使っている玄関の鍵などは、開けるのも占めるのも同じ鍵で行うので、共通鍵暗号方式の比喩的例としてあげられることがあります。

 

これに対して、公開鍵暗号方式とは、ロックをかけるのとあけるので、別の鍵を使う方式です。

 

2つの鍵のペアのうち片方を公開するので、公開鍵暗号方式と呼ばれます。

 

(公開鍵暗号方式は数学的法則を活用した暗号方式。

興味深い世界ですが、ここでは話が逸れてしまうため割愛します。)

 

公開鍵暗号方式によれば、インターネット上でも情報をセキュアにやり取りすることができるのです。

 

・暗号化してデータを送信

公開鍵暗号方式

 

・送信元の証明(電子署名)

電子署名(デジタル署名)

 

まず、BさんがCさんに送金するために、Bさんの公開鍵のハッシュを使ってロックをかけます

 

このロックのためのコードがscriptPubKeyです。

 

このロックは、次のトランザクションのscriptSigに、scriptPubKeyの公開鍵に対応する秘密鍵による署名がなければならない」というルールで動いており、今回であればCさんの持っている秘密鍵でしか解錠できません

 

これにより、BTCをセキュアに送金することができるわけです。

 

CさんがこのBTCを別の誰かに送金する際には、Cさんの秘密鍵を使ってロックを解除する必要があります。

 

この解除のためのコードがscriptSigにあたります。

 

また、このscriptSigとscriptPubKeyは、トランザクションIDを算出するときにも用いられます

 

トランザクションIDは、トランザクションの情報をハッシュ関数にかけ、ハッシュ値として把握される、トランザクションの識別番号のことです。

 

(例6)Bが、(以前Aから送られた)BTCをCに送るときの処理

 

(まず、Bが、Bの秘密鍵を使ってAから送られたトランザクションを解錠(scriptSig))

 

①BがCの公開鍵ハッシュを使ってB→C送金のトランザクションを作成(scriptPubKey)

 

②このとき、トランザクションIDが作成される

 

③CがBTCを受け取る

 

④Cが別の誰かに送金する際には、Cの秘密鍵解錠(scriptSig)する必要がある

 

ここで思い出して欲しいのは、ハッシュ値は、元データが少しでも異なれば全く別の値になる、という性質です。

 

実は、トランザクションIDを算出するとき(例6の①~②の段階)に、Bitcoinプログラムにとっては意味のない変更を取引情報に加えることによって、全く別のトランザクションIDを生成することができてしまいます

 

(これは、Bitcoinに備わったバグだ、と指摘する人もいます)。

 

イメージとしては、「BからCに1BTC送る」という命令文を、「BからCに001BTC送る」という命令文に書き換える感じです。

 

Bitcoinのプログラムは、どちらも1BTCをBからCに送るものとして認識しますが、両者のハッシュ値、つまりトランザクションIDは全く異なるものになってしまうのです。

 

このとき、Bからは、取引が失敗したように見えますが、実際にはBからCへ1BTCが送金されています

 

そのため、Cは、「まだ支払われていないよ」とBに言って、二重に支払いを要求できてしまいます

 

これがトランザクション展性問題です。

 

解決策1・オフチェーンでのやり取りを可能にする「Lightning Network」

上記2つの問題点を解決するために採用されている技術のひとつが、Lightning Networkです。

 

いわゆるオフチェーンと呼ばれる技術で、取引の一部をブロックチェーンの外で行います

 

ブロックチェーンの上で処理されることをオンチェーン、その逆をオフチェーンと言います。

 

基本的な仕組みとしては、AさんとBさんが、継続的に0.001BTCをやり取りする取引が発生する場合、あらかじめデポジット(プール金)を用意しておき、そのプール金から都度支払いを行います

 

デポジットを管理する場所をペイメントチャンネルということもあります。

 

そして、全てのやり取りが終わったら、最後の結果だけをオンチェーンに記録します。

 

こうすることで、例えば0.001BTC×100回の取引でも、オンチェーンに記録するのは0.1BTCがAからBに移動したという1つの情報のみなので、オンチェーンに記録する取引を大幅に節約することができ、手数料も抑えることができるのです。

 

ただ、これでは2者間での取引に限定されてしまうため、使い道が限定されてしまいます。

 

そこで、仲介者を挟んで、直接ペイメントチャンネルを開いていない人同士でもオフチェーン取引ができるような仕組みが考えられました。

 

例えば、AさんがCさんに送金したいが、ペイメントチャンネルは開いていない状態を考えます。

 

このとき、AさんとBさん、BさんとCさんがそれぞれのペイメントチャンネルを開設していれば、A→B→Cというやり取りによって、AさんとCさんの間で取引を成立させることができます。

 

AさんがCさんに1BTCを送る場合の、具体的な仕組みは以下の通り。

 

(例5)A←→B、B←→Cのペイメントチャンネルがあり、A→Cに送金する

 

①Cが秘密鍵Rを作り、そのハッシュ値Hを得る。Cは、ハッシュ値HをAに送信する。

 

②Aは、AからBへ0.1BTC送金する取引(取引AB)を作る。このとき、

Bの署名と秘密鍵R

・5日以内に取引が終わらない場合は、Aの署名

がなければ、取引ABから0.1BTCを取り出すことができない。

 

③Bは、BからCへ0.1BTC送金する取引(取引BC)を作る。このとき、

Cの署名と秘密鍵R

・3日以内に取引が終わらない場合は、Bの署名

がなければ、取引BCから0.1BTCを取り出すことができない。

 

④Cは秘密鍵Rを持っているので、自分の署名をつけて、取引BCから0.1BTCを取り出す

 

⑤Cが、秘密鍵RをBに送る

 

⑥Bが、秘密鍵Rと自分の署名で取引ABから0.1BTCを取り出す

 

⑦Bが、秘密鍵RをAに送る

 

⑧Aは、秘密鍵Rを自分でハッシュ化し、①でCから送られたハッシュ値Hと同じか確認する。

 

⑨同じであれば、全ての取引が正常に行われたと確認できるので、取引を終了する。

 

これがLightning Networkです。

 

この仕組みでは、誰かが誰かを信用する必要がないので、オフチェーンでありながら、Bitcoinの特徴の一つであるトラストレスな取引を実現できるのです。

 

ただし、トランザクション展性の問題があるので、誰かが途中でトランザクションIDを書き換えて、送金すべきBTCを持ち逃げする危険性があります。

 

解決策2・トランザクションの容量を節約する「SegWit」

このトランザクション展性問題を防ぐための技術がSegWitです。

 

SegWitは、先ほど紹介したscriptSigに使う署名データを、トランザクションではなく、witnessという別領域に記録させる技術です。

 

署名データを外出しにすることで、トランザクションIDを作るためのハッシュ計算から除くことができるので、トランザクションIDの改ざんを防ぐことができます

 

トランザクション展性問題を解決するための技術として、すでにBitcoinに実装済みです。

 

これにより、Lightning Networkにより仲介者を経由しても、途中で取引内容が改ざんされる危険性もありません

 

また、取引データ自体も圧縮されるので、ブロックサイズを変えずにより多くのトランザクションを処理できるようになりました(とはいえ、従来の約2倍に過ぎません)。

 

他にも色々な技術導入が検討されている

Bitcoinに導入されている技術で特に有名なものは上述の通りですが、その他にも色々な技術導入が検討されています。

 

詳述は避けますが、概略だけご紹介します。

取引所間の即時決済を可能にする「Liquid」

Liquidはサイドチェーン技術のひとつで、取引所間での即時決済を行う技術です。

 

サイドチェーンとは、メインチェーンから分岐させた小チェーン上でトランザクション処理を行って、メインチェーンにかかる負担を減らす方法、そのチェーン自体のことを言います。

 

現在、Bitcoinのやり取りは、取引所間でのものが圧倒的に多数を占めている一方、取引所の数は限られています。

 

そのため、取引所間での送金をサイドチェーンに移すことで、メインチェーンの負担を減らそうとしているのです。

 

Liquid自体の発表は2014年にさかのぼりますが、本格導入は今年中にされるだろうと期待されています。

 

Bitcoinにスマートコントラクトを実装する「RSK」

こちらもサイドチェーンの技術のひとつですが、EthereumのようなスマートコントラクトをBitcoinのサイドチェーンで実現しようというプロジェクトです。

 

Bitcoin自体はチューリング不完全な言語で書かれており、スマートコントラクトの機能はありません。

 

しかし、サイドチェーンであれば独自の言語、仮想マシンを用意することができるので、スマートコントラクトの機能を備え、チューリング完全な言語でプログラムされたサイドチェーンを構築しようとしています。

 

まとめ:Bitcoinはこれから更に発展していく!

Bitcoinの内部的な仕組みと、導入されている技術について解説しました。

 

こうしてみると、Bitcoinはまだまだ発展途上の技術であり、これからの成長によって、より私たちに身近な“通貨”になる可能性を秘めていると言えるでしょう。

 

インターネットは、もともと軍事利用から始まりました。

 

しかし、数々のソリューションが組み合わさったことで、いまや誰もがスマホやPCを通じてインターネットを利用するようになりました。

 

Bitcoinをはじめとした暗号通貨も、これからの技術革新によって、誰もが使うような存在になり得るのではないでしょうか。

 

最後までお読みいただき、ありがとうございました。

 

日本の仮想通貨取引所と手数料一覧

横にスライドすると手数料が一瞬で比較できます。

国内仮想通貨取引所 取扱通貨 BTC
取引手数料
BTC
最低取引単位
即時入金 即時入金
手数料
日本円
出金手数料
BTC
送金手数料
販売所 盗難補償

ザイフ公式サイトはこちら

btc,bch,eth
etc,nem,mona
-0.05%〜-0.01% 0.0001btc 無料 300〜756円 0.0005btc

ビットフライヤー公式サイトはこちら

btc,bch,eth,
etc,ltc,mona,
lisk
0.01〜0.15% 0.001btc 324円 216〜756円 0.0004btc

コインチェック公式サイトはこちら

btc,bch,eth,
etc,lisk,fct,xmr,rep,

xrp,zec,xem,ltc,
dash

無料 0.001btc ・3万円未満:756円

・50万円未満:1,000円

・それ以上:入金額×0.108%+486円

400円 0.001btc

GMOコイン公式サイトはこちら

btc,bch,eth,
ltc,xrp
無料 0.0001btc 無料 無料 無料

DMM Bitcoin公式サイトはこちら

btc,bch,eth,
etc,xrp,xem,ltc
無料  0.001btc 無料 無料 無料

bitbank公式サイトはこちら

btc,bch,eth,
etc,ltc,xrp,
mona,
無料 0.0001btc 無料 540〜756円 0.001btc

Bit Trade公式サイトはこちら

btc,bch,eth,
ltc,xrp,mona,
0.20% 0.0001btc 無料 648円 0.0005btc

QUOINEX公式サイトはこちら

btc,bch,eth, 無料 0.001btc 無料 500円+手数料 無料

Bitpoint公式サイトはこちら

btc,bch,eth, 無料 0.0001btc 無料 顧客負担 無料

みんなのビットコイン公式サイトはこちら

btc,bch,eth, 無料 0.01btc 無料 500円 無料

横にスクロールできます

 

【海外の仮想通貨取引所と手数料一覧】

横にスライドすると手数料が一瞬で比較できます。

海外仮想通貨取引所 取扱通貨 通貨取引手数料 即時入金 即時入金
手数料
日本円
出金手数料
BTC
送金手数料
販売所 盗難補償

Binance公式サイトはこちら

100種類程度 0.1% 対応無し 0.001btc

kucoin公式サイトはこちら

70種類程度 0.1% 対応無し 0.0005btc

coinexchange公式サイトはこちら

草コインの宝庫
数百種類
0.15% 対応無し 0.001btc

Yobit公式サイトはこちら

500以上 0.2% 対応無し 0.0005btc
ポロニエックス
Poloniex詳細→
70種類弱 0.15~0.25% 対応無し 0.0001btc

海外の取引所は入出金という概念はなく、国内の取引所に送金するので送金手数料が問題になります。

横にスクロールできます。

この記事が気に入ったら
フォローしよう

最新情報をお届けします

Twitterでフォローしよう

おすすめの記事