用語集 / マイニングとコンセンサス
Coinbaseのマチュリティ
別名はCoinbase maturity、コインベース成熟です。
- Coinbaseのマチュリティとは?
- Coinbaseのマチュリティとは、ブロックで新たに生成されたコインを、取引で使用できるようになるまで100ブロックの間ロックするコンセンサスルールです。
マイニング報酬は、ブロックが見つかった瞬間に使えるお金になるわけではありません。Bitcoin CoreはコンセンサスのヘッダーでCOINBASE_MATURITYを100に設定しているため、待ち時間は100ブロック、10分のブロック目標ではおよそ16時間40分です。取引所で購入したコインはこのルールの対象になりません。手元に届いたものはすでに少なくとも一度は使用されているからです。
仕組み
コインベースのマチュリティは、すべてのフルノードがネットワークルールとして強制します。つまり、設定、ウォレット、プールのいずれもこのルールを緩めることはできません。
チェックそのものは1回の引き算です。取引を検証する際、ノードは各インプットを調べ、そのコインがコインベース取引に由来する場合は、使用が記録される高さからそのコインのブロック高を引きます。差が100未満の場合、Bitcoin Coreはコードbad-txns-premature-spend-of-coinbaseと、試行された深さを報告するメッセージを付けて取引を拒否します。ブロック900,000で支払われた報酬は、ブロック900,100で初めて使用可能になります。この引き算が100に達する最も低い高さです。
この遅延が存在するのは、コインベースのアウトプットが、存在しなくなり得る唯一の種類のコインだからです。通常のコインはチェーンの再編成を生き延びます。コインを含む取引はメモリプールに戻り、再びマイニングされます。ブロックの報酬はそのブロックがチェーン内にあるからこそ存在するため、競合するブランチが勝つと、報酬は消え、そこから派生したものもすべて消えます。後に消えた報酬を前提に組まれた使用は、それに触れたすべてのウォレットを巻き込むことになります。
Bitcoin Coreはブロック間のギャップも監視しています。メモリプールの各エントリーには、コインベースを使用するかどうかのタグが付けられており、ソースコードのコメントがその理由を説明しています。これらのエントリーは再編成の際に再スキャンされ、100ブロックのルールが依然として満たされているかが確認されます。再び未成熟になったものは、マイニングされるのではなく破棄されます。
このルールのある性質が人々の意表を突きます。待ち時間は時間ではなくブロックで数えられるため、難易度調整の期間が遅ければ長くなり、速ければ短くなります。ビットコインは600秒ごとに1ブロックを目標としており、これが16時間40分と、よく知られた1日144ブロックの両方の根拠です。平均が11分になると、同じ100ブロックが18時間20分に延びます。
目にする場面
コインベースのマチュリティを最もよく目にするのは、ウォレットが残高を1つではなく2つ表示する場面です。
Bitcoin Coreのgetbalancesはimmatureフィールドを返します。これはソースで未成熟なコインベースアウトプットからの残高として文書化されており、getreceivedbyaddressとlistunspentはどちらもデフォルトでfalseになるinclude_immature_coinbaseフラグを受け付けます。Coreのウォレットはコンセンサスより1ブロック厳しく、報酬を支払ったブロックが101の深さになるまで報酬を未成熟として保持するため、ソロマイナーはネットワークルールだけが要求するよりも1ブロック遅れて残高のロック解除を見ることになります。
プールのダッシュボードは独自の用語を使い、通常は確認済みの列の隣に保留中または未成熟の列を設けます。シェアごとに固定額を支払うプールは、コインが成熟するはるか前にマイナーへ入金するため、まだ動かせない報酬に対して前払いしていることになり、そのブロックが置き換えられた場合にリスクを負うのはマイナーではなくプールです。
このルールは、マイニングされたコインが市場に届く速さの下限も定めます。売却したいマイナーは100ブロックを待ち、取引所へ送り、さらにその入金ポリシーを待ちます。通常は100ではなく数回の承認です。
Coinbaseのマチュリティvs承認
Coinbaseのマチュリティはコンセンサスに書き込まれた固定の深さであるのに対し、承認数は誰もがしきい値を選べる累計です。
入金をクレジットする前に6回の承認を求める取引所は、その数字を自ら選んだのであり、明日には変更できます。100ブロックのルールは選択ではありません。ブロックによって生成されたコインだけを対象とし、検証するすべてのノードで同一に適用され、これに違反する取引は遅いのではなく無効です。その取引を含むブロックも拒否されるため、どのマイナーもそれを含めることはできません。