Un Bloque de Bitcoin tiene en promedio 1930 Transacciones.
Blockchain
Introducción
Qué es Blockchain
Estructura de un bloque
Merkle trees
Bitcoin network
La arquitectura de una red P2P
Minería y consenso
La economía de Bitcoin
Minando un bloque
Cambiando las reglas de consenso (forks)
Transacciones
Transacciones: outputs e inputs
Qué es Bitcoin Script
Transaction fees en Bitcoin
Keys and adresses
Llaves públicas y privadas / Bitcoin addresses
Formatos de llaves públicas y privadas
Tipos de wallets: nondeterministic, deterministic
Wallets
Seeds and mnemonic codes
Conclusión
Crea una cuenta o inicia sesión
¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera
Juan Sebastián Marulanda
Una Blockchain almacena gran cantidad de información que crece cada segundo. Sin un buen mecanismo de compactación de todas los datos de un bloque, sería imposible de escalar y poco portable tener un nodo, ya que pocos computadores tendrían los recursos de hardware necesarios para mantener uno.
El Merkle Tree es una estructura jerárquica de datos interconectada con hashes criptográficos, usada para resumir y verificar grandes conjuntos de datos. Sin este, toda la información en la Blockchain sería mucho más pesada, haciéndola más difícil de computar.
Con este recurso matemático, se implementa el uso de un algoritmo doble SHA256, con el que se obtiene una “huella digital” del total de las transacciones dentro de un bloque.
En el encabezado de los bloques, se asigna un campo que contiene el valor obtenido por el árbol de Merkle. Este árbol es binario y solo contiene los datos de las transacciones que pertenecen a un bloque. Se construye desde sus hojas nodo (leaf nodes) hasta su raíz o el valor final (Merkle Root).
Cada hoja del árbol es una transacción. Como los árboles son binarios, se dividen en grupos de dos y si la cantidad de transacciones es impar, se duplica la última para mantener la paridad de dos en cada rama.
Las transacciones, en pares de dos, son encriptadas utilizando un algoritmo SHA256 y este valor es concatenado con la rama “hermana” del árbol para formar otro hash. Las transacciones continúan concatenándose y encriptándose de dos en dos hasta llegar a la raíz y obtener el Merkle root.
Para comprobar que una transacción efectivamente corresponde a cierto bloque y asegurar su integridad es con las pruebas de Merkle.
Por ejemplo, suponiendo que queremos verificar hK
(en verde) en el siguiente árbol Merkle:
Comenzamos verificando hABCDEFGH
y hIJKLMNOP
, las dos primeras hojas del árbol. Podemos comprobar que hABCDEFGH
es correcto (en azul), por lo tanto lo descartamos. Sin embargo, hIJKLMNOP
no lo es así que continuamos profundizando por esa rama.
Solicitamos hIJKL
y hMNOP
para su validación y el algoritmo detecta que hMNOP
es correcto para descartarlo y continuar profundizando por hIJKL
ya que no logramos verificarlo.
Nuevamente, solicitamos las hojas hIJ
y hKL
desde este punto para realizar la verificación, descartar hIJ
y darnos cuenta de que el problema viene desde hKL
. Al obtener las transacciones hK
y hL
, comprobamos que los datos de hK
son incorrectos y podemos reparar el árbol completo.
El algoritmo para encriptar y desencriptar un árbol de Merkle puede ser un reto más que interesante para ti si te propones desarrollar tu propia implementación con el lenguaje que más te guste.
Esta es la manera en que la Blockchain de Bitcoin asegura la integridad de la información y vuelve a esta gran base de datos inmutable. Cualquier alteración malintencionada en una transacción, simplemente el resto de los nodos, lo detectaría y no llegarían a un consenso.
Contribución creada por: Luis Enrique Herrera y Kevin Fiorentino (Platzi Contributor).
Aportes 23
Preguntas 3
Un Bloque de Bitcoin tiene en promedio 1930 Transacciones.
El reto tiene dos maneras de solucionarse.
Se pide encontrar sí existe el Hash Tx F en el merkle Root del reto sin reconstruir todo el árbol.
La otra forma, es reconstruyendo el Binary Merkle Tree.
Dejaré las dos soluciones al reto
// Using Merkle Proof or Paths, find short path
StepsUpwards: HE + HGH + HABCD = True at Merkle Root
//Demostramos que HF existe en el conjunto de Merkle Root obteniendo la ruta más corta.
// Binary Merkle Tree for TxF //
Merkle Root: HABCDEFGH
Step5: HABCD / HEFGH
Step4: HEF / HGH
Step3: HE / HF
Step2: HF
Step1: TxF
merkle tree explanation:
https://www.youtube.com/watch?v=PraPZFMj6h8
Hola estuve un buen rato buscando y analizando el algoritmo para resolver la problemática del final del video. Les anexo los links:
https://medium.com/crypto-0-nite/merkle-proofs-explained-6dd429623dc5
https://www.youtube.com/watch?v=1pasjSinXDs
https://www.youtube.com/watch?v=2kPFSoknlUU
Habcdefgh=Habcd+Hefgh / Hefgh=Hef+Hgh / Hef=He+Hf
Bitcoin ya quedo atrás, dentro de 5 años Ethereum van a sustituir a su Merkle Trees y trusted setups en ZK-STARKS, a esto se le llama Polynomial commitments.
Merkle Path:
Para demostrar que un dato específico está incluido en un árbol de merkle necesitamos obtener lo que se conoce como Merkle Path o camino de Merkle. En esencia, se trata de una colección que contiene todos aquellos nodos necesarios para reconstruir la raíz de Merkle.
.
Definición extraída del siguiente artículo que les recomiendo leer para complementar el contenido visto en esta sesión:
Merkle Trees
Una Merkle proof o Merkle Path es el número mínimos de nodos requeridos para calcular la raiz Merkle.
[](https://docs.symbolplatform.com/concepts/data-validation.html#:~:text=A Merkle proof (also known,calculate the Merkle root again.&text=The following steps are taken,if exists within a block.)
explicacion de arboles de merkle en español https://www.youtube.com/watch?v=Usxypgr8Y-w
Merkle Tree | Merkle Root | Blockchain
Aunque seguramente no recibirá feedback, dejo mi respuesta al reto:
Hash de Hf y He da Hef
Hash de Hef con Hash de Hgh da hash de Hefgh
Hash de Hefgh y Habcd da la raíz Habcdefgh
No tengo claro si esta es la respuesta pero para encontrar HF se aria una igualacion y al final se sacaria HF como un equivalente:
HABCD+HEFGH = HABCD + ((HE)+(HF)(HG)+(HH))
HABCD + HEFGH
HF = --------------------------------
(HE)+(HGHH)
creo que seria la forma mas rapida sin recontruir todo el arbol
Esta explicación sobre los bloques de transacciones me ha parecido, de lejos, la mejor que he visto nunca. Gracias 🙌🏽
me encanta este curso
muy buena clase
RESUMEN CLASE 4:
MERKLE TREES
Estructura de datos usada para resumir y verificar grandes conjuntos de datos.
Algoritmo usado por Bitcoin: double-SHA256
Huella digital del conjunto de transacciones dentro del bloque.
Reto 2:
Investiga sobre Merkle Paths y cómo probar la existencia de un elemento sobre el siguiente árbol.
SOLUCION:
HE + HGH + HABCD = Merkle Root
Merkle Paths es el camino que nos permite revisar que si un elemento en el árbol ha cambiado o no.
En el ejemplo de la clase podemos verificar el elemento F, solo con revisar el Hash de: TxE, TxEF, TxEFGH y TxABCDEFGH
Lo del reto se resolvería con la llave pública comparada contra el hash de la raíz del árbol? Me refiero a si esa llave pública se presentaría en el hash de la raíz. No me aclaro muy bien.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?