Job Negotiation means coordinating custom mining work between a miner and pool. The Stratum V2 specification describes it through the Job Declaration Protocol, together with template and mining-job distribution.
The Mining Protocol can operate without Job Declaration or Template Distribution. In that setup, the pool still unilaterally distributes work. Custom selection needs the appropriate client, template provider and supporting pool, not merely another transport protocol. [Stratum V2 — Mining Protocol and Custom Jobs] [SRI — Pool and miner application roles]
Through CoinbaseOutputConstraints, the Template Provider receives requirements for additional coinbase outputs and sigops. JDC must discover them for the pools it uses. Without correct reserves, adding payout outputs could exceed block limits; transaction selection is therefore connected to block assembly. [Stratum V2 — Template Distribution Protocol]
In Full-Template mode, JDC sends DeclareMiningJob to JDS. The server may request missing transactions through ProvideMissingTransactions. Declaration acknowledgement and the pool’s subsequent acceptance of custom work are two separate steps, not one message. [Stratum V2 — Job Declaration Protocol]
Coinbase-only mode does not use DeclareMiningJob, and JDC does not disclose the transaction set. The pool evaluates revenue from coinbase. Set privacy alone proves neither validity nor declared fees; the specification explicitly describes this risk. [Stratum V2 — Job Declaration Protocol]
SetCustomMiningJob refers to a mining_job_token from JDS. On acceptance, the pool returns SetCustomMiningJob.Success with its own job_id. These identifiers have different roles; results are submitted for the acknowledged job using the corresponding job_id. [Stratum V2 — Mining Protocol and Custom Jobs]
With the necessary data, optimistic mining can begin before SetCustomMiningJob.Success. Found shares are buffered until acknowledgement. Running hashes therefore do not mean the pool has already accepted the work or credited its reward. [Stratum V2 — Mining Protocol and Custom Jobs]
After SetCustomMiningJob.Error or a timeout, the specification recommends switching to another pool, or solo mining. Resilience depends on working fallback. Silently continuing on the rejecting pool’s template would not preserve the original transaction selection. [Stratum V2 — Mining Protocol and Custom Jobs] [SRI — Pool and miner application roles]
JDC must allocate value to the designated pool output to qualify for pooled rewards. Diverting some revenue to other outputs may proportionally reduce the reward. Job Declaration therefore does not turn pooled accounting into an automatic direct payout to the miner. [Stratum V2 — Job Declaration Protocol]
For the clearest picture, read this entry together with Stratum V2, getblocktemplate, Mining Pool, Block Template. The reverse links also lead from Stratum V2, Mining Pool Centralization.