Introducción al Blockchain y su Función
Introducción al Blockchain y su Función
Entendiendo el blockchain
Randall Romero-Aguilar*
rromero@[Link]
Resumen
Con la burbuja experimentada por Bitcoin en 2017 y su posterior desplome en
2018, se ha despertado mucho interés por su tecnología subyacente, el blockchain.
Sus defensores afirman que es una tecnología revolucionaria, con aplicaciones que
van mucho más allá de facilitar pagos. Para desmitificar este concepto y facilitar las
discusiones acerca de este tema, en este documento de trabajo explicamos de manera
sencilla, con la ayuda de un programa de Python, qué es y cómo funciona el blockchain.
Más allá de la muy discutible utilidad del Bitcoin como dinero, algunas de las característi-
cas técnicas sobre las cuales está implementada esta criptomoneda han despertado gran
interés, destacando entre ellas el blockchain o cadena de bloques y el distributed ledger o
libro mayor distribuido.
*
Economista Consultor de la Secretaría Ejecutiva del Consejo Monetario Centroamericano (SECMCA) y
profesor de economía en la Universidad de Costa Rica (UCR). Doctor en Economía por la Ohio State University
(OSU) y Master en Econometría por la London School of Economics (LSE). Las opiniones expresadas son las
del autor y no necesariamente representan la posición de la SECMCA, ni de los miembros del CMCA.
1
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
2
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
experimentar con el código, puede obtener una copia de esta nota en versión Jupyter notebook en http:
//[Link]/entendiendo-el-blockchain.
4
Quienes estén interesados en más detalles acerca del funcionamiento de blockchain, pueden consultar
Nash (2017b).
3
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
1 Encriptando información
Para empezar la implementación de una cadena de bloques, importamos varios paquetes
de Python que nos serán de utilidad:
El primer paso que debemos resolver es cómo encriptar la información. Para ello utilizare-
mos la función sha3_256, que es la función hash más reciente (publicada en 2015) de la
familia SHA (Secure Hash Algorithm), la cual a su vez es publicada por el Instituto Nacional
de Normas y Tecnología de Estados Unidos.
Una función hash es en esencia un algoritmo que toma un texto de cualquier tamaño y lo
transforma en un número hexadecimal (es decir, en base 16, expresados con los dígitos
0-9 y las letras A-F) de un tamaño predeterminado, que cumple una serie de condicio-
nes deseables, entre ellas (1) bajo costo computacional, (2) compresión (toma un texto
de mayor tamaño y lo reducen a una longitud pequeña), (3) determinista (para un texto
dado, siempre se obtiene el mismo resultado), (4) difícil de invertir (a partir del resultado,
es prácticamente imposible saber el texto original, sin lo cual la función sería inútil para
encriptar), (5) inyectividad (dos textos distintos dan por resultados dos resultados distintos).
Notemos que para que se cumpla esta última condición, es indispensable que el número
de potenciales textos a encriptar sea menor que el número de resultados distintos que se
puede obtener de la función hash.
El tamaño del resultado de una función hash depende del nivel de seguridad deseado. Así,
por ejemplo, sha3_256 da un resultado de 256 bits, con el cual se representa un número
hexadecimal de 64 dígitos (cada número hexadecimal requiere 4 bits para almacenarse:
24 = 16), aunque también existen las funciones sha3_224 (para 56 dígitos), sha3_384
(96 dígitos) y sha3_512 (128 dígitos). Ahora bien, aunque a primera vista pueda pare-
cer que 64 dígitos hexadecimales son muy pocos para encriptar todos los posibles textos
que pueda necesitarse, una segunda vista nos hará notar que con ellos pueden encriptarse
1664 ≈ 1.16 × 1077 textos distintos, ¡un número muy superior al producto del número de
estrellas del universo veces el número de granos de arena en el planeta!
4
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
5 def encriptar(frase):
6 encriptado = sha3_256([Link]('utf-8')).hexdigest().upper()
7 return ' '.join([encriptado[i:i + 4] for i in range(0, 64, 4)])
Para probar esta función, encriptemos el texto “Consejo Monetario Centroamericano”
8 print(encriptar('Consejo Monetario Centroamericano'))
lo cual da por resultado este código de 64 dígitos:
B24F 92C2 99C6 D3D3 B19B B2A2 859D FE09 F6A8 58C0 5162 C708 A52B 695D 4203 312C
Para ilustrar las propiedades de la función hash, veamos cómo cambia ese código ante
pequeños cambios en el texto. Primero, separamos la palabra “Centroamericano”
9 print(encriptar('Consejo Monetario Centro Americano'))
7455 A87C 7C07 DE68 B4FD 8958 065D 5560 676B 4278 8B4F 5952 C149 D906 9B82 DE86
Como puede verse, pequeños cambios en el texto dan por resultado códigos completa-
mente distintos, por lo que conocer los códigos de algunos textos en particular es inútil
para adivinar el mensaje encriptado en otro código.
5
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
2 Creando un bloque
De la misma manera que no podemos hacer un tren sin vagones, para hacer una cadena
de bloques primero debemos construir los bloques individuales. Cada bloque contiene da-
tos, y la cadena de bloques es al fin de cuentas una secuencia ordenada de bloques de
información, atados entres sí por medio de claves criptográficas.
Vamos a programar en Python una clase llamada Bloque (líneas 13-28 abajo), que en tér-
minos de programación significa que vamos a desarrollar un prototipo de “bloque”, en el
cual describimos qué datos contendrá un bloque y qué acciones podrá hacer el bloque con
ellos. Más adelante crearemos los bloques individuales (objetos) de la cadena a partir de
este prototipo.
13 class Bloque:
14 def __init__(self, índice, saldos, código_previo):
15 self.índice = índice
16 [Link] = saldos
17 self.código_previo = código_previo
18 self.código = None
19 [Link] = [Link](columns=['Fecha', 'De',
,→ 'Para', 'Cantidad'])
20 self.fecha_hora = [Link]()
21
22 def encriptar_bloque(self):
23 datos = ['índice', 'saldos', 'código_previo',
,→ 'transacciones', 'fecha_hora']
24 contenido = ''.join(str(getattr(self,campo)) for campo in
,→ datos)
25 self.código = encriptar(contenido)
26
Intuitivamente, imaginamos la clase Bloque como una caja en la cual depositamos infor-
mación. Esto se ilustra en la figura 2, donde los datos contenidos en el bloque se muestran
en cuadros rosados, y los métodos o acciones se muestran en cuadros celestes en la parte
baja del bloque. A continuación explicamos el contenido y funcionamiento de esta clase.
6
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
código el código criptográfico del bloque (inicialmente ninguno), que servirá para encrip-
tar los datos del bloque.
transacciones una tabla de datos de pandas (inicialmente vacía) que registrará detalles
de 'Fecha', 'De', 'Para', 'Cantidad' para cada uno de los pagos realizados
con Cocoins,
fecha_hora la fecha y hora en que se creó el bloque, obtenido a partir del sistema con la
función [Link].
Además, la clase define dos métodos, es decir, dos acciones que puede realizar un bloque:
encriptar_bloque esta función se encarga de encriptar toda la información del bloque.
En 23 se define datos como una lista de los componentes del bloque que serán
encriptados, a saber: 'índice', 'saldos', 'código_previo', 'transacciones',
y 'fecha_hora'. A continuación, en 24 obtenemos el valor de cada uno de esos
componentes (con getattr), lo convertimos a texto (con str), y luego los concate-
namos (.join). Finalmente, en 25 usamos la función encriptar que definimos en
la sección anterior ( 5 ) y guardamos el resultado en el campo código del bloque.
7
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
8
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
36 @property
37 def bloque_actual(self):
38 return self[-1]
39
40 @property
41 def saldos(self):
42 return self.bloque_actual.saldos
43
44 @property
45 def transacciones(self):
46 return [Link]([[Link] for bloque in self],
47 keys=[f'Bloque{k}' for k in
,→ range(len(self))])
48
59 if cantidad < 0:
9
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
67 [Link][cuenta_origen] -= cantidad
68 [Link][cuenta_destino] += cantidad
69
70 cb.actualizar_transacciones(cuenta_origen,
,→ cuenta_destino, cantidad)
71 msg = '%12s le pagó %6.2f Cocoins a %s.'
72 print(msg % (cuenta_origen, cantidad, cuenta_destino))
73
74 def crear_siguiente_bloque(self):
75 cb = self.bloque_actual
76 cb.encriptar_bloque()
77 [Link](Bloque(cb.índice + 1, [Link](),
,→ cb.código))
78
79 def verificar_integridad(self):
80 anterior = self.bloque_actual.código_previo
81 for bloque in self[-2::-1]:
82 print(f'\nVerificando bloque{bloque.índice}', anterior,
,→ sep='\n')
83 bloque.encriptar_bloque()
84 print(bloque.código)
85
86 if bloque.código != anterior:
87 print('ADVERTENCIA: LA CADENA DE BLOQUES FUE
,→ ADULTERADA EN EL BLOQUE %d!!!' % bloque.índice)
88 return
89 else:
90 anterior = bloque.código_previo
91
10
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
96 [Link] = encriptar(str(code))
97 print(f'\nNuevo desafío (dificultad = {p}): {[Link]}')
98
15 16 17
saldos saldos saldos
12E8 2175 3A48 B081 982A E8F0
transacciones transacciones transacciones
fecha_hora fecha_hora fecha_hora
emitir_Cocoins verificar_integridad
pagar nuevo_desafio
crear_seguiente_bloque verificar_solucion
11
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
ningún (None) código anterior por no haber un bloque antes del inicial. Este primer bloque
lo añadimos (.append) al final de la cadena, que hasta ahora estaba vacía, en 34 .
Aparte de los bloques mismos, la cadena de bloques contiene tres propiedades o datos
(líneas 36 a 47 ):
saldos son los datos más actualizados de tenencias de Cocoins de cada usuario, que
simplemente corresponden al campo saldos del bloque_actual ( 42 ).
Ahora bien, esta plantilla Blockchain define seis acciones que puede hacer la cadena:
emitir_Cocoins para poder pagar con Cocoins alguien debe emitirlos con anterioridad.
Pues bien, para simplificar nuestro trabajo asumiremos que hay un 'Banco Central'
que cumple esta función, a diferencia de lo que sucede con Bitcoin y otros criptoac-
tivos en los cuales se “minan” las nuevas monedas. En la 49 indicamos que el único
parámetro requerido es cantidad, la cual de ser válida se la sumamos al saldo
del 'Banco Central' ( 53 ) y dejamos constancia de ello actualizando la tabla de
transacciones ( 54 ), todo ello en el bloque_actual de la cadena. No obstante, la
operación no será válida si pretende sacar de circulación (cantidad negativa) más
Cocoins que los que existen en el 'Banco Central', lo cual verificamos en 50 ; de
ser así, solo imprimimos una advertencia ( 51 ).
pagar este método es la pieza más importante de nuestra plantilla, después de todo, la
finalidad de Blockchain es constituirse en un sistema de pagos. De nuevo, para sim-
plificar nuestra labor, no nos detendremos a considerar aspectos importantes de un
sistema de pagos, como la verificación de credenciales de usuario y la manera en
que los usuarios se comunican con la cadena de bloques.
12
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
13
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
Como era de esperar, el único saldo hasta ahora corresponde a la emisión inicial de Co-
coins. Ahora, imaginemos que el 'Banco Central' le paga 600 Cocoins a cada uno de
sus colaboradores 'Ana', 'Beto', 'Carlos', 'Diana'.
110 print([Link])
111 print([Link])
14
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
Hasta ahora todo bien. A continuación simulamos pagos aleatorios 112-126 para crear 5
nuevos bloques ( 113 ), cada uno de los cuales tendrá un 121 NÚMERO_DE_PAGOS aleatorio
entre 2 y 11. Para cada uno de esos pagos, en 124 escogemos dos cuentas al azar, así
como 125 una cantidad aleatoria de entre 10 y 110 Cocoins. El pago lo procesamos en
126 .
112 [Link](2019)
113 NUMERO_DE_BLOQUES = 5
114
El resultado de esta simulación se muestra a continuación. Note que a pesar de que los
pagos son aleatorios, hemos fijado una semilla en 112 para obtener los mismos resultados
cada vez (para poder reproducir los resultados).
15
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
============================================================
El código del bloque 0 es:
4CF7 7187 AB13 53B9 30F2 4D6A C5F3 DD93 3792 5CCD 24D0 CBCA 975F CE69 AC99 13A2
El bloque #1 ha sido agregado a la cadena del Cocoin!
Diana le pagó 30.00 Cocoins a Banco Central.
Banco Central le pagó 60.00 Cocoins a Diana.
Beto le pagó 90.00 Cocoins a Diana.
Beto le pagó 70.00 Cocoins a Banco Central.
Beto le pagó 90.00 Cocoins a Diana.
Beto le pagó 110.00 Cocoins a Banco Central.
Diana le pagó 10.00 Cocoins a Ana.
Ana le pagó 10.00 Cocoins a Banco Central.
Carlos le pagó 80.00 Cocoins a Ana.
Beto le pagó 90.00 Cocoins a Diana.
============================================================
El código del bloque 1 es:
3D38 6DC1 E0DE 5555 F9E3 A492 5CCD EF68 BCFB 7B99 D0C2 0E6A C91C D9B2 596E 8037
El bloque #2 ha sido agregado a la cadena del Cocoin!
Carlos le pagó 40.00 Cocoins a Beto.
Banco Central le pagó 10.00 Cocoins a Diana.
Banco Central le pagó 30.00 Cocoins a Diana.
Beto le pagó 60.00 Cocoins a Diana.
Beto le pagó 80.00 Cocoins a Ana.
Ana le pagó 90.00 Cocoins a Beto.
Diana le pagó 60.00 Cocoins a Banco Central.
============================================================
El código del bloque 2 es:
9847 964B 4189 8A94 994A 1002 72AA 17CF FA44 A4AA 33C5 68A8 ABE2 CB5A B481 C2E3
El bloque #3 ha sido agregado a la cadena del Cocoin!
Diana le pagó 10.00 Cocoins a Ana.
Carlos le pagó 20.00 Cocoins a Diana.
Banco Central le pagó 70.00 Cocoins a Ana.
Carlos le pagó 110.00 Cocoins a Diana.
Banco Central le pagó 10.00 Cocoins a Carlos.
Diana le pagó 30.00 Cocoins a Ana.
============================================================
El código del bloque 3 es:
6489 626E 02CF DCD4 A474 1DDF 5F90 62BA BB06 1E4E B95E A877 9969 82F1 D141 1227
El bloque #4 ha sido agregado a la cadena del Cocoin!
Carlos le pagó 70.00 Cocoins a Ana.
Banco Central le pagó 40.00 Cocoins a Diana.
Beto le pagó 20.00 Cocoins a Banco Central.
Diana le pagó 40.00 Cocoins a Ana.
Beto le pagó 60.00 Cocoins a Ana.
Ana le pagó 10.00 Cocoins a Beto.
Beto le pagó 30.00 Cocoins a Carlos.
Ana le pagó 70.00 Cocoins a Carlos.
============================================================
El código del bloque 4 es:
44CE F0C3 D398 D2C6 AE81 FF8A 4F40 B6C7 6A2F 9AAB 3A27 AD17 AF07 6BD2 8300 D44B
El bloque #5 ha sido agregado a la cadena del Cocoin!
Banco Central le pagó 90.00 Cocoins a Beto.
Carlos le pagó 110.00 Cocoins a Beto.
Banco Central le pagó 30.00 Cocoins a Ana.
Revisamos de nuevo los saldos y vemos que de los cuatro participantes, 'Diana' es quien
acumuló más Cocoins (760 en total).
16
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
127 print([Link])
Banco Central 2560
Ana 900
Beto 240
Carlos 280
Diana 1020
dtype: int64
17
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
encriptada de cada bloque corresponde con la clave previa guardada por el siguiente
bloque.
129 COCOIN.verificar_integridad()
Verificando bloque4
44CE F0C3 D398 D2C6 AE81 FF8A 4F40 B6C7 6A2F 9AAB 3A27 AD17 AF07 6BD2 8300 D44B
44CE F0C3 D398 D2C6 AE81 FF8A 4F40 B6C7 6A2F 9AAB 3A27 AD17 AF07 6BD2 8300 D44B
Verificando bloque3
6489 626E 02CF DCD4 A474 1DDF 5F90 62BA BB06 1E4E B95E A877 9969 82F1 D141 1227
6489 626E 02CF DCD4 A474 1DDF 5F90 62BA BB06 1E4E B95E A877 9969 82F1 D141 1227
Verificando bloque2
9847 964B 4189 8A94 994A 1002 72AA 17CF FA44 A4AA 33C5 68A8 ABE2 CB5A B481 C2E3
9847 964B 4189 8A94 994A 1002 72AA 17CF FA44 A4AA 33C5 68A8 ABE2 CB5A B481 C2E3
Verificando bloque1
3D38 6DC1 E0DE 5555 F9E3 A492 5CCD EF68 BCFB 7B99 D0C2 0E6A C91C D9B2 596E 8037
3D38 6DC1 E0DE 5555 F9E3 A492 5CCD EF68 BCFB 7B99 D0C2 0E6A C91C D9B2 596E 8037
Verificando bloque0
4CF7 7187 AB13 53B9 30F2 4D6A C5F3 DD93 3792 5CCD 24D0 CBCA 975F CE69 AC99 13A2
4CF7 7187 AB13 53B9 30F2 4D6A C5F3 DD93 3792 5CCD 24D0 CBCA 975F CE69 AC99 13A2
LA CADENA DE BLOQUES ESTÁ BIEN!
Como último ejercicio, supongamos ahora que un hacker logra infiltrarse en la cadena y
modifica un dato, poniendo un saldo de 900 Cocoins a su favor:
130 COCOIN[3].saldos['LADRON'] = 900
131 print(COCOIN[3].saldos)
Banco Central 2700
Ana 780
Beto 140
Carlos 360
Diana 1020
LADRON 900
dtype: int64
Verificando bloque4
44CE F0C3 D398 D2C6 AE81 FF8A 4F40 B6C7 6A2F 9AAB 3A27 AD17 AF07 6BD2 8300 D44B
44CE F0C3 D398 D2C6 AE81 FF8A 4F40 B6C7 6A2F 9AAB 3A27 AD17 AF07 6BD2 8300 D44B
Verificando bloque3
6489 626E 02CF DCD4 A474 1DDF 5F90 62BA BB06 1E4E B95E A877 9969 82F1 D141 1227
92F0 D3B5 8348 2C2B C86D 233D 47E6 AE2C 7B8A 86A7 415F 4564 5200 4A11 79E7 FC9F
ADVERTENCIA: LA CADENA DE BLOQUES FUE ADULTERADA EN EL BLOQUE 3!!!
18
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
5 Minando cocoins
Tal como está programado, la cadena de bloques del Cocoin emite nuevos cocoins de una
manera muy sencilla: el 'Banco Central' los emite como en 106 y los pone en circulación
“pagándole” a 'Ana', 'Beto', 'Carlos', 'Diana' 600 cocoins a cada uno ( 108-109 ).
Está claro que en esta situación el 'Banco Central' recibe todo el señoreaje.
La prueba de trabajo o PoW para Cocoin la implementamos en los siguientes dos métodos:
Por las razones que discutimos en la sección 1, 'Ana', 'Beto', 'Carlos', 'Diana'
saben que es prácticamente imposible “invertir” un código hash. No obstante, dado que
ellos conocen las reglas del juego, saben que ese código corresponde a un número entre
0 y 9999. Así, la alternativa que tienen es encriptar secuencialmente todos esos números y
comparando los resultados con el código publicado. Como además ellos saben de Python,
en vez de ir encriptando uno a uno los números, escriben una función que hace todo el
trabajo:
19
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
Esta función itera sobre todos los posibles números ( 136 ), los encripta ( 137 ) y los compara
con el código hash ( 138 ). Una vez que resuelve el problema, le comunica a la cadena de
COCOIN el resultado y el nombre del minero ( 140 ) para que se le acrediten los fondos
respectivos.
Cuando 'Ana' empieza a minar, logra encontrar que el número que el 'Banco Central'
había escogido es el 555, y consigue así 20 cocoins de recompensa.
Conforme aumente el valor de los cocoins, el número de interesados en minarlos irá aumen-
tando. Dado que solo el primer minero en resolver el problema actual recibirá cocoins, esto
crea un fuerte incentivo para competir por medio de aumentar la capacidad computacional.
Con tantos mineros y recursos computacionales dedicados a esta actividad, la velocidad
con la cual se resuelven los problemas aumenta y la cadena eventualmente responde au-
mentando el valor de p, para que sea cada vez más difícil resolverlos (de lo contrario se
crean bloques nuevos demasiado pronto). El resultado final de todo esto es la típica si-
tuación conocida en teoría de juegos como el dilema del prisionero. En esta situación hay
dos equilibrios: el primero de ellos es un equilibrio inestable, donde todos los mineros
dedican un mínimo de recursos computacionales a resolver los problemas, y el segundo es
un equilibrio estable en el cual todos los mineros dedican muchísimos recursos. El dilema
20
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
se presenta por cuanto, aunque en ambos equilibrios el premio (la cantidad de cocoins
minados) es el mismo, el costo de minarlos en el segundo equilibrio es considerablemen-
te mayor al del primero. A pesar de ser socialmente deseable el primer equilibrio, ¿por
qué es inestable?: porque en tal situación para cada minero es individualmente deseable
dedicar más recursos a la minería, para aumentar sus propios ingresos esperados. Como
todos los mineros saben esto, todos terminan dedicando más recursos a la actividad.
Si al leer esto piensa que esta manera de “democratizar” el señoreaje a través de la mi-
nería no es más que un gran desperdicio de energía, ¡estamos de acuerdo! De hecho, el
consumo energético de la red de Bitcoin es tan alto que alcanzaría para dotar permanente
de electricidad a más de un país entero5 .
5
En la nota Romero Aguilar y Jiménez Elizondo (2019) ampliamos detalles sobre este tema.
21
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
6 Reflexiones finales
Para la inmensa mayoría de quienes no somos expertos en tecnología o informática, algu-
nas de las nuevas tecnologías se nos presentan con cierto aire de misterio. En muchos de
estos casos no necesitamos saber cómo funciona algo para sacarle provecho: por ejemplo,
no necesitamos saber cómo funciona un motor de combustión interna para poder condu-
cir un automóvil. Pero para que podamos juzgar si un sistema de pagos basado en una
innovación informática es seguro y confiable, sí resulta necesario entender más a fondo tal
innovación. Por ello, el objetivo de este documento de trabajo ha sido el de explicar de la
forma más sencilla posible cómo funciona el blockchain, la innovación detrás de muchos
de los criptoactivos de moda.
Para hacerlo sencillo, nos hemos abstenido de hacer una descripción precisa de cómo fun-
ciona un blockchain de Bitcoin, y más bien hemos rescatado sus elementos más esenciales.
Tampoco hemos discutido sobre cómo adquirir ni hacer transacciones con Bitcoin6 , ni tam-
poco de los riesgos asociados con ello.
Habiendo explicado cómo funciona un blockchain, pasamos ahora a dos reflexiones sobre
el fondo del asunto:(1) ¿puede un sistema de pagos prescindir de la confianza?, y (2) ¿es
realmente el blockchain una tecnología valiosa?
22
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
hace bitcoin es obligar a sus usuarios a trasladar la confianza depositada en las institucio-
nes financieras tradicionales a la red de pagos de Bitcoin. Para explicar mejor este punto,
consideremos los siguientes casos ilustrativos:
1. al ser Bitcoin un sistema basado en tokens o fichas, las cuales debo poseer para
demostrar que son mías (como sucede con el dinero en efectivo), al resguarlas debo
confiar en:
2. si utilizo un monedero en Internet para evitar los riesgos del punto 1, entonces de-
bo confiar en el dueño de tal sitio web, del que posiblemente ni siquiera sé dónde
está domiciliado. En este caso debo confiar tanto de su honorabilidad como de su
competencia (no son infrecuentes las noticias de ciberataques a este tipo de sitios).
Nótese que esto es similar a la confianza que requiero cuando deposito mi efectivo
en un banco.
3. si deseo gastar mis bitcoins, debo confiar en los proveedores de conexión al block-
chain de Bitcoin (sin esta conexión resulta literalmente imposible pagar con bitcoins).
La inmensa mayoría del público carece de las competencias informáticas necesarias
para conectarse directamente a Bitcoin, por lo que al final terminan confiando en
proveedores de aplicaciones (para teléfonos celulares, por ejemplo)
23
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
En este último punto en específico es importante señalar que luego de la crisis financiera
internacional de 2008 el dinero fiduciario de las principales economías del mundo no per-
dieron mucho valor (las tasas de inflación han permanecido realmente bajas en la última
década). Lo que sí ocurrió fue un aumento en la variabilidad de los tipos de cambio, pero
hay que recordar que un tipo de cambio es el precio relativo de una moneda en términos
de otra, por lo que si una baja su valor entonces necesariamente la otra lo sube.
Aún así, hay quienes piensan que más allá de las limitaciones de Bitcoin, el blockchain ha
venido a revolucionar la economía (los más entusiastas) o que al menos merece estudiarse
sus potenciales aplicaciones. Un ejemplo de esto último es el Proyecto Stella, desarrollado
conjuntamente por el Banco Central Europeo y el Banco de Japón, que explora la po-
sibilidad de utilizar los registros distribuidos (distributed ledger) en las infraestructuras de
mercados financieros, para la liquidación de pagos de alto valor (etapa 1), la liquidación
simultánea de obligaciones vinculadas (como el pago de efectivo contra la entrega de un
título valor, en la etapa 2), y operaciones cambiarias en pagos transfronterizos (etapa 3).
Pero no todos están tan ilusionados con blockchain. En un artículo de opinión Blockchain’s
Broken Promises Nouriel Roubini (2018a), uno de los más acérrimos críticos del blockchain,
señaló que el blockchain aún enfrenta grandes desafíos, entre ellos la ausencia de proto-
colos comunes y universales que hicieron posible a Internet (TCP-IP, HTML, por ejemplo).
Señala además que su promesa de transacciones descentralizadas sin una autoridad inter-
mediaria no es más que una quimera utópica, punto que retoma en Roubini (2018b) al
señalar que blockchain no es más que una hoja de cálculo sobrevalorada, ya que ninguna
institución (banco, corporación, agencia gubernamental o no gubernamental) pondría sus
registros (sean estos contables, de transacciones, clientes, o proveedores) en un registro
público de acceso irrestricto: simplemente no hay motivo alguno por el cual información
altamente valiosa deba registrarse públicamente.
24
Documento de Trabajo
Secretaría Ejecutiva del Consejo Monetario Centroamericano
No. 1, diciembre de 2019
REFERENCIAS
Referencias
Alfaro Ureña, Alonso y Evelyn Muñoz Salas (editores) (2019). Criptoactivos: análisis e im-
plicaciones desde la perspectiva del Banco Central de Costa Rica. Nota Técnica 001.
Banco Central de Costa Rica.
Kharif, Olga (8 de dic. de 2017). The Bitcoin Whales: 1,000 People Who Own 40 Percent
of the Market. URL: [Link]
bitcoin-whales-1-000-people-who-own-40-percent-of-the-market.
McGrath, Mike (2016). Python in Easy Steps. In Easy Steps Limited.
Nakamoto, Satoshi (2008). Bitcoin: A Peer-to-Peer Electronic Cash System. URL: https :
//[Link]/[Link].
– (11 de feb. de 2009). Bitcoin open source implementation of P2P currency. URL: http:
//[Link]/forum/topics/bitcoin-open-source.
Nash, Gerald (16 de jul. de 2017a). Let’s Build the Tiniest Blochchain. In Less Than 50
Lines of Python. URL: [Link]
tiniest-blockchain-e70965a248b.
– (23 de jul. de 2017b). Let’s Make the Tiniest Blochchain Bigger. Part 2: With More Lines
of Python. URL: [Link]
blockchain-bigger-ac360a328f4d.
Orcutt, Mike (18 de ene. de 2018). Bitcoin and Ethereum have a hidden power structure,
and it’s just been revealed. URL: [Link]
bitcoin-and-ethereum-have-a-hidden-power-structure-and-its-just-been-
revealed/.
Prypto (2016). Bitcoin for Dummies. John Wiley & Sons. ISBN: 978-1-119-07613-1.
Romero Aguilar, Randall y Keylin Jiménez Elizondo (nov. de 2019). Vulnerabilidades del
Bitcoin. Notas Económicas Regionales 107. Secretaría Ejecutiva del Consejo Monetario
Centroamericano.
Roubini, Nouriel (26 de ene. de 2018a). Blockchain’s Broken Promises. Project Syndicate.
URL: https : / / www . project - syndicate . org / commentary / why - bitcoin - is - a -
bubble-by-nouriel-roubini-2018-01.
– (15 de oct. de 2018b). The Big Blockchain Lie. Project Syndicate. URL: [Link]
[Link]/commentary/blockchain-big-lie-by-nouriel-roubini-
2018-10.
25