93 / 736SV1

Stratum V1

How a mining machine talks to its pool

Stratum V1 is the shared language of a mining machine and its pool: it delivers work, returns results and makes contributed work measurable. Marek Palatinus, known as Slush, introduced it in 2012.

Stratum V1 is a communication protocol for pooled Bitcoin mining. The pool sends work over a connection kept open, and mining equipment returns results. The protocol itself determines neither the reward amount nor the rules that make a Bitcoin block valid.

Eva has plugged in an ASIC, a machine built specifically to mine Bitcoin, and connected it to a pool. The pool coordinates miners working to find the next block, a batch of transactions to add to Bitcoin’s history. Computing power alone is not enough: the machine needs instructions, and the pool needs to know what work Eva contributed. Stratum V1 handles that conversation. The pool supplies work for finding the next block; the machine calculates and returns intermediate results. Like the language of a telephone call, the protocol lets both parties understand one another. It does not set the price of the work. Separate pool payment rules do that, while Bitcoin nodes check whether a discovered block is valid. [4] [2]

As mining machines grew faster, the older getwork method became a poor fit. It delivered small portions of work, forcing equipment to request more frequently. Marek Palatinus announced a new proposal on 11 September 2012. Stratum keeps the connection open so the pool can send updated work without waiting for another request, reducing communication overhead. This does not replace every other part of mining: a pool may still obtain a candidate block from a Bitcoin node using getblocktemplate, described in BIP 22. [11] [3] [5]

The machine’s control software usually begins with mining.subscribe, a request to receive work. It receives connection details and information that distinguishes its calculations. A mining.authorize message then associates it with an account. Here, worker means an identifier for a device or connection, not an employee. Eva can distinguish several machines under one account. Any password sent in this message does not, by itself, authenticate the server or encrypt communication. A successful login therefore does not establish a secure connection. [2] [13]

A mining.notify message brings a new task identified by job_id. It supplies the link to the previous block, transaction-related data, time and other information for the block header, a compact set of data describing the block. The clean_jobs flag matters: true tells the device to abandon previous tasks; false allows it to continue the previous task while moving to the new one. Receiving a new message therefore does not automatically invalidate every result in progress. The assignment still needs further computation; it is not an already valid block. [2] [13]

This section is technical; connecting an ordinary machine does not require learning every field. The pool supplies two pieces of the coinbase transaction, which pays the block reward and is unrelated to the exchange of the same name. Software inserts pool-assigned extranonce1 and its own extranonce2 between those pieces, producing more work variations. It combines the transaction with supplied Merkle branches, intermediate values in a tree-shaped summary of transactions, to calculate the Merkle root. Together with the previous-block reference, version, time and the encoded limit for the required hash, that forms the basis of an 80-byte header. The ASIC repeatedly calculates its hash, a numerical fingerprint, while changing nonce, a number used to try further candidates. [2] [4] [13] [14]

Finding a whole block is rare. The pool therefore sets an easier result threshold, called a target. A result meeting it is a mining share, evidence of work performed. Most shares do not meet Bitcoin’s harder network threshold; occasionally one does and may help produce a valid block. The mining.set_difficulty message and automatic vardiff adjustments change share difficulty so results arrive neither too frequently nor too rarely. They do not change network difficulty. A harder condition takes more calculations to meet on average, so a result meeting it carries more weight when measuring work. Fewer, harder shares do not inherently mean less pay: their weight and the pool’s payment rules also matter. [2] [4] [13]

Through mining.submit, the device sends the worker identifier, job_id, extranonce2, nTime (the timestamp in the header) and nonce. The pool reconstructs and checks the result. A duplicate is repeated work, low difficulty means an insufficient result, and stale means work on a task no longer accepted. Eva therefore watches rejected results and connection delays as well as machine speed. Even an accepted share is not a wallet payout: Stratum handles work, whereas crediting and paying rewards follow separate rules. [2] [13]

BIP 310, introduced in 2018, describes negotiating additional capabilities with mining.configure. The document checked on 17 October 2026 still has Draft status. Version-rolling permits changes only to agreed bits of the header’s version; once negotiated, it adds a sixth field to mining.submit. It does not allow arbitrary changes to Bitcoin’s rules. Other options, minimum-difficulty and subscribe-extranonce, concern a requested minimum share difficulty and notifications of new extranonce values. Capability negotiation prevents misunderstandings between programs; it does not itself provide encryption. [6]

V1 commonly runs over unencrypted TCP. Without additional protection, someone on the communication path may read or alter messages and try to redirect mining work. The 2017 research paper Hardening Stratum examined these risks in practice. This concerns the machine-to-pool connection, not breaking Bitcoin. In the usual setup, the pool also chooses the block’s transactions. Owning her equipment does not mean Eva chooses its block contents. Bitcoin nodes will still reject a block that breaks their rules, even if a large pool produced it. [7] [4]

Stratum V2 introduces more compact binary messages and a cryptographically protected connection. Its separate Job Declaration component can let miners propose their own selection of transactions for a block when both sides support and use it. A V1-to-V2 translator or a V2 label alone does not demonstrate that ability. Eva should therefore check firmware support, the correct server address, connection protection, rejected results and backup connections. The central idea of V1 remains straightforward: deliver work, demonstrate computation, and distinguish both from choosing block contents and paying rewards. [8] [12] [10]

For the clearest picture, read this entry together with Bitcoin, Mining, Mining Pool, Braiins, Braiins Pool, Marek “Slush” Palatinus. The reverse links also lead from Mining Pool, Marek “Slush” Palatinus, Braiins, Braiins Pool.

DOC · 001Original Stratum mining protocol announcementPrimary DOC · 002Bitcoin Wiki — Stratum mining protocolDocumentation DOC · 003Braiins — Past and future of mining protocolsPrimary DOC · 004Bitcoin Developer Guide — Pooled MiningDocumentation DOC · 005BIP 22 — getblocktemplate fundamentalsPrimary DOC · 006BIP 310 — Stratum protocol extensionsPrimary DOC · 007Hardening Stratum research paperPrimary DOC · 008Stratum V2 Mining Protocol specificationPrimary DOC · 009Galaxy Research — Future of Bitcoin mining protocolsDocumentation DOC · 010Braiins Academy — Stratum V2 ManualDocumentation DOC · 011Slush — Stratum proposal, 11 September 2012Primary DOC · 012Stratum V2 — Job Declaration ProtocolPrimary DOC · 013Original Stratum protocol specification (archived)Primary DOC · 014Bitcoin Developer Reference — Block HeadersPrimary
Revised: Source-first · No investment advice