マイニングとはProof of Work(PoW)を用いて新たなブロックを生成し、その報酬としてビットコインを手に入れる行為である[51][52]。
ビットコインの送金者は、金額や受取人などの取引情報(トランザクション)を、ネットワークを構成するマイナー(miner, 採掘者)と呼ばれるノードにブロードキャスト(転送)する。マイナーは、受け取った取引情報をブロックという形でまとめ、ブロックチェーンの末尾に追加する。ただし、新しいブロックを記録するためには計算量の大きな問題を解く必要がある。マイナーたちは競ってその問題を解き、最初にブロックを追加することに成功したマイナーだけが一定額の報酬を得ることが出来る。二重支払いなどの不整合性は、ブロックをブロックチェーンに記録する際に他のノードによってチェックされる[53][54]。
問題は10分ほどで解けるように難易度が調整されており、送金者は、取引の整合性がマイナーたちによって確認され、ブロックチェーンに記録されるまで同程度の時間を待たねばならない。流通するすべてのビットコイン通貨は、このようにマイナーへの報酬という形で市場に供給される[53]。
ビットコインで用いられるPoWでは、ブロックの内容をノンス(nonce, 一度だけ使われる数字)と言われる値と一緒にハッシュ化することで生成されたブロックIDがネットワークの難易度ターゲットよりも数値的に小さくできるノンスを見つけることをマイナーに要求し、要求を満したブロックは新しいブロックとして有効となる[55]。
この難易度目標を調整することで、ブロック生成に必要な作業量を変化させることができる。2,016ブロック(1ブロックの生成時間が約10分として約2週間)ごとに、ノードは最近のブロック生成率に基づいて難易度ターゲットを調整する[53][56]。片対数グラフでの相対的マイニング難易度[注釈 1][57]
ブロックの連鎖と並んでプルーフ・オブ・ワークのシステムは、攻撃者があるブロックの修正を受け入れるために、後続のすべてのブロックを修正しなければならないため、ブロックチェーンの修正を極めて困難にする。新しいブロックが常に採掘されるため、時間の経過と後続ブロックの数の増加とともにブロック修正の困難さは増大する[53][56]。ブロックチェーンの概念図。最良のチェーン(黒)は最も長い取引履歴を持つチェーンである。その他に、孤立したチェーン(紫)も存在する。
そのため、悪意ある攻撃者が過去のブロックを改竄したり複数のマイナーが同時にブロックを追加した場合などでブロックチェーンが分岐する時、ビットコインはチェーンを構成する計算を多く実行したものである「最も長いブロックチェーンを信頼する」としている[58][59]。
攻撃者が過去の取引履歴を書き換えても、その履歴が信頼されるためには、そこから派生するチェーンが他のチェーンよりも長くならなければならない。そのためにはネットワーク全体の半分以上のCPUパワーが必要となる[60]。またビットコインに参加するノードの数が十分大きければ、そのようなCPUパワーを確保するのは困難である[59][60]。複数のマイナーがそれぞれ個別のブロックを追加し、チェーンが分岐してしまった場合は、ネットワーク上の各マイナーはそのうちどちらかのチェーンを選んでマイニングに取り組む。さらに新しいブロックがどちらかのチェーンに追加された時点で、他方のチェーンは放棄される[59]。 Bitcoin CoreFedora Linuxでのスタート画面
Bitcoin Core
作者Satoshi Nakamoto
初版2009
リポジトリgithub.com/bitcoin/bitcoin
プログラミング
言語C++
対応OSLinux, Windows, macOS
公式サイトbitcoin.org
テンプレートを表示
Bitcoin Coreとはビットコイン取引やマイニングを行うためのオープンソースソフトウェアであり、2009年にサトシ・ナカモトによってリリースされた[61][62]。そのため、ウォレットとしての機能とフルノードとしてビットコインネットワークに参加してマイニングを行うことができる機能、ビットコインの仕様策定における参照実装の位置付けを持つ。またJSON-RPCインターフェースを持つコマンドラインベースのデーモンであるbitcoindや、ユーザーがbitcoindにRPCコマンドを送信できる簡単なプログラムであるbitcoin-cli、GUIでbitcoindを操作できるbitcoin-qtが、Bitcoin Coreにセットで提供されている[63][64]。 ビットコインネットワークとは、ビットコインを利用し運用するためのソフトウェアであるビットコインノードが相互に接続されたネットワークである。 ビットコインノードには、トランザクションの検証を行う「フルノード」とビットコインの交換機能のみを持つ「SPVノード」があり、フルノードのソフトウェアの代表としてBitcoin Coreがある。 また、ネットワークの種類には市場価値を持つビットコインの交換を行うネットワークであるmainnet、研究開発用ネットワークであるtestnet、testnetを改良した研究開発用ネットワークであるsignet、ビットコインネットワークに接続せずに単独で動かすモードであるregtestがある[65][66]。 ビットコイン改善提案(Bitcoin Improvement Proposal : BIP)とは、ビットコイン技術の発展のためのに作成、公開される草案群である[67]。 BIPには「Standards(標準)」「Informational(情報)」「Process(プロセス)」があり、Standardsはデータの変更に関するもの、Informationalはシステム設計やユーザーガイドラインに関するもの、ProcessではBIPに関する説明や変更に関するものであり、これまでに提案されたものはGithubにて記録されている[68][69]。BIPが提案されるとビットコインプロジェクトのメーリングリストを通じて提案が周知され、それを複数のエンジニアが妥当性を協議し、コミュニティで投票することで承認の可否を決定し、多数の合意が得られると実装・利用が開始される[68][70]。また、BIP○○といった数字表記で提案が示され、ビットコインのコミュニティーメンバーであれば誰でもBIPを提案することができる。これは代表的なものとして以下のようなものがある[68]。 「Segregated Witness(SegWit)」とは「Witness(署名)」と取引のデータを分離してデータを再編することであり、それによって1つのブロックに含める取引の数を増やすことができるのでネットワークの取引処理量を増加させられ、また取引速度の向上や取引の署名の改ざん(トランザクション展性)が不可能になる[73]。
ビットコインネットワーク
ビットコイン改善提案
BIP32
BIP32は、ビットコインに階層型決定論的(HD)ウォレットと拡張鍵の規格を導入した仕様である。HDウォレットは、マスターの秘密鍵「ルート」から複数の「子」鍵ペアチェーンを確定的に生成することができる[71]。
BIP39
BIP39は、特定の単語リストから選ばれた平易な言葉の文字列であるニーモニックコードを利用し、BIP32に記載されているウォレットの生成に使用されるランダムシードを導き出すプロセスを記述した提案である[72]。
SegWit「ビットコインのスケーラビリティ問題」も参照SegWitのロゴ