¿Cómo funciona la minería en pool y en qué se diferencia de la minería en solitario?
En este artículo, vamos a explicar cuál es la diferencia entre la minería en pool y en solitario. Ya hemos hablado de la minería en pool y de la minería en solitario. Pero en este artículo vamos a profundizar un poco más.
Hemos hablado de la Prueba de Trabajo en este artículo. Hemos aprendido que el minero está usando un número nonce para manipular la salida del hash hasta encontrar la solución correcta. Esto sólo se aplica (parcialmente) en el caso de que el minero sea un minero en solitario - participando en la resolución/validación del bloque de transacciones por su cuenta - antigua forma de minar antes de los pools.
Si empezamos a hablar de la minería en un pool, las cosas empiezan a complicarse un poco más. Todo el trabajo que el minero hizo cuando minaba en solitario debe ser distribuido a otros mineros y evitar que dos o más mineros resuelvan el mismo nonce.
Una vez que entiendas el principio de la distribución del trabajo del pool a los mineros todo será claro y fácil de entender lo que es un trabajo de minería.
¿Cómo adivina el minero los números de nonce cuando mina en solitario?
En primer lugar, refresquemos nuestros conocimientos sobre la minería en solitario.
El nodo (que también es en realidad un minero en la cadena de bloques) "recopilará" todas las transacciones que estén pendientes de ser procesadas y las incluirá en un bloque. Esto es lo que se llama un bloque de transacciones. Sólo incluirá una cierta cantidad de transacciones porque un bloque de Bitcoin tiene un límite de cuántas transacciones pueden incluirse en el bloque.
Entonces el minero empezará a adivinar el número nonce hasta que la salida del hash de las transacciones y el número nonce empiece con una cierta cantidad de ceros (dificultad de la red).
Una vez encontrada la salida de hash correcta, el minero difunde la solución a la red y si todo es correcto, obtiene la recompensa del bloque.
Puede utilizar el siguiente formulario y adivinar el número de nonce hasta que se encuentre la salida de hash correcta. Empiece introduciendo datos aleatorios en el campo DATA y luego adivine el número nonce hasta que el formulario se vuelva verde. O puede pulsar el botón MINE para encontrar el número nonce automáticamente.
¿Cómo adivina el minero los números nonce al minar en un pool?
Bien, ahora sabemos que el minero debe adivinar/manipular los números de nonce para obtener la salida de hash correcta. Pero, ¿qué ocurre si la dificultad requerida (número de ceros en el formulario anterior) es demasiado grande? El minero que estaba minando en solitario tendrá una menor probabilidad de encontrar el número nonce correcto y, por tanto, una menor frecuencia de acertar un bloque.
Al minero en solitario se le ocurre pedir a sus amigos que empiecen a minar en grupo -un grupo de mineros se conoce como pool. Ahora el pool de mineros aparecerá más fuerte en el blockchain y tendrá una mayor probabilidad de encontrar el número nonce correcto y obtener la recompensa del bloque, aumentando así la frecuencia de los pagos.
¿Pero cómo puede el operador del pool asegurarse de que los mineros no están adivinando el mismo nonce? Si 2 o más mineros están adivinando el mismo rango de nonces, o tienen la misma posición inicial (por ejemplo, todos empiezan a adivinar el nonce en 0 y lo incrementan en 1) entonces estarían adivinando los mismos números de nonce. Si todos los mineros tuvieran la misma velocidad de adivinación (hashrate) entonces no habría diferencia en minar juntos ya que todos encontrarían la solución aproximadamente al mismo tiempo.
En cambio, el operador del pool repartiría la "posición inicial" del nonce a cada trabajador. El pool puede distribuir el trabajo entre todos los trabajadores dividiendo el número de nonce en dos partes. Esto permite al pool enviar una parte del rango de nonce al primer minero y la otra parte al segundo. De este modo, se cubre un mayor rango de forma más rápida.
Explicación detallada
Como se ve en el formulario anterior, el nonce es un número aleatorio que se adivina. Para simplificar, diremos que el número nonce que resuelve el bloque imaginario de la transacción puede ir de 0 a 100 000.
Si tenemos un minero, minando en solitario, empezará a adivinar el nonce en 0 y trabajará hasta 100 000. Uno de los números de nonce entre 0 y 100 000 creará una salida de hash que coincida con la dificultad objetivo (cantidad de ceros al principio de la salida de hash). Una vez que el minero encuentra el nonce correcto, obtiene la recompensa.
Si el pool distribuye el trabajo entre varios mineros, el pool dividirá el rango de nonce en dos partes. La primera parte del mensaje será un valor fijo que recibe el minero, por ejemplo 20 000 (el rango de 20 mil). La segunda parte del mensaje (parte variable) será el 20 000 (cientos) que pueden ser manipulados por el minero. El minero sólo será responsable de adivinar la segunda parte.
Ejemplos de nonces que uno de los mineros va a adivinar en nuestro caso es: 20+001, 20+002, 20+003, hasta 20+999. El segundo minero podría estar adivinando nonces en el 30 000 (el rango de los 30 mil). Por ejemplo, 30+001, 30+002 hasta el 30+999. En nuestro ejemplo hipotético, podría haber 99 (01 000 a 99 000) mineros en total conectados al pool.
¿Cómo se divide el nonce?
El nonce se divide en dos partes llamadas extranonce1 y extranonce2.
El primer mensaje se llama extranonce1 y es siempre diferente, pero fijo, para cada minero conectado al pool.
El segundo mensaje se llama extranonce2 y es la parte del nonce que debe manipular el minero para intentar resolver los datos de entrada del bloque.
Podemos decir que la diferencia en el hashing entre la minería en solitario y la minería en pool es que el minero está adivinando todo el rango de nonce cuando hace minería en solitario, mientras que el minero que hace minería en pool sólo está adivinando una parte del rango de nonce.
Otra parte importante de la minería de pool es la dificultad. Cuando se trata de minería en solitario, el minero en solitario sólo se preocupa de la dificultad de la red objetivo. Mientras que los mineros del pool utilizan la dificultad objetivo proporcionada por el pool y no por la red. La dificultad objetivo del pool es siempre menor que la dificultad objetivo de la red.
Por ejemplo, si la dificultad de la red objetivo requiere 10 ceros al inicio de la salida de hash, la dificultad objetivo del pool podría requerir sólo 2 ceros al inicio de la salida de hash. En este caso la salida del hash debe comenzar con 2 ceros, pero no exactamente 2 ceros. El nonce que coincida con la dificultad del pool también podría coincidir con la dificultad de la red. Si esto ocurre, el sondeo llegará al bloque y distribuirá las recompensas a todos los mineros en función del trabajo aportado.
En el caso de que el minero haya agotado todo el rango de nonce que se le asignó del pool antes de encontrar la solución, entonces la dificultad del pool objetivo es demasiado alta para el minero (o al contrario, el hashrate del minero es muy alto)
Puedes consultar este formulario y ver cómo los mineros están aportando trabajo al pool. En primer lugar, introduzca datos aleatorios en el campo Datos de transacción, luego seleccione la dificultad de red deseada y haga clic en MINAR.
Los mineros adivinarán o recorrerán en bucle todas las extranonce2 disponibles hasta encontrar la solución. Si no se encuentra la solución, hay que aumentar la extranonce1.
Obsérvese que en el formulario falta la dificultad de pool por ser más fácil de representar. La dificultad de pool permitiría a los mineros encontrar acciones más rápidamente y así conseguir aportes aceptados antes de encontrar un bloque (dificultad de red). Si la dificultad del pool es igualada, no significa necesariamente que la dificultad de la red será igualada o encontrada. Pero podría serlo. Los aportes aceptados permiten al pool saber cuánto trabajo ha aportado cada minero y distribuir la recompensa de forma justa.
Tenga en cuenta que los ejemplos anteriores están sobre simplificados y se utilizan para facilitar la representación.
¡Como siempre, no dudes en unirte a nuestro servidor Discord y subredit!