Slide 1

Slide 1 text

Por: Alberto Gómez Toribio @gotoalberto

Slide 2

Slide 2 text

- Son activos que son valiosos por su escasez #bitcoindevspain ¿Qué es el dinero?

Slide 3

Slide 3 text

- Son activos que son valiosos por su escasez - Sirven para intercambiarlos por bienes y servicios #bitcoindevspain ¿Qué es el dinero?

Slide 4

Slide 4 text

- Son activos que son valiosos por su escasez - Sirven para intercambiarlos por bienes y servicios - El primero en utilizarse fue el Oro por su escasez #bitcoindevspain ¿Qué es el dinero?

Slide 5

Slide 5 text

- Son activos que son valiosos por su escasez - Sirven para intercambiarlos por bienes y servicios - El primero en utilizarse fue el Oro por su escasez - Se crea la moneda Fiducidaria: Los gobiernos emiten titulos a cambio de oro. #bitcoindevspain ¿Qué es el dinero?

Slide 6

Slide 6 text

- Son activos que son valiosos por su escasez - Sirven para intercambiarlos por bienes y servicios - El primero en utilizarse fue el Oro por su escasez - Se crea la moneda Fiducidaria: Los gobiernos emiten títulos a cambio de oro. - Nadie viene a reclamar ese oro con su título: ¿Emitimos títulos sin respaldo a cambio de ese oro? #bitcoindevspain ¿Qué es el dinero?

Slide 7

Slide 7 text

- Son activos que son valiosos por su escasez - Sirven para intercambiarlos por bienes y servicios - El primero en utilizarse fue el Oro por su escasez - Se crea la moneda Fiducidaria: Los gobiernos emiten títulos a cambio de oro. - Nadie viene a reclamar ese oro con su título: ¿Emitimos títulos sin respaldo a cambio de ese oro? - En 1971, Nixon dice que se acabó reclamar ese oro y convierte la moneda Fiducidaria en moneda FIAT, basada en la deuda. #bitcoindevspain ¿Qué es el dinero?

Slide 8

Slide 8 text

- Son activos que son valiosos por su escasez - Sirven para intercambiarlos por bienes y servicios - El primero en utilizarse fue el Oro por su escasez - Se crea la moneda Fiducidaria: Los gobiernos emiten títulos a cambio de oro. - Nadie viene a reclamar ese oro con su título: ¿Emitimos títulos sin respaldo a cambio de ese oro? - En 1971, Nixon dice que se acabó reclamar ese oro y convierte la moneda Fiducidaria en moneda FIAT, basada en la deuda. - Los bancos centrales controlan la divisa. #bitcoindevspain ¿Qué es el dinero?

Slide 9

Slide 9 text

- Es una moneda electrónica. #bitcoindevspain ¿Qué es el Bitcoin ?

Slide 10

Slide 10 text

- Es una moneda electrónica. - No tiene autoridad central (Banco Central), se basa en un sistema descentralizado. #bitcoindevspain ¿Qué es el Bitcoin ?

Slide 11

Slide 11 text

- Es una moneda electrónica. - No tiene autoridad central (Banco Central), se basa en un sistema descentralizado. - Tiene las mismas propiedades que una moneda física. #bitcoindevspain ¿Qué es el Bitcoin ?

Slide 12

Slide 12 text

- Es una moneda electrónica. - No tiene autoridad central (Banco Central), se basa en un sistema descentralizado. - Tiene las mismas propiedades que una moneda física. - El dinero se transfiere de persona a persona de forma irreversible. #bitcoindevspain ¿Qué es el Bitcoin ?

Slide 13

Slide 13 text

- Es una moneda electrónica. - No tiene autoridad central (Banco Central), se basa en un sistema descentralizado. - Tiene las mismas propiedades que una moneda física. - El dinero se transfiere de persona a persona de forma irreversible. - Está limitada, no se pueden crear más de 21M de BTC #bitcoindevspain ¿Qué es el Bitcoin ?

Slide 14

Slide 14 text

