Blockchain Extractos de Blockchain an introduction A Shanti
Blockchain Extractos de Blockchain an introduction A. Shanti Bruyn 2017
Introducción • Blockchain (cadena de bloques) es una base de datos descentralizada y distribuida (replicada) formada por una lista enlazada de bloques, donde cada bloque contiene un conjunto de (datos de) transacciones, e. g. , una transferencia de dinero (bitcoins) entre dos cuentas. • En general, los datos contenidos en un bloque podrían ser de cualquier tipo.
• La cadena de bloques es prácticamente inmutable, i. e. , sus datos (transacciones que ocurrieron) son casi imposibles de modificar (incorruptible: resistant to modification of the data). • Las transacciones son aprobadas (validadas) por un conjunto de participantes (nodos que conforman la blockchain) de manera autónoma (i. e. , sin una autoridad central, sin un intermediario) mediante algún protocolo de consenso ver Proof of Work.
• Motivación inicial de blockchain: permitir que los usuarios intercambien datos de manera confiable sin necesidad de un intermediario. Por ejemplo, intercambiar dinero sin necesidad de un banco.
• Lo anterior originó las criptomonedas* (como bitcoin (BTC o XBT*) a finales de 2008 y principios de 2009). • Desde entonces, la popularidad de blockchain ha crecido, así como la variedad de casos de uso en los que se puede aplicar, e. g. , para la gestión de cadenas de suministro, bienes raíces, tiquetes, elecciones (votaciones), programación de pagos, entre muchos otros. * Cryto currency, crypto valuta. * La X significa: moneda que NO es de curso legal en ningún país.
• Algunas de las blockchains más conocidas son: • Bitcoin • Ethereum • Hyperledger Fabric • Multichain Se verá más adelante • Corda • Eris • IOTA
• También empresas como Oracle, IBM, Microsoft, Amazon, Google, entre otras, ofrecen plataformas para el desarrollo y gestión de blockchains (algunas basadas, e. g. , en Hyperledger Fabric).
• A continuación se presentan los conceptos básicos de la blockchain de bitcoin, i. e. , el blockchain de Nakamoto. • Estos conceptos no necesariamente aplican a todas las blockchains: hay una gran variedad de propuestas, hasta el punto que el concepto original de blockchain casi se pierde…
Blockchain de bitcoin Los elementos básicos de la blockchain de bitcoin son: • Transacción: es el intercambio de bitcoins entre dos partes interesadas. Por ejemplo, un usuario envía dos bitcoins a otro usuario. 2 bitcoins
• Bloque: es un conjunto de transacciones (cada una con sus datos) y otros datos. • Los componentes básicos de un bloque son 1. El número del bloque (identificador único del bloque). 2. Data: datos de las transacciones.
3. Curr_Hash: es el número hash del bloque. Más abajo se explica cómo se calcula. Cada bloque de la cadena (excepto el primero) tiene el número hash del bloque anterior (ver a continuación Prev_Hash); de esta forma, los bloques se enlazan y forman una cadena. 4. Prev_Hash: es el número hash del bloque anterior. 5. Nonce**: es un número aleatorio. Su propósito se explica más adelante, ver Proof of Work. 6. Timestamp: es la fecha de creación del bloque. * Nonce = number only used once.
Dos bloques. Fuente: (Shanti Bruyn, 2017).
• Red: es un conjunto de computadores (nodos) que están interconectados y que participan en la gestión de la blockchain. • Nodo: es un computador de la red. Cada nodo tiene una copia de la blockchain.
Un nodo puede: a) Validar las transacciones b) Participar en el consenso que autoriza que se añada un bloque a la cadena y c) Armar un bloque e intentar que este sea añadido a la cadena (acá el nodo actúa como un minero, véase a continuación Proof of Work), entre otras funciones. Estas funciones se explican más adelante.
Prueba de trabajo (Proof of Work) • Po. W (Proof of Work): es un problema matemático que tiene que resolver el minero (nodo) para un bloque él ha armado. Los pasos que sigue un minero para resolver la Po. W son: Paso 1: Generar un número aleatorio, i. e. , el Nonce. Paso 2: Añadir el Nonce al final de todos los datos del bloque.
Paso 3: Generar un número hash mediante el método SHA 256*. Para ello, se consideran los datos de las transacciones del bloque, el Timestamp, el Prev_Hash y el Nonce. * Secure Hash Algorithm 256 bits.
Paso 3 (cont. ): Si el número hash generado comienza por un determinado número de ceros (condición impuesta por el sistema, esta es en sí la Po. W) entonces el minero ha resuelto la Po. W* y este número hash es el Curr_Hash. Si no, el minero deberá empezar desde el paso 1 (todo este proceso es el “minado” de un bloque). * Se dice que: “el nodo (minero) ha ‘encontrado’ un bloque”.
Ejemplo Po. W • Supóngase que: • Un minero ha armado un bloque, digamos el bloque con identificador = 35. • Para la Po. W, el sistema exige un número hash que comience con 4 ceros.
Ejemplo Po. W • El minero ensaya con Nonce = 1 y al aplicar el algoritmo SHA 256 obtiene: "bac 6 d 67 daf 63 c 7 a 06 bab 569 adeadab 130 d 332 ed 4 c 870 da 314 d 87 f 6 f 1 b 4 c 8 a 409" No sirve
Ejemplo Po. W • El minero ensaya ahora con Nonce = 2 y obtiene: "ee 6 b 0 c 4 aa 8 e 6 aaa 369 dfaee 1379 a 59 cec 8797 e 7 fc 8 ad 1 a 358 d 57 e 1 a 87 a 1466 d" Tampoco sirve
Ejemplo Po. W • El minero continúa ensayando (ensayo y error) hasta que prueba, e. g. , con el Nonce = 11316 y obtiene: "000015783 b 764259 d 382017 d 91 a 36 d 206 d 0600 e 2 cbb 3567748 f 46 a 3 3 fe 9297 cf" ¡Sirve! El bloque ha sido “encontrado”.
• Con este mecanismo (números hash) se enlazan los bloques. Si en el futuro alguien (un nodo) intenta cambiar los datos de un bloque bi, entonces la cadena (enlaces) se dañarían a partir del bloque bi+1. Por consenso tales cambios son rechazados. • Por lo anterior una persona o entidad tendría que ser el dueño del 51% de la red para poder modificar los datos (históricos).
• Incentivo: es un premio, en bitcoins (a la fecha 12. 5*), que se concede a un minero cuando logra añadir el bloque él armó a la cadena. Se creó para compensar el consumo de recursos (procesamiento computacional) que supone la solución de la Po. W. Así, se espera que más personas u organizaciones (que aportan sus computadores como mineros) se unan a la red. * A la fecha unos 110 mil dólares… 1 BTC = unos 9 mil dólares.
• Fondo común (pool)*: es un área donde se encuentran las transacciones pendientes por ser incluidas en la blockchain. Cada nodo tiene una copia del pool. El pool se actualiza cuando a) Llegan nuevas transacciones. b) Se añade un bloque a la cadena: las transacciones de dicho bloque son borradas del pool. * En este contexto también se suele traducir como piscina.
Ciclo de vida de una transacción A grandes rasgos, el blockchain de Bitcoin funciona (flujo de una transacción) como se describe a continuación. La siguiente explicación está basada parcialmente en Shanti Bruyn (2017).
Ciclo de vida de una transacción 1. Los usuarios del sistema emiten transacciones. 2. Las transaciones del paso 1 son puestas en un fondo común (pool), al cual acceden los mineros (nodos). Pool Transacciones pendientes
Ciclo de vida de una transacción 3. Cada minero puede acceder al pool y puede armar un bloque. En este punto, hay una competencia entre los mineros ya que cada uno desea añadir a la cadena el bloque él armó. Por ello, el sistema plantea una Po. W que cada minero debe resolver. El primero que la resuelva, será quien tiene la oportunidad de añadir su bloque a la cadena.
Ciclo de vida de una transacción 4. Cuando un minero resuelve la Po. W, este informa a los otros mineros. Estos validan el bloque (se verifican las transacciones y la solución de la Po. W) y si es aceptado (por consenso, e. g. , 51%), el bloque se añade a la cadena, el minero que resolvió el problema obtiene un incentivo (ver a continuación) y se repite el proceso.
Ciclo de vida de una transacción • Considérense tres mineros (nodos 281, 433 y 722) que están simultáneamente tratando de resolver la Po. W para generar el próximo bloque de la cadena (este será el bloque con identificador 23). • Para ello, cada minero selecciona a partir del pool un conjunto de transacciones (denotadas fact en la figura) y con estas se arma un bloque (nótese que las transacciones que hay en los bloques de dos mineros no son necesariamente las mismas).
Ciclo de vida de una transacción • Si un minero resuelve la Po. W (en la figura se representa con un par de dados que muestran dos seis, ver el nodo 433), los otros mineros detienen la búsqueda de la solución para su Po. W, proceden a validar si el bloque (el del nodo 433) es válido, y si lo es, se añade a la cadena.
Ciclo de vida de una transacción • Cuando un minero va a armar un bloque, él puede seleccionar cualquier transacción del pool. La elección depende de la comisión (fee) que cada transacción otorgue; así, los mineros procuran armar un bloque con las transacciones que mayor comisión ofrezcan, de tal forma que, si el minero resuelve la Po. W de su bloque, él ganará todas las comisiones (de las transacciones de su bloque), además del incentivo.
Pool: transacciones pendientes … Cadena actual, el último bloque añadido fue el 22 Fuente: (Shanti Bruyn, 2017).
Fuente: (Shanti Bruyn, 2017).
Ciclo de vida de una transacción • A continuación se muestra el proceso completo de forma gráfica. 1 Fuente: (Shanti Bruyn, 2017).
Ciclo de vida de una transacción 2 Fuente: (Shanti Bruyn, 2017).
Ciclo de vida de una transacción 4 3 Fuente: (Shanti Bruyn, 2017).
Preguntas 1. ¿Qué pasa si dos nodos (mineros) resuelven la Po. W al mismo tiempo? Esto se denomina fork* (bifurcación). Cuando esto ocurre hay dos cadenas. La próxima cadena para la cual se genere un bloque será la cadena oficial y la otra se desecha. Ver siguiente figura. * El concepto de fork también se usa en bitcoin para referirse a cuando se generan versiones diferentes del software del sistema…Pero ese es otro tema…
- Bloques violeta: bifurcaciones - Bloques negros (más el verde): bloques que conforman la cadena “oficial”. T i e m p o Primer bloque Fuente: (Shanti Bruyn, 2017).
• El sistema deberá subir o bajar la dificultad de la Po. W (incrementar o reducir el número de ceros) cuando sube o baja el poder de cómputo (minado) de la red (sudden mining power changes). • Por ejemplo, si se incrementa el número de mineros entonces se incrementa la probabilidad de a) “encontrar” (más rápido) un bloque y b) así, generar más forks…
Preguntas 2. Supóngase que un usuario, Peter, tiene en su cuenta 100 bitcoins ¿Qué pasa si Peter envía (casi) al mismo tiempo 100 bitcoins a James y 100 bitcoins a Sahra? Esta situación se conoce como problema del doble gasto (double spending problem)
Peter envía 100 bitcoins a dos usuario prácticamente al mismo tiempo Fuente: (Shanti Bruyn, 2017).
Esto se verifica en blockchain y se garantiza que solo una persona recibirá el dinero
• Cuando una de las dos transacciones sea incluida en un bloque, el balance de Peter quedará en cero y la transacción es aprobada. • Cuando la otra transacción sea incluida en otro bloque (o incluso en el mismo bloque), se encontrará que Peter no tiene suficiente dinero (balance = 0) y esa transacción será inválida.
• Así, el orden de los bloques en la cadena (y de las transacciones en un mismo bloque) determina el orden de las transacciones.
Gráficos y estadísticas en tiempo real • Ver, https: //bitcoin. org/es/recursos Gráficos y estadísticas Bitaps. com https: //bitaps. com/ Allí, también se puede ver las estadísticas de otras cripto monedas, como Ethereum (la moneda se llama ether (ETH)) https: //eth. bitaps. com/
Videos en Youtube • Cómo funciona Blockchain. Explicación sencilla visual en español https: //www. youtube. com/watch? v=h. Eo. YL 5 j 0 w. YU • Cómo funciona bitcoin. Wallets, mineros, forks, blockchain. Explicación sencilla y completa español https: //www. youtube. com/watch? v=44 D 9 n. Vxq. GIE (en este segundo video, los forks se refieren a cuando se generan versiones diferentes del software del sistema. )
Merkle tree • Un árbol hash de Merkle es una estructura de datos en forma de árbol, dónde cada uno de los nodos es el hash de los nodos subyacentes a este. • Proporciona un método de verificación seguro y eficaz sobre la integridad de los datos contenidos en la estructura. “Each Bitcoin block has the Merkle root contained in the block header. It is how we verify the contents of the block…” • En el siguiente ejemplo se presenta un ejemplo. Fuentes: https: //btcassessors. com/blog/introduccion-a-los-arboles-de-merkle/ https: //coincentral. com/merkle-tree-hashing-blockchain/
• Y además, en ningún momento se ha revelado información acerca de los otros elementos, tan solo son necesarios los hashes de los nodos adyacentes durante la construcción de la estructura de datos completa. • Gracias a estructura se ha podido registrar gran cantidad de información de forma compacta garantizando la integridad de los datos.
Verificación de un elemento en el árbol • Ejemplo: Para determinar si el elemento número 4 forma parte del árbol se usan los hashes 5, 11 y 12. Se calcula si la unión de estos en el orden adecuado genera la raíz del árbol. Aquí, se determina que, efectivamente, el elemento número 4 forma parte del árbol, ver siguiente figura.
Difficulty Fuente: “Research and analysis of blockchain data”. Yang, Liu & Li. ICSP 2019. Transactions
Videos en Youtube • Blockchain Basics Explained - Hashes with Mining and Merkle trees https: //www. youtube. com/watch? v=lik 9 aa. FIsl 4 Bitcoin 101 - Merkle Roots and Merkle Trees - Bitcoin Coding and Software - The Block Header https: //www. youtube. com/watch? v=g. Uw. XCt 1 qk. BU
- Slides: 53