ビットコイン
[Wikipedia|▼Menu]
□記事を途中から表示しています
[最初から表示]

トランザクションビットコインのホワイトペーパーに示されている所有権の単純化されたブロックチェーン[40]。 実際、トランザクションは、複数の入力と複数の出力を持つことができる[41]

トランザクションとは、ビットコインの送金メッセージである。トランザクションの基本構造は、1つ以上の入力 (input) と1つ以上の出力 (output) から構成される。入力には送金者が以前に受け取ったトランザクションの出力への参照やデジタル署名が記載されている。また、出力には送金先の公開鍵ハッシュや送金金額といった情報が記載され、送金先の受領者しか利用できないようにロック状態になっている。送金のたびにトランザクションの出力は、次の入力に連鎖し、最後の出力がその時点の所有者の所持金となる。この時の出力は未使用の出力であり、UTXO(未使用トランザクションアウトプット:Unspent Transaction Output)と呼ばれる。このようにトランザクションは連鎖をしていて、過去に遡ると入力が空白のトランザクションに行き着く。このトランザクションをコインベース・トランザクションといい、ビットコインの通貨発行のためのトランザクションである。

ビットコインの送金をする人は、送金先や送金金額といった情報が入ったトランザクションを作成し、ビットコインのネットワークの全てのノードに送信し、検証され、ブロックチェーンに記録される。この時、入力には未使用の出力 (UTXO) をロックするのに使った公開鍵に対応する秘密鍵によって生成されたデジタル署名を記載し、出力には送金先の公開鍵ハッシュと送りたいビットコインの量を指定する。それによって、出力のロック状態がアンロックとなる。UTXOのアンロックが正しく行われているのかを検証するには、UTXOのロックに利用した公開鍵によって検証できる。また複数の入力の利用は可能である。一方で入力(支払いに使用されるコイン)の合計が、意図した支払額を超えることがある。このような場合、追加の出力が使用され、お釣りが送金元に返される。取引出力に含まれない金額は、取引手数料となる[42][43][44]

BitcoinではForthという言語に似たスタックベースのスクリプト言語であるビットコインスクリプトをトランザクション内で記述することでデジタル署名の検証を行う[45][46]
ブロックチェーン「ブロックチェーン」も参照ブロックのデータ構造

ブロックチェーンとは、分散型ネットワークを構成するコンピューターに、暗号技術を用いて一定期間の取引データをブロック単位にまとめ、コンピューター同士で検証し合いながらデータを同期する手法である。それは取引記録をチェーン(鎖)のようにつないで蓄積する仕組みであることから「ブロックチェーン」と呼ばれる[47]

各ブロックには前のブロックのデータをハッシュ関数SHA256を2回通して得られたハッシュ値があり、ブロックの識別子となる。また、ブロックのデータ構造はブロックヘッダーとトランザクションで構成され、ブロックのサイズは最大1MBである。

ブロックヘッダーにはプロトコルのバージョン番号であるバージョン、直前のブロックのハッシュ値、ブロック生成時刻であるタイムスタンプ、マークルルート、ノンス、難易度ターゲットが含まれる。ここでマークルルートとはブロック内のトランザクションをマークルツリーという手法を用いてハッシュ値としてまとめたものであり、全体的に木構造としてまとめられている。またノンスとはマイニングでランダムに設定される値、難易度ターゲットとはブロック生成の難易度を表す。

直前のブロックのハッシュ値を記述することで前のブロックの情報を参照し、ブロックの順番を決めると同時に過去に遡ることができる。このとき最初に生成されたブロックを「ジェネシスブロック」といい、ジェネシスブロックから数えたブロックチェーンの位置を「ブロック高」という[48][49][50]
マイニング「マイニング (仮想通貨)」も参照.mw-parser-output .tmulti .thumbinner{display:flex;flex-direction:column}.mw-parser-output .tmulti .trow{display:flex;flex-direction:row;clear:left;flex-wrap:wrap;width:100%;box-sizing:border-box}.mw-parser-output .tmulti .tsingle{margin:1px;float:left}.mw-parser-output .tmulti .theader{clear:both;font-weight:bold;text-align:center;align-self:center;background-color:transparent;width:100%}.mw-parser-output .tmulti .thumbcaption{background-color:transparent}.mw-parser-output .tmulti .text-align-left{text-align:left}.mw-parser-output .tmulti .text-align-right{text-align:right}.mw-parser-output .tmulti .text-align-center{text-align:center}@media all and (max-width:720px){.mw-parser-output .tmulti .thumbinner{width:100%!important;box-sizing:border-box;max-width:none!important;align-items:center}.mw-parser-output .tmulti .trow{justify-content:center}.mw-parser-output .tmulti .tsingle{float:none!important;max-width:100%!important;box-sizing:border-box;align-items:center}.mw-parser-output .tmulti .trow>.thumbcaption{text-align:center}}分散型ネットワークを構成するコンピューター複数のGPUを搭載するマイニングハードウェア。ビットコインマイニング会社の高性能マイニングハードウェア収容施設。

マイニングとは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 Core

Bitcoin CoreFedora Linuxでのスタート画面
作者Satoshi Nakamoto
初版2009
リポジトリgithub.com/bitcoin/bitcoin
プログラミング
言語C++
対応OSLinux, Windows, macOS
公式サイトbitcoin.org 
テンプレートを表示

Bitcoin Coreとはビットコイン取引やマイニングを行うためのオープンソースソフトウェアであり、2009年にサトシ・ナカモトによってリリースされた[61][62]


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:216 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef