Stratum V1 は Bitcoin の共同採掘に使う通信プロトコルです。プールは維持された接続を通じて仕事を送り、採掘機が結果を返します。報酬額や Bitcoin のブロックの有効性を決める規則そのものではありません。
エヴァは Bitcoin 採掘専用の機械である ASIC の電源を入れ、プールにつなぎました。プールは採掘者たちの作業を調整します。目標は、取引をひとまとめにした次のブロックを見つけ、Bitcoin の履歴に追加することです。しかし計算能力だけでは足りません。機械には仕事の指定が必要で、プールはエヴァがどれだけ働いたかを知る必要があります。このやり取りを担うのが Stratum V1 です。プールは次のブロックを探すための仕事を渡し、機械が計算して途中の成果を返します。電話で話す言語のように、互いの意図を伝える仕組みであって、仕事の単価を決めるものではありません。報酬はプール独自の支払い規則に従い、見つかったブロックの有効性は Bitcoin ノードが確認します。 [4] [2]
採掘機の高速化に伴い、古い getwork は扱いにくくなりました。一度に渡す仕事が少なく、機械は頻繁に追加を要求する必要があったためです。Marek Palatinus は2012年9月11日に新しい案を発表しました。Stratum は接続を開いたままにし、次の要求を待たずにプールから仕事の変更を送れるため、通信の負担を減らせます。採掘のすべてを置き換えるわけではありません。プールは引き続き BIP 22 に記された getblocktemplate を使い、Bitcoin ノードからブロック候補を得られます。 [11] [3] [5]
機械の制御ソフトは通常、最初に mining.subscribe を送り、仕事の受信を申し込みます。接続情報と、自分の計算を区別するための情報が返ります。続く mining.authorize は機械をアカウントに関連付けます。ここで worker は従業員ではなく、機械や接続の識別名です。エヴァは同じアカウント内の複数の機械を見分けられます。ただし、このメッセージで送るパスワードだけではサーバーが本物か確認できず、通信も暗号化されません。ログイン成功は、安全な接続の証明ではないのです。 [2] [13]
mining.notify は job_id で識別される新しい仕事を伝えます。前のブロックへの参照、取引に関するデータ、時刻など、ブロックヘッダーに必要な情報が入っています。ヘッダーは、そのブロックについての情報をコンパクトにまとめたデータです。重要なのは clean_jobs です。true は以前の仕事を捨てる指示で、false なら新しい仕事へ移る間、前の仕事を続けられます。新しいメッセージが来るたび、計算中の結果がすべて自動的に無効になるわけではありません。また、渡された仕事は計算用の候補であり、すでに有効なブロックではありません。 [2] [13]
ここは技術的な説明です。通常の接続で各項目を覚える必要はありません。プールはブロック報酬を支払う coinbase 取引を二つに分けて渡します。同名の取引所とは別物です。ソフトはその間にプール指定の extranonce1 と自分の extranonce2 を入れ、仕事の変化を増やします。その取引と、取引を木構造で要約した途中の値である Merkle branches から、Merkle root を計算します。これに前ブロックの参照、バージョン、時刻、符号化された hash の上限を組み合わせ、80バイトのヘッダーの基礎を作ります。ASIC は試行用の数値 nonce を変えながら、ヘッダーの数値の指紋である hash を繰り返し計算します。 [2] [4] [13] [14]
一つのブロックを見つける機会はまれです。そこでプールは、target と呼ぶ、より達成しやすい結果の基準を設けます。それを満たす結果が mining share で、仕事をした証拠になります。多くの shares は Bitcoin ネットワークの厳しい基準を満たしませんが、まれに両方を満たし、有効なブロックにつながる場合があります。mining.set_difficulty と自動調整の vardiff は、結果が多すぎたり少なすぎたりしないよう shares の難易度を変えます。ネットワーク全体の難易度は変えません。厳しい条件を満たすには平均してより多くの計算が必要なため、その結果は仕事量の評価で大きな重みを持ちます。難しい shares の数が少なくても、それだけで報酬が減るとは限りません。重みとプールの支払い規則も関係します。 [2] [4] [13]
機械は mining.submit で worker の識別名、job_id、extranonce2、nTime(ヘッダーの時刻)、nonce を送ります。プールは結果を再構成して検証します。duplicate は同じ仕事の重複提出、low difficulty は基準未達、stale は受け付けが終わった仕事を意味します。エヴァは機械の速さだけでなく、拒否される割合や通信の遅れも見ます。受理された share も、まだウォレットへの支払いではありません。Stratum が扱うのは仕事の伝達で、報酬の計上と送金には別の規則があります。 [2] [13]
2018年の BIP 310 は、mining.configure で追加機能を交渉する方法を示しています。2026年10月17日の確認時点で、文書の状態は Draft、つまり草案のままでした。Version-rolling で変更できるのは、ヘッダーのバージョン内で合意したビットだけです。合意後は mining.submit に六つ目の項目が加わります。Bitcoin の規則を自由に変更できるわけではありません。minimum-difficulty と subscribe-extranonce は、希望する shares の最低難易度と、新しい extranonce 値の通知に関する機能です。機能の交渉はソフト間の行き違いを防ぎますが、それ自体で暗号化するものではありません。 [6]
V1 は暗号化されていない TCP で使われることが多くあります。追加の保護がなければ、通信経路上の第三者が内容を読んだり変更したりして、仕事を別の行き先へ向けようとする可能性があります。2017年の研究 Hardening Stratum は、こうした危険を実際に調べました。問題は採掘機とプールの間の通信であり、Bitcoin 自体を破ることではありません。通常はブロックに入れる取引もプールが選びます。エヴァが機械を所有していても、その内容を決めているとは限りません。大きなプールが作ったブロックでも、規則に反すれば Bitcoin ノードは拒否します。 [7] [4]
Stratum V2 はコンパクトなバイナリ形式のメッセージと、暗号技術で保護された接続を導入します。独立した Job Declaration の仕組みを双方が対応させて使えば、採掘者が自分で選んだ取引を提案できる場合があります。V1/V2 の変換器や V2 という表示だけでは、その利用を確認できません。エヴァはファームウェアの対応、正しいサーバーのアドレス、通信の保護、拒否された結果、予備の接続を確認する必要があります。V1 の基本は明快です。仕事を届け、計算を示し、それをブロック内容の選択や報酬の支払いと区別することです。 [8] [12] [10]
理解を深めるには、この項目とあわせて次もお読みください Bitcoin, マイニング, Mining Pool, Braiins, Braiins Pool, Marek「Slush」Palatinus. 次の項目からも参照されています Mining Pool, Marek「Slush」Palatinus, Braiins, Braiins Pool.