¿Cómo se verifica un bloque manualmente?

Según tengo entendido, simplemente necesita usar una función SHA256 para codificar el encabezado del bloque (hash de bloque y raíz de merkle) y luego agregar el nonce al final como se explica en este artículo .

Sin embargo, no puedo obtener el siguiente hash de bloque correcto. Usando el bloque #505400 :

Hash : 00000000000000000023b89dd18f6be5a6c03a71cd864ccbdf024683114b9ce3

Merkle root : a3defcaa713d267eacab786c4cc9c0df895d8ac02066df6c84c7aec437ae17ae

Nonce : 2816816696

Next block hash : 0000000000000000007625ff74171cf53e301c3e5013bf2184e2629a2da0fc8d

Lo que estoy esperando: sha256 (Hash + Merkle Root + Nonce) = Next Block Hash

Sin embargo me sale esto:10345cb85ffed406a47e1faf31eb8ba1160aac0fbaae3cae0cd66889f9c9f49e

¿Qué hice mal?

Respuestas (1)

Esa no es la forma en que se crea un encabezado de bloque. El encabezado del bloque se construye como

  1. la versión
  2. el hash del bloque anterior
  3. la raíz de merkle
  4. la marca de tiempo
  5. el campo nBits
  6. y el nonce.

Una vez serializado en bytes, el encabezado se codifica dos veces con SHA256, no solo una vez.

Un error común es aplicar hash a la cadena de representación hexadecimal de los bytes, debe aplicar hash a los bytes mismos .

Consulte aquí para obtener más información: https://en.bitcoin.it/wiki/Block_hashing_algorithm

El hash es el hash de ese bloque . No proporciona el hash del siguiente bloque que le sigue, no hay forma de saber cuál será el siguiente hash del bloque y hay muchos hash posibles que podría ser.