The Problem Hidden Inside Every Block You've Ever Seen

Picture yourself running three petahashes of hardware in a warehouse. Fans screaming, power meter spinning, shares submitting cleanly to your pool. You have no idea what transactions your machines are actually hashing. You never did. That block template was assembled by someone else, in a data center you've never visited, by a pool operator whose policy you've never read.

For most of Bitcoin's history, that someone was always the pool. Not the miner. The pool.

That's a quiet concentration of power, and Stratum V2's job negotiation protocol is the most technically serious attempt to dismantle it.

What Stratum V1 Actually Gave Pool Operators

The original Stratum protocol, which still runs the majority of the network's hashrate, works like a factory floor with a single foreman. The pool constructs a block template: picks the transactions, sets the coinbase output, hands miners a stripped-down puzzle. Miners hash. Miners submit shares. Miners get paid. They have no visibility into, and no control over, what goes into the block.

This means a pool operator can drop any transaction they want. Quietly. Without announcement. A transaction paying a perfectly valid fee could simply never appear in a block produced by that pool, and the miner pointing hardware at that pool would have no idea. Their ASICs are faithfully solving puzzles built on a template they never saw.

Is this happening at scale? Honestly, it's hard to prove and harder to measure. But the capability is fully intact in every pool running V1, and capability without accountability is a structural flaw regardless of whether anyone is exploiting it today. That's not a hedge. That's the correct engineering judgment.

How Job Negotiation Flips the Architecture

Stratum V2 was co-designed by Matt Corallo and Jan Čapek, formalized around 2019-2020, and has been in active deployment testing since. It introduces four sub-protocols. Three are evolutionary: better encryption, binary framing, lower latency. The fourth, Job Negotiation, is different in kind.

It separates two things V1 fused together: who picks the transactions and who coordinates the hashing. Under the new model, a miner (or a dedicated Job Negotiator client running on the miner's behalf) connects to a Job Negotiator server, fetches the mempool, builds a block template locally, and submits that template to the pool. The pool distributes work based on the miner's template rather than its own.

The pool still coordinates shares and handles payouts. It still sees the block header being hashed. But transaction selection happened upstream, outside its control.

Think of it like municipal water supply: the utility controls the pipes and the pressure, but under this model it no longer decides what flows through them. The kitchen still does the cooking. It just doesn't write the ingredient list anymore.

A Worked Scenario: Two Miners, Same Pool, Different Templates

Call them Priya and Søren. Both point 10 petahashes at the same mid-sized pool. The pool runs Stratum V2 with Job Negotiation enabled.

Priya runs a full node with a custom policy: she accepts any transaction paying above 5 sat/vbyte, no exceptions. Her Job Negotiator client pulls from her local mempool, builds a template with 2,800 transactions, and submits it. Her work assignments derive from that template.

Søren has opted into the pool's default template. The pool's operator, for reasons unknown, has excluded a specific transaction from a mixing service. Søren's blocks will never include it.

Priya's will.

The pool can't stop her. It can verify that her template is valid (no double-spends, correct coinbase structure, valid merkle root) and reject it if it's not. But it has no legitimate grounds to reject a template simply because it includes a transaction the operator dislikes. If it tried, Priya would know immediately, because the rejection is explicit and auditable, not silent. That's the shift. V1 censorship is invisible. V2 censorship with Job Negotiation is detectable.

The Part That Actually Enforces This: Template Validation and Declaration

The mechanism that makes Job Negotiation binding rather than advisory is the `SetCustomMiningJob` message flow.

The miner's Job Negotiator builds a template and sends an `AllocateMiningJobToken` request to the Job Negotiator server. The server returns a token. The miner uses that token to declare a specific block template via `SetCustomMiningJob` and receives either an acknowledgment or a rejection with an explicit error code. An acknowledged template is then forwarded to the Mining Proxy, which distributes it to the hashing devices.

The critical property: the pool's Mining Proxy cannot silently swap in a different template. The merkle root is fixed by the miner's declaration. If the proxy substituted its own transaction set, the merkle root would change, submitted shares would be invalid against the declared template, and the miner would notice. The math enforces it.

V1 let the pool quietly coat everything in its own preferences and you'd never know. It's the limescale problem: invisible buildup, no alarm. V2 Job Negotiation makes the template a cryptographic commitment. Any substitution is detectable by design, the divergent merkle root is the alarm.

One important nuance: pools can still set coinbase output constraints, meaning they specify where the block reward goes for payout distribution. Job Negotiation doesn't touch that. Miners choose the transactions; pools keep the payout plumbing. That's a reasonable division and doesn't reintroduce censorship capability.

The Adoption Friction Nobody Talks About Enough

Stratum V2 with Job Negotiation is not widely deployed. Most hashrate still runs on V1, or on V2 without Job Negotiation enabled. There are real reasons for this that aren't just laziness.

Running a Job Negotiator requires a fully synced Bitcoin node. That's not trivial for a small operation running a few machines in a warehouse. The node needs to stay synced, needs adequate bandwidth, and needs someone competent to configure the transaction selection policy. A solo miner in a low-infrastructure environment may genuinely not have that capacity.

There's also a latency argument. Pool-constructed templates are optimized. A miner building their own template from a slightly stale mempool could occasionally miss high-fee transactions that arrived in the last few hundred milliseconds. Over millions of shares, that's real money. The fee optimization gap is probably small, but it's not zero, and serious miners think about it.

The counterargument, which the Bitcoin development community has broadly and correctly embraced, is that the systemic benefit of censorship-resistant mining outweighs the marginal fee loss. Decentralized template selection is a public good. Individual miners, when their own economics are tight, will undervalue it. That's a standard coordination failure, not a Bitcoin-specific mystery.

The Stratum V2 Reference Implementation (SRI) is open-source and actively maintained. Several pools have announced support. The trajectory is clear even if the timeline is slow.

What This Actually Protects (And What It Doesn't)

Job Negotiation is a strong defense against one specific threat: a pool operator unilaterally excluding transactions based on their own criteria, whether regulatory pressure, ideological preference, or commercial interest.

It is not a defense against a miner choosing to self-censor their own template. If Søren personally won't include certain transactions, Job Negotiation lets him act on that. The protocol enables miner choice; it doesn't mandate any particular policy. A miner running a restrictive template is making a choice, not having one made for them. That distinction matters more than it might seem.

It also doesn't prevent a pool from refusing to work with miners who submit templates the pool dislikes. A pool could, in principle, only accept connections from miners using the pool's own Job Negotiator server, which would recreate V1 dynamics entirely. The real-world check is competition: a pool that imposes those terms loses miners to pools that don't. So ask yourself, when you're evaluating a pool: do they offer genuine Job Negotiation with no template restrictions? Because that's the standard now, and anything less is a deliberate choice on their part.

Stratum V2 doesn't solve the censorship problem through trust or policy. It solves it through architecture. Censorship that requires explicit, auditable rejection is categorically different from censorship that's invisible. One can be called out. The other can't even be proven.

That shift, from silent to legible, is the whole game.