ブロックチェーンの仕組みビットコインのマイニングとはどのような作業なのか説明します。Workマイニングとはマイニングとは、ごく簡単に言うと、台帳を最新の状態に更新する作業のことを言います。台帳というのはブロックチェーンのことです。ブロックと呼ばれるトランザクションデータ(送金情報)の塊をブロックチェーンに繋ぐ作業がマイニングです。ブロックをブロックチェーンに繋ぐことで、そのブロックに取り込まれたトランザクションは承認され(台帳に書き込まれ)、送金が完了したことになります。新しいブロックをつなげた人(マイニングに成功した人)は、報酬として新たに発行されたビットコインをもらえます。作業をした結果新しいビットコインが手に入るのを、鉱山に眠っている金を掘り出す様に例えて、マイニング(採掘)と呼ばれています。参考ビットコインの発行限度額と半減期についてマイニングを行っているノード(コンピュータ)のことをマイナーと呼びます。マイナーになるのに特別な資格もなにも要りません。ネットワークに繋いでマイニング用のソフトウェアを走らせれば誰でもマイニングを行うことができます。マイナーは、報酬をもらうべく新しいブロックを次々と繋げていきます。マイナーたちの作業のおかげでビットコインの送金はどんどん承認されていきます。マイニングは以下のような流れで行われます。トランザクションの正しさを確認するトランザクションをまとめあげてブロックを作るブロックをつなげる1つずつ具体的に何をするのか見ていきましょう。トランザクションの正しさを確認するビットコインにおける送金は、そのビットコインを持つ本人がトランザクションを作成して、ネットワーク(マイナー)へと送るところから始まります。1BTC]と言った送金情報のことです。参考トランザクションと残高計算の仕組みAが送り主である送金トランザクションは、Aにしか作ることができません。勝手に誰かに自分のビットコインを送金されたらたまったもんじゃありません。正確には、Aを送り主とするトランザクションを作るにはAだけが知る秘密鍵を使って署名をする必要があります。その秘密鍵を使って、「このトランザクションは間違いなく私が作ったものです」と電子署名をするわけです。作成されたトランザクションが本人が作った正しいものであるかどうかは、この秘密鍵の仕組みのおかげで一目瞭然です。秘密鍵と公開鍵は何らかのデータを暗号化→復号する為に使います。秘密鍵によって暗号化されたデータはそのペアとなる公開鍵でしか復号できません。逆に公開鍵で暗号化したデータはそのペアとなる秘密鍵でしか複合できません。秘密鍵を本人が誰にも教えず管理できていさえすれば、この特性を使って本人確認(電子署名)を行うことができます。秘密鍵Aを知る人が、「あいうえお」という文字列を秘密鍵Aで暗号化したら「kc2g1dv7a」になったとしましょう。それを通信相手に伝えます。『「あいうえお」を僕の秘密鍵で暗号化したら「kc2g1dv7a」になったよ。その「kc2g1dv7a」を、秘密鍵Aとペアになった公開鍵Aで復号して、もし「あいうえお」になれば、送り主が秘密鍵Aを知っていることが証明されます。※この本人確認の仕組みは、電子署名と呼ばれています。送り主は、トランザクションに電子署名をして、それをP2Pネットワークへ流します。それを受け取ったマイナーたちは、そのトランザクションがもし偽造されたもの(A以外の者がAのビットコインを送金しようとしている)なら、不正なトランザクションとして却下します。その送信元として指定されているビットコインが既に使われているものであったり、金額的に辻褄の合わないものであった場合も、不正なトランザクションとして却下します。人間の目によって確認するわけではなく、不正なトランザクションを弾き出すアルゴリズムがマイナーには備わっています。トランザクションを束ねてブロックを作るマイナーの元には大量のトランザクションが次々と送られてきます。それを1つ1つ上述したように不正なものがないかチェックします。正しいと認められたトランザクションを束にして、ブロックと呼ばれるデータの塊を作ります。トランザクションと残高計算の仕組みで説明したように、トランザクションは鎖のように繋がりあった構造をしていますが、マイナーがブロックを作る際はトランザクションの繋がりを意識する必要はありません。それぞれのトランザクションには手数料が設定されており、マイニングに成功すればそれを全部もらうことができるので、マイナーは普通、手数料が高いトランザクションを優先的に選んでブロックを作ります。※ブロックサイズの上限は1MBと決められており、その範囲内で自由にトランザクションを選択できます。トランザクションのサイズによって、取り込める数は大きく変わってきますが、だいたい1000個から2000個程度のトランザクションを束(トランザクションリスト)にして、ブロックが作られます。ブロックにはトランザクションリストの他に、ブロックヘッダーと呼ばれるデータ領域があります。ブロックヘッダーには、そのブロックのメタデータがいくつか格納されています。Hashというデータがあります。Hashとは、簡単に言うと、どのブロックの後ろに繋げるのかを指定する為の項目です。Hashは直訳すると「一つ前のブロックハッシュ」という意味になります。各ブロックは、ブロックハッシュと呼ばれる識別子を持っています。ブロックハッシュはそのブロックのブロックヘッダー部分をハッシュ化した値になっています。※ハッシュについてよく知らない人は、ビットコインの説明によく出てくるハッシュ(Hash)って何?を先に読んでみて下さい。Hashに一番新しいブロックのブロックハッシュを指定することで、結果的にそのブロックはブロックチェーンの最後尾に追加される形で繋がれることになります。この仕組みによって、全てのブロックは鎖で繋がったような構造になります。これがブロックチェーンと呼ばれる所以です。ブロックハッシュは、ブロック全体ではなく、ブロックヘッダー部分をハッシュ化した値なので、トランザクションリストのデータはブロックハッシュの生成には直接関わっていません。ブロックヘッダーに書かれているメタデータの一つにマークルルートというデータがあり、マークルルートとは、そのブロック内のトランザクションリストの全てをハッシュ化した値になっています。ブロックヘッダー内にマークルルートの値を持つということは、ブロックヘッダーにトランザクションリストの情報も含まれることになります。間接的にはトランザクションリストもブロックハッシュの生成に関わっていることになります。Hashで指定して新しいブロックを作ったわけですが、作ったからと言って勝手に繋ぐわけにはいきません。それぞれのマイナー(ノードサーバー)は、自分の環境下にブロックチェーンデータを持っています。そこにそれぞれが勝手にブロックをつないで行ってしまえば、ブロックチェーンのデータは全然違うものになってしまいます。中身がバラバラになってしまっては、分散型データベースとして成立しません。新しいブロックをブロックチェーンに繋げる際には、全員が同じブロックを繋げる必要があるわけです。大前提として、マイナーは競争しています。先にブロックを繋げばビットコインがもらえるんです。協力しあっているわけではありません。誰でもがマイナーになれるので、不正なトランザクションを含むブロックを繋げようとする輩もいるかも知れません。Work(仕事量の証明)と呼ばれる作業です。どんな作業かと言うと、そのブロックのブロックハッシュ(識別子)を見つける作業です。ブロックハッシュとは先述した通り、ブロックヘッダー部分のハッシュ値です。ブロックヘッダーをハッシュ化すればいいわけではありません。実はブロックハッシュにはある条件があります。正しいブロックハッシュと認められるには、先頭から000000・・というように0がいくつか並んでいなければいけないんです。blockchain.infoに載っている486031番目のブロックのデータ↑画像は、blockchain.infoに載っている486031番目のブロックのデータの一部です。1ハッシュというのがこのブロック自体のブロックハッシュです。3次のブロックというのは、このブロックの一つ後ろ(新しい)ブロックのブロックハッシュです。Rootというのは、上述したようにトランザクションリストをハッシュ化した値です。↑このように、ブロックハッシュというのは、00000000・・という風に先頭に0がたくさん並んだものになっています。どんな値でもハッシュ化すると非常にランダムな文字列になるので、こんなハッシュ値になることは滅多にありません。ブロックヘッダーをハッシュ化してこんな値になるなんてことは普通はありえないんです。やってこんな変わったハッシュ値を作るかというと、ブロックヘッダーの中にnonceというメタデータを付け加えるんです。nonceっていうのは別に何の意味も根拠もない値です。テキトーな数字(nonce)をブロックヘッダーのデータフィールドに加えることで、奇跡的に現れる00000000・・というハッシュ値を探すわけです。これは、ひたすら試行錯誤するしかありません。答えに辿り着くコツはありません。テキトーな値をnonceフィールドに放り込んではハッシュ化、放り込んではハッシュ化・・と、マシンパワーをフル動員することで、たまたま00000000・・というハッシュ値が現れるまで繰り返します。※だいたい10分前後で正解が見つかるように、条件(0の続く個数)は自動的に調整されるようになっています。000000・・というブロックハッシュを見つけたらビンゴ!そのブロックは完成です。ブロックを完成させた人は、そのブロックを自分のブロックチェーンに繋ぎ、他のマイナーに向けて「新しいブロックが出来上がったぞー。その報告を受け取ったマイナーは、「ちっ、先を越されたか・・」と舌打ちしながらそのブロックを粗探しします。本当にそのnonceを入れてハッシュ化すれば、00000・・というブロックハッシュになるか?※答えを探すのは大変ですが確かめるのは一瞬です。トランザクションリストに不正なものは混じっていないか?それぞれのマイナーは、そのブロックにケチの付け所がないと確認できたら、そのブロックを正当な物と認めて、自分のブロックチェーンに追加します。マイナーたちは次のブロック作成に取り掛かります。敗北を悔やんでも仕方ありません。前だけを向いてひたすら仕事を繰り返します。トランザクションはどんどん送られてきますから。やって、互いに不正を行っていないか監視し合いながら、マイナーたちの愚直な作業によって、ブロックチェーンはどんどん伸びていきます。ブロックチェーンはたまに枝分かれすることがあります。枝分かれに関しては、ブロックチェーンがフォーク(枝分かれ)するってどういうこと?をご覧ください。キャッシュスポンサーリンクスポンサーリンクこの記事をシェアするtwitterfacebookhatenabookmarklineコメントコメントはありません。ブロックチェーンの仕組み管理人Nobuo仮想通貨に興味があるただの人です。モナコインが好きなのでMonazon.jpを作りました。管理人Nobuo仮想通貨に興味があるただの人です。モナコインが好きなのでMonazon.jpを作りました。navigationarrowuphome。