- Es una moneda electrónica. - No tiene autoridad central (Banco Central), se basa en un sistema descentralizado. - Tiene las mismas propiedades que una moneda física. - El dinero se transfiere de persona a persona de forma irreversible. - Está limitada, no se pueden crear más de 21M de BTC. - Es divisible, habitualmente hablamos de mBTC o uBTC. #bitcoindevspain ¿Qué es el Bitcoin ?

Slide 15

Slide 15 text

- Es una moneda electrónica. - No tiene autoridad central (Banco Central), se basa en un sistema descentralizado. - Tiene las mismas propiedades que una moneda física. - El dinero se transfiere de persona a persona de forma irreversible. - Está limitada, no se pueden crear más de 21M de BTC. - Es divisible, habitualmente hablamos de mBTC o uBTC. - Propone un modelo deflaccionario frente a la inflacción infinita. #bitcoindevspain ¿Qué es el Bitcoin ?

Slide 16

Slide 16 text

#bitcoindevspain Principios de las monedas ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION

Slide 17

Slide 17 text

#bitcoindevspain ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION Principios de las monedas

Slide 18

Slide 18 text

#bitcoindevspain ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION Principios de las monedas

Slide 19

Slide 19 text

#bitcoindevspain ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION Principios de las monedas

Slide 20

Slide 20 text

#bitcoindevspain ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION Principios de las monedas

Slide 21

Slide 21 text

#bitcoindevspain ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION Principios de las monedas

Slide 22

Slide 22 text

#bitcoindevspain ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION Principios de las monedas

Slide 23

Slide 23 text

#bitcoindevspain ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION Principios de las monedas

Slide 24

Slide 24 text

#bitcoindevspain ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION Principios de las monedas

Slide 25

Slide 25 text

#bitcoindevspain ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION Principios de las monedas

Slide 26

Slide 26 text

- Sirven para firmar transacciones y operar con el dinero. #bitcoindevspain Bitcoin Addresses

Slide 27

Slide 27 text

- Sirven para firmar transacciones y operar con el dinero. - Criptografía de Curva Elíptica: Sin aceleración de hardware. #bitcoindevspain Bitcoin Addresses

Slide 28

Slide 28 text

- Sirven para firmar transacciones y operar con el dinero. - Criptografía de Curva Elíptica: Sin aceleración de hardware. - Podemos generar la clave pública a partir de la privada. #bitcoindevspain Bitcoin Addresses

Slide 29

Slide 29 text

- Sirven para firmar transacciones y operar con el dinero. - Criptografía de Curva Elíptica: Sin aceleración de hardware. - Podemos generar la clave pública a partir de la privada. - El minero las almacena en un fichero llamado wallet. #bitcoindevspain Bitcoin Addresses

Slide 30

Slide 30 text

- Sirven para firmar transacciones y operar con el dinero. - Criptografía de Curva Elíptica: Sin aceleración de hardware. - Podemos generar la clave pública a partir de la privada. - El minero las almacena en un fichero llamado wallet. - Para generar un cheque, nos basta con imprimir la clave privada en formato QR. #bitcoindevspain Bitcoin Addresses

Slide 31

Slide 31 text

- Son movimientos de dinero firmados digitalmente. #bitcoindevspain Transacciones

Slide 32

Slide 32 text

- Son movimientos de dinero firmados digitalmente. - Habitualmente el minero genera y firma la transacción, pero las transacciones pueden ser firmadas offline. #bitcoindevspain Transacciones

Slide 33

Slide 33 text

- Son movimientos de dinero firmados digitalmente. - Habitualmente el minero genera y firma la transacción, pero las transacciones pueden ser firmadas offline. - La transacción es enviada a un minero y replicada, cuando el 51% de los mineros la replica, se confía en que se insertará en la blockchain. #bitcoindevspain Transacciones

Slide 34

Slide 34 text

