¡No confíes, verifica!

¿Qué es la prueba de tasa de hash?

La prueba de tasa de hash es un método desarrollado por Slush pool con el objetivo de demostrar que el hashrate total declarado por el operador del pool es exacto.

¿Por qué es útil tal prueba?

Hasta hace poco, no era posible la verificación por parte de un tercero independiente de la tasa de hash que el pool ha estado publicando. Los mineros de Bitcoin han tenido que confiar en que el operador del pool sea honesto. Pero hemos decidido ser aún más transparentes y comenzar a publicar datos más completos. Dicha transparencia y un conjunto de datos más completo permitirán a todos responder las siguientes preguntas y también realizar algunas investigaciones de datos interesantes.

  • ¿Alguna vez te has preguntado si la tasa de hash del pool es precisa y si el pool no engaña a los mineros en los pagos?

  • ¿Experimentó un período de "mala suerte" con el pool y cuestionó la honestidad del operador del pool?

  • ¿Le gustaría comprobar la "suerte" del pool en diferentes niveles de dificultad?

  • ¿Está interesado en una distribución bastante exacta de la votación del BIP y más por venir?

  • Explicación básica

    Como se mencionó anteriormente, hemos comenzado a recopilar datos más precisos con ciertas características únicas de nuestros mineros. Estos datos no se pueden falsificar porque se debe realizar una cierta cantidad de trabajo para que se generen. Puedes imaginarlos como un dato (hashes) que no cumplía con los criterios para ser validado como un bloque regular pero que estaban muy cerca con sus características.

    Si analiza dichos datos, puede verificar de forma independiente la tasa de hash total del pool. Si está interesado en una explicación más detallada, lea las siguientes secciones de nuestro manual donde puede encontrar un script de Python simple y comentado para leer y validar nuestros datos publicados que harán los cálculos por usted. Su resultado principal es una tasa de hash promedio del grupo basada en nuestros datos publicados. Dado que el script es de código abierto, todos pueden ejecutarlo en su propia computadora. Además, se puede analizar fácilmente si hace lo que dice.

    Proceso y cronograma de publicación de conjuntos de datos

    En primer lugar, definiremos y publicaremos un número, límite de dificultad (actualmente 10⁶).

    Cuando recibamos un resultado del trabajo de minería, lo validaremos como de costumbre y si su dificultad es al menos el límite de dificultad mencionado anteriormente, lo recopilaremos para su publicación.

    Cada hora, publicaremos un archivo comprimido con todos los candidatos de bloque recopilados de todos nuestros servidores juntos, pre-procesados para la comodidad del usuario.

    Debido a que publicaremos todas las acciones con cierta dificultad y más, se puede calcular cuánta tasa de hash realmente tenemos y se gasta en minería productiva. Es el mismo cálculo que hace el grupo para estimar la tasa de hash de cada minero, solo que se extiende a la escala del pool.

    Conjunto de datos: qué tipo de datos encuentra allí

    Proporcionaremos encabezado de bloque completo + rama del merkle + transacción de coinbase para cada envío recopilado en formato JSON. Para que cualquier interesado pueda validarlo por completo. P.ej. se puede comprobar que la dificultad está resuelta, el trabajo se gastó en las previas correctas, n veces son correctas, las presentaciones son únicas, etc., todos los detalles técnicos. Lo importante es que se puede ver que el trabajo se realizó para nuestro grupo, al encontrar el marcador "/ slush/" en coinbase y mediante la salida de la transacción de coinbase.

    Nota: Hemos definido el límite de dificultad de una manera que nos permite publicar suficientes datos que muestren con bastante precisión la tasa de hash del grupo total y, por otro lado, no demasiados datos para permitir que alguien los descargue regularmente.

    Explicación técnica

    Para comprender la explicación técnica, es útil comprender cómo funciona la función de hash de Bitcoin, qué datos recopila el pool de sus mineros y cómo el pool estima la tasa de hash de sus mineros.

    La prueba de tasa de hash del grupo es análoga a una prueba de la tasa de hash de cada minero que se envía al grupo. La única diferencia es quién le está probando a quién. En el primer caso, los datos se envían desde los mineros al grupo, mientras que en el segundo caso el operador del grupo publica los datos recibidos por los mineros. Los principios del cálculo siguen siendo los mismos.

    Función hash

    La función hash es, en el contexto de Bitcoin, la función doble-SHA256  que toma un bloque de datos y devuelve (genera) un número  de longitud fija con un valor entre 0 to 2²⁵⁶. Incluso un pequeño cambio en el bloque de datos (es decir, se cambia un bit) dará como resultado una salida hash completamente diferente. Cada valor hash en el rango de salida se genera con la misma probabilidad, que es una propiedad importante de esta función.

    Cada valor de rango de salida tiene la siguiente probabilidad :

    ¿Cómo funciona el cálculo de la tasa de minería y hash?

    1. El Pool está enviando trabajo a los mineros en forma de plantillas de encabezado de bloque 80B casi completas. Al encabezado le falta una pequeña parte que debe completarse con los datos aleatorios "correctos".Básicamente, la minería es el proceso de hash del encabezado del bloque repetidamente, cambiando esos datos aleatorios en el encabezado del bloque, hasta que el hash resultante coincida con un objetivo específico. Dicho objetivo viene dado por la dificultad de la red y se ajusta regularmente para mantener el tiempo de generación de bloques en 10 minutos.

    2. Si el minero encuentra el hash inferior a 2²⁵⁶ / 2³² (que es una vez 2³² intentos) envía el bloque de encabezado 80B de regreso al grupo como resultado de su trabajo. Tal prueba de trabajo se llama Share. Con base en esta información, el grupo puede verificar que el minero está funcionando e incluso calcular el poder de hash de dicho minero. Supongamos que el minero envió 100 de esos 80B candidatos para el bloque en un minuto.

    El Pool puede calcular fácilmente que el minero tuvo que intentar

    hashes en promedio. Por lo tanto, significa que la tasa de hash del minero es de 7.19 Gh/s.

    El valor de 2³² se eligió arbitrariamente en el pasado, pero es estable y hace que una parte esté bien definida. En realidad, la prueba del valor del trabajo puede variar de un minero a otro, pero es solo un detalle de implementación. Lo importante es que con envíos regulares y el límite conocido del trabajo enviado, el pool puede calcular el número de intentos que el minero tuvo que hacer en el tiempo dado.

    3. Una vez que el minero envía el recurso compartido con un valor hash tan bajo que también cumple con el límite más estricto para el bloque, el pool publica los datos en la red Bitcoin. Se crea un nuevo bloque de Bitcoin. El límite para el resultado de la función hash que satisface la condición de bloque es menor en varios órdenes. Significa que encontrar tal resultado requiere mucho más trabajo. El pool solicita datos con más frecuencia para que el cálculo de la tasa de hash sea más preciso.

    Analogía del lanzamiento de dados

    Imaginemos un juego en el que los jugadores lanzan un dado repetidamente, tratando de obtener un valor válido en los dados. Se sabe de antemano cuántos lados N tiene el dado y los valores que se cuentan como L (1 ≤ LN). Además se sabe cuántas marcas que representan valores válidos lanzados hay en el papel C. . Lo que NO se conoce es el recuento de lanzamientos de dados H, que fueron necesarios para generar marcas en el papel. En otras palabras, NO se sabe cuánto trabajo se necesitó para realizar el trabajo. Sin embargo, el recuento de lanzamientos se puede estimar fácilmente de la siguiente manera:

    La relación N / L se puede considerar como un recuento promedio de lanzamientos por marca. En realidad, cuando CL son lo suficientemente grandes, el EH no es diferente del H real (sus límites son iguales). Por lo tanto, podemos sustituir EH por H  en nuestros cálculos. En términos simples, si el jugador tira lo suficiente y el número de marcas es enorme, es fácil determinar el número de intentos necesarios con una desviación arbitrariamente pequeña.

    Y ahora lo que más importa. El cálculo de la tasa de minería y hash para un minero en particular es equivalente a la analogía del lanzamiento de dados con las siguientes sustituciones:

  • Dados = Función hash

  • Valores de dados1N = Valores de la función hash en el rango 0 − 2²⁵⁶⁻¹

  • Una tirada de dados = Un cálculo hash sobre el encabezado del bloque candidato (80B)

  • Límite L en el valor enrollado, cuando marcamos el valor = Número del rango 2²⁵⁶ / 2³² determinando la probabilidad de envío del trabajo

  • Marca en el papel  = encabezado de bloque único con un valor hash inferior al límite L

  • Número de marcasC = Número de candidatos de bloque 80B presentados por el minero

  • Tiradas de dadosH = Recuento de intentos de candidatos de bloque únicos, por lo tanto, trabajo real

  • Número estimado de tiradas de dados EH = Conjetura del pool con respecto al trabajo realizado por el minero

  • •El último elemento de la lista anterior es probablemente el más importante. La prueba de la tasa de hash del minero se observa indirectamente midiendo el trabajo que ha enviado el minero. El pool puede calcular el EH fácilmente y, por lo tanto, sabe cuál es la tasa de hash probable del minero. Es crucial para el operador del pool que el minero no pueda engañar a los datos enviados de ninguna manera. La razón es simple, cada bloque enviado representa un dato único. Descubrirlo requiere un cierto número de intentos (N / L). No se puede alterar de ninguna manera debido a las propiedades de la función hash descritas anteriormente. Siempre que el minero envíe suficientes resultados, el operador del pool puede calcular la tasa de hash del minero con precisión arbitraria.

    Las matemáticas detrás de escena

    Definamos L = 2²⁵⁶ / 2³²⁺¹⁰ para todo el pool. Se publicará cada candidato de bloque (80B) recibido por el pool cuyo valor hash sea menor o igual que L (Por lo tanto, el pool publicará cada 2¹⁰ share en promedio, lo que significa cada 2⁴² hash probado). Los datos se publicarán cada hora y la cantidad de hashes publicados es Q.

    La tasa de hash esperada del pool EHr se puede calcular fácilmente utilizando la siguiente fórmula:

    donde C = Q / 3600 y define un número promedio de candidatos de bloque por segundo y L un valor establecido arbitrario.

    Se puede concluir que la tasa de hash depende linealmente del número de candidatos de bloque publicados. Que es exactamente lo que cabría esperar.