Stratum V1 es un protocolo de comunicación para la minería conjunta de Bitcoin. El pool envía trabajo por una conexión que permanece abierta y los equipos devuelven resultados. El protocolo no determina por sí solo la recompensa ni las reglas de validez de los bloques.
Eva ha conectado un ASIC, una máquina especializada en minar Bitcoin, a un pool. El pool coordina a los mineros que buscan el siguiente bloque, un conjunto de transacciones que se añadirá al historial de Bitcoin. Pero la potencia de cálculo no basta: el equipo necesita instrucciones y el pool debe saber cuánto trabajo aporta Eva. Stratum V1 organiza esa conversación. El pool envía tareas para buscar el siguiente bloque; la máquina calcula y devuelve resultados parciales. Como el idioma de una llamada telefónica, el protocolo permite entenderse a ambas partes. No fija el precio del trabajo. Eso corresponde a las reglas de remuneración del pool, mientras que los nodos de Bitcoin verifican la validez del bloque encontrado. [4] [2]
A medida que las máquinas ganaban potencia, el antiguo getwork resultaba menos adecuado. Entregaba pequeñas porciones de trabajo y obligaba a pedir más con frecuencia. Marek Palatinus presentó una nueva propuesta el 11 de septiembre de 2012. Stratum mantiene abierta la conexión para que el pool envíe cambios sin esperar otra solicitud, reduciendo el tráfico de coordinación. No sustituye todas las piezas de la minería: el pool puede seguir obteniendo un bloque candidato de un nodo Bitcoin mediante getblocktemplate, descrito en BIP 22. [11] [3] [5]
El software de control suele enviar primero mining.subscribe para solicitar tareas. Recibe datos de la conexión e información que distingue sus cálculos. Después, mining.authorize asocia la máquina a una cuenta. Aquí worker es el identificador de un equipo o conexión, no un empleado. Eva puede distinguir así varias máquinas bajo una misma cuenta. La contraseña enviada, si la hay, no autentica por sí sola al servidor ni cifra la comunicación. Iniciar sesión correctamente no demuestra que la conexión sea segura. [2] [13]
mining.notify trae una nueva tarea identificada por job_id: datos del bloque anterior, información sobre transacciones, la hora y otros campos de la cabecera, un conjunto reducido de datos que describe el bloque. La señal clean_jobs es importante. Con true hay que abandonar las tareas anteriores; con false se puede continuar la anterior mientras se pasa a la nueva. Por tanto, no todo mensaje nuevo invalida automáticamente los resultados en curso. Además, la tarea es una propuesta sobre la que calcular, no un bloque ya válido. [2] [13]
Esta parte es técnica; no hace falta conocer cada campo para conectar un equipo normal. El pool entrega dos fragmentos de la transacción coinbase, que paga la recompensa del bloque y no tiene relación con la plataforma de intercambio del mismo nombre. El software inserta entre ellos extranonce1, asignado por el pool, y un extranonce2 propio para generar más variantes. Con esa transacción y las Merkle branches recibidas, valores intermedios de un resumen de transacciones en forma de árbol, calcula la Merkle root. Junto con la referencia al bloque anterior, la versión, la hora y el límite codificado que debe cumplir el hash, forma la base de una cabecera de 80 bytes. El ASIC calcula repetidamente su hash, una huella numérica, variando nonce, un número que permite probar nuevos candidatos. [2] [4] [13] [14]
Encontrar un bloque completo es poco frecuente. El pool establece un umbral más fácil, llamado target. Un resultado que lo cumple es una mining share, una prueba del trabajo realizado. La mayoría no alcanza el umbral más exigente de la red Bitcoin; alguna sí puede hacerlo y contribuir a un bloque válido. mining.set_difficulty y el ajuste automático vardiff cambian la dificultad de las shares para que lleguen con una frecuencia razonable. No cambian la dificultad de la red. Cumplir una condición más difícil requiere, en promedio, más cálculos; por eso ese resultado pesa más al medir el trabajo. Menos shares, pero más difíciles, no implican por sí solas menor pago: también importan su peso y las reglas del pool. [2] [4] [13]
Mediante mining.submit, el equipo envía el identificador del worker, job_id, extranonce2, nTime (la marca de tiempo de la cabecera) y nonce. El pool reconstruye y comprueba el resultado. duplicate indica trabajo repetido; low difficulty, un resultado insuficiente; stale, trabajo sobre una tarea que ya no se acepta. Eva vigila por ello los rechazos y los retrasos de conexión, además de la velocidad del equipo. Una share aceptada todavía no es un pago a la cartera: Stratum comunica trabajo, mientras que la acreditación y el pago de recompensas siguen sus propias reglas. [2] [13]
BIP 310, de 2018, describe cómo negociar funciones adicionales con mining.configure. El documento comprobado el 17 de octubre de 2026 sigue marcado como Draft, es decir, borrador. Version-rolling permite modificar únicamente los bits acordados de la versión de la cabecera; una vez negociado, añade un sexto campo a mining.submit. No autoriza a alterar arbitrariamente las reglas de Bitcoin. minimum-difficulty y subscribe-extranonce tratan, respectivamente, la dificultad mínima solicitada para las shares y las notificaciones de nuevos valores extranonce. Negociar funciones evita malentendidos entre programas, pero no cifra la comunicación. [6]
V1 suele utilizar TCP sin cifrar. Sin protección adicional, alguien situado en la ruta de comunicación puede leer o modificar mensajes e intentar desviar el trabajo. El estudio Hardening Stratum de 2017 examinó estos riesgos en la práctica. Afectan a la conexión entre equipo y pool, no significan romper Bitcoin. En la configuración habitual, el pool también selecciona las transacciones del bloque. Ser dueña de la máquina no significa que Eva elija ese contenido. Los nodos de Bitcoin siguen rechazando bloques que incumplen las reglas, aunque los produzca un pool grande. [7] [4]
Stratum V2 incorpora mensajes binarios más compactos y una conexión protegida mediante criptografía. Su componente separado Job Declaration puede permitir que el minero proponga su propia selección de transacciones para un bloque si ambas partes lo admiten y utilizan. Un traductor V1/V2 o la etiqueta V2 no bastan para demostrarlo. Eva debe comprobar la compatibilidad del firmware, la dirección correcta del servidor, la protección de la conexión, los rechazos y las conexiones de respaldo. La idea central de V1 es sencilla: entregar tareas, demostrar el cálculo y distinguirlo de elegir el contenido del bloque y pagar recompensas. [8] [12] [10]
Para obtener la imagen más completa, lee esta entrada junto con Bitcoin, Minería, Mining Pool, Braiins, Braiins Pool, Marek «Slush» Palatinus. También enlazan con esta entrada Mining Pool, Marek «Slush» Palatinus, Braiins, Braiins Pool.