- Son movimientos de dinero firmados digitalmente. - Habitualmente el minero genera y firma la transacción, pero las transacciones pueden ser firmadas offline. - La transacción es enviada a un minero y replicada, cuando el 51% de los mineros la replica, se confía en que se insertará en la blockchain. - ¿Y si alguien controla el 51% de la red? #bitcoindevspain Transacciones

Slide 35

Slide 35 text

- Son movimientos de dinero firmados digitalmente. - Habitualmente el minero genera y firma la transacción, pero las transacciones pueden ser firmadas offline. - La transacción es enviada a un minero y replicada, cuando el 51% de los mineros la replica, se confía en que se insertará en la blockchain. - ¿Y si alguien controla el 51% de la red? #bitcoindevspain Transacciones

Slide 36

Slide 36 text

#bitcoindevspain Transacciones Prev Output Amount From Type ScriptSig 6d020afb… 44,22 1BD5b401… Address A3a6748d… Index Amount To Type ScriptPubKey 0 44,219998 1NC83Jv… Address Bfa5263e1f… 1 0,000012 1JUKuRz… Address 6a0d4ed87… Outputs Inputs

Slide 37

Slide 37 text

- Existe la necesidad de codificar mensajes en las transacciones. #bitcoindevspain Messaging

Slide 38

Slide 38 text

- Existe la necesidad de codificar mensajes en las transacciones. - Los mensajes quedan almacenados permanentemente. #bitcoindevspain Messaging

Slide 39

Slide 39 text

- Existe la necesidad de codificar mensajes en las transacciones. - Los mensajes quedan almacenados permanentemente. - Algunos comienzan añadiendo un OutputScript adicional donde codifican un mensaje UTF-8 serializado en Base64. #bitcoindevspain Messaging

Slide 40

Slide 40 text

- Existe la necesidad de codificar mensajes en las transacciones. - Los mensajes quedan almacenados permanentemente. - Algunos comienzan añadiendo un OutputScript adicional donde codifican un mensaje UTF-8 serializado en Base64. - Blockchain.info toma la iniciativa y desarrolla su propio sistema de messaging. #bitcoindevspain Messaging

Slide 41

Slide 41 text

- Existe la necesidad de codificar mensajes en las transacciones. - Los mensajes quedan almacenados permanentemente. - Algunos comienzan añadiendo un OutputScript adicional donde codifican un mensaje UTF-8 serializado en Base64. - Blockchain.info toma la iniciativa y desarrolla su propio sistema de messaging. - En 2011 se libera la versión 1.0 del BTCmsg Protocol - 2 primeros caracteres del output script indican si hay mensaje (02) o no(01) - El mensaje se codifica en Hexadecimal - Cada grupo de 4 chars hex representan 2 letras ASCII), valores entre 0xffff y 0x65535. (Enseñar btcmsgTools) #bitcoindevspain Messaging

Slide 42

Slide 42 text

- La BlockChain es una lista de todas las transacciones hechas en Bitcoin, particionadas en bloques y almacenada de forma distribuida. #bitcoindevspain Blockchain

Slide 43

Slide 43 text

- La BlockChain es una lista de todas las transacciones hechas en Bitcoin, particionadas en bloques y almacenada de forma distribuida. - Cuando un bloque es generado, las transacciones que aún no han sido insertadas en ninguno y que están siendo replicadas temporalmente por los mineros, se validan. #bitcoindevspain Blockchain

Slide 44

Slide 44 text

- La BlockChain es una lista de todas las transacciones hechas en Bitcoin, particionadas en bloques y almacenada de forma distribuida. - Cuando un bloque es generado, las transacciones que aún no han sido insertadas en ninguno y que están siendo replicadas temporalmente por los mineros, se validan. - Puede haber varias cadenas, pero los mineros escuchan la mas larga y descartan el resto. #bitcoindevspain Blockchain

Slide 45

Slide 45 text

