<blockquote>
<p><strong>Do the individual miners [...] choose which transactions to include in their block</strong></p>
</blockquote>
<p>According to <a href="https://stratumprotocol.org/" rel="nofollow noreferrer">the relevant website</a>:</p>
<blockquote>
<p>Stratum V2 is the next generation protocol for pooled mining. It increases security, makes data transfers more efficient, and reduces mining infrastructure requirements. <strong>It also introduces three new sub-protocols that let miners select transaction sets and improve decentralization by negotiating with pools</strong>.</p>
</blockquote>
<p>(my emphasis)</p>
<blockquote>
<h2>Job Negotiation Protocol</h2>
<p>A Miner's Template Provider negotiates a block template (which includes the transaction set) with a Pool's Job Negotiator. The Pool can reuse negotiation outcomes across all end-miner connections to reduce computational intensity. A single negotiation can multicast to multiple farms with hundreds of thousands of devices. This protocol is a separate, optional piece of infrastructure from the Mining Protocol and can be provided as a 3rd party service for mining farms. Separating job negotiation as a sub-protocol lets pools terminate negotiation connections independently of mining protocol connections (i.e. share submissions). Work negotiation likely requires, at minimum, validity spot-checks and (potentially) rate-limiting.</p>
</blockquote>
<p>The details are at <a href="https://github.com/stratum-mining/sv2-spec/blob/main/06-Job-Negotiation-Protocol.md" rel="nofollow noreferrer">https://github.com/stratum-mining/sv2-spec/blob/main/06-Job-Negotiation-Protocol.md</a> which includes</p>
<blockquote>
<h2>6.1.4 CommitMiningJob (Client -&gt; Server)</h2>
<p>A request sent by the Job Negotiator that proposes a selected set of transactions to the upstream (pool) node.</p>
<div class="s-table-container">
<table class="s-table">
<thead>
<tr>
<th>Field Name</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>request_id</td>
<td>U32</td>
<td>Unique identifier for pairing the response</td>
</tr>
<tr>
<td>mining_job_token</td>
<td>B0_255</td>
<td>Previously reserved mining job token received by AllocateMiningJobToken.Success</td>
</tr>
</tbody>
</table>
</div>
<p>[etc]</p>
</blockquote>
<p>So yes, miners can negotiate with the pool about the transactions the miner would like to include in the block. Note that support for this is described as optional. Perhaps some pools don't support the job negotiation sub-protocol.</p>

CC BY-SA 4.0
2023-02-06T21:51:04.220Z
2023-02-07T11:21:40.737Z
2023-02-07T11:21:40.737Z
RedGrittyBrick
<p>I want to know how much independence miners have when they join a pool. Do the individual miners create the block headers and choose which transactions to include in their block or is the block just made by the pool operator?</p>
<p>I’ve briefly read that the stratum v2 protocol gives miners some more independence. Was curious to see if anyone here could give me some technical details.</p>

<mining-pools><decentralization><stratum>
How does stratum v2 work?
Marco
# How does stratum v2 work?

(Asked by: username_0 on 2023-02-06)

I want to know how much independence miners have when they join a pool. Do the individual miners create the block headers and choose which transactions to include in their block or is the block just made by the pool operator?

I’ve briefly read that the stratum v2 protocol gives miners some more independence. Was curious to see if anyone here could give me some technical details.

**Tags:** mining-pools, decentralization, stratum


---

## 1 answers

### Answer by username_1 on 2023-02-06. Score: 1 | Accepted answer

> **Do the individual miners [...] choose which transactions to include in their block**

According to [the relevant website](https://stratumprotocol.org/):

> Stratum V2 is the next generation protocol for pooled mining. It increases security, makes data transfers more efficient, and reduces mining infrastructure requirements. **It also introduces three new sub-protocols that let miners select transaction sets and improve decentralization by negotiating with pools**.

(my emphasis)

> ## Job Negotiation Protocol
>
> A Miner's Template Provider negotiates a block template (which includes the transaction set) with a Pool's Job Negotiator. The Pool can reuse negotiation outcomes across all end-miner connections to reduce computational intensity. A single negotiation can multicast to multiple farms with hundreds of thousands of devices. This protocol is a separate, optional piece of infrastructure from the Mining Protocol and can be provided as a 3rd party service for mining farms. Separating job negotiation as a sub-protocol lets pools terminate negotiation connections independently of mining protocol connections (i.e. share submissions). Work negotiation likely requires, at minimum, validity spot-checks and (potentially) rate-limiting.

The details are at <https://github.com/stratum-mining/sv2-spec/blob/main/06-Job-Negotiation-Protocol.md> which includes

> ## 6.1.4 CommitMiningJob (Client -> Server)
>
> A request sent by the Job Negotiator that proposes a selected set of transactions to the upstream (pool) node.
>
> | Field Name | Data Type | Description |
> | --- | --- | --- |
> | request\_id | U32 | Unique identifier for pairing the response |
> | mining\_job\_token | B0\_255 | Previously reserved mining job token received by AllocateMiningJobToken.Success |
>
> [etc]

So yes, miners can negotiate with the pool about the transactions the miner would like to include in the block. Note that support for this is described as optional. Perhaps some pools don't support the job negotiation sub-protocol.


---

