Sur une connexion TCP persistante, le pool envoie jobs et target; le mineur assemble coinbase et en-tête, explore les nonces et soumet des shares. Le protocole ne définit ni paiement ni consensus Bitcoin.
Stratum V1 est une couche applicative entre pool et matériel minier ou proxy. Il ne fait pas partie du consensus pair-à-pair Bitcoin, ne valide pas les blocs et ne définit pas les comptes PPS, FPPS ou PPLNS. [Bitcoin Wiki — Stratum mining protocol] [Braiins — Past and future of mining protocols]
getwork livrait peu de travail par requêtes RPC répétées. En 2012 Marek Palatinus propose une connexion persistante où le serveur pousse chaque job; le pool obtient généralement son block template via getblocktemplate. [Original Stratum mining protocol announcement] [Braiins — Past and future of mining protocols] [BIP 22 — getblocktemplate fundamentals]
Le mineur envoie mining.subscribe et reçoit session, extranonce1 et taille de extranonce2. mining.authorize associe compte ou worker name, mais son mot de passe n’authentifie pas le serveur et ne chiffre pas le TCP en clair. [Bitcoin Wiki — Stratum mining protocol] [Hardening Stratum research paper]
mining.notify transporte job_id, previous block hash, deux parties coinbase, Merkle branches, version, nBits, nTime et clean_jobs. clean_jobs demande d’abandonner les anciens jobs; il ne certifie aucun bloc valide. [Bitcoin Wiki — Stratum mining protocol]
Le mineur place extranonce1 et son extranonce2 entre les parties coinbase, hache la transaction et applique les Merkle branches pour former la racine. Avec prevhash, version, nBits, nTime et nonce il construit l’en-tête de 80 octets pour l’ASIC. [Bitcoin Wiki — Stratum mining protocol] [Bitcoin Developer Guide — Pooled Mining]
mining.set_difficulty fixe un target de pool plus facile; vardiff peut l’ajuster pour une cadence utile. Un hash sous ce target est une share, pas un bloc, sauf s’il satisfait aussi le target réseau Bitcoin plus strict. [Bitcoin Wiki — Stratum mining protocol] [Bitcoin Developer Guide — Pooled Mining]
mining.submit transmet worker name, job_id, extranonce2, nTime et nonce; version rolling peut ajouter un sixième champ. Le pool reconstruit et contrôle, puis accepte ou rejette comme duplicate, low difficulty ou stale. [Bitcoin Wiki — Stratum mining protocol] [BIP 310 — Stratum protocol extensions]
Le V1 original n’avait pas de négociation générique sûre. Le projet BIP 310 assigné en 2018 ajoute mining.configure, masque version-rolling, minimum-difficulty et subscribe-extranonce; chaque extension doit être confirmée. [BIP 310 — Stratum protocol extensions]
V1 circule souvent sur TCP non chiffré: sans protection externe il n’authentifie pas l’endpoint et permet écoute ou détournement de hashrate. Le pool choisit souvent le block template, les full nodes imposent le consensus Bitcoin et les ASIC restent aux mineurs. [Hardening Stratum research paper] [Galaxy Research — Future of Bitcoin mining protocols]
Stratum V2 emploie des trames binaires, un canal cryptographiquement protégé et des rôles séparés; Job Declaration peut ouvrir le choix des transactions. Traducteur ou étiquette V2 ne le prouve pas. Vérifier endpoint, firmware, latence, rejects, failover et template policy. [Stratum V2 Mining Protocol specification] [Braiins Academy — Stratum V2 Manual]
Pour une vision complète, lisez aussi Bitcoin, Minage, Mining Pool, Braiins, Braiins Pool, Marek “Slush” Palatinus. Cette entrée est également citée par Mining Pool, Marek “Slush” Palatinus, Braiins Pool, Stratum V2.