El Blockchain y su más conocido uso, la criptomoneda Bitcoin, son temas candentes hoy en día, abarcando los ámbitos técnico, social, financiero y hasta político. No pasa un día en que no haya alguna institución financiera, gobierno u otra empresa tradicional, ni hablar de las Fintech o empresas ligadas a la informática, anunciando interés o avances relacionados con Blockchain. Si bien cada uno de estos ámbitos nos resulta apasionante, en esta charla nos concentraremos en las temáticas técnicas: cuál es la base sobre la cual opera una Blockchain, cuáles han sido desafíos pasados y cuáles son algunos de los desafíos futuros.
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
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)
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.