229 / 736JNP

Job Negotiation

共同で採掘しながらブロックの内容は自分で選ぶ

アンナはプールで採掘しています。プールは参加者の仕事をまとめて記録し、報酬を分配する仕組みです。ただし、取引の一覧まで常に運営者に決めてもらいたいわけではありません。たとえば、受け取ったテンプレートが省いた有効な支払いを入れたいとします。テンプレートは、これから作るブロックの案です。どの取引を入れるかなどが決められています。Job Negotiation はこの二つを分けます。採掘者はブロックの内容を提案しつつ、共同の報酬分配に参加できます。そのためにはソフトウェアと相手側の対応が必要です。自分で選べても、Bitcoin のルールを無視してよいわけではありません。

Job Negotiation は、独自の採掘ジョブについて採掘者とプールが合意する仕組みです。Stratum V2 は採掘機器とプールの通信ルールを定めています。そのうち独自の提案を扱う部分が Job Declaration Protocol で、テンプレートやジョブの配信と連携します。取引の選択を採掘者に認めながら、プールは引き続き仕事の記録と報酬の支払いを行います。重要なのは接続の名前ではなく、実際の構成です。

アンナが Stratum V2 に切り替えても、取引一覧はまだプールから届きます。矛盾ではありません。仕事と結果を運ぶ Mining Protocol は、Job Declaration や Template Distribution がなくても動作します。後者はブロックのテンプレートを提供し、Job Declaration は独自の提案を扱います。アンナ自身の選択には、これらの役割を組み込み、対応したプールを使う必要があります。新しい転送方式だけでは、Bitcoin のブロック内容を誰が決めるかは分かりません。 [1] [4]

選んだ支払いでブロックを埋め尽くし、報酬の取引 coinbase が入らなくなってはいけません。テンプレートの提供者 Template Provider は、必要な余裕を知る必要があります。アンナ側では JDC、正式名 Job Declarator Client というプログラムが動きます。利用するプールの要件を調べ、CoinbaseOutputConstraints というデータメッセージでテンプレートの提供者に伝えます。確保するのはデータ領域と、ブロックの上限に算入される署名検証操作 sigops の枠です。そうしなければ、資金の割当先を示す coinbase の出力を追加した結果、ブロックの制限を超えるおそれがあります。独自の取引選択でも、最初から全体の有効性を考えます。 [3]

Full-Template モードでは、JDC が DeclareMiningJob を JDS に送ります。JDS はプール側、またはプールが信頼するサービスに置く Job Declarator Server です。メッセージには選んだ取引の識別子が含まれます。知らない取引があれば、サーバーは ProvideMissingTransactions でそのデータを要求できます。アンナはこうして選択を検証できる情報を共有します。宣言の確認と、その後のプールによる独自ジョブの受理は別の段階です。最初の成功メッセージだけで合意全体が完了するわけではありません。 [2]

Coinbase-only モードでは、JDC は取引の集合を明かさず、DeclareMiningJob も使いません。プールは提示された coinbase から収入を見積もります。アンナの選択をプールから隠せますが、それ自体は隠れた取引の有効性も実際の手数料も証明しません。仕様もこのリスクを明記しています。渡す情報を減らせば、確認できる範囲も変わります。モードの名前だけで、報酬の条件が十分に裏付けられたとはいえません。このプライバシー保護は採掘中の案についてのものです。アンナが有効なブロックを見つけてネットワークに配信すれば、その取引内容は公開されます。 [2]

技術的なやり取りには、似たような識別子が複数出てきます。JDS が mining_job_token を割り当て、クライアントは SetCustomMiningJob でそれを参照します。プールがジョブを受理すると、SetCustomMiningJob.Success で独自の job_id を返します。トークンは提案についてのやり取りを結び付け、job_id は結果を提出するときの仕事を識別します。申請番号と承認済み作業の番号のような違いです。混同すると、プールは結果を正しい受理済みジョブに対応させられなくなります。 [1]

通信の各段階をすべて待つと、機器を無駄に止めることになります。必要なトークンとテンプレートがそろえば、クライアントは SetCustomMiningJob.Success より前に楽観的採掘を始められます。計算で見つけた shares は、プールの目標に従って仕事を示す部分的な結果で、確認が来るまで保管します。ジョブが受理された後、割り当てられた識別子で送信できます。機器が動いているだけでは、プールが仕事を受理したり計上したりした証拠にはなりません。計算開始と報酬への合意は別の時点です。 [1] [2]

アンナが SetCustomMiningJob.Error を受け取ったり、妥当な時間内に返答が来なかったりした場合、仕様は別のプール、または単独採掘への移行を勧めます。抵抗力は、機能する fallback、つまり用意された代替経路に左右されます。ソフトウェアが拒否したプールの元のテンプレートへ黙って戻れば、稼働は続けられてもアンナ自身の選択は失われます。拒否時に実際にどう動くかが重要です。プロトコルに書かれた機能を、すべてのサービスが提供するとは限りません。 [1] [4]

アンナは取引を選びながら、共同の報酬分配も利用したいと考えています。そのため JDC は、報酬の条件を満たすよう、coinbase のプール指定出力に金額を割り当てなければなりません。収入の一部を別の宛先に向けると、プールはその仕事への報酬を比例して減らす場合があります。Job Declaration は自動的な採掘者への直接払いを生まず、サービスの会計条件も取り除きません。主に変えるのはブロック内容を提案できる人です。有効性のルールと収入の分け方は別々に考えます。 [2]

理解を深めるには、この項目とあわせて次もお読みください Stratum V2, getblocktemplate, Mining Pool, Block Template, Bitcoin. 次の項目からも参照されています Stratum V2, Mining Pool Centralization.

DOC · 001Stratum V2 — Mining Protocol and Custom Jobs仕様 DOC · 002Stratum V2 — Job Declaration Protocol仕様 DOC · 003Stratum V2 — Template Distribution Protocol仕様 DOC · 004SRI — Pool and miner application roles一次資料
改訂日: 一次資料を優先 · 投資助言ではありません