getblocktemplate は候補ブロックの組み立てデータ取得や提案評価のための JSON-RPC メソッドです。以下は Bitcoin Core 29 に基づき、実装固有の動作が同じプロトコルの全サーバーに自動的に当てはまるわけではありません。
既定の mode は template です。応答は採掘ソフトウェアへのデータであり、発見済み proof of work ではありません。この要求には支払先アドレスの引数がなく、coinbase の構築と解の探索は後続の処理です。 [Bitcoin Core 29 — getblocktemplate RPC]
Bitcoin Core v29.0 は要求の rules に segwit を、signet ネットワークでは signet も求めます。文字列を書くだけでは規則の実装を代替できません。capabilities はインターフェース機能を示し、必須の rules を置き換えるものではありません。 [Bitcoin Core v29.0 — Mining RPC implementation]
BIP 145 は witness を除く txid と含む hash を区別します。主 Merkle root には witness ハッシュでなく txid を使います。data は直列化した取引の16進表現であり、識別子だけでは完全な取引バイト列になりません。 [BIP 145 — SegWit template fields]
クライアントは受け取った longpollid を次の待機要求で返します。BIP 22 は特定の意味を仮定しないよう求めているため、可搬性のあるクライアントは独自の形式として分解しません。Long polling には長いタイムアウトと、繰り返す失敗後の待ち時間が必要で、即時再試行ループは不適切です。 [BIP 22 — Long polling]
Bitcoin Core v29.0 はテンプレートをキャッシュし、前ブロックが変わった場合、または作成から5秒を超えて mempool が変わった場合に更新します。ヘッダー時刻は別に更新します。各呼び出しが最新取引を含むとも、独立した採掘作業を作るとも限りません。 [Bitcoin Core v29.0 — Mining RPC implementation]
proposal モードでは data に候補ブロック全体を16進表現で渡します。Core は Merkle root を確認しますが、有効な proof of work は要求しません。inconclusive-not-best-prevblk は前ブロックが現在の先端と異なることを示し、提案の有効性の完全な評価ではありません。 [Bitcoin Core v29.0 — Mining RPC implementation]
submitblock に渡す hexdata はブロック全体であり、ハッシュだけではありません。Bitcoin Core 29 は受理時に null、それ以外では結果文字列を返す場合があります。任意の dummy は無視します。ノードの受理はアクティブなチェーンでの永久的な承認を保証しません。 [Bitcoin Core 29 — submitblock RPC]
mainnet の Bitcoin Core v29.0 は、接続ピアがない場合や initial block download 中にはテンプレート提供を拒みます。これはノードの準備状態を示し、特定ブロックの無効性ではありません。検証による拒否理由や正常に待機する long polling と区別する必要があります。 [Bitcoin Core v29.0 — Mining RPC implementation]
理解を深めるには、この項目とあわせて次もお読みください Block Template, ビットコイン・マイニング, Stratum V2, Extranonce. 次の項目からも参照されています ASIC Miner, Solo Mining, Job Negotiation.