jueves, 6 de mayo de 2021

Anatomía de un bloque

Posted by q3it on jueves, mayo 06, 2021 in
El propósito principal de un bloque es registrar las transacciones. En este bloque de ejemplo simplificado, podemos ver la lista de transacciones que se incluyen.
Los bloques de Bitcoin, por ejemplo, contienen hasta 2.000 transacciones por bloque, pero este número varía entre diferentes cadenas de bloques y depende de los límites del tamaño del bloque. Los tamaños de los bloques suelen estar limitados para evitar la congestión de la red. 

Actualmente Bitcoin tiene un límite de tamaño de bloque de un megabyte. Cada bloque tiene un número único, también llamado altura. Dado que la cadena de bloques es lineal, estos números o alturas se incrementan de nuevo. Sólo puede haber un bloque a una altura determinada. Los bloques también contienen una marca de tiempo, un número extraño llamado "nonce", alguna otra información no listada aquí y críticamente un hash del bloque anterior en la cadena. Ahora, hablaré de uno de los conceptos más importantes de la cadena de bloques, la validez. Verán, no todos los bloques son creados iguales, la gran mayoría de los bloques son inválidos. ¿Pero qué significa eso exactamente? Probablemente han oído hablar de los mineros de Bitcoin. Bueno, encontrar un bloque válido es el trabajo duro que esos mineros hacen cuando extraen. 
Las cadenas de bloques tienen lo que se llama una dificultad, que es esencialmente un ajuste arbitrario que determina lo difícil que es crear bloques. De aquí es de donde viene todo el valor. Si alguien pudiera crear bloques y lanzarlos a la cadena, no habría valor allí, y las redes nunca se pondrían de acuerdo sobre qué bloques deberían ir en la cadena. Haber creado un bloque significa que debes haber hecho un montón de trabajo. Eso es lo que significa prueba de trabajo. Al encontrar un bloque que es válido, has demostrado que el trabajo se ha hecho. 

En el caso de las cadenas de bloques como Bitcoin y Ethereum, el nivel de dificultad puede cambiar para asegurar que los bloques se crean a intervalos regulares. Entonces, ¿cómo funciona todo eso? Un bloque sólo se define como válido si el valor de hash de todo el bloque, siendo el valor de hash un número, está por debajo de otro número de umbral. Ese umbral se establece por la dificultad. Así que, tomamos nuestro bloque, y lo sometemos a un hashazo. Cuando lo procesamos, obtenemos una firma única para todos los datos que contiene. Si cambias cualquiera de los datos, necesariamente cambia el hashs, como lo explique en posts anteriores. La forma de determinar si este bloque es válido, ¿es simplemente preguntar si el hash de este bloque está por debajo del umbral de dificultad? Si vemos que el hash de nuestro bloque es mayor que nuestro número de umbral, este bloque no es válido. 

Cuanto mayor sea la dificultad, menor deberá ser el número de salida del hash para que el bloque sea válido. Dado que los hashes son efectivamente aleatorios, los valores más bajos son más difíciles de encontrar. Es como tirar un dado. Es más difícil tirar un dos o menos que un tres o menos. Puedes pensar que cada dígito de hashs es como tirar un dado de 16 caras. Pero para hacer eso con nuestro bloque, no tiramos los dados, sólo podemos cambiar los datos y ver si obtenemos un hash válido, y hacerlo una y otra vez. ¿Pero qué datos puedes cambiar en tu bloque? Contiene datos importantes de la transacción que no se pueden alterar. Bueno, aquí es donde entra el "nonce". El "noce" está ahí para que los mineros tengan un dato con el que puedan jugar. Pueden cambiarlo al azar para cambiar el hash de salida del bloque hasta que encuentren uno que esté por debajo del umbral de dificultad requerido. Una vez que han encontrado un noce que resulta en que el hash de su bloque esté por debajo del umbral de dificultad, el bloque se considera finalmente válido y puede ser transmitido a la red con ese minero recibiendo una recompensa por su esfuerzo. Este proceso se basa puramente en el azar. Los mineros sólo intentan una y otra vez cambiar el nonce y volver a hacer el bloque y esperar que tengan suerte y encuentren un hash por debajo del umbral de dificultad. Actualmente en la cadena de bloques de Bitcoin, los mineros tienen que encontrar hashes que empiecen con 19 ceros.

Es tan difícil como tirar un dado de 36 caras y obtener todos los seis. Así que, encontrar un bloque es muy difícil y un gran problema. Es tan difícil que con un ordenador de minería de primera línea de hoy en día funcionando 24/7, podrías esperar extraer un bloque válido aproximadamente una vez cada 40 años. Ten en cuenta que si intentas cambiar cualquiera de los datos de un bloque una vez que lo has extraído y has encontrado un no-conocido que funciona, haces que tu bloque sea inválido una vez más, y tienes que empezar de nuevo encontrando un nuevo no-conocido que vaya con los nuevos datos. Por eso los bloques son tan difíciles de alterar después de haber sido minados. 

Como nota, las recompensas por la minería pueden ser sustanciales, la recompensa actual por encontrar un bloque en la red de Bitcoin es de 12,5 Bitcoin, o actualmente alrededor de 80.000 dólares. No es de extrañar que haya mucha competencia. Cuando otros nodos de la red reciben un bloque válido, pueden comprobar fácilmente su validez, simplemente haciendo que el bloque se verifique y asegurándose de que está por debajo de la dificultad objetivo. Si lo está, se añade a su cadena de bloques y el trabajo comienza en el siguiente bloque, y ese siguiente bloque incluirá el hash del bloque anterior en sus propios datos, lo que asegura la continuidad de la cadena de bloques.