Está en la página 1de 54

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)
• PoW (Proof of Work): es un problema matemático
que tiene que resolver el minero (nodo) para un
bloque que él ha armado. Los pasos que sigue un
minero para resolver la PoW 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
SHA256*. 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 PoW)
entonces el minero ha resuelto la PoW* 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 PoW
• Supóngase que:
• Un minero ha armado un bloque, digamos el
bloque con identificador = 35.
• Para la PoW, el sistema exige un número hash que
comience con 4 ceros.
Ejemplo PoW
• El minero ensaya con Nonce = 1 y al aplicar el
algoritmo SHA256 obtiene:
"bac6d67daf63c7a06bab569adeadab130d332ed4c870da314d87f6f1b
4c8a409"

No sirve
Ejemplo PoW
• El minero ensaya ahora con Nonce = 2 y obtiene:
"ee6b0c4aa8e6aaa369dfaee1379a59cec8797e7fc8ad1a358d57e1a87
a1466d"

Tampoco
sirve
Ejemplo PoW
• El minero continúa ensayando (ensayo y error) hasta
que prueba, e.g., con el Nonce = 11316 y obtiene:
"000015783b764259d382017d91a36d206d0600e2cbb3567748f46a3
3fe9297cf"

¡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 6.25*),
que se concede a un minero cuando logra añadir el
bloque que él armó a la cadena. Se creó para
compensar el consumo de recursos (procesamiento
computacional) que supone la solución de la PoW. Así,
se espera que más personas u organizaciones (que
aportan sus computadores como mineros) se unan a
la red.
* A la fecha (mayo 2021) unos 300 mil dólares… 1 BTC = unos 50 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 que él armó. Por ello, el sistema plantea una
PoW 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 PoW, este informa a
los otros mineros. Estos validan el bloque (se verifican
las transacciones y la solución de la PoW) 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 PoW
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 PoW (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 PoW, 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 PoW de su
bloque, él ganará todas las comisiones (de las
transacciones de su bloque), además del incentivo.
Pool:
transacciones
pendientes

… A
P

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.

$100 1 $80

Fuente: (Shanti Bruyn, 2017).


Ciclo de vida de una transacción

P A

Fuente: (Shanti Bruyn, 2017).


Ciclo de vida de una
transacción

3
Fuente: (Shanti Bruyn, 2017).
Preguntas
1. ¿Qué pasa si dos nodos (mineros) resuelven la PoW
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
T
- Bloques negros
i
(más el verde): e
bloques que m
conforman la p
o
cadena “oficial”.

Primer bloque
Fuente: (Shanti Bruyn, 2017).
• El sistema deberá subir o bajar la dificultad de la PoW
(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 usuarios 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  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=hEoYL5j0wYU
• Cómo funciona bitcoin. Wallets, mineros, forks,
blockchain. Explicación sencilla y completa español
https://www.youtube.com/watch?v=44D9nVxqGIE
(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 esta estructura se ha podido registrar gran
cantidad de información de forma compacta
garantizando la integridad de los datos.
• Un proceso que hace que la verificación y validación
de esos datos resulte muy eficiente: solo basta con
verificar el Merkle Root para validar toda la estructura
de datos asociada. https://es.cointelegraph.com/explained/merkle-tree-the-key-
to-blockchain-verification

• En resumen: el árbol de Merkle tree en la blockchain


Bitcoin sirve para verificar que ninguna transacción
haya sido cambiada en el bloque. Ver también:
https://medium.com/coinmonks/merkle-trees-concepts-and-use-cases-5da873702318
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
Transactions

Fuente: “Research and analysis of blockchain data”. Yang, Liu & Li. ICSP 2019.
Videos en Youtube
• Blockchain Basics Explained - Hashes with Mining and
Merkle trees
https://www.youtube.com/watch?v=lik9aaFIsl4
Bitcoin 101 - Merkle Roots and Merkle Trees - Bitcoin
Coding and Software - The Block Header
https://www.youtube.com/watch?v=gUwXCt1qkBU

También podría gustarte