- La BlockChain es una lista de todas las transacciones hechas en Bitcoin, particionadas en bloques y almacenada de forma distribuida. - Cuando un bloque es generado, las transacciones que aún no han sido insertadas en ninguno y que están siendo replicadas temporalmente por los mineros, se validan. - Puede haber varias cadenas, pero los mineros escuchan la mas larga y descartan el resto. - Generar un bloque requiere mucha capacidad de cómputo, tiempo y dinero, crear una cadena más larga que la actual desde cero es altamente improbable. #bitcoindevspain Blockchain

Slide 46

Slide 46 text

- “Minar” es generar colisiones en funciones Hash SHA256. #bitcoindevspain Minería

Slide 47

Slide 47 text

- “Minar” es generar colisiones en funciones Hash SHA256. - La minería consiste en generar el siguiente bloque de la cadena de bloques, tal que: - ID_BLOQUE_ANTERIOR = SHA2(ID_NUEVO_BLOQUE) - ID_NUEVO_BLOQUE debe ser un hash SHA2 válido. - ID_NUEVO_BLOQUE debe comenzar por N ceros. #bitcoindevspain Minería

Slide 48

Slide 48 text

- “Minar” es generar colisiones en funciones Hash SHA256. - La minería consiste en generar el siguiente bloque de la cadena de bloques, tal que: - ID_BLOQUE_ANTERIOR = SHA2(ID_NUEVO_BLOQUE) - ID_NUEVO_BLOQUE debe ser un hash SHA2 válido. - ID_NUEVO_BLOQUE debe comenzar por N ceros. - La minería genera dinero mediante: - Cada nuevo bloque permite generar 25BTC que se queda el minero. - El minero se queda con la comisión donada en cada transacción. #bitcoindevspain Minería

Slide 49

Slide 49 text

- “Minar” es generar colisiones en funciones Hash SHA256. - La minería consiste en generar el siguiente bloque de la cadena de bloques, tal que: - ID_BLOQUE_ANTERIOR = SHA2(ID_NUEVO_BLOQUE) - ID_NUEVO_BLOQUE debe ser un hash SHA2 válido. - ID_NUEVO_BLOQUE debe comenzar por N ceros. - La minería genera dinero mediante: - Cada nuevo bloque permite generar 25BTC que se queda el minero. - El minero se queda con la comisión donada en cada transacción. - Si se generan dos bloques a la vez, el más complejo prospera (el que tiene mas ceros al principio). #bitcoindevspain Minería

Slide 50

Slide 50 text

- “Minar” es generar colisiones en funciones Hash SHA256. - La minería consiste en generar el siguiente bloque de la cadena de bloques, tal que: - ID_BLOQUE_ANTERIOR = SHA2(ID_NUEVO_BLOQUE) - ID_NUEVO_BLOQUE debe ser un hash SHA2 válido. - ID_NUEVO_BLOQUE debe comenzar por N ceros. - La minería genera dinero mediante: - Cada nuevo bloque permite generar 25BTC que se queda el minero. - El minero se queda con la comisión donada en cada transacción. - Si se generan dos bloques a la vez, el más complejo prospera (el que tiene mas ceros al principio). - Si se generan bloques idénticos: - La La cadena más compleja prospera. #bitcoindevspain Minería

Slide 51

Slide 51 text

#bitcoindevspain Minería

Slide 52

Slide 52 text

- El cliente minero de Bitcoin dispone de un API RPC-JSON - Podemos usar un cliente propio o utilizar un API de terceros como la de Blockchain.info. - Configuración necesaria en el fichero bitcoin.conf: server=1 rpcuser=username rpcpassword=password rpcport=8332 - En MacOS el fichero no existe, y debe crearse en: /Users/$USER/Library/Application\ Support/Bitcoin #bitcoindevspain Bitcoin RPC API

Slide 53

Slide 53 text

- Las principales instrucciones son: decoderawtransaction dumpprivkey getbalance getnewaddress getrawtransaction sendfrom signrawtransaction <{…json tx data…}> sendrawtransaction createrawtransaction #bitcoindevspain Bitcoin RPC API

Slide 54

Slide 54 text

