ビットコインとは何か? 第4回:ビットコインの仕組み(取引承認と採掘)

第3回で取引を送信する流れまでを追いましたが、今回は送信された取引を承認し、第2回で説明したブロックチェーンに取引を組み込むまでの流れを解説します。

メモリプール

メモリプールの図

ユーザーによって送信された取引は、すぐにメモリプール(memory pool, mempool)と呼ばれる場所に一旦溜め置かれます。メモリプールはマイナー(採掘者)と呼ばれる取引の承認者それぞれのコンピュータ内で別々に構築されます。

マイナーが受信したすべての取引は一時的にメモリプールに入りますが、署名された取引を検証し不正な取引を除外したり、同じアドレスから送金が複数回実行されるような重複する取引(二重支払い)を除外したりすることによって、不正な取引がブロックには組み込まれないようになっています。

マイニング(採掘)=nonceの探索

メモリプールの構築と同時に行っているのが第2回で解説したnonceの探索です。ブロックヘッダーのハッシュが一定数の連続する0からはじまる値になるような任意の値のことをnonceと言います。正しいnonceを発見したマイナーが、メモリプールからブロックを作成しブロックチェーンにつなげる権利を獲得できるというわけです。

nonceの図

nonceは4バイトの任意の値ですが、上図のように0から順番に数字を増加させていくという方法が最も効率的であるため、このようにnonceの探索を行うのが一般的です。ちなみに、各マイナーで構築しているメモリプール(上図では「その他のデータ」)が異なるため、マイナーによって正しいnonceも異なります。

ビットコインでは、nonceの発見に約10分かかるように調整されています。調整するための値はターゲット(target)と呼ばれます。簡単に言えば、ターゲットとは、有効なブロックヘッダーのハッシュとして0が何個連続すればいいかを定める値です。0が10個連続しなければならないターゲットよりも0が20個連続しなければならないターゲットのほうが、難しいというわけです。このターゲットは人間の目では一見よくわからない値なので、通常はdifficulty(採掘難易度)という数字に変換して表現されます。

なお、マイナーのコンピュータの演算能力は日々変化していると考えられるので、ビットコインではターゲット(=difficulty)を約二週間に1回調整するようになっています。

このようにコンピューターに計算(仕事)をさせることにより、有効なブロックヘッダーのハッシュを求め取引を承認するシステムのことをプルーフ・オブ・ワーク(proof of work)と呼びます。

取引承認のインセンティブ(動機)

これまで、マイナーが取引承認を行う流れを追ってきましたが、ではその作業を行う動機は何なのでしょうか?ビットコインの黎明期には単なる好奇心でマイナーの作業を行っていた人もいるでしょうが、ビットコインには明確な動機付けとなる仕組みが含まれています。それは、ブロックを生成したときに報酬としてビットコインをもらえることです。

この報酬の内訳は①新たに生成されるビットコインと②ユーザーが支払う取引手数料となっています。新たに生成するコインは、最初は50BTCで210,000ブロック(約4年)おきに半減するように設定されており、最終的には、2140年頃に2,100万BTCを生成した時点で発行が終了することになっています。報酬には新たに生成するコイン以外にも取引手数料が含まれているので、発行上限に達してもマイナーとなる動機はなくならないというわけです。

ビットコインにおける取引承認が金などの採掘になぞらえてマイニング(採掘)と呼ばれるのもこのためです。ちなみに報酬をブロックを生成したマイナーに送る取引のことはcoinbaseと呼ばれます。

メモリプールと取引の優先度

ビットコインを利用する上では重要な仕組みがもう一つあります。もう一度メモリプールの段階に戻ってみていきましょう。

ブロックを生成する権利を得たマイナーは自身のメモリプールからブロックを生成しますが、メモリプール内のすべての取引をブロックに組み込むわけではありません。メモリプール内の取引は優先順位をつけられ、優先度の高いもののみブロックに格納され、残りはメモリプールに残ったままになります。ブロックに格納されることを確認(confirmation)と言います。メモリプールに残っている状態は未確認(unconfirmed)です。二重支払いを防ぐため、ブロックに取り込まれ確認された取引は、ブロックを生成したマイナー以外のメモリプールからも消去されることになります。

取引の優先度は①取引手数料②経過時間の二つの要素によって決められます。最も重要視されるのが取引手数料です。このため、理論上ビットコインを手数料なしで送ることも可能ですが、ブロックに組み込む優先度が最低となるため、数日から数週間、数か月かかることもあります。取引手数料の優先度は単純に取引データ(トランザクション)サイズあたりの取引手数料により決定されます。以前は経過時間も考慮されていましたが、現在は手数料のみから決定されます。

