SlideShare a Scribd company logo
1 of 90
Download to read offline
De Bitcoin a Ethereum (versión abreviada)
Criptomonedas, Contratos Inteligentes y Corporaciones Descentralizadas
Autónomas
Jens Hardings Perl <jhp@moit.cl>
4 de mayo de 2016
Licenciado bajo Creative Commons Attribution-ShareAlike 4.0.
2 / 80
1 Bitcoin
Funcionamiento Blockchain
Uso
Problemas y Ataques
2 Ethereum
Introducción
Componentes y funcionamiento
3 Aplicaciones Distribuidas (dApps DAOs)
Acceso al “mundo real”
Casos concretos
2 / 80
Contenidos
1 Bitcoin
Funcionamiento Blockchain
Uso
Problemas y Ataques
2 Ethereum
Introducción
Componentes y funcionamiento
3 Aplicaciones Distribuidas (dApps DAOs)
Acceso al “mundo real”
Casos concretos
3 / 80
Motivación de desarrolladores de Bitcoin
Contexto
crisis hipotecas sub-prime gatillada
el 2007
quiebra de Lehman Bros 15 de
Septiembre 2008
fallas en organismos centrales
encargados de regular
descontento general que derivó en
Occupy Wall Street (Septiembre
2011)
deseo de contar con una moneda
independiente de control
centralizado
Objetivos técnicos
Base de datos distribuida que
registra transacciones
Inspirada en sistemas P2P como
Gnutella, Tor
No requiere ente central confiable
Sistema autosustentable: incentivos
a quienes sustentan la red
Eficiencia: transacción “confirmada”
en ∼ 1 hora
t. de crédito: 60 a 180 días
cheques: 1 a 2 semanas
3 / 80
Motivación de desarrolladores de Bitcoin
Contexto
crisis hipotecas sub-prime gatillada
el 2007
quiebra de Lehman Bros 15 de
Septiembre 2008
fallas en organismos centrales
encargados de regular
descontento general que derivó en
Occupy Wall Street (Septiembre
2011)
deseo de contar con una moneda
independiente de control
centralizado
Objetivos técnicos
Base de datos distribuida que
registra transacciones
Inspirada en sistemas P2P como
Gnutella, Tor
No requiere ente central confiable
Sistema autosustentable: incentivos
a quienes sustentan la red
Eficiencia: transacción “confirmada”
en ∼ 1 hora
t. de crédito: 60 a 180 días
cheques: 1 a 2 semanas
4 / 80
Aparición de Bitcoin
1 de Noviembre de 2008: un desconocido Satoshi Nakamoto publica paper
con idea en lista de correos de criptografía
3 de enero de 2009: Se genera el primer bloque del Blockchain
9 de enero de 2009: Nakamoto publica primera versión del software de
referencia
Estuvo activo hasta mediados de 2010, cuando entregó el control
(repositorio, dominios, etc) a terceros
No se sabe si Satoshi Nakamoto es su nombre real, o si es un grupo más
que una persona
5 / 80
1era Transacción con Bitcoin en el “mundo real”
La Pizza de los 10 Millones de Dólares
Una Pizza por 10.000 BTC el 22 de Mayo de 2010
10,000 BTC = 42 USD en la fecha
Más de 4,000,000 USD en 2016
10,000 BTC = 11,472,500 USD al 4 de diciembre 2013
6 / 80
Contenidos
1 Bitcoin
Funcionamiento Blockchain
Uso
Problemas y Ataques
2 Ethereum
Introducción
Componentes y funcionamiento
3 Aplicaciones Distribuidas (dApps DAOs)
Acceso al “mundo real”
Casos concretos
7 / 80
Funcionamiento del Bitcoin: Blockchain
Todas las transacciones se registran en un “libro” (contable) público,
compartido y descentralizado: el blockchain
Uso de Elliptic Curve Digital Signature Algorithm (ECDSA) y SHA-256
Identificación de una contraparte es la llave pública
dirección: hash de llave pública
Privacidad: llave pública no da indicios sobre la identidad
Por cada bitcoin, se registra cada transacción desde su creación al estado
actual
Los bitcoin se pueden subdividir en hasta 10−8 unidades
un 10−8
de bitcoin es un satoshi
De ser necesario, protocolo se puede modificar para aceptar divisiones más
pequeñas
8 / 80
Bloques
Las transacciones se agrupan en bloques, nodos compiten
Armar un bloque válido es computacionalmente caro
Proof of work (Hashcash)
Promedio: un bloque cada 10 minutos
Dificultad se ajusta cada 2016 bloques (∼ 2 semanas)
Incentivo a generar bloques
Cada bloque entrega bitcoins a quien lo genera (transacción 1 del bloque)
Incentivo a incorporar todas las transacciones
Generador del bloque se queda con los transaction fees de cada transacción
Un bloque depende de todos los anteriores: blockchain
Blockchain más largo es el válido (se descartan cadenas más cortas)
No se intenta buscar ni castigar participantes deshonestos
9 / 80
Bloques
Bloque 1
Header
Hash( Header
bloque anterior )
Hash Txs
Transacciones
bloque 1
Bloque válido si
Todas las transacciones son válidas
Proof-of-work válido
9 / 80
Bloques
Bloque 1
Header
Hash( Header
bloque anterior )
Hash Txs
Transacciones
bloque 1
Bloque 2
Header
Hash( Header
bloque anterior )
Hash Txs
Transacciones
bloque 2
Bloque 3
Header
Hash( Header
bloque anterior )
Hash Txs
Transacciones
bloque 3
Bloque 4
Header
Hash( Header
bloque anterior )
Hash Txs
Transacciones
bloque 4
Bloque válido si
Todas las transacciones son válidas
Proof-of-work válido
10 / 80
Minado: proceso de encontrar nuevos bloques
Proof of work resuelve 2 problemas
1 forma simple y efectiva de consensuar el estado del blockchain
2 mecanismo de entrada al proceso de consenso
peso relativo de cada participante es su poder computacional
Algoritmo
Construyo el bloque
1era transacción me paga los bitcoins por generar el bloque
Mi bloque es diferente al de cualquier otro minero
Nonce = 0
Valido si sha256(bloque) < target
Incremento nonce y reintento
11 / 80
Validación de un bloque
1 Bloque anterior existe y es válido
Definición recursiva hasta “genesis block”
Si está en el blockchain, es válido
2 Timestamp del bloque debe ser superior al del bloque previo y menos de 2
horas en el futuro
3 Proof of work es válido
4 Si S0 es el estado del bloque anterior y TX son las n transacciones del
bloque:
∀i ∈ {0 · · · n − 1}Si+1 = Apply(Si, TXi)
Si hay error, bloque no es válido
El orden de las transacciones es relevante
5 Sn es el nuevo estado
El estado no está codificado explícitamente
12 / 80
Generación de Bitcoins
Inicio: 50 BTC por bloque
Se divide en 2 cada 210,000
bloques (4 años)
Al año 2024: 19,6 MM BTC
Nunca se superarán los 21MM de
BTC
0 210 420 630 840 1050 1260 1470 1680
2009 2013 2017 2021 2025 2029 2033 2037
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
0
5
10
15
20
Bitcoin Inflation vs. Time
InflationRate(annualized)
Year
Bitcoins(millions)
13 / 80
Blockchain: Seguridad
Caso 1: 2 nodos encuentran el siguiente bloque
Razones: Problemas de red, solución prácticamente simultánea, mala fe
Receptores eligen primero que llega
Partición de la red con 2 cadenas del mismo largo
Un nodo encuentra siguiente bloque
Demás eliminan la otra cadena (más corta)
Caso 2: Doble gasto
El segundo gasto que llega es desechado por el nodo
Si ∼ 50 % de los nodos toma un gasto, el resto el otro
Cadena de bloque difiere
Uno nodo encuentra primero el segundo bloque, se descarta cadena más corta
Puede quedar una sola transacción de las dos
13 / 80
Blockchain: Seguridad
Caso 1: 2 nodos encuentran el siguiente bloque
Razones: Problemas de red, solución prácticamente simultánea, mala fe
Receptores eligen primero que llega
Partición de la red con 2 cadenas del mismo largo
Un nodo encuentra siguiente bloque
Demás eliminan la otra cadena (más corta)
Caso 2: Doble gasto
El segundo gasto que llega es desechado por el nodo
Si ∼ 50 % de los nodos toma un gasto, el resto el otro
Cadena de bloque difiere
Uno nodo encuentra primero el segundo bloque, se descarta cadena más corta
Puede quedar una sola transacción de las dos
14 / 80
Blockchain: Transacciones
Building block fundamental para el Blockchain
Forma de traspasar valor de una dirección a otra
En una transacción se traspasa todo el valor que entró por otra transacción
Se puede usar la misma dirección para el vuelto
Se recomienda una dirección diferente para cada transacción
Para usar el valor en una dirección se referencia la transacción
no la dirección
no la billetera (wallet)
la transacción anterior puede especificar cómo se puede gastar el valor en la
siguiente
especie de contrato
15 / 80
Blockchain: Transacciones encadenadas
Transferencia de propiedad de una dirección a otra
considerando uso sin restricción por parte del dueño
Firma de
dueño 0
Hash
Llave pública
de dueño 1
Llave privada
de dueño 1
Transacción 1
15 / 80
Blockchain: Transacciones encadenadas
Transferencia de propiedad de una dirección a otra
considerando uso sin restricción por parte del dueño
Firma de
dueño 0
Hash
Llave pública
de dueño 1
Llave privada
de dueño 1
Transacción 1
Firma de
dueño 1
Hash
Llave pública
de dueño 2
Llave privada
de dueño 2
Transacción 2
Verifica
Firma
15 / 80
Blockchain: Transacciones encadenadas
Transferencia de propiedad de una dirección a otra
considerando uso sin restricción por parte del dueño
Firma de
dueño 0
Hash
Llave pública
de dueño 1
Llave privada
de dueño 1
Transacción 1
Firma de
dueño 1
Hash
Llave pública
de dueño 2
Llave privada
de dueño 2
Transacción 2
Firma de
dueño 2
Hash
Llave pública
de dueño 3
Llave privada
de dueño 3
Transacción 3
Verifica
Firma
Verifica
Firma
16 / 80
Transacciones: detalles
Múltiples inputs, valores se suman
Múltiples outputs (normalmente 2: pago y vuelto)
Output
Valor
scriptPubKey: cómo se puede
canjear el valor
solamente hash(script)
script lo da canjeador
Valor no asignado es “transaction
fee”
Cada output se usa como input en 1 única transacción
16 / 80
Transacciones: detalles
Múltiples inputs, valores se suman
Múltiples outputs (normalmente 2: pago y vuelto)
Input
Referencia el output en otra
transacción (ID tx, posición)
scriptSig: cumplimiento de exigencia
para canjear
establecido en transacción
referenciada
Output
Valor
scriptPubKey: cómo se puede
canjear el valor
solamente hash(script)
script lo da canjeador
Valor no asignado es “transaction
fee”
Cada output se usa como input en 1 única transacción
17 / 80
Tipos de transacción (según scriptPubKey)
Pay-to-PubkeyHash (P2PH)
al usar como input, se debe presentar:
llave pública (dirección es solamente el hash)
firma de la transacción
20 bytes (el hash)
Pay-to-Script-Hash (P2SH)
al usar como input, se ejecuta el script
script lo provee canjeador
hash debe calzar con scriptPubKey de output
al finalizar debe quedar un solo valor en el stack
valor debe ser true (= 0)
18 / 80
Scripts en Bitcoin
Lenguaje basado en Forth para especificar cómo se pueden canjear los
bitcoins enviados en una transacción
Funcionalidad reducida
No tiene loops
Ejemplo de usos:
Firmas simultáneas con distintas llaves privadas
n firmas de m alternativas (n < m)
Sin firmas (ej: password)
19 / 80
Escalabilidad: Merkle Trees
Simplified Payment Verification: no requiero todas las transacciones para
verificar 1 dentro de un bloque
Ejemplo con transacciones A, B, C, D, E:
merkle root = h(h(h(h(A)+h(B)) + h(h(C)+h(D))) + h(h(h(E)+h(E)) + h(h(E)+h(E))))
A B C D E
a = h(A) b = h(B) c = h(C) d = h(D) e = h(E)
ab = h(a+b) cd = h(c+d) ee = h(e+e)
abcd=h(ab+cd) eeee=h(ee+ee)
abcdeeee = h(abcd+eeee)
20 / 80
Contenidos
1 Bitcoin
Funcionamiento Blockchain
Uso
Problemas y Ataques
2 Ethereum
Introducción
Componentes y funcionamiento
3 Aplicaciones Distribuidas (dApps DAOs)
Acceso al “mundo real”
Casos concretos
21 / 80
Privacidad
Se recomienda usar una llave nueva para cada transacción
Uso de múltiples inputs en una transacción indica que esas direcciones son
del mismo dueño
Secuencia de transacciones indica flujo de pagos
Mixing services
también llamados “laundering
services”
servicio que recibe bitcoins y los
redistribuye
requiere confianza ciega en quien
entrega el servicio
CoinJoin: sin tercero confiable
componer n transacciones
independientes en 1 sola
partes acuerdan outputs y montos,
incluyendo vueltos
cada contraparte firma su parte de
la transacción
transacción es válida sólo si todos
firmaron
22 / 80
Ejemplo de Mixing Service: Bitcoinfog
Se accede mediante Tor
Recibe pago a dirección generada aleatoriamente
Se cobra una comisión aleatoria entre 1 % y 3 %
Maneja un pool principal con bitcoins para pago
al bajar los fondos del pool principal, va transfiriendo desde las direcciones
aleatorias iniciales
Al realizar un retiro, se define aleatoriamente:
el número de tx (dependiendo tb. del monto)
el valor relativo entre las tx
la separación de tiempo entre tx (dentro de un rango total especificado)
23 / 80
Billeteras
Colección de llaves privadas
Actuales y futuras
se evita necesidad de respaldar después de cada uso
(posiblemente) cache de transacciones y/o saldo total
Puede cifrar las llaves privadas
Si se pierde llave de cifrado, se pierde el contenido
Versiones en web, software, hardware
ejemplo de hardware wallet
24 / 80
eWallets
llamadas browser-based wallet o wallet service
Billeteras accesibles vía web
Proveedor maneja todas las llaves privadas
Símil a un banco: confiamos en que dinero depositado se manejará según
nuestras instrucciones
Pero sin el respaldo legal
25 / 80
Billeteras en papel
Documento que contiene toda la información para
generar llaves privadas
Semilla para generadores deterministas de llave
Llaves en papel (solamente 1 par)
Regalos o propinas
Tokens físicos: para acceder a la llave privada, se
destruye el token
Almacenamiento offline
También se usa para referirse a una única llave
almacenada en papel como medio óptico
26 / 80
(Hierarchic) Deterministic Wallets
Se genera una secuencia determinista de pares
Secuencia pseudo-aleatoria
Propiedades deseadas:
Master Public Key
Permite generar todas las llaves
públicas
No permite obtener las llaves
privadas correspondientes
Si se compromete, solamente
permite ver saldo total, no usarlo
Jerárquico (HD Wallets)
Master Public/Private Key permite
generar llaves que a su vez son
Master Public/Private Keys (de
jerarquía inferior)
Conociendo la llave de jerarquía
superior puedo calcular todas las
inferiores
Al revés no funciona
27 / 80
Minado de Bitcoins
Inicio: hardware casero (2010)
Computador de escritorio en tiempos
ociosos (hasta 100 Mhash/s)
Uso de GPUs (2011)
Menor consumo de energía, mayor
velocidad. (hasta 800 Mhash/s, 2.500
con 6 GPUs)
Foto: Stefan Ledwina
28 / 80
Minado de Bitcoins (2)
Múltiples tarjetas (2012)
Foto: “Einer von denen” (Flickr)
FPGA Mining (2013)
Field-programmable gate array (2 a 10
Ghash/s)
Foto: Xiangfu (Wikimedia Commons)
29 / 80
Minado de Bitcoins (3)
ASIC vía USB (2013)
Application-specific integrated circuit
Foto: Mirko Tobias Schäfer
ASIC (2014)
Application-specific integrated circuit
(1100 - 1500 Ghash/s)
Foto: Wikimedia Commons
30 / 80
Minado de Bitcoins (4)
ASICs masivos: ya no son juguetes
Foto: Bitcoin rig al norte de Suecia (Julio 2014), por Datavetaren
31 / 80
Mining Pools
Hoy en día casi nadie mina solo
Pools de minado
Conjunto de personas trabajando en paralelo
Al encontrar un bloque se divide proporcional al esfuerzo
Primer bloque minado en conjunto: Septiembre 2010
Recompensa con menor varianza
32 / 80
Contenidos
1 Bitcoin
Funcionamiento Blockchain
Uso
Problemas y Ataques
2 Ethereum
Introducción
Componentes y funcionamiento
3 Aplicaciones Distribuidas (dApps DAOs)
Acceso al “mundo real”
Casos concretos
33 / 80
Principales problemas que enfrenta Bitcoin
Volatilidad
Robo, Estafas
Mercados negros
Lavado de dinero
Malware
Problemas de implementación
Problemas de Gobernanza
34 / 80
“51 % Attack”
Objetivos
Reescribir el pasado
Dominar la red
Requiere generar:
el bloque que se quiere
modificar
todos los bloques
posteriores
todos los bloques
generados en el intertanto
Requiere al menos el 50 % + 1 de todo el
poder computacional dedicado a la red
No se pueden generar transacciones
nuevas, solamente eliminar transacciones
propias
Se generaría desconfianza en la
criptomoneda, afectando los recursos
propios
Ese poder computacional se puede usar
para minar bitcoins honestamente
34 / 80
“51 % Attack”
Objetivos
Reescribir el pasado
Dominar la red
Requiere generar:
el bloque que se quiere
modificar
todos los bloques
posteriores
todos los bloques
generados en el intertanto
Requiere al menos el 50 % + 1 de todo el
poder computacional dedicado a la red
No se pueden generar transacciones
nuevas, solamente eliminar transacciones
propias
Se generaría desconfianza en la
criptomoneda, afectando los recursos
propios
Ese poder computacional se puede usar
para minar bitcoins honestamente
35 / 80
Otros ataques
Robo de Billetera
Billetera guarda datos no cifrados
Transaction ID Malleability
Problema de implementación al no chequear formato de llave pública
Al reformatear la misma llave, genera un ID de transacción distinta
Emisor original no encuentra tx en Blockchain y reenvía
posiblemente con otro input
36 / 80
Combined output overflow I
Problema de implementación + “monocultivo”
Problema
Al sumar los valores de dos outputs se generaba un overflow y con eso
fallaba el chequeo
El bloque 74638, (15 de Agosto de 2015), aprovechó la vulnerabilidad
Generó 184.467.440.736,58 nuevos Bitcoin
37 / 80
Combined output overflow II
Problema de implementación + “monocultivo”
Solución
Se pidió no seguir generando bloques mientras se soluciona el problema
Se corrigió el código dentro de un par de horas
No se generaron más bloques con ese error
Se tuvo que corregir el blockchain, que contenía bloques inválidos
Normalmente bloques ya chequeados no se re-chequean
Se alcanzaron a generar 54 bloques sobre el erróneo
Blockchain generado por nodos “corregidos” se hizo más largo
38 / 80
Micro Payments exploit
Problema
Nodo de referencia exige transaction fee para
Transacciones > 1000 bytes
Outputs con menos de 0,01 Bitcoin
Prioridad es suficientemente alta
Pagos realizados por menos de 0,01 Bitcoin quedan para siempre sin
confirmar
Pagos que incluyen esos pagos no confirmados también
No es un bug en sí, más bien una molestia
Solución
Se actualiza cliente para que no envíe transacciones con inputs no confirmados.
39 / 80
Blockchain hard fork
13 de marzo 2013: cambio de versión genera comportamiento incompatible
Versión 0.7 no soporta bloques de más de 500kB
por uso de una librería con esa limitación
Un nodo con versión 0.8 generó un bloque de 974kB
Los nodos 0.7 no aceptaban ninguna cadena con ese bloque
Se generaron 2 cadenas cada vez más largas
Se debió detener la generación de nuevos bloques
Versión 0.8.1 respetó ese límite, hasta el 15 de mayo de 2013
Tiempo para que se actualicen los nodos
40 / 80
Bitcoin Timejacking
Timestamping en Bitcoin
Nodos deben mantener producción de bloques en 1 cada app. 10 minutos
Requieren tener un acuerdo sobre el momento en que se genera cada bloque
Forma en que un nodo define su “network time”:
mediana de los tiempos publicados por peers, si se encuentra en ±70 minutos
respecto al system time
tiempo de sistema si no
Un nodo rechaza bloques si el timestamp del bloque:
es 2 horas en el futuro respecto al “network time”
está en el pasado respecto a media de últimos 11 bloques
41 / 80
Bitcoin Timejacking
Ataque
atacante agregan suficientes “peers” para que
adelanten el reloj de los peers del objetivo
atrase el reloj del objetivo
diferencia: app. 140 minutos
atacante genera bloque válido 190 minutos al futuro del “network time”
nodos adelantados en 70 minutos lo aceptan
nodo objetivo lo rechaza (está a 260 minutos adelantados para él)
atacante ha desconectado al nodo objetivo del resto
nodo objetivo va a aceptar transacciones duplicadas
42 / 80
Bitcoin Timejacking
Soluciones
Usar solamente “system time” para validar recepción de bloques
Aceptar solamente transacciones confirmadas
Introduce demora en validar el pago
Ajustar rangos de aceptabilidad
Usar solamente peers confiables
43 / 80
Selfish Mining
Problema
Cuando un minero encuentra un bloque, lo publica
Si no lo publica de inmediato, puede ganar tiempo minando el siguiente
Debe difundir su bloque más rápido de lo que se difunde otro cuando otro
minero acierta
Atacantes obtienen una recompensa mayor que la justa
Al comenzar antes que cualquiera, amplifican su poder computacional real
Al existir un pool con selfish mining, hay incentivos a unirse a él
Se pierde la esencia distribuida del blockchain
44 / 80
Selfish Mining
Requerimientos al atacante
Debe poder minar un bloque antes que cualquiera
con 1
3 del poder computacional (en lugar del 50 % esperado)
Tener buena conectividad aumenta su probabilidad de imponer sus bloques a
la red
si llega perimro al 50 % de los mineros honestos, requiere solo 25 % del poder
computacional
Remedio propuesto
Propagar todas las cadenas de mismo largo que compitan
Minar sobre alguna elegida al azar
Disminuye la probabilidad que un atacante imponga su cadena sobre las
demás
45 / 80
Volatilidad
Volumen total de moneda es pequeño
Cada transacción/noticia grande tiene impacto fuerte
Valor total del valor existente es bajo
Capitalización de BTC: e3,950,267,412
USD (M1): e1,952,504,690,000 (494x BTC)
EUR (M1): e5,493,000,000,000 (1390x BTC)
BOB (M1): e5,286,504,000 (1,34x BTC)
Fuentes: http://coinmarketcap.com/, Banco Central Europeo
Moneda no tiene un valor inherente
Moneda está en pocas manos
47 individuos tienen casi un 30 % de los bitcoins
927 individuos tienen el 50 % de los bitcoins
Fuente: Business Insider
46 / 80
Valor histórico de Bitcoin [USD]
↑ Fuente: http://bitcoincharts.com/
46 / 80
Valor histórico de Bitcoin [USD]
↑ Fuente: http://bitcoincharts.com/ ↓ Fuente: Google Trends
47 / 80
Google Trends
G 2012-04 Hacker currency Bitcoin crashes
F 2013-08 Srsly? Bitcoin, selfie added to Oxford dictionary
E 2013-12 Bitcoin crashes on China measures
D 2014-02 Bitcoin exchange Mt. Gox goes offline
C 2014-06 Co-owner of bitcoin-linked sites settles SEC case
B 2014-09 2 Bitcoin operators plead guilty in Silk Road case
A 2015-01 Coinbase opens first US Bitcoin exchange
48 / 80
Lavado de dinero
desde 2010, Financial Action Task Force (FATF) incorpora Monedas Virtuales
en sus análisis
49 / 80
Mt. Gox: Magic The Gathering Online eXchange
Comenzó en 2006 para canjear naipes del juego MTGO como acciones,
funcionó durante 3 meses
Re-uso del nombre para crear casa de cambio de Bitcoin (70 % de tx bitcoin
en 2013)
Junio 2011: un atacante logró bajar el precio de USD 17,50 a USD 0,01 con
grandes transacciones consigo mismo usando credenciales robadas a un
auditor de MtGox, generando pérdidas por USD 8.750.000 a clientes
Octubre 2011: se generan transacciones enviando 2.609 BTC a direcciones
inválidas
Febrero 2013: se “pierden” transacciones canceladas por receptor y
devueltas a Mt.Gox, se recuperan 3 meses después
Mayo 2013: EEUU embarga USD 2,9MM por no registrarse como negocio de
transferencia de dinero
50 / 80
Mt. Gox: la debacle
Junio 2013: se suspenden retiros en USD
Febrero 2014: se suspenden todas las actividades, sitio web desaparece
Razones de los problemas de liquidez: desorden y mala gestión
CEO alega que fueron robos y estafas a lo largo de años
Empleados revelaron que ni siquiera existía separación entre billetera personal
del CEO y los fondos de la empresa
51 / 80
Silk Road Marketplace
Mercado en la DarkNet, lanzado en Febrero
2011
Conocido por sus ventas de drogas de
diverso tipo
También armas, asesinatos por encargo,
etc.
Administrada por Ross Ulbricht (San
Francisco)
Transaba exclusivamente con Bitcoin
Fue cerrado en Octubre 2013
Reapareció al par de semanas pero se
volvió a clausurar
52 / 80
Contenidos
1 Bitcoin
Funcionamiento Blockchain
Uso
Problemas y Ataques
2 Ethereum
Introducción
Componentes y funcionamiento
3 Aplicaciones Distribuidas (dApps DAOs)
Acceso al “mundo real”
Casos concretos
53 / 80
Contenidos
1 Bitcoin
Funcionamiento Blockchain
Uso
Problemas y Ataques
2 Ethereum
Introducción
Componentes y funcionamiento
3 Aplicaciones Distribuidas (dApps DAOs)
Acceso al “mundo real”
Casos concretos
54 / 80
Ethereum: Motivación
2 formas de extender Bitcoin, cada una con limitaciones
Usando Bitcoin Blockchain
Limitaciones del scripting (loops)
No hay posibilidad de transferencias exactas
de montos a determinar en el futuro
No hay estados (solo gastado o no gastado),
necesario para implementar contratos
complejos
No hay acceso a datos del Blockchain como
timestamp o hash de bloque previo
Imposibilidad de usar SPV en extensiones
(Ej: Colored Coins)
Blockchain paralelo
Cada implementación un
universo paralelo
Moneda que solamente
sirve para un fin
Valorizaciones y
volatilidades diversas
Esfuerzos de bootstrapping,
desarrollo y minado
55 / 80
Ethereum: Motivación (2)
Smart Property
Propiedad cuya pertenencia es controlada por el blockchain
Ej: conservador de bienes raíces digital
Smart Contracts
contratos que se auto-aplican
idea original: Nick Szabo (1997)
Decentralized autonomous organizations
Metacoin
Uso de Bitcoin como base para otros protocolos
Símil a lo que es TCP/IP para Internet
Diversos protocolos se implementan “sobre” el mismo blockchain
56 / 80
¿Qué es Ethereum?
Logo: Marc van der Chijs
Una plataforma de consenso descentralizado
“The ultimate abstract foundational layer”
Un computador virtual descentralizado
Moneda propia o “crypto-fuel” (Ether)
Usado para pagar transaction fees
Base para generar otras monedas sobre el Ethereum
Blockchain
57 / 80
Ethereum: conceptos
Separación de árbol de estado y lista de transacciones
Lenguaje de programación Turing-completo integrado
Ethereum Script
Cuentas (direcciones), en 2 sabores
externally owned accounts: controladas por llaves privadas
contract accounts (Contratos): controladas por su código de contrato
Transacciones
Paquete de datos firmados que contienen un mensaje
Mensajes
Objeto virtual (no serializado) usado en el contexto de ejecución
58 / 80
Contenidos
1 Bitcoin
Funcionamiento Blockchain
Uso
Problemas y Ataques
2 Ethereum
Introducción
Componentes y funcionamiento
3 Aplicaciones Distribuidas (dApps DAOs)
Acceso al “mundo real”
Casos concretos
59 / 80
Cuentas (Accounts)
Agentes autónomos que “viven” en el blockchain
Tiene una dirección Ethereum de 20 bytes, con:
Un nonce usado para que cada transacción pueda ser procesada una sola vez
El balance de ether de la cuenta
El código de contrato, si existe
El almacenamiento de la cuenta
Cuentas de dueño externo
No tienen código de contrato
Se usan enviando mensajes
firmados por el dueño
Contratos
Se ejecuta el código cuando llega
un mensaje
Pueden leer/escribir su
almacenamiento, enviar mensajes y
crear nuevos contratos
60 / 80
Transacciones
para enviar un mensaje de una cuenta de dueño externo
Contiene los siguientes datos:
Destino del mensaje
Firma identificando el emisor
Monto de ether a transferir
Campo opcional de datos
Valor STARTGAS
Valor GASPRICE
Protección ante DoS:
STARTGAS
Número máximo de pasos
computacionales a ejecutar en la
transacción (incluyendo sub-ejecuciones
de mensajes)
cálculo (CPU), ancho de banda y
almacenaje
GASPRICE
Fee que el emisor está dispuesto a
pagar por cada paso computacional
61 / 80
Mensajes
Objetos virtuales (solo existen en el contexto de ejecución de Ethereum
Generado por un contrato mediante la instrucción CALL
Contienen:
Emisor del mensaje (implícito)
Receptor del mensaje
Monto de ether transferido con el mensaje
Campo de datos (opcional)
Valor STARTGAS
62 / 80
Ethereum Script
Bajo nivel: bytecode en EVM (Ethereum Virtual Machine)
Alto nivel: Serpent (basado en Python), otros.
Lenguaje basado en un stack (pila)
Stack no persistente
Memoria autoexpandible
no persistente
Almacenamiento persistente
estado del contrato
63 / 80
Procesamiento de transacciones
1 Validar que transacción está bien formada (número de valores, firma, nonce
es igual al nonce de la cuenta del emisor
2 Calcular transaction fee como STARTGAS * GASPRICE, sustraer ese monto
del balance del emisor, incrementar el nonce del emisor. Error si no hay
suficiente saldo.
3 Inicializar GAS = STARTGAS, restar costo por byte en la transacción
4 Transferir el valor especificado en tx desde el emisor al receptor
Si cuenta destino no existe, crearla
Si destino es contrato, ejecutar su código
5 Si ejecución falla (fondos insuficientes; se acabó el GAS), se revierten los
cambios salvo transaction fee
6 Devolución de GAS no gastado y pago de fees al minero
64 / 80
Sub-transacciones
Un contrato envía un mensaje a otro contrato
Especifica STARTGAS para sub-transacción
Si falla por falta de GAS, se aborta sub-transacción y se retoma actual
65 / 80
Validación de un bloque
1 Revisar existencia y validez de bloque referenciado como previo
2 Revisar timestamp sea mayor que el del previo y menos de 15 minutos en el
futuro
3 Revisar validez de número de bloque, dificultad, transaction root, uncle root y
GASLIMIT
GASLIMIT es el tope de GAS para calcular todas las transacciones
4 Revisar validez del proof of work
5 S0 es el estado del bloque previo
6 TX es el listado de las n transacciones en el bloque. ∀i ∈ [0 . . . n − 1],
Si+1 = APPLY(Si, TXi). Si hay error o se consume más que el GASLIMIT del
bloque, retornar error.
7 Sfinal = Sn, pero agregando la recompensa al minero.
8 Revisar que el Merkle tree root del bloque calza con el de Sfinal.
66 / 80
Almacenamiento del Estado
En teoría, se almacena el estado en cada bloque
(key, value)
Estructura de datos: Merkle Patricia Trie
Basado en Patricia Trie / Radix Trie (“Trie”, de reTRIEval)
Alfabeto hexadecimal (cada nodo tiene hasta 16 hijos), llave es binaria
Cada nodo del árbol se referencia mediante su hash
Estructura determinista: solo 1 forma de representar un estado, genera siempre
el mismo hash
Se mantiene una BD (hash, nodo)
Si un (sub-)árbol no cambia, ya está almacenado en la BD
En cada bloque solamente se incluyen los nodos cambiados
(Sub-)árboles ya no referenciados pueden eliminarse
67 / 80
Contenidos
1 Bitcoin
Funcionamiento Blockchain
Uso
Problemas y Ataques
2 Ethereum
Introducción
Componentes y funcionamiento
3 Aplicaciones Distribuidas (dApps DAOs)
Acceso al “mundo real”
Casos concretos
68 / 80
Aplicaciones: 3 tipos
Aplicaciones financieras
monedas (sub-currencies), derivados financieros, contratos de cobertura (futuros;
hedging contracts), libretas de ahorro, testamentos, contratos de trabajo.
Aplicaciones semi-financieras
Se transa dinero pero hay una fuerte componente extramonetaria. Ej:
Recompensas auto-ejecutables para resolver problemas computacionales
Aplicaciones no financieras
Smart Property, Votación electrónica, Gobierno Corporativo Descentralizado, etc.
69 / 80
Smart Property
Ethereum + IoT = Smart Property
Ej: arriendo por horas
Se ingresa llave pública de beneficiario, tiempo, etc.
Dispositivo que controla acceso se actualiza
Autenticación mediante firma con llave privada
69 / 80
Smart Property
Ethereum + IoT = Smart Property
Ej: arriendo por horas
Se ingresa llave pública de beneficiario, tiempo, etc.
Dispositivo que controla acceso se actualiza
Autenticación mediante firma con llave privada
70 / 80
Sistemas de Token
Muy fáciles de implementar en Ethereum
Posibilidad de por ejemplo pagar transaction fees en la misma sub-moneda
Permiten crear sub-monedas o mapear a activos (estilo Colored Coins)
Código para sistema de token (salvo distribución inicial y casos de borde)
def send(to, value):
if self.storage[msg.sender] >= value:
self.storage[msg.sender] =
self.storage[msg.sender] - value
self.storage[to] = self.storage[to] + value
71 / 80
DAOs: Aplicaciones Autónomas Distribuidas
Organizaciones cuyas reglas y acciones están determinadas por código en el
Blockchain
Código que es público y auditable (en bytecode)
Manejan sus propios recursos y reaccionan frente a eventos externos
No dependen de ninguna entidad central
No pueden ser intervenidas por vías judiciales, políticas ni militares
Gobierno Corporativo para actualizar su código (“estatutos”) en ciertas
condiciones
72 / 80
¿Skynet?
73 / 80
Code is Law
Lessig, 2000: “Code and other Laws of
Cyberspace”
Code is Law
Código en derecho (wet code)
Código en informática (dry code)
74 / 80
Wet vs. dry code
Derecho Software
Lógica basada en mentes subjetivas, lógica booleana,
analogías bits
Seguridad desacato / prisión replicación +
criptografía
Predictabilidad flexible rígido
Madurez alta evolución / larvario / pocas
muchos casos experiencias
Area silos independencia de
jurisdiccionales instituciones políticas
y financieras,
sin fronteras
Costos demandas: altísimo muy bajo
Fuente: Nick Szabo, Devcon1 (Londres, Noviembre 2015)
75 / 80
Contenidos
1 Bitcoin
Funcionamiento Blockchain
Uso
Problemas y Ataques
2 Ethereum
Introducción
Componentes y funcionamiento
3 Aplicaciones Distribuidas (dApps DAOs)
Acceso al “mundo real”
Casos concretos
76 / 80
Comunicación con el mundo externo
En ejecución hay acceso a datos del Blockchain
Necesitamos incorporar datos del “mundo real”
Oráculos o Data Feeds
Contratos que son actualizados con datos
Resultados de eventos deportivos
Información climática
Valores de acciones o monedas
Posibilidad de des-centralizar
Oráculos m de n (con m < n)
Sistemas de reputación y/o recompensas (Ej: ShellingCoin)
77 / 80
Contenidos
1 Bitcoin
Funcionamiento Blockchain
Uso
Problemas y Ataques
2 Ethereum
Introducción
Componentes y funcionamiento
3 Aplicaciones Distribuidas (dApps DAOs)
Acceso al “mundo real”
Casos concretos
78 / 80
Proyectos sobre Ethereum
Decentralized prediction
market built on Ethereum
http://augur.net/
Predict the future
– crowdsourced.
http://groupgnosis.com/
Blockchain Go-
vernance Dapp
http://boardroom.to/
Autonomous organiza-
tions on the blockchain
http://colony.io/
Build Your 1st Ethereum
App In 20 Minutes Using
Standard Web Tools.
http://www.blockapps.net/
Next generation key-
less access protocol
for smart property
http://airlock.me/
Social business founded
to open up the world of
how things are made
https://www.provenance.org/
“If you can lock it,
we will let you rent,
sell or share it.”
http://slock.it/
the first Smart
Asset company
built on Ethereum
https://dgx.io/
A non-profit, decentrali-
zed crowdfunding plat-
form built on Ethereum
http://weifund.io/
Autonomous bank
& market maker
http://makerdao.com/
Smart contract de-
ployment tools
http://etherparty.io/
Financial derivatives
trading and settlement
http://www.hitfin.com/ Solidity Online Compiler
http://chriseth.github.io/browser-
solidity/
Solidity Realtime
Dev Environment
http://meteor-dapp-
cosmo.meteor.com/
79 / 80
Contenidos
1 Bitcoin
Funcionamiento Blockchain
Uso
Problemas y Ataques
2 Ethereum
Introducción
Componentes y funcionamiento
3 Aplicaciones Distribuidas (dApps DAOs)
Acceso al “mundo real”
Casos concretos
De Bitcoin a Ethereum (versión abreviada)
Criptomonedas, Contratos Inteligentes y Corporaciones Descentralizadas
Autónomas
Jens Hardings Perl <jhp@moit.cl>
4 de mayo de 2016
Licenciado bajo Creative Commons Attribution-ShareAlike 4.0.

More Related Content

What's hot

Cuando las maquinas deciden por nosotros: introducción a los contratos inteli...
Cuando las maquinas deciden por nosotros: introducción a los contratos inteli...Cuando las maquinas deciden por nosotros: introducción a los contratos inteli...
Cuando las maquinas deciden por nosotros: introducción a los contratos inteli...Philippe Camacho, Ph.D.
 
Una completa y pionera guía sobre Bitcoin, la moneda virtual
Una completa y pionera guía sobre Bitcoin, la moneda virtualUna completa y pionera guía sobre Bitcoin, la moneda virtual
Una completa y pionera guía sobre Bitcoin, la moneda virtualTelefónica Grandes Clientes
 
Informe de Inteco sobre BITCOIN: Una moneda criptográfica
Informe de Inteco sobre BITCOIN: Una moneda criptográficaInforme de Inteco sobre BITCOIN: Una moneda criptográfica
Informe de Inteco sobre BITCOIN: Una moneda criptográficaSantiago Limonche
 
Blockchain y contratos inteligentes
Blockchain y contratos inteligentesBlockchain y contratos inteligentes
Blockchain y contratos inteligentesGimer Cervera
 
Bitcoins La moneda del futuro
Bitcoins La moneda del futuroBitcoins La moneda del futuro
Bitcoins La moneda del futuroRicardo Diaz
 
Dossier bitcoin
Dossier bitcoinDossier bitcoin
Dossier bitcoinIG España
 
Whitepaper – Qué es Blockchain y cuáles son sus principales aplicaciones
Whitepaper – Qué es Blockchain y cuáles son sus principales aplicaciones	Whitepaper – Qué es Blockchain y cuáles son sus principales aplicaciones
Whitepaper – Qué es Blockchain y cuáles son sus principales aplicaciones Arsys
 
Presentacion bitcoinparanegocios
Presentacion bitcoinparanegociosPresentacion bitcoinparanegocios
Presentacion bitcoinparanegociosGeorge Crewe
 
CLASIFICACION DE CRIPTOMONEDAS
CLASIFICACION DE CRIPTOMONEDASCLASIFICACION DE CRIPTOMONEDAS
CLASIFICACION DE CRIPTOMONEDASEnmerLR
 
CRIPTOMONEDAS I
CRIPTOMONEDAS ICRIPTOMONEDAS I
CRIPTOMONEDAS IEnmerLR
 

What's hot (20)

Cuando las maquinas deciden por nosotros: introducción a los contratos inteli...
Cuando las maquinas deciden por nosotros: introducción a los contratos inteli...Cuando las maquinas deciden por nosotros: introducción a los contratos inteli...
Cuando las maquinas deciden por nosotros: introducción a los contratos inteli...
 
Una completa y pionera guía sobre Bitcoin, la moneda virtual
Una completa y pionera guía sobre Bitcoin, la moneda virtualUna completa y pionera guía sobre Bitcoin, la moneda virtual
Una completa y pionera guía sobre Bitcoin, la moneda virtual
 
Informe de Inteco sobre BITCOIN: Una moneda criptográfica
Informe de Inteco sobre BITCOIN: Una moneda criptográficaInforme de Inteco sobre BITCOIN: Una moneda criptográfica
Informe de Inteco sobre BITCOIN: Una moneda criptográfica
 
Blockchain 3.0 - eosio
Blockchain 3.0 - eosioBlockchain 3.0 - eosio
Blockchain 3.0 - eosio
 
Blockchain y contratos inteligentes
Blockchain y contratos inteligentesBlockchain y contratos inteligentes
Blockchain y contratos inteligentes
 
Bitcoin 3.0
Bitcoin 3.0Bitcoin 3.0
Bitcoin 3.0
 
Criptomonedas
CriptomonedasCriptomonedas
Criptomonedas
 
Normativa sobre blockchain y criptomonedas
Normativa sobre blockchain y criptomonedasNormativa sobre blockchain y criptomonedas
Normativa sobre blockchain y criptomonedas
 
Bitcoins La moneda del futuro
Bitcoins La moneda del futuroBitcoins La moneda del futuro
Bitcoins La moneda del futuro
 
Bitcoin
BitcoinBitcoin
Bitcoin
 
Bitcoin
BitcoinBitcoin
Bitcoin
 
Dossier bitcoin
Dossier bitcoinDossier bitcoin
Dossier bitcoin
 
Módulo 1: Uso del Blockchain.
Módulo 1: Uso del Blockchain.Módulo 1: Uso del Blockchain.
Módulo 1: Uso del Blockchain.
 
Desarrollo con Bitcoin
Desarrollo con BitcoinDesarrollo con Bitcoin
Desarrollo con Bitcoin
 
Whitepaper – Qué es Blockchain y cuáles son sus principales aplicaciones
Whitepaper – Qué es Blockchain y cuáles son sus principales aplicaciones	Whitepaper – Qué es Blockchain y cuáles son sus principales aplicaciones
Whitepaper – Qué es Blockchain y cuáles son sus principales aplicaciones
 
Introducción a la Tecnología Blockchain
Introducción a la Tecnología BlockchainIntroducción a la Tecnología Blockchain
Introducción a la Tecnología Blockchain
 
Presentacion bitcoinparanegocios
Presentacion bitcoinparanegociosPresentacion bitcoinparanegocios
Presentacion bitcoinparanegocios
 
CLASIFICACION DE CRIPTOMONEDAS
CLASIFICACION DE CRIPTOMONEDASCLASIFICACION DE CRIPTOMONEDAS
CLASIFICACION DE CRIPTOMONEDAS
 
BLOCKCHAIN
BLOCKCHAINBLOCKCHAIN
BLOCKCHAIN
 
CRIPTOMONEDAS I
CRIPTOMONEDAS ICRIPTOMONEDAS I
CRIPTOMONEDAS I
 

Similar to De Bitcoin a Ethereum: Criptomonedas, Contratos Inteligentes y Corporaciones Descentralizadas Autónomas

Bitcoin en español
Bitcoin en españolBitcoin en español
Bitcoin en españolJUAN BITCOIN
 
Economía Digital.pdf
Economía Digital.pdfEconomía Digital.pdf
Economía Digital.pdfUEAJAE
 
Blockchain Mas alla de las criptomonedas V2.pdf
Blockchain Mas alla de las criptomonedas V2.pdfBlockchain Mas alla de las criptomonedas V2.pdf
Blockchain Mas alla de las criptomonedas V2.pdfANYIEPRIETOHERRERA
 
Yaiza Rubio Viñuela | To block or Not to block... that's the question | Codem...
Yaiza Rubio Viñuela | To block or Not to block... that's the question | Codem...Yaiza Rubio Viñuela | To block or Not to block... that's the question | Codem...
Yaiza Rubio Viñuela | To block or Not to block... that's the question | Codem...Codemotion
 
Bitcoins: Introducción
Bitcoins: IntroducciónBitcoins: Introducción
Bitcoins: IntroducciónDaniel Arráez
 
Bitcoin, Blockchain y más allá: Riesgos y Oportunidades
Bitcoin, Blockchain y más allá: Riesgos y OportunidadesBitcoin, Blockchain y más allá: Riesgos y Oportunidades
Bitcoin, Blockchain y más allá: Riesgos y OportunidadesPhilippe Camacho, Ph.D.
 
Bitcoin: salto tecnológico en los sistemas de pago
Bitcoin: salto tecnológico en los sistemas de pagoBitcoin: salto tecnológico en los sistemas de pago
Bitcoin: salto tecnológico en los sistemas de pagoDaniel Vicent Lluesa
 
Óscar Delgado | Hacking the blockchain for fun and profit | Codemotion Madrid...
Óscar Delgado | Hacking the blockchain for fun and profit | Codemotion Madrid...Óscar Delgado | Hacking the blockchain for fun and profit | Codemotion Madrid...
Óscar Delgado | Hacking the blockchain for fun and profit | Codemotion Madrid...Codemotion
 
Workshop Proyectando 2022.pptx.pdf
Workshop Proyectando 2022.pptx.pdfWorkshop Proyectando 2022.pptx.pdf
Workshop Proyectando 2022.pptx.pdfJuan Rodrigo Coronel
 
Bitcoin: cuando los ordenadores emiten moneda
Bitcoin: cuando los ordenadores emiten monedaBitcoin: cuando los ordenadores emiten moneda
Bitcoin: cuando los ordenadores emiten monedaCEU
 
Dao (Decentralized Autonomous Organization)
Dao (Decentralized Autonomous Organization)Dao (Decentralized Autonomous Organization)
Dao (Decentralized Autonomous Organization)Carlos Buendía
 

Similar to De Bitcoin a Ethereum: Criptomonedas, Contratos Inteligentes y Corporaciones Descentralizadas Autónomas (20)

Bitcoin como funciona
Bitcoin como funcionaBitcoin como funciona
Bitcoin como funciona
 
Algunas aplicaciones del Blockchain
Algunas aplicaciones del BlockchainAlgunas aplicaciones del Blockchain
Algunas aplicaciones del Blockchain
 
Bitcoin
BitcoinBitcoin
Bitcoin
 
Bitcoin en español
Bitcoin en españolBitcoin en español
Bitcoin en español
 
Blockchain
BlockchainBlockchain
Blockchain
 
Blockchain
BlockchainBlockchain
Blockchain
 
Carmary aguilar
Carmary aguilarCarmary aguilar
Carmary aguilar
 
Economía Digital.pdf
Economía Digital.pdfEconomía Digital.pdf
Economía Digital.pdf
 
Blockchain_marielys
Blockchain_marielysBlockchain_marielys
Blockchain_marielys
 
Blockchain Mas alla de las criptomonedas V2.pdf
Blockchain Mas alla de las criptomonedas V2.pdfBlockchain Mas alla de las criptomonedas V2.pdf
Blockchain Mas alla de las criptomonedas V2.pdf
 
Yaiza Rubio Viñuela | To block or Not to block... that's the question | Codem...
Yaiza Rubio Viñuela | To block or Not to block... that's the question | Codem...Yaiza Rubio Viñuela | To block or Not to block... that's the question | Codem...
Yaiza Rubio Viñuela | To block or Not to block... that's the question | Codem...
 
Bitcoins: Introducción
Bitcoins: IntroducciónBitcoins: Introducción
Bitcoins: Introducción
 
Bitcoin
BitcoinBitcoin
Bitcoin
 
Bitcoin es latam
Bitcoin es latamBitcoin es latam
Bitcoin es latam
 
Bitcoin, Blockchain y más allá: Riesgos y Oportunidades
Bitcoin, Blockchain y más allá: Riesgos y OportunidadesBitcoin, Blockchain y más allá: Riesgos y Oportunidades
Bitcoin, Blockchain y más allá: Riesgos y Oportunidades
 
Bitcoin: salto tecnológico en los sistemas de pago
Bitcoin: salto tecnológico en los sistemas de pagoBitcoin: salto tecnológico en los sistemas de pago
Bitcoin: salto tecnológico en los sistemas de pago
 
Óscar Delgado | Hacking the blockchain for fun and profit | Codemotion Madrid...
Óscar Delgado | Hacking the blockchain for fun and profit | Codemotion Madrid...Óscar Delgado | Hacking the blockchain for fun and profit | Codemotion Madrid...
Óscar Delgado | Hacking the blockchain for fun and profit | Codemotion Madrid...
 
Workshop Proyectando 2022.pptx.pdf
Workshop Proyectando 2022.pptx.pdfWorkshop Proyectando 2022.pptx.pdf
Workshop Proyectando 2022.pptx.pdf
 
Bitcoin: cuando los ordenadores emiten moneda
Bitcoin: cuando los ordenadores emiten monedaBitcoin: cuando los ordenadores emiten moneda
Bitcoin: cuando los ordenadores emiten moneda
 
Dao (Decentralized Autonomous Organization)
Dao (Decentralized Autonomous Organization)Dao (Decentralized Autonomous Organization)
Dao (Decentralized Autonomous Organization)
 

Recently uploaded

Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 

Recently uploaded (20)

Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 

De Bitcoin a Ethereum: Criptomonedas, Contratos Inteligentes y Corporaciones Descentralizadas Autónomas

  • 1. De Bitcoin a Ethereum (versión abreviada) Criptomonedas, Contratos Inteligentes y Corporaciones Descentralizadas Autónomas Jens Hardings Perl <jhp@moit.cl> 4 de mayo de 2016 Licenciado bajo Creative Commons Attribution-ShareAlike 4.0.
  • 2. 2 / 80 1 Bitcoin Funcionamiento Blockchain Uso Problemas y Ataques 2 Ethereum Introducción Componentes y funcionamiento 3 Aplicaciones Distribuidas (dApps DAOs) Acceso al “mundo real” Casos concretos
  • 3. 2 / 80 Contenidos 1 Bitcoin Funcionamiento Blockchain Uso Problemas y Ataques 2 Ethereum Introducción Componentes y funcionamiento 3 Aplicaciones Distribuidas (dApps DAOs) Acceso al “mundo real” Casos concretos
  • 4. 3 / 80 Motivación de desarrolladores de Bitcoin Contexto crisis hipotecas sub-prime gatillada el 2007 quiebra de Lehman Bros 15 de Septiembre 2008 fallas en organismos centrales encargados de regular descontento general que derivó en Occupy Wall Street (Septiembre 2011) deseo de contar con una moneda independiente de control centralizado Objetivos técnicos Base de datos distribuida que registra transacciones Inspirada en sistemas P2P como Gnutella, Tor No requiere ente central confiable Sistema autosustentable: incentivos a quienes sustentan la red Eficiencia: transacción “confirmada” en ∼ 1 hora t. de crédito: 60 a 180 días cheques: 1 a 2 semanas
  • 5. 3 / 80 Motivación de desarrolladores de Bitcoin Contexto crisis hipotecas sub-prime gatillada el 2007 quiebra de Lehman Bros 15 de Septiembre 2008 fallas en organismos centrales encargados de regular descontento general que derivó en Occupy Wall Street (Septiembre 2011) deseo de contar con una moneda independiente de control centralizado Objetivos técnicos Base de datos distribuida que registra transacciones Inspirada en sistemas P2P como Gnutella, Tor No requiere ente central confiable Sistema autosustentable: incentivos a quienes sustentan la red Eficiencia: transacción “confirmada” en ∼ 1 hora t. de crédito: 60 a 180 días cheques: 1 a 2 semanas
  • 6. 4 / 80 Aparición de Bitcoin 1 de Noviembre de 2008: un desconocido Satoshi Nakamoto publica paper con idea en lista de correos de criptografía 3 de enero de 2009: Se genera el primer bloque del Blockchain 9 de enero de 2009: Nakamoto publica primera versión del software de referencia Estuvo activo hasta mediados de 2010, cuando entregó el control (repositorio, dominios, etc) a terceros No se sabe si Satoshi Nakamoto es su nombre real, o si es un grupo más que una persona
  • 7. 5 / 80 1era Transacción con Bitcoin en el “mundo real” La Pizza de los 10 Millones de Dólares Una Pizza por 10.000 BTC el 22 de Mayo de 2010 10,000 BTC = 42 USD en la fecha Más de 4,000,000 USD en 2016 10,000 BTC = 11,472,500 USD al 4 de diciembre 2013
  • 8. 6 / 80 Contenidos 1 Bitcoin Funcionamiento Blockchain Uso Problemas y Ataques 2 Ethereum Introducción Componentes y funcionamiento 3 Aplicaciones Distribuidas (dApps DAOs) Acceso al “mundo real” Casos concretos
  • 9. 7 / 80 Funcionamiento del Bitcoin: Blockchain Todas las transacciones se registran en un “libro” (contable) público, compartido y descentralizado: el blockchain Uso de Elliptic Curve Digital Signature Algorithm (ECDSA) y SHA-256 Identificación de una contraparte es la llave pública dirección: hash de llave pública Privacidad: llave pública no da indicios sobre la identidad Por cada bitcoin, se registra cada transacción desde su creación al estado actual Los bitcoin se pueden subdividir en hasta 10−8 unidades un 10−8 de bitcoin es un satoshi De ser necesario, protocolo se puede modificar para aceptar divisiones más pequeñas
  • 10. 8 / 80 Bloques Las transacciones se agrupan en bloques, nodos compiten Armar un bloque válido es computacionalmente caro Proof of work (Hashcash) Promedio: un bloque cada 10 minutos Dificultad se ajusta cada 2016 bloques (∼ 2 semanas) Incentivo a generar bloques Cada bloque entrega bitcoins a quien lo genera (transacción 1 del bloque) Incentivo a incorporar todas las transacciones Generador del bloque se queda con los transaction fees de cada transacción Un bloque depende de todos los anteriores: blockchain Blockchain más largo es el válido (se descartan cadenas más cortas) No se intenta buscar ni castigar participantes deshonestos
  • 11. 9 / 80 Bloques Bloque 1 Header Hash( Header bloque anterior ) Hash Txs Transacciones bloque 1 Bloque válido si Todas las transacciones son válidas Proof-of-work válido
  • 12. 9 / 80 Bloques Bloque 1 Header Hash( Header bloque anterior ) Hash Txs Transacciones bloque 1 Bloque 2 Header Hash( Header bloque anterior ) Hash Txs Transacciones bloque 2 Bloque 3 Header Hash( Header bloque anterior ) Hash Txs Transacciones bloque 3 Bloque 4 Header Hash( Header bloque anterior ) Hash Txs Transacciones bloque 4 Bloque válido si Todas las transacciones son válidas Proof-of-work válido
  • 13. 10 / 80 Minado: proceso de encontrar nuevos bloques Proof of work resuelve 2 problemas 1 forma simple y efectiva de consensuar el estado del blockchain 2 mecanismo de entrada al proceso de consenso peso relativo de cada participante es su poder computacional Algoritmo Construyo el bloque 1era transacción me paga los bitcoins por generar el bloque Mi bloque es diferente al de cualquier otro minero Nonce = 0 Valido si sha256(bloque) < target Incremento nonce y reintento
  • 14. 11 / 80 Validación de un bloque 1 Bloque anterior existe y es válido Definición recursiva hasta “genesis block” Si está en el blockchain, es válido 2 Timestamp del bloque debe ser superior al del bloque previo y menos de 2 horas en el futuro 3 Proof of work es válido 4 Si S0 es el estado del bloque anterior y TX son las n transacciones del bloque: ∀i ∈ {0 · · · n − 1}Si+1 = Apply(Si, TXi) Si hay error, bloque no es válido El orden de las transacciones es relevante 5 Sn es el nuevo estado El estado no está codificado explícitamente
  • 15. 12 / 80 Generación de Bitcoins Inicio: 50 BTC por bloque Se divide en 2 cada 210,000 bloques (4 años) Al año 2024: 19,6 MM BTC Nunca se superarán los 21MM de BTC 0 210 420 630 840 1050 1260 1470 1680 2009 2013 2017 2021 2025 2029 2033 2037 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 0 5 10 15 20 Bitcoin Inflation vs. Time InflationRate(annualized) Year Bitcoins(millions)
  • 16. 13 / 80 Blockchain: Seguridad Caso 1: 2 nodos encuentran el siguiente bloque Razones: Problemas de red, solución prácticamente simultánea, mala fe Receptores eligen primero que llega Partición de la red con 2 cadenas del mismo largo Un nodo encuentra siguiente bloque Demás eliminan la otra cadena (más corta) Caso 2: Doble gasto El segundo gasto que llega es desechado por el nodo Si ∼ 50 % de los nodos toma un gasto, el resto el otro Cadena de bloque difiere Uno nodo encuentra primero el segundo bloque, se descarta cadena más corta Puede quedar una sola transacción de las dos
  • 17. 13 / 80 Blockchain: Seguridad Caso 1: 2 nodos encuentran el siguiente bloque Razones: Problemas de red, solución prácticamente simultánea, mala fe Receptores eligen primero que llega Partición de la red con 2 cadenas del mismo largo Un nodo encuentra siguiente bloque Demás eliminan la otra cadena (más corta) Caso 2: Doble gasto El segundo gasto que llega es desechado por el nodo Si ∼ 50 % de los nodos toma un gasto, el resto el otro Cadena de bloque difiere Uno nodo encuentra primero el segundo bloque, se descarta cadena más corta Puede quedar una sola transacción de las dos
  • 18. 14 / 80 Blockchain: Transacciones Building block fundamental para el Blockchain Forma de traspasar valor de una dirección a otra En una transacción se traspasa todo el valor que entró por otra transacción Se puede usar la misma dirección para el vuelto Se recomienda una dirección diferente para cada transacción Para usar el valor en una dirección se referencia la transacción no la dirección no la billetera (wallet) la transacción anterior puede especificar cómo se puede gastar el valor en la siguiente especie de contrato
  • 19. 15 / 80 Blockchain: Transacciones encadenadas Transferencia de propiedad de una dirección a otra considerando uso sin restricción por parte del dueño Firma de dueño 0 Hash Llave pública de dueño 1 Llave privada de dueño 1 Transacción 1
  • 20. 15 / 80 Blockchain: Transacciones encadenadas Transferencia de propiedad de una dirección a otra considerando uso sin restricción por parte del dueño Firma de dueño 0 Hash Llave pública de dueño 1 Llave privada de dueño 1 Transacción 1 Firma de dueño 1 Hash Llave pública de dueño 2 Llave privada de dueño 2 Transacción 2 Verifica Firma
  • 21. 15 / 80 Blockchain: Transacciones encadenadas Transferencia de propiedad de una dirección a otra considerando uso sin restricción por parte del dueño Firma de dueño 0 Hash Llave pública de dueño 1 Llave privada de dueño 1 Transacción 1 Firma de dueño 1 Hash Llave pública de dueño 2 Llave privada de dueño 2 Transacción 2 Firma de dueño 2 Hash Llave pública de dueño 3 Llave privada de dueño 3 Transacción 3 Verifica Firma Verifica Firma
  • 22. 16 / 80 Transacciones: detalles Múltiples inputs, valores se suman Múltiples outputs (normalmente 2: pago y vuelto) Output Valor scriptPubKey: cómo se puede canjear el valor solamente hash(script) script lo da canjeador Valor no asignado es “transaction fee” Cada output se usa como input en 1 única transacción
  • 23. 16 / 80 Transacciones: detalles Múltiples inputs, valores se suman Múltiples outputs (normalmente 2: pago y vuelto) Input Referencia el output en otra transacción (ID tx, posición) scriptSig: cumplimiento de exigencia para canjear establecido en transacción referenciada Output Valor scriptPubKey: cómo se puede canjear el valor solamente hash(script) script lo da canjeador Valor no asignado es “transaction fee” Cada output se usa como input en 1 única transacción
  • 24. 17 / 80 Tipos de transacción (según scriptPubKey) Pay-to-PubkeyHash (P2PH) al usar como input, se debe presentar: llave pública (dirección es solamente el hash) firma de la transacción 20 bytes (el hash) Pay-to-Script-Hash (P2SH) al usar como input, se ejecuta el script script lo provee canjeador hash debe calzar con scriptPubKey de output al finalizar debe quedar un solo valor en el stack valor debe ser true (= 0)
  • 25. 18 / 80 Scripts en Bitcoin Lenguaje basado en Forth para especificar cómo se pueden canjear los bitcoins enviados en una transacción Funcionalidad reducida No tiene loops Ejemplo de usos: Firmas simultáneas con distintas llaves privadas n firmas de m alternativas (n < m) Sin firmas (ej: password)
  • 26. 19 / 80 Escalabilidad: Merkle Trees Simplified Payment Verification: no requiero todas las transacciones para verificar 1 dentro de un bloque Ejemplo con transacciones A, B, C, D, E: merkle root = h(h(h(h(A)+h(B)) + h(h(C)+h(D))) + h(h(h(E)+h(E)) + h(h(E)+h(E)))) A B C D E a = h(A) b = h(B) c = h(C) d = h(D) e = h(E) ab = h(a+b) cd = h(c+d) ee = h(e+e) abcd=h(ab+cd) eeee=h(ee+ee) abcdeeee = h(abcd+eeee)
  • 27. 20 / 80 Contenidos 1 Bitcoin Funcionamiento Blockchain Uso Problemas y Ataques 2 Ethereum Introducción Componentes y funcionamiento 3 Aplicaciones Distribuidas (dApps DAOs) Acceso al “mundo real” Casos concretos
  • 28. 21 / 80 Privacidad Se recomienda usar una llave nueva para cada transacción Uso de múltiples inputs en una transacción indica que esas direcciones son del mismo dueño Secuencia de transacciones indica flujo de pagos Mixing services también llamados “laundering services” servicio que recibe bitcoins y los redistribuye requiere confianza ciega en quien entrega el servicio CoinJoin: sin tercero confiable componer n transacciones independientes en 1 sola partes acuerdan outputs y montos, incluyendo vueltos cada contraparte firma su parte de la transacción transacción es válida sólo si todos firmaron
  • 29. 22 / 80 Ejemplo de Mixing Service: Bitcoinfog Se accede mediante Tor Recibe pago a dirección generada aleatoriamente Se cobra una comisión aleatoria entre 1 % y 3 % Maneja un pool principal con bitcoins para pago al bajar los fondos del pool principal, va transfiriendo desde las direcciones aleatorias iniciales Al realizar un retiro, se define aleatoriamente: el número de tx (dependiendo tb. del monto) el valor relativo entre las tx la separación de tiempo entre tx (dentro de un rango total especificado)
  • 30. 23 / 80 Billeteras Colección de llaves privadas Actuales y futuras se evita necesidad de respaldar después de cada uso (posiblemente) cache de transacciones y/o saldo total Puede cifrar las llaves privadas Si se pierde llave de cifrado, se pierde el contenido Versiones en web, software, hardware ejemplo de hardware wallet
  • 31. 24 / 80 eWallets llamadas browser-based wallet o wallet service Billeteras accesibles vía web Proveedor maneja todas las llaves privadas Símil a un banco: confiamos en que dinero depositado se manejará según nuestras instrucciones Pero sin el respaldo legal
  • 32. 25 / 80 Billeteras en papel Documento que contiene toda la información para generar llaves privadas Semilla para generadores deterministas de llave Llaves en papel (solamente 1 par) Regalos o propinas Tokens físicos: para acceder a la llave privada, se destruye el token Almacenamiento offline También se usa para referirse a una única llave almacenada en papel como medio óptico
  • 33. 26 / 80 (Hierarchic) Deterministic Wallets Se genera una secuencia determinista de pares Secuencia pseudo-aleatoria Propiedades deseadas: Master Public Key Permite generar todas las llaves públicas No permite obtener las llaves privadas correspondientes Si se compromete, solamente permite ver saldo total, no usarlo Jerárquico (HD Wallets) Master Public/Private Key permite generar llaves que a su vez son Master Public/Private Keys (de jerarquía inferior) Conociendo la llave de jerarquía superior puedo calcular todas las inferiores Al revés no funciona
  • 34. 27 / 80 Minado de Bitcoins Inicio: hardware casero (2010) Computador de escritorio en tiempos ociosos (hasta 100 Mhash/s) Uso de GPUs (2011) Menor consumo de energía, mayor velocidad. (hasta 800 Mhash/s, 2.500 con 6 GPUs) Foto: Stefan Ledwina
  • 35. 28 / 80 Minado de Bitcoins (2) Múltiples tarjetas (2012) Foto: “Einer von denen” (Flickr) FPGA Mining (2013) Field-programmable gate array (2 a 10 Ghash/s) Foto: Xiangfu (Wikimedia Commons)
  • 36. 29 / 80 Minado de Bitcoins (3) ASIC vía USB (2013) Application-specific integrated circuit Foto: Mirko Tobias Schäfer ASIC (2014) Application-specific integrated circuit (1100 - 1500 Ghash/s) Foto: Wikimedia Commons
  • 37. 30 / 80 Minado de Bitcoins (4) ASICs masivos: ya no son juguetes Foto: Bitcoin rig al norte de Suecia (Julio 2014), por Datavetaren
  • 38. 31 / 80 Mining Pools Hoy en día casi nadie mina solo Pools de minado Conjunto de personas trabajando en paralelo Al encontrar un bloque se divide proporcional al esfuerzo Primer bloque minado en conjunto: Septiembre 2010 Recompensa con menor varianza
  • 39. 32 / 80 Contenidos 1 Bitcoin Funcionamiento Blockchain Uso Problemas y Ataques 2 Ethereum Introducción Componentes y funcionamiento 3 Aplicaciones Distribuidas (dApps DAOs) Acceso al “mundo real” Casos concretos
  • 40. 33 / 80 Principales problemas que enfrenta Bitcoin Volatilidad Robo, Estafas Mercados negros Lavado de dinero Malware Problemas de implementación Problemas de Gobernanza
  • 41. 34 / 80 “51 % Attack” Objetivos Reescribir el pasado Dominar la red Requiere generar: el bloque que se quiere modificar todos los bloques posteriores todos los bloques generados en el intertanto Requiere al menos el 50 % + 1 de todo el poder computacional dedicado a la red No se pueden generar transacciones nuevas, solamente eliminar transacciones propias Se generaría desconfianza en la criptomoneda, afectando los recursos propios Ese poder computacional se puede usar para minar bitcoins honestamente
  • 42. 34 / 80 “51 % Attack” Objetivos Reescribir el pasado Dominar la red Requiere generar: el bloque que se quiere modificar todos los bloques posteriores todos los bloques generados en el intertanto Requiere al menos el 50 % + 1 de todo el poder computacional dedicado a la red No se pueden generar transacciones nuevas, solamente eliminar transacciones propias Se generaría desconfianza en la criptomoneda, afectando los recursos propios Ese poder computacional se puede usar para minar bitcoins honestamente
  • 43. 35 / 80 Otros ataques Robo de Billetera Billetera guarda datos no cifrados Transaction ID Malleability Problema de implementación al no chequear formato de llave pública Al reformatear la misma llave, genera un ID de transacción distinta Emisor original no encuentra tx en Blockchain y reenvía posiblemente con otro input
  • 44. 36 / 80 Combined output overflow I Problema de implementación + “monocultivo” Problema Al sumar los valores de dos outputs se generaba un overflow y con eso fallaba el chequeo El bloque 74638, (15 de Agosto de 2015), aprovechó la vulnerabilidad Generó 184.467.440.736,58 nuevos Bitcoin
  • 45. 37 / 80 Combined output overflow II Problema de implementación + “monocultivo” Solución Se pidió no seguir generando bloques mientras se soluciona el problema Se corrigió el código dentro de un par de horas No se generaron más bloques con ese error Se tuvo que corregir el blockchain, que contenía bloques inválidos Normalmente bloques ya chequeados no se re-chequean Se alcanzaron a generar 54 bloques sobre el erróneo Blockchain generado por nodos “corregidos” se hizo más largo
  • 46. 38 / 80 Micro Payments exploit Problema Nodo de referencia exige transaction fee para Transacciones > 1000 bytes Outputs con menos de 0,01 Bitcoin Prioridad es suficientemente alta Pagos realizados por menos de 0,01 Bitcoin quedan para siempre sin confirmar Pagos que incluyen esos pagos no confirmados también No es un bug en sí, más bien una molestia Solución Se actualiza cliente para que no envíe transacciones con inputs no confirmados.
  • 47. 39 / 80 Blockchain hard fork 13 de marzo 2013: cambio de versión genera comportamiento incompatible Versión 0.7 no soporta bloques de más de 500kB por uso de una librería con esa limitación Un nodo con versión 0.8 generó un bloque de 974kB Los nodos 0.7 no aceptaban ninguna cadena con ese bloque Se generaron 2 cadenas cada vez más largas Se debió detener la generación de nuevos bloques Versión 0.8.1 respetó ese límite, hasta el 15 de mayo de 2013 Tiempo para que se actualicen los nodos
  • 48. 40 / 80 Bitcoin Timejacking Timestamping en Bitcoin Nodos deben mantener producción de bloques en 1 cada app. 10 minutos Requieren tener un acuerdo sobre el momento en que se genera cada bloque Forma en que un nodo define su “network time”: mediana de los tiempos publicados por peers, si se encuentra en ±70 minutos respecto al system time tiempo de sistema si no Un nodo rechaza bloques si el timestamp del bloque: es 2 horas en el futuro respecto al “network time” está en el pasado respecto a media de últimos 11 bloques
  • 49. 41 / 80 Bitcoin Timejacking Ataque atacante agregan suficientes “peers” para que adelanten el reloj de los peers del objetivo atrase el reloj del objetivo diferencia: app. 140 minutos atacante genera bloque válido 190 minutos al futuro del “network time” nodos adelantados en 70 minutos lo aceptan nodo objetivo lo rechaza (está a 260 minutos adelantados para él) atacante ha desconectado al nodo objetivo del resto nodo objetivo va a aceptar transacciones duplicadas
  • 50. 42 / 80 Bitcoin Timejacking Soluciones Usar solamente “system time” para validar recepción de bloques Aceptar solamente transacciones confirmadas Introduce demora en validar el pago Ajustar rangos de aceptabilidad Usar solamente peers confiables
  • 51. 43 / 80 Selfish Mining Problema Cuando un minero encuentra un bloque, lo publica Si no lo publica de inmediato, puede ganar tiempo minando el siguiente Debe difundir su bloque más rápido de lo que se difunde otro cuando otro minero acierta Atacantes obtienen una recompensa mayor que la justa Al comenzar antes que cualquiera, amplifican su poder computacional real Al existir un pool con selfish mining, hay incentivos a unirse a él Se pierde la esencia distribuida del blockchain
  • 52. 44 / 80 Selfish Mining Requerimientos al atacante Debe poder minar un bloque antes que cualquiera con 1 3 del poder computacional (en lugar del 50 % esperado) Tener buena conectividad aumenta su probabilidad de imponer sus bloques a la red si llega perimro al 50 % de los mineros honestos, requiere solo 25 % del poder computacional Remedio propuesto Propagar todas las cadenas de mismo largo que compitan Minar sobre alguna elegida al azar Disminuye la probabilidad que un atacante imponga su cadena sobre las demás
  • 53. 45 / 80 Volatilidad Volumen total de moneda es pequeño Cada transacción/noticia grande tiene impacto fuerte Valor total del valor existente es bajo Capitalización de BTC: e3,950,267,412 USD (M1): e1,952,504,690,000 (494x BTC) EUR (M1): e5,493,000,000,000 (1390x BTC) BOB (M1): e5,286,504,000 (1,34x BTC) Fuentes: http://coinmarketcap.com/, Banco Central Europeo Moneda no tiene un valor inherente Moneda está en pocas manos 47 individuos tienen casi un 30 % de los bitcoins 927 individuos tienen el 50 % de los bitcoins Fuente: Business Insider
  • 54. 46 / 80 Valor histórico de Bitcoin [USD] ↑ Fuente: http://bitcoincharts.com/
  • 55. 46 / 80 Valor histórico de Bitcoin [USD] ↑ Fuente: http://bitcoincharts.com/ ↓ Fuente: Google Trends
  • 56. 47 / 80 Google Trends G 2012-04 Hacker currency Bitcoin crashes F 2013-08 Srsly? Bitcoin, selfie added to Oxford dictionary E 2013-12 Bitcoin crashes on China measures D 2014-02 Bitcoin exchange Mt. Gox goes offline C 2014-06 Co-owner of bitcoin-linked sites settles SEC case B 2014-09 2 Bitcoin operators plead guilty in Silk Road case A 2015-01 Coinbase opens first US Bitcoin exchange
  • 57. 48 / 80 Lavado de dinero desde 2010, Financial Action Task Force (FATF) incorpora Monedas Virtuales en sus análisis
  • 58. 49 / 80 Mt. Gox: Magic The Gathering Online eXchange Comenzó en 2006 para canjear naipes del juego MTGO como acciones, funcionó durante 3 meses Re-uso del nombre para crear casa de cambio de Bitcoin (70 % de tx bitcoin en 2013) Junio 2011: un atacante logró bajar el precio de USD 17,50 a USD 0,01 con grandes transacciones consigo mismo usando credenciales robadas a un auditor de MtGox, generando pérdidas por USD 8.750.000 a clientes Octubre 2011: se generan transacciones enviando 2.609 BTC a direcciones inválidas Febrero 2013: se “pierden” transacciones canceladas por receptor y devueltas a Mt.Gox, se recuperan 3 meses después Mayo 2013: EEUU embarga USD 2,9MM por no registrarse como negocio de transferencia de dinero
  • 59. 50 / 80 Mt. Gox: la debacle Junio 2013: se suspenden retiros en USD Febrero 2014: se suspenden todas las actividades, sitio web desaparece Razones de los problemas de liquidez: desorden y mala gestión CEO alega que fueron robos y estafas a lo largo de años Empleados revelaron que ni siquiera existía separación entre billetera personal del CEO y los fondos de la empresa
  • 60. 51 / 80 Silk Road Marketplace Mercado en la DarkNet, lanzado en Febrero 2011 Conocido por sus ventas de drogas de diverso tipo También armas, asesinatos por encargo, etc. Administrada por Ross Ulbricht (San Francisco) Transaba exclusivamente con Bitcoin Fue cerrado en Octubre 2013 Reapareció al par de semanas pero se volvió a clausurar
  • 61. 52 / 80 Contenidos 1 Bitcoin Funcionamiento Blockchain Uso Problemas y Ataques 2 Ethereum Introducción Componentes y funcionamiento 3 Aplicaciones Distribuidas (dApps DAOs) Acceso al “mundo real” Casos concretos
  • 62. 53 / 80 Contenidos 1 Bitcoin Funcionamiento Blockchain Uso Problemas y Ataques 2 Ethereum Introducción Componentes y funcionamiento 3 Aplicaciones Distribuidas (dApps DAOs) Acceso al “mundo real” Casos concretos
  • 63. 54 / 80 Ethereum: Motivación 2 formas de extender Bitcoin, cada una con limitaciones Usando Bitcoin Blockchain Limitaciones del scripting (loops) No hay posibilidad de transferencias exactas de montos a determinar en el futuro No hay estados (solo gastado o no gastado), necesario para implementar contratos complejos No hay acceso a datos del Blockchain como timestamp o hash de bloque previo Imposibilidad de usar SPV en extensiones (Ej: Colored Coins) Blockchain paralelo Cada implementación un universo paralelo Moneda que solamente sirve para un fin Valorizaciones y volatilidades diversas Esfuerzos de bootstrapping, desarrollo y minado
  • 64. 55 / 80 Ethereum: Motivación (2) Smart Property Propiedad cuya pertenencia es controlada por el blockchain Ej: conservador de bienes raíces digital Smart Contracts contratos que se auto-aplican idea original: Nick Szabo (1997) Decentralized autonomous organizations Metacoin Uso de Bitcoin como base para otros protocolos Símil a lo que es TCP/IP para Internet Diversos protocolos se implementan “sobre” el mismo blockchain
  • 65. 56 / 80 ¿Qué es Ethereum? Logo: Marc van der Chijs Una plataforma de consenso descentralizado “The ultimate abstract foundational layer” Un computador virtual descentralizado Moneda propia o “crypto-fuel” (Ether) Usado para pagar transaction fees Base para generar otras monedas sobre el Ethereum Blockchain
  • 66. 57 / 80 Ethereum: conceptos Separación de árbol de estado y lista de transacciones Lenguaje de programación Turing-completo integrado Ethereum Script Cuentas (direcciones), en 2 sabores externally owned accounts: controladas por llaves privadas contract accounts (Contratos): controladas por su código de contrato Transacciones Paquete de datos firmados que contienen un mensaje Mensajes Objeto virtual (no serializado) usado en el contexto de ejecución
  • 67. 58 / 80 Contenidos 1 Bitcoin Funcionamiento Blockchain Uso Problemas y Ataques 2 Ethereum Introducción Componentes y funcionamiento 3 Aplicaciones Distribuidas (dApps DAOs) Acceso al “mundo real” Casos concretos
  • 68. 59 / 80 Cuentas (Accounts) Agentes autónomos que “viven” en el blockchain Tiene una dirección Ethereum de 20 bytes, con: Un nonce usado para que cada transacción pueda ser procesada una sola vez El balance de ether de la cuenta El código de contrato, si existe El almacenamiento de la cuenta Cuentas de dueño externo No tienen código de contrato Se usan enviando mensajes firmados por el dueño Contratos Se ejecuta el código cuando llega un mensaje Pueden leer/escribir su almacenamiento, enviar mensajes y crear nuevos contratos
  • 69. 60 / 80 Transacciones para enviar un mensaje de una cuenta de dueño externo Contiene los siguientes datos: Destino del mensaje Firma identificando el emisor Monto de ether a transferir Campo opcional de datos Valor STARTGAS Valor GASPRICE Protección ante DoS: STARTGAS Número máximo de pasos computacionales a ejecutar en la transacción (incluyendo sub-ejecuciones de mensajes) cálculo (CPU), ancho de banda y almacenaje GASPRICE Fee que el emisor está dispuesto a pagar por cada paso computacional
  • 70. 61 / 80 Mensajes Objetos virtuales (solo existen en el contexto de ejecución de Ethereum Generado por un contrato mediante la instrucción CALL Contienen: Emisor del mensaje (implícito) Receptor del mensaje Monto de ether transferido con el mensaje Campo de datos (opcional) Valor STARTGAS
  • 71. 62 / 80 Ethereum Script Bajo nivel: bytecode en EVM (Ethereum Virtual Machine) Alto nivel: Serpent (basado en Python), otros. Lenguaje basado en un stack (pila) Stack no persistente Memoria autoexpandible no persistente Almacenamiento persistente estado del contrato
  • 72. 63 / 80 Procesamiento de transacciones 1 Validar que transacción está bien formada (número de valores, firma, nonce es igual al nonce de la cuenta del emisor 2 Calcular transaction fee como STARTGAS * GASPRICE, sustraer ese monto del balance del emisor, incrementar el nonce del emisor. Error si no hay suficiente saldo. 3 Inicializar GAS = STARTGAS, restar costo por byte en la transacción 4 Transferir el valor especificado en tx desde el emisor al receptor Si cuenta destino no existe, crearla Si destino es contrato, ejecutar su código 5 Si ejecución falla (fondos insuficientes; se acabó el GAS), se revierten los cambios salvo transaction fee 6 Devolución de GAS no gastado y pago de fees al minero
  • 73. 64 / 80 Sub-transacciones Un contrato envía un mensaje a otro contrato Especifica STARTGAS para sub-transacción Si falla por falta de GAS, se aborta sub-transacción y se retoma actual
  • 74. 65 / 80 Validación de un bloque 1 Revisar existencia y validez de bloque referenciado como previo 2 Revisar timestamp sea mayor que el del previo y menos de 15 minutos en el futuro 3 Revisar validez de número de bloque, dificultad, transaction root, uncle root y GASLIMIT GASLIMIT es el tope de GAS para calcular todas las transacciones 4 Revisar validez del proof of work 5 S0 es el estado del bloque previo 6 TX es el listado de las n transacciones en el bloque. ∀i ∈ [0 . . . n − 1], Si+1 = APPLY(Si, TXi). Si hay error o se consume más que el GASLIMIT del bloque, retornar error. 7 Sfinal = Sn, pero agregando la recompensa al minero. 8 Revisar que el Merkle tree root del bloque calza con el de Sfinal.
  • 75. 66 / 80 Almacenamiento del Estado En teoría, se almacena el estado en cada bloque (key, value) Estructura de datos: Merkle Patricia Trie Basado en Patricia Trie / Radix Trie (“Trie”, de reTRIEval) Alfabeto hexadecimal (cada nodo tiene hasta 16 hijos), llave es binaria Cada nodo del árbol se referencia mediante su hash Estructura determinista: solo 1 forma de representar un estado, genera siempre el mismo hash Se mantiene una BD (hash, nodo) Si un (sub-)árbol no cambia, ya está almacenado en la BD En cada bloque solamente se incluyen los nodos cambiados (Sub-)árboles ya no referenciados pueden eliminarse
  • 76. 67 / 80 Contenidos 1 Bitcoin Funcionamiento Blockchain Uso Problemas y Ataques 2 Ethereum Introducción Componentes y funcionamiento 3 Aplicaciones Distribuidas (dApps DAOs) Acceso al “mundo real” Casos concretos
  • 77. 68 / 80 Aplicaciones: 3 tipos Aplicaciones financieras monedas (sub-currencies), derivados financieros, contratos de cobertura (futuros; hedging contracts), libretas de ahorro, testamentos, contratos de trabajo. Aplicaciones semi-financieras Se transa dinero pero hay una fuerte componente extramonetaria. Ej: Recompensas auto-ejecutables para resolver problemas computacionales Aplicaciones no financieras Smart Property, Votación electrónica, Gobierno Corporativo Descentralizado, etc.
  • 78. 69 / 80 Smart Property Ethereum + IoT = Smart Property Ej: arriendo por horas Se ingresa llave pública de beneficiario, tiempo, etc. Dispositivo que controla acceso se actualiza Autenticación mediante firma con llave privada
  • 79. 69 / 80 Smart Property Ethereum + IoT = Smart Property Ej: arriendo por horas Se ingresa llave pública de beneficiario, tiempo, etc. Dispositivo que controla acceso se actualiza Autenticación mediante firma con llave privada
  • 80. 70 / 80 Sistemas de Token Muy fáciles de implementar en Ethereum Posibilidad de por ejemplo pagar transaction fees en la misma sub-moneda Permiten crear sub-monedas o mapear a activos (estilo Colored Coins) Código para sistema de token (salvo distribución inicial y casos de borde) def send(to, value): if self.storage[msg.sender] >= value: self.storage[msg.sender] = self.storage[msg.sender] - value self.storage[to] = self.storage[to] + value
  • 81. 71 / 80 DAOs: Aplicaciones Autónomas Distribuidas Organizaciones cuyas reglas y acciones están determinadas por código en el Blockchain Código que es público y auditable (en bytecode) Manejan sus propios recursos y reaccionan frente a eventos externos No dependen de ninguna entidad central No pueden ser intervenidas por vías judiciales, políticas ni militares Gobierno Corporativo para actualizar su código (“estatutos”) en ciertas condiciones
  • 83. 73 / 80 Code is Law Lessig, 2000: “Code and other Laws of Cyberspace” Code is Law Código en derecho (wet code) Código en informática (dry code)
  • 84. 74 / 80 Wet vs. dry code Derecho Software Lógica basada en mentes subjetivas, lógica booleana, analogías bits Seguridad desacato / prisión replicación + criptografía Predictabilidad flexible rígido Madurez alta evolución / larvario / pocas muchos casos experiencias Area silos independencia de jurisdiccionales instituciones políticas y financieras, sin fronteras Costos demandas: altísimo muy bajo Fuente: Nick Szabo, Devcon1 (Londres, Noviembre 2015)
  • 85. 75 / 80 Contenidos 1 Bitcoin Funcionamiento Blockchain Uso Problemas y Ataques 2 Ethereum Introducción Componentes y funcionamiento 3 Aplicaciones Distribuidas (dApps DAOs) Acceso al “mundo real” Casos concretos
  • 86. 76 / 80 Comunicación con el mundo externo En ejecución hay acceso a datos del Blockchain Necesitamos incorporar datos del “mundo real” Oráculos o Data Feeds Contratos que son actualizados con datos Resultados de eventos deportivos Información climática Valores de acciones o monedas Posibilidad de des-centralizar Oráculos m de n (con m < n) Sistemas de reputación y/o recompensas (Ej: ShellingCoin)
  • 87. 77 / 80 Contenidos 1 Bitcoin Funcionamiento Blockchain Uso Problemas y Ataques 2 Ethereum Introducción Componentes y funcionamiento 3 Aplicaciones Distribuidas (dApps DAOs) Acceso al “mundo real” Casos concretos
  • 88. 78 / 80 Proyectos sobre Ethereum Decentralized prediction market built on Ethereum http://augur.net/ Predict the future – crowdsourced. http://groupgnosis.com/ Blockchain Go- vernance Dapp http://boardroom.to/ Autonomous organiza- tions on the blockchain http://colony.io/ Build Your 1st Ethereum App In 20 Minutes Using Standard Web Tools. http://www.blockapps.net/ Next generation key- less access protocol for smart property http://airlock.me/ Social business founded to open up the world of how things are made https://www.provenance.org/ “If you can lock it, we will let you rent, sell or share it.” http://slock.it/ the first Smart Asset company built on Ethereum https://dgx.io/ A non-profit, decentrali- zed crowdfunding plat- form built on Ethereum http://weifund.io/ Autonomous bank & market maker http://makerdao.com/ Smart contract de- ployment tools http://etherparty.io/ Financial derivatives trading and settlement http://www.hitfin.com/ Solidity Online Compiler http://chriseth.github.io/browser- solidity/ Solidity Realtime Dev Environment http://meteor-dapp- cosmo.meteor.com/
  • 89. 79 / 80 Contenidos 1 Bitcoin Funcionamiento Blockchain Uso Problemas y Ataques 2 Ethereum Introducción Componentes y funcionamiento 3 Aplicaciones Distribuidas (dApps DAOs) Acceso al “mundo real” Casos concretos
  • 90. De Bitcoin a Ethereum (versión abreviada) Criptomonedas, Contratos Inteligentes y Corporaciones Descentralizadas Autónomas Jens Hardings Perl <jhp@moit.cl> 4 de mayo de 2016 Licenciado bajo Creative Commons Attribution-ShareAlike 4.0.