Al igual que con la minería, ¿qué están resolviendo realmente los mineros de bitcoin? Leí que están resolviendo hashes, pero ¿qué significa eso realmente? ¿Podemos ver lo que están resolviendo? ¿Alguien puede dar un ejemplo de lo que una máquina de minería de bitcoin ve para resolver?
Intentan encontrar un nonce aleatorio (un pequeño dato aleatorio) que entra en un bloque y hace que el bloque tenga un hash (SHA256) que (en binario) comienza con una cierta cantidad de 0. Cuantos más ceros, más raro es el hash. Un buen resultado de hash no es predecible, por lo que debe intentarlo muchas veces para encontrar un buen nonce.
La cantidad de ceros se basa en lo difícil que se supone que es encontrar un bloque. En Bitcoin se ajusta para tener un bloque nuevo cada 10 minutos (en promedio, dada la velocidad a la que se encuentran los bloques anteriores).
Interesante: debido a que los hashes son impredecibles, ¡no importa cómo cambie el nonce! ¡La mayoría de las veces es solo un número que cuenta hacia arriba desde 0!
Aquí hay un bosquejo extremadamente simplificado del problema, pero debería dar una idea bastante buena de cuál es el problema.
Los datos:
Este es el hash del último bloque (reducido a 30 caracteres):
00000000000001adf44c7d69767585
Estos son los hash de algunas transacciones válidas que esperan su inclusión (acortadas).
5572eca4dd4
db7d0c0b845
Y este es el hash de una transacción especial que acabas de crear, que te otorga 25 BTC (la recompensa actual):
916d849af76
Construyendo el siguiente bloque:
Ahora, usemos una aproximación bruta de cómo se vería un nuevo bloque (el real usa formato binario). Contiene el hash del bloque anterior y los hash de esas 3 transacciones:
00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--
¡Ahora hagamos minería a mano! Nuestro objetivo es completar este bloque con un nonce (un pedazo de basura) tal que el hash del nuevo bloque comience con 13 ceros (considerando el hash anterior, ¡parece que 13 ceros es la dificultad actual!).
Minería (intentando finalizar este bloque):
Intentemos con nonce=1 y calculemos el hash del bloque (estoy usando el algoritmo hash md5, pero Bitcoin usa doble sha256):
> echo "00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--1" | md5sum
8b9b994dcf57f8f90194d82e234b72ac
Sin suerte, el hash no comienza con un 0... Probemos con nonce=2
> echo "00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--2" | md5sum
5b7ce5bcc07a2822f227fcae7792fd90
Sin suerte…
…
Si seguimos hasta nonce=16, obtenemos nuestro primer cero inicial.
> echo "00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--16" | md5sum
03b80c7a34b060b33dd8fbbece79cee3
Para nonce=208, ¡obtenemos dos ceros a la izquierda!
> echo "00000000000001adf44c7d69767585--5572eca4dd4-db7d0c0b845-916d849af76--208" | md5sum
0055e55df5758517c9bed0981b52ce4a
Continúe así... Si finalmente encuentra un hash que tiene 13 ceros a la izquierda... ¡usted es un ganador! Otros mineros ahora se basarán en tu bloque, solo tienes 25 BTC.
¡Pero tendrás que ser rápido!
Volver al paso 1...
Si alguien logra construir un bloque antes que tú, tendrás que empezar de nuevo desde el principio con el hash del nuevo bloque (el del ganador).
00000000000001ae00000000000000
es mayor que 00000000000001adf44c7d69767585
<-- esto sería un hash válido.La siguiente es una descripción de la apuesta estadística global que se juega cada 10 minutos más o menos. El intervalo del juego está controlado por la dificultad que dice cuántos "hashes" se necesitan por intervalo.
En otras palabras, el difficulty
y target
define las "probabilidades de la casa" contra su posibilidad de obtener un hash SHA ganador. Es nonce
el área de "rascado".
Cada hash consume electricidad y emite calor, lo que requiere refrigeración adicional.
Esto es lo que se hace con cada hash:
Paso 1
En un nivel alto, el software minero toma una lista de transacciones activas y luego las agrupa en algo llamado "bloque".
O, dicho con más precisión: el software minero convierte todas las transacciones en una vista resumida llamada "raíz merkle" y la codifica, que es representativa de las transacciones.
Paso 2
Luego, el software de minería convierte esto a un formato binario llamado encabezado de bloque , que también hace referencia a los bloques anteriores (también llamado cadena).
Field Purpose Updated when... Size (Bytes)
Version Block version number You upgrade the software and 4
it specifies a new version
hashPrevBlock 256-bit hash of the previous A new block comes in 32
block header
hashMerkleRoot 256-bit hash based on all A transaction is accepted 32
the transactions in the block
Time Current timestamp as seconds Every few seconds 4
since 1970-01-01T00:00 UTC
Bits Current target in compact format The difficulty is adjusted 4
Nonce 32-bit number (starts at 0) A hash is tried (increments) 4
Paso 3:
El hardware minero cambia una pequeña porción de este bloque llamado "nonce".
Paso 4:
El encabezado del bloque se codifica y se compara con el objetivo como si fuera simplemente un número grande como 10,000,000 > 7,000,000 (los números reales son mucho más grandes y en hexadecimal). El objetivo se comprime y almacena en cada bloque en un campo llamado bits.
Un objetivo ampliado se ve así:
Target 0000000000000083ef00000000000000000000000000000000000000000000000
Y el objetivo es asegurarse de que el hash SHA256 del bloque sea menor que este valor. En el siguiente ejemplo, " 83ee
" es más pequeño que " 83ef
"
Para simplificar este concepto, puede aproximar el objetivo contando los ceros iniciales (como explica la otra respuesta aquí). Aquí hay un ejemplo:
Aquí hay un bloque de muestra con transacciones que puede ver en BlockChain.info. Busque en la esquina superior derecha de la página web este hash:
Hash 0000000000000083ee9371ddff055eed7f02348e4eda36c741a2fc62c85bc5cf
Ese hash anterior era de hoy y tiene 14 ceros a la izquierda. Comparemos eso con lo que se necesitaba hace 3 años con el bloque 100 que tiene 8 ceros a la izquierda.
Hash 00000000a8ed5e960dccdf309f2ee2132badcc9247755c32a4b7081422d51899
Resumen
Entonces, al final del día, todo lo que hace un minero es:
¿Quiere ver qué hace Bitcoin-QT cuando encuentra un bloque?... Lo publiqué aquí. . La información en esta publicación lo ayudará a comprender lo que sucedió.
Whenever Nonce overflows (which it does frequently), the extraNonce portion of the generation transaction is incremented, which changes the Merkle root.
La minería proporciona una forma de llegar a un consenso sobre cómo debería ser el libro de transacciones y saber que nadie está haciendo trampa.
Esa es la definición no técnica de minería.
La "autoridad" para el doble gasto es la cadena de bloques. La cadena de bloques consta del historial de todos los bloques de la cadena de bloques más el siguiente bloque de transacciones. El subsidio de recompensa actualmente es de 25 BTC para la parte que envía el siguiente bloque. Pero oye... te gustarían esos 25 BTC (que actualmente valen alrededor de $ 825) como a mí y a todos los demás. Entonces, ¿cómo haces para que no pueda hacer trampa y reclamar el bloque yo mismo?
Bueno, pusiste un sistema en el que tú y yo tenemos que competir. Eso es lo que hace la prueba de trabajo: hace que cuando reclamo la recompensa sea fácil probar que realmente hice el trabajo involucrado. Entonces, para tener un 2% de posibilidades de resolver un bloque, necesito poner el 2% del trabajo de minería. No hay manera de que ponga menos del 2% de todo el trabajo y aun así resuelva bloques al menos el 2% del tiempo (en promedio).
Así, como resultado, cuando se envía un bloque de transacción, todos los pares verifican que no hubo gastos dobles, que se reclamó el monto correcto del subsidio y que el remitente realmente realizó el trabajo necesario para esa solución. Con esas tres reglas, no es necesario que haya una autoridad central que gestione el proceso o que pueda controlar el resultado.
Los mineros adivinan un número objetivo aleatorio que resuelve una ecuación generada por el Protocolo Bitcoin. Por supuesto, las computadoras hacen esta conjetura, no las personas.
La cadena de bloques de Bitcoin utiliza el algoritmo hash seguro SHA-256 para generar números de 32 bytes de la misma longitud de una manera que requiere una cantidad predecible de esfuerzos del procesador. Para recibir una recompensa en criptomonedas (y registrar transacciones "legítimas" en el libro mayor), los mineros están resolviendo hash de bloques que cumplen con ciertos criterios (establecidos por el sistema).
Un "número aproximado" se forma a partir de un hash final del hash del bloque actual, nonce , datos y hash del bloque anterior. Se repite una búsqueda de fuerza bruta hasta que los mineros descubren un hash que es menor que el número objetivo.
Esteban Gornick
usuario10225
gran josh