手数料なしの取引は時間がかかっても必ずいつか確認されると言われることがありますが、これはメモリプール内の取引に「有効期限」のようなものが存在しないためです。②経過時間も優先度に考慮されるため、時間が経てば経つほど確認される確率は高くなるというわけです。ただし、メモリプールというのはマイナーのコンピューターがシャットダウン(再起動)すると消去されるため、確認を待ってるうちに全マイナーのメモリプール内から消去され永遠に確認されないということもありえます。この場合は、ウォレット内の残高に使用したはずのビットコインがもどってくるということになります。現在は手数料0の取引は実質的に不可能になっています。

追記:バージョン0.12からメモリプールの有効期限及び最大容量が設定されました。これにより、一定期間経過した取引が除外されたりメモリプールが容量オーバーになった場合にも手数料の低い取引から順にメモリプールから除外されるようになりました。除外された取引はキャンセルされてビットコインは元のアドレスに戻るので、再度使用できるようになります。

「0確認取引」とメモリプール内の取引の置換(RBF)

最後に実際にビットコインを利用する上で重要な仕組みをさらに説明しましょう。

これまで見てきたように、取引が確認されるのには約10分かかります。そして、ビットコインの「送金完了」にかかる時間はこの10分と言われています。これは、メモリプール内の取引は、一時的に残っていても除外されたりする可能性があるためです。しかし、店頭での支払いなど10分待つのが現実的ではない場面が多くあるのも事実です。そこで実際には多くの場合、未確認でも送金完了とみなす「0確認取引」が行われています。

0確認取引はセキュリティ上リスクがありますが、みんなが言うほどそのリスクは高くないと指摘する人もいます。その根拠は、二重支払いを行うような取引(同じアドレスから出金される複数の取引)は、メモリプール内に先に取り込まれた取引を優先し、後からきた取引は二重支払いと見なしメモリプールに組み込まないという作業を、マイナーが基本的に行っているためです。ほとんど時間を置かずに送信された二重支払いの取引は、ネットワークの遅延などにより不正な取引が先にメモリプールに入る可能性もありますが、数秒~数十秒待って正しい取引が主要マイナーのメモリプールにあることを確認すれば二重支払いのリスクは格段に下がります。これは世界最大のビットコイン決済サービスを提供しているBitpay社などが行っている即時決済の仕組みでもあります。

しかし、注意しておきたいのは、メモリプール内の取引の置換を行わないのは、確固とした「ビットコインの仕様」というよりも変更され得る「マイナーの自主制定ルール」というべきであるということです。そもそもマイナーが恣意的にメモリプールの中の取引を除外したり置換することが可能ということです。実際にビットコインの黎明期では、条件等が設定されており完全に自由ではないものの、取引手数料を高く設定して再度取引を送信すればメモリプール内の元の取引が置換されるということが「機能」として普通に実装されていました。これは、取引手数料を誤って無料か非常に低い額で送金してしまい長期間確認が行われないという場合、送金し直すことができるので非常に有用な機能でもあるのです。

実際に取引が確認されないという問題は、ビットコインの世界で常に言われることであり、最近では、黎明期の機能と同様にいろいろな条件をつけた限定的なものではありますが正式に取引の置換を可能にする機能が復活しました。この機能はRBF(Replace-By-Fee, 手数料による置換)と呼ばれます。

取引の確認状況を知る

ブロックチェーンは全世界に公開されているため、実際に取引が確認されたのか、つまりブロックに組み込まれたのかを簡単にインターネット上で見ることができます。このようなブロックチェーン情報を見れるサイトはブロックエクスプローラーと呼ばれ、多くのサイトがあります。

以下にその例をいくつか挙げるので、実際にビットコインを送金する際には確認して見ると便利でしょう。

最終更新日: 2017年01月17日

コメント欄

ゲスト(匿名)としての投稿の場合は、任意のメールアドレス(非公開、123@456.com等ランダムな文字列でも可)の入力も可能です。SNS等を利用してログインした場合には、自分の投稿を編集することができます。

現在、情報提供のコメントや間違いのご指摘コメントに対して独自トークンをお送りする実験企画を実施中です。企画に参加したい場合は、コメントの最後に送付を希望するCounterpartyなどのアドレスを書いてください。(プライバシー保護のため送付後にコメント内のアドレスは削除させていただきます。)

comments powered by Disqus