¿Qué es un bloque?

Sé que bitcoin tiene una cadena de bloques que, según mi mejor representación, es una lista de bloques. Sé que el bloque contiene muchas transacciones. Pero todavía estoy muy perdido en cuanto a qué es un bloque y cómo un bloque puede ser la función de las transacciones en el momento anterior a que se resuelva el bloque y cómo un bloque puede tener cualquier número de transacciones antes de que se resuelva y encerrados en.

También estoy perdido en el proceso de "resolver" un bloque. Sé que requiere computadoras que encripten la transacción. Si un bloque es una transacción múltiple, eso implicaría que tiene que resolver todas las transacciones para obtener el bloque.

@NickODell, similar, pero creo que este es más sobre la estructura de un bloque y el otro sobre cómo construirlo dado el estado de la cadena de bloques.

Respuestas (1)

Hay muchas preguntas en Bitcoin SE sobre bloques, pero, sorprendentemente, no pude encontrar ninguna que explicara explícitamente qué es un bloque.

Un bloque tiene dos cosas: un encabezado de bloque y una lista de transacciones.

Bloquear:

  • Encabezado de bloque
    • Número de versión (entero de 4 bytes)
    • ID de bloque anterior (hash de 32 bytes)
    • Merkle Root (hash de 32 bytes)
    • Hora (entero de 4 bytes)
    • Dificultad (entero de 4 bytes)
    • Nonce (entero de 4 bytes)
  • Lista de Transacciones
    • Número de transacciones en Lista
    • Tx1
    • Tx2
    • ...
    • TxN

En la parte del encabezado del bloque del bloque:

  1. El número de versión es un parámetro que ayuda a actualizar cómo la red trata los bloques.
  2. La referencia al hash del bloque anterior es lo que hace que el grupo de bloques sea una "cadena de bloques".
  3. La raíz de merkle es un hash que se puede usar para probar que una transacción está en el bloque sin proporcionar todos los detalles del bloque (esto es un poco complicado, consulte esto para obtener más información).
  4. El campo de tiempo es para mostrar a la red a qué hora se resolvió el bloque y para ayudar a calcular el parámetro de dificultad.
  5. La dificultad (o nBitscomo se le llama en el código) es una abreviatura de lo difícil que es resolver el bloque. Esencialmente, codifica un valor objetivo y el hash del bloque (cuando se trata como un número entero de 256 bits) debe estar por debajo de ese valor objetivo para que se considere resuelto.
  6. El nonce (número que se usa una vez) es solo un número entero que los mineros pueden cambiar repetidamente para generar un hash en el encabezado y obtener un resultado diferente cada vez, con la esperanza de obtener un hash que esté por debajo del valor de dificultad codificado por el parámetro anterior.

La lista de transacciones es bastante sencilla, es solo la cantidad de transacciones y luego las transacciones en sí mismas concatenadas.

Tomemos por ejemplo el bloque de génesis. Los bytes en bruto son:

0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000

Cuando dividimos esto, podemos ver lo que hay en él:

01000000 // Versión
0000000000000000000000000000000000000000000000000000000000000000000 // Hash bloque anterior
3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a // Raíz Merkle
29ab5f49 // Tiempo
ffff001d // Dificultad
1dac2b7c // Nonce
01 // Número de transacciones
 Tx1:
 01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000

Cuando hash el encabezado del bloque del bloque de génesis, obtienes:

000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

¿Ves cómo comienza con todos estos ceros? Esto se debe a que se realizaron muchos intentos (cambiando el nonce cada vez) hasta que el minero tuvo la suerte de encontrar un nonce que hace que el hash del encabezado del bloque tenga un valor lo suficientemente bajo (observe el hash como un entero codificado en hexadecimal, con el más significativo bits a la izquierda y los menos significativos a la derecha).