- Añadir clave privada existente: $ curl --data-binary '{"jsonrpc": "1.0", "id":"rpc", "method": "importprivkey", "params": ["PRIVATEKEY","alias"] }' -H 'content- type: text/plain;' http://bitcoin:[email protected]:8332 - Consultar la clave publica de la cuenta que acabamos de añadir: $ curl --data-binary '{"jsonrpc": "1.0", "id":"rpc", "method": "getaddressesbyaccount", "params": ["ACCOUNT_NAME"] }' -H 'content- type: text/plain;' http://bitcoin:[email protected]:8332 - Enviar dinero $ curl --data-binary '{"jsonrpc": ".0", "id":"rpc", "method": "sendfrom", "params": ["FROM_ACCOUNTNAME", "TO_PUBLIC_KEY",AMOUNT] }' -H 'content-type: text/plain;' http://bitcoin:[email protected]:8332 #bitcoindevspain Bitcoin RPC API

Slide 55

Slide 55 text

- Obtenemos la transacción en RAW $ curl --data-binary '{"jsonrpc": "1.0", "id":"getrawtransaction", "method": "getrawtransaction", "params": [”TRANSACTION_ID"] }' -H 'content-type: text/plain;' http://bitcoin:[email protected]:8332 - Decodificamos la transacción en RAW: $ curl --data-binary '{"jsonrpc": "1.0", "id":"rpc", "method": "decoderawtransaction", "params": ["HEX_TRANSACTION"] }' -H 'content-type: text/plain;' http://bitcoin:[email protected]:8332 #bitcoindevspain Bitcoin RPC API

Slide 56

Slide 56 text

BONUS! HANDS ON LAB! Juego de Piedra-Papel-Tijera-Lagarto-Spock que exige un pago en BTC si pierdes y envía dinero en BTC si ganas :) #bitcoindevspain Codigo: https://github.com/gotoalberto/bitcoin-rock

Slide 57

Slide 57 text

- La cadena de bloques ocupa aproximadamente 40GB que se almacena de forma distribuida. #bitcoindevspain Algunos datos…

Slide 58

Slide 58 text

- La cadena de bloques ocupa aproximadamente 40GB que se almacena de forma distribuida. - Bitcoin mueve más de 24K € por minuto en transacciones a día de hoy (con una cotización a 1BTC/90€). #bitcoindevspain Algunos datos…

Slide 59

Slide 59 text

- La cadena de bloques ocupa aproximadamente 40GB que se almacena de forma distribuida. - Bitcoin mueve más de 24K € por minuto en transacciones a día de hoy (con una cotización a 1BTC/90€). - Bitcoin tiene de media 51K transacciones diarias. (Sí, soporta muchas mas, ver Escalabilidad en Bitcoin Wiki) #bitcoindevspain Algunos datos…

Slide 60

Slide 60 text

- La cadena de bloques ocupa aproximadamente 40GB que se almacena de forma distribuida. - Bitcoin mueve más de 24K € por minuto en transacciones a día de hoy (con una cotización a 1BTC/90€). - Bitcoin tiene de media 51K transacciones diarias. (Sí, soporta muchas mas, ver Escalabilidad en Bitcoin Wiki) - La media es de 5.000 € por transaccion y 35 transacciones por minuto. #bitcoindevspain Algunos datos…

Slide 61

Slide 61 text

- La cadena de bloques ocupa aproximadamente 40GB que se almacena de forma distribuida. - Bitcoin mueve más de 24K € por minuto en transacciones a día de hoy (con una cotización a 1BTC/90€). - Bitcoin tiene de media 51K transacciones diarias. (Sí, soporta muchas mas, ver Escalabilidad en Bitcoin Wiki) - La media es de 5.000 € por transaccion y 35 transacciones por minuto. - Un minero gana de media 2500€ por genererar un bloque y 30€ en comisiones (con una cotización de a 1BTC/90€) #bitcoindevspain Algunos datos… Fuente: Blockchain.info

Slide 62

Slide 62 text

{ "jsonrpc” : "1.0", "id” : "rpc", "method” : "terminate", "params” : [ ”this_conference” ] } :=)