マイニングは、Bitcoin の履歴に次のブロックを追加するための競争です。マイナーはトランザクションをブロックにまとめ、他の人が簡単に検証できる結果を計算によって探します。ブロックが受け入れられると、新たに発行されたビットコインと、含まれる支払いの手数料を得られます。ただし規則を決めるのはマイナーではありません。ネットワークの他のコンピューターが提案を独自に調べ、無効なブロックを拒否します。
マイニングは、コンピューターに隠れた硬貨を掘り出す作業ではありません。既存の履歴につながるトランザクションの束、つまり次の有効なブロックを提案するための競争です。マイナーは自分の提案について、得るのが難しい計算結果を探します。成功したらブロックを他の参加者へ送ります。受け取った側は計算とトランザクションを調べ、共通の規則に照らして受け入れられるか判断します。新しいビットコインは報酬の一部ですが、発行だけがマイニングの目的ではありません。支払う人にとって大切なのは、保留中の支払いが検証可能な履歴に記録されることです。 [1] [2]
送った支払いは、まずノード間を伝わります。ノードは Bitcoin ネットワークに参加するコンピューターで、その mempool は未承認トランザクションを一時的に保持する場所です。誰かが全員のために管理する一つの待ち行列はありません。マイナーは利用可能なトランザクションから、手数料と限られた容量を考えて候補ブロックを作ります。あるトランザクションが別の未承認トランザクションの出力を使う場合、先行する方を同じブロック内で先に置く必要があります。getblocktemplate コマンドは、こうした依存関係を含む作成用データを提供します。ブロック重量や署名検証の負荷に関する上限も、選択を制限します。 [1]
ブロックの最初のトランザクションは Coinbase Transaction と呼ばれます。同名の取引所の口座とは無関係で、マイナーが許された報酬を自分に割り当てる特別なトランザクションです。報酬には、新しく作られるビットコインであるブロック補助金と、ブロック内の他のトランザクションの手数料が含まれます。手数料は入力の合計額と出力の合計額の差なので、既存のビットコインを移すだけです。多く取りすぎると、ノードはブロック全体を拒否します。正しい報酬でもすぐには使えず、Coinbase Transaction の出力を使えるのは、元のブロックより高さが 100 大きいブロック以降です。 [2]
当たりを事前に知る人はいないものの、公表後は誰もがすぐ確認できる抽選を想像してください。マイナーが計算するハッシュはデータのデジタル指紋で、大きな数として読むこともできます。Bitcoin のブロックでは、その数値が target という境界以下でなければなりません。これが Proof of Work の要件です。具体的には、ブロックの主要な要約情報を含む 80 バイトのヘッダーに、ハッシュ関数 SHA-256 を二回適用します。個々の支払いの答えを解いているわけではありません。計算に使うデータを変え、新しい結果が条件に合うか試します。 [3]
ASIC は特定の計算向けに設計されたチップです。Bitcoin の採掘用 ASIC は、80 バイトのヘッダーのさまざまな候補に二重 SHA-256 を繰り返します。変更できる項目の一つが、ヘッダー内の四バイトの数値 nonce です。ただしその範囲は有限です。使い切ったら Coinbase Transaction 内の追加データ、extra nonce を変えられます。すると、トランザクションをまとめた指紋である Merkle Root とヘッダーが変わり、新しい候補を試せます。失敗を重ねても確実な当たりに近づくわけではありません。十分という時間も個々のマイナーへの約束ではなく、ネットワーク全体の目標平均です。 [3]
マイナーには有効なブロックを作る理由があります。拒否された提案からは使える報酬を得られないからです。ただし、その検査が他の参加者の検証に代わるわけではありません。Full Node は、トランザクション、報酬、Proof of Work を含む Bitcoin の規則を自分で検証するコンピューターです。例えば許可された量より多くのビットコインを作るブロックは、大きな計算能力を投入していても拒否します。自分のノードがあれば、ブロックは正しいというマイナーの説明だけに頼らず、実際に確かめられます。 [2] [4]
単独のマイナーは成功まで長く待つことがあります。Mining Pool では参加者が仕事と収入を分け合えます。各機械の貢献を推定するため、運営者はネットワークより簡単な内部条件を満たす結果も受け取ります。この結果が share です。大半の share は Bitcoin ネットワークには不十分で、その厳しい条件も満たすものは一部だけです。参加者への支払いは、選んだ報酬方式、合意した条件、プール手数料によって決まります。プールへの参加で Bitcoin の規則を変更する権利が生まれるわけではありません。運営者が接続された機械を所有しているとも限らず、発見ブロックの割合だけでは所有関係を証明できません。 [3]
計算に成功した後も、ブロック全体を他のノードに届ける必要があります。同じ先行ブロックにつながる別々の有効なブロックを、二人のマイナーがほぼ同時に見つける場合があります。一時的にネットワークの一部は一方の枝を、残りは他方を知る状態になります。ノードが選ぶのは、各ブロックに割り当てられる作業量の合計、つまり累積作業量が最大の有効な枝です。次のブロックが一方の選択を後押しすることがあります。採用されなくなった枝のブロックもそれ自体は有効かもしれませんが、報酬は現在の履歴に入りません。そのため結果の迅速な配信と、新しい先端を受け取った後に古い提案で計算を続けないことも重要です。 [4]
Hashrate は一秒間のハッシュ計算の試行回数を表します。全体の計算能力に対するマイナーの割合から、成功頻度を推定できますが、定期収入は保証されません。収入と利益も別です。電力、冷却、機器、保守、プール手数料を差し引く必要があり、停止時間は結果をさらに悪くします。単位にも注意してください。TH/s は計算性能、ワットは消費する電力を表します。高性能な機械でも電気代が高ければ赤字になり得ますし、一度の幸運な発見で長期の採算は判断できません。 [3]
自分のノードでは、getblocktemplate の提案を、実際に見つかったブロックのヘッダー、Coinbase Transaction、通常のトランザクションと比べられます。getblocktemplate のようなコマンドはノードの技術的なインターフェースであり、お金を預けるサービスではありません。submitblock は完成したブロックをノードに渡して検査させます。ただしローカルで受け入れられても、ネットワーク全体の履歴に永久に残るとは限りません。プールでは、提出した share、受け入れられた Bitcoin ブロック、実際の支払額を区別してください。運用費用と合わせて初めて、マイニングの経済的な結果が分かります。 [5]
理解を深めるには、この項目とあわせて次もお読みください Proof of Work, Difficulty Adjustment, Block Subsidy, Transaction Fees, Mempool. 次の項目からも参照されています Proof of Work, Difficulty Adjustment, Block Subsidy, Halving.