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.
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:
nBits
como 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.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).
Nick ODell
codificador morse