¿Cómo se calcula la cantidad de prueba de trabajo invertida en una cadena?

El documento técnico de bitcoin (página 3) establece

La decisión mayoritaria está representada por la cadena más larga, que tiene el mayor esfuerzo de prueba de trabajo invertido en ella.

No pude encontrar cómo se calcula exactamente esta dificultad.

¿Es la suma de los ceros prefijos de los nonces de cada bloque?


Encontré esta respuesta , pero es demasiado corta para que la entienda.

Respuestas (1)

El trabajo se calcula como work = 2^256 / block_target, como se indica en la respuesta vinculada, que es el valor hash mínimo que cuenta como una prueba de trabajo válida (tenga en cuenta que esto solo cambia cada 2016 bloques). El código fuente para esto es src/chain.cpp L#121 . El trabajo total de la cadena es la suma del trabajo de todos los bloques de la cadena y se calcula aquí: src/validation.cpp L#3713 . Entonces, para visualizar, cuanto más bajo sea el objetivo del bloque, más trabajo se ha realizado.

Ejemplo

Bloque 0 objetivo: 00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Bloque 1 objetivo:00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff

Bloque 0 : Bloque 1 :work = (2^256) / <block 0 hash> = 4.295 × 10^9
work = (2^256) / <block 1 hash> = 4.295 × 10^9

Puedes ver que ambos han hecho la misma cantidad de trabajo. En caso de empate, se aplican las siguientes reglas, consulte https://bitcoin.stackexchange.com/a/37275/60443

  • ¿Cuál se recibió primero? (Esto puede ser diferente para diferentes clientes, por lo que la regla anterior se aplica primero).
  • ¿Cuál tiene una dirección de puntero más grande? (Esto es en gran parte aleatorio y diferente para diferentes clientes).
Faltaba una explicación para "block_target". Ahora entiendo que es el hash de bloque literal.
¿Podría por casualidad proporcionar un enlace al método/línea correspondiente en el código fuente de Bitcoin?
Edité mi respuesta, ya que me equivoqué al usar el hash de bloque para elblock_target
Además, se agregaron enlaces al código fuente.