Crypto Academy / Season 3 / Week 4 - Homework Post for [@pelon53]: Root Hash y Árbol Merkle
Hola apreciados lectores. Les doy la bienvenida a mi vigésima tercera participación en esta SteemitCryptoAcademy, que ahora va por la cuarta semana de su tercera temporada.
Aunque la semana pasada no pude participar por diversas ocupaciones personales, esta semana vengo con esta tarea del profesor @pelon53, a hablarles acerca de una de las bases de las criptomonedas (y de tantas otras cosas): El árbol Merkle.
Sin más dilaciones, empecemos:
1.- Explique en detalle el hash rate.
Hash rate es un elemento fundamental en la minería de una criptomoneda, ya que se refiere al poder de computo dentro de una red blockchain; y dicho poder de cómputo es el que permite generar unidades de dicha criptomoneda a traves de la combinación de una serie de elementos (hashes, merkle tree, etc) que permite en definitivas cuentas las verificaciones de las transacciones que se realizan dentro de la red específica de la misma.
Entonces, el proceso de verificación de las transacciones dentro de una blockchain de una criptomoneda que esté basada en el consenso de Prueba de Trabajo, es lo que produce nuevas unidades de esa nueva criptomoneda y lo que en definitiva conocemos como minería. La minería es ejercida por personas con equipos computacionales de gran poder o capacidad, porque el objetivo de cada minero consiste en verificar cada pieza de información antes que nadie para así poder obtener la recompensa por minar; es allí donde fundamentalmente adquiere enorme relevancia la potencia de computo o tasa hash (hash rate).
La recompensa o el incentivo que tienen los mineros para minar es que al verificar los bloques de información (que como ya dijimos, es la data de las transacciones que se ejecutan), les son dadas las fees de las transacciones que procesaron, y cantidades de unidades recién emitidas de la criptomoneda misma cuando el bloque se completa y se cierra dentro de la blockchain en cuestión.
A propósito que respecto a lo dicho respecto a las fees, es debido a ello que los mineros dan preferencia a las transacciones más grandes cuando van a verificarlas, porque ellos saben bien que son las que generan mayor cantidad de fees; y a su vez, porque el sistema permite que el minero pueda elegirlas.
Para recalcar, el hash rate viene siendo el nivel de la tasa de verificación computacional combinada de la red blockchain y criptomoneda que está siendo minada. Cuando se mina, cada hash (que es un código de carácter alfanúmerico de extensión fija), debe ser constatado, lo cual se hace a través de un mecanismo que permite rastrear o trazar la data (por decirlo de alguna manera).
Un hash es una manera codificada de expresar una información. A través del https://passwordsgenerator.net/sha256-hash-generator/ podemos ver lo que pasa cuando por ejemplo tomamos cualquier palabra o serie de palabras y las colocamos en el campo de texto y generamos un hash. Simplemente vemos cómo se expresa una información legible de una manera codificada en la forma de un hash. Entonces un hash es un patrón codificado aleatorio de números y letras que expresan una determinada información.
Dicho lo dicho, y a fin de cuentas, Hashrate es la tasa de operaciones o hashes que una red concreta es capaz de verificar en un momento dado, basado en el poder computacional combinados de todos los mineros que se encuentran en el proceso de minado respectivamente. La complicación a la hora de minar (que es en lo que en definitiva influye el hecho de tener mayor potencia o hashrate); viene dada porque las transacciones se conjugan en la forma de hashes que van ligándose de manera compleja en la estructura de un árbol conocido como árbol Merkle.
2.- Realice el siguiente Árbol Merkle:
Transacción (hojas del árbol): Steem1; Steem2; Steem3; Steem4; Steem5; Steem6; Steem7; Steem8.
Gráficamente he elaborado el árbol como lo ven a continuación:
Llegue hasta el Root Hash. Y coloque cada hash generado usando SHA-256, muestre captures de pantalla.
Como vimos en la imagen anterior se generaron una serie de transacciones a partir de la base (que son las hojas) del árbol, dichas transacciones fueron el casamiento de cada hoja con la hoja que tenía inmediatamente pareada, lo que daba la combinación de una con la otra.
Si lo expresamos en texto simplemente se vería así:
Steem1Steem2Steem3Steem4Steem5Steem6Steem7Steem8 <---RAIZ
Steem1Steem2Steem3Steem4; Steem5Steem6Steem7Steem8<---- RAMAS
Steem1Steem2; Steem3Steem4; Steem5Steem6; Steem7Steem8<--RAMAS
Steem1; Steem2; Steem3; Steem4; Steem5; Steem6; Steem7; Steem8.<--HOJAS
Como vemos, el hash raíz es sencillamente: Steem1Steem2Steem3Steem4Steem5Steem6Steem7Steem8
Ahora bien, expresemos todo esto específicamente hablando a modo de hashes a través de la codificación SHA-256
Empecemos por las hojas:
El hash de Steem 1 es: 7760E25BCB80ADF1DD92DB339BF5790A59E90CD54EFA072F1250DCE13FA97045
El hash de Steem 2 es: FE00506E91CF52BC4B35321E6B978D1A7349397B19C6C1C01E095971FDEC9741
El hash de Steem3 es: A9418332E0C351D6A50C835AA9E57D514F0573C231D491E97726DB8A5844F2DC
El hash de Steem4 es: 22F4EC8E20C9CCAF2C313B23F18981B1C73BF39081BCD739E5D998A95A46AB30
El hash de Steem5 es: 2A3C87336683AB0DDFA56AFEFC740E6C13A02FEA0A43D6797343B26D7AF0C57B
El hash de Steem6 es: A7BAA6DE0C0658E9E3681966E542BACD116529F5AE9A2D9126CDB1C1D5BC1278
El hash de Steem7 es: D441688DDA7F9285E8811728DD9A3955CF74F0A3C7600C1589D0F1D3B48FFAC7
El hash de Steem8 es: F2E38ED4FF662087B6E9BEAFA4158EBC488B995732057BDA019A6A77FFB5F9F5
Ahora vamos con las ramas secundarias: En el caso hipotético explicado tenemos la presencia de 4 ramas secundarias:
El hash de la primera rama secundaria (Steem1Steem2) es: A5568957014F6AC3866923C7DE20D375E706B8D8C9F453636E90B9965ABEC62B
El hash de la segunda rama secundaria (Steem3Steem4) es: 18D25196DB699F6AB9222B7302EB8A6F6EBFADEC703C07DD5DB8D9455913A499
El hash de la tercera rama secundaria (Steem5Steem6) es: D118E137F92A0DBEA138B6BF70C7714153A7BC393CD0272A44BD94864645224B
El hash de la cuarta rama secundaria (Steem7Steem8) es:
A81D57BA11AEDFA9EFBBA42F6523D75D1EFA50B22C5E3557A21CEFFE87DDFC4A
Seguimos entonces con las ramas primarias:
El hash de la primera rama primaria (Steem1Steem2Steem3Steem4) es:
8A248C05E69C4F1AA403AD18A7F445FF500C42483DA425CE0C980CDB2FD1AD9B
El hash de la segunda rama primaria (Steem5Steem6Steem7Steem8) es: 8B0935AEAB3F51BFA2B0750703EE2387E2B20EB19B0D24227E180C03A851AF17
Y finalmente llegamos a la raíz de Merkle Tree (es decir llegamos a Markle Root en este caso):
El hash raíz (Steem1Steem2Steem3Steem4Steem5Steem6Steem7Steem8) es:
9C2FC83F36D59B8ED5033D2BCC417728583C8DAA0AA9868FD374BE3619D6E4F9
Viendo todos los hashes nombrados ya en el árbol ya mostrado, tendríamos que se vería así:
Diga los pasos a seguir para verificar si Steem6 está incluido en el Árbol Markle.
Dado que toda la información está referenciada en el árbol de Merkle, solo tendríamos que constatar con una función matemática de tipo binario los nodos aledaños a aquel que queremos o necesitamos verificar (en este caso, Steem6).
En el primer paso verificariamos que la pareja respectiva sería el nodo Steem5 y en el segundo, verificaríamos los nodos superiores, porque ellos delatarán si el nodo esta incluído con anterioridad en la secuencia del árbol. En pocas palabras, hay que cotejar cada rama del árbol (si hay ramas primarias se puede empezar por ellas para luego pasar a las secundarias y de allí al paso siguiente).
Una vez se han verificado las ramas, se verificará también las hojas; y allí veremos que efectivamente (en este caso) Steem6 fue incluído en el algoritmo.
Por último, como confirmación, verificaríamos la raíz del árbol y tendríamos plena y total confirmación de la inclusión de Steem6 en el árbol.
Entonces, este es el modo de verificar que un nodo (este o cualquier otro que se esté indagando) esté presente o no en el árbol.
3.- Usando el SHA-256; debes colocar cada hash completo en el Árbol Merkle.
Transacción (hojas del árbol): SCA1; SCA2; SCA3; SCA4; SCA5; SCA6; SCA7; SCA8. Explique cada paso, muestre captures de pantalla.
Bien, veamos primero las transacciones en el árbol de manera gráfica:
Ahora, si expresamos directamente en texto cada parte del árbol como lo mostré en la imagen anterior, quedaría así:
Primeramente tendríamos la base sobre la que empezaríamos a armar el árbol, o sea, las hojas:
SCA1; SCA2; SCA3; SCA4; SCA5; SCA6; SCA7; SCA8
Veamos cada hash de cada una de las hojas a través de SHA-256
SCA1:
13E0A04BB0E669E1C638DBE3A704743F99F162B25245E4D8C064D35BA38FA8C8
SCA2:
27849353A9C8CC4E948EB6E5748EDD79CB83513D8C0ADAF3E8C83D3792C9149B
SCA3:
67E872F952C105C35E0BCE130536D061F4999DCA5593754BA9BA7BE59B8E7C0D
SCA4:
491928A32BAE70A12FA251412BBFD7C9999F317BA6BF577C283C724225270A43
SCA5:
99C078C39CDE7F47799E0E8691460A9F3E83E78D498EA989308FCFCC58907B19
SCA6:
7A648D887B124DB14E96E23BA92783E7F26D00957C19B9B8229632C2C1873729
SCA7:
7E0BBD6BA4BA9896F9911AF46B06DD2C47535F9C80B29D693FDF6B9319D0D68E
SCA8:
562ABCEEB497E1FE7AE275A883FD5EF9D92A05F5C19D82ABAA0DC1571B7DF3AD
En segundo lugar tendriamos las ramas secundarias (una combinación paritaria de cada hoja con la hoja que tiene al lado)
SCA1SCA2; SCA3SCA4; SCA5SCA6; SCA7SCA8
Veamos las ramas secundarias en forma de hash
SCA1SCA2:
91B09BBA815748166FB36413342C7E4E7E809F4BAC538C0418841A4476B527EF
SCA3SCA4:
B49B48697A3ACBC5E3D2E36B6EE49C44020D88E664C5C1AA7A7CF34058177379
SCA5SCA6:
F026924CD1285FF92C2A2DE9B9313027EB67273A82375C939348C887F6B52F77
SCA7SCA8:
AA55EC5A6B11393B289C4B2B6916172ACC2941C5C978FB1D7BF02696BAB323A4
En tercer lugar tendríamos la ramas primarias:
SCA1SCA2SCA3SCA4 y SCA5SCA6SCA7SCA8
Convirtamos estas dos ramas en hashes:
SCA1SCA2SCA3SCA4:
F50DC120CBF6C46923037F6D7F41D4153ECC9AB7430DDA662C142DB1FFE483F7
SCA5SCA6SCA7SCA8
A3D8CA8494CC426ABD5E1FC5FA0FEAE4F2B2ECE4C4CECDCA05E19EB66542533F
Y en cuarto lugar, finalmente, tendríamos la raíz del árbol (que no es más que la combinación de todas las partes del árbol en la secuencia en que se fueron presentando las hojas y las ramas).
SCA1SCA2SCA3SCA4SCA5SCA6SCA7SCA8
Que en forma de hash queda así:
CB40CA6DB72DD507CF9118963F94B7740822258E74AFB0FD45D89DB35D24B386
Ahora bien, expresando el mismo árbol mostrado al principio de este apartado, pero esta vez con los hashes incluídos quedaría así:
Si el número de las hojas del árbol es impar, ¿Qué debes hacer? Explique.
Cada hoja y rama en el árbol de Merkle representa un nodo y cada nodo constituye una transacción; en el supuesto caso de que, por ejemplo, el número de hojas del árbol de Merkle fuese impar, entonces el último nodo se duplica para suplir la carencia del nodo que le haría ser par en la secuencia; es decir, el hash en estos casos debe ser concatenado consigo mismo.
Pero ojo, que el nodo sea duplicado no significa en ningún caso que la información de la transacción almacenada en el nodo duplicado también se duplique; ya que en la blockchain no existe posibilidad de duplicación de transacciones; esto de la duplicación es simplemente un recurso del algoritmo del árbol de Merkle para completar la cadena y dar paso a los siguientes niveles del árbol (las ramas y finalmente la raíz) y así completar el bloque eficientemente.
Explicado gráficamente sería así:
Supongamos que tenemos las siguientes transacciones (las hojas del árbol):
AZW1, AZW2, AZW3, AZW4 y AZW5
Como se nota hay en este caso tan solo 5 hojas, por lo que el árbol en tal caso quedaría así:
Explicado en términos más simples, a nivel fundamental, el nodo que queda soltero se casa consigo mismo, y en ese sentido, va duplicando consigo mismo el hash y la información transaccional va pasando a las ramas, hasta que llega a la raíz donde todos los nodos se juntan.
Conclusión
El árbol de Merkle en realidad es un mecanismo que sirve de estructura al funcionamiento de cualquier sistema que requiera referenciación; no solo se trata de la Blockchain (si bien ha sido uno de sus más notables usos en los últimos tiempos), sino que sirve para cualquier sistema que requiera la organización y vinculación de data en un sentido u otro.
Debido a lo mencionado, es preciso decir (para ser más específica) que el árbol de Merkle se utilizaba ya en bases de datos y sistemas informáticos con mucha anterioridad a la existencia de la blockchain. La manera cómo se referencian los datos, permite un fácil manejo y accesibilidad a la información a través de este legendario algoritmo.
Lo cumbre en tal sentido en el tema de las criptomonedas, es que vincularon el árbol como sistema de organización estructurado, con la codificación hash; y esto creó el entorno propicio y seguro que necesitaban para funcionar. Es así como hablar del árbol Merkle es sencillamente imprescindible cuando hablamos de la historia, base y funcionamiento de las criptomonedas y de la blockchain.
Recalco que esta constituye mi vigésima tercera participación en esta Steemit Crypto Academy. Espero les haya resultado interesante mi perspectiva sobre el tema tratado. Hasta la próxima, Dios mediante!
Mis Agradecimientos por tan noble e interesante iniciativa a:
@steemitblog
@pelon53
Y también a
@steemcurator01
@steemcurator02
Gracias por participar en Steemit Crypto Academy Season 3:
Espero seguir leyendo tus publicaciones.
Pregunta 1, me hubiera gustado ver el ataque 51% y como afecta la seguridad d la blockchain.
Pregunta 2, todos los hash coinciden. Para la verificación de Steem6, se debería partir de su nodo hermano Steem5, luego Steem7Steem8, y la otra rama Steem1Steem2Steem3Steem4 y por último el hash raíz. Sin tomar en cuenta Steem6, porque es el que se va a verificar.
Pregunta 3, todos los hash coinicden. Pero para la explicación del gráfico se debe duplicar AZW5, ya que el algoritmo lo toma así.
Recomendaciones:
La investigaciones de las tareas deben ser más profundas.
Leer con detenimeinto cada pregunta y dar las respuestas acertadas.
Calificación: 7.4