Desarrollo con Bitcoin

62
Por: Alberto Gómez Toribio @gotoalberto

description

Seminario de Introducción al desarrollo con Bitcoin, celebrado el 26 de junio 2013. Impartido por Alberto Gomez Toribio y organizado por Paradigma Tecnologico y Javahispano. Madrid, Universidad CEU San Pablo. Información sobre el seminario: http://www.paradigmatecnologico.com/eventos/introduccion-al-desarrollo-con-bitcoin/ Vídeo de la presentación: https://www.youtube.com/watch?v=Gj4mRe-YcA0 ¿Quieres saber más? www.paradigmatecnologico.com

Transcript of Desarrollo con Bitcoin

Page 1: Desarrollo con Bitcoin

Por: Alberto Gómez Toribio @gotoalberto

Page 2: Desarrollo con Bitcoin

- Son activos que son valiosos por su escasez

#bitcoindevspain

¿Qué es el dinero?

Page 3: Desarrollo con Bitcoin

- Son activos que son valiosos por su escasez

- Sirven para intercambiarlos por bienes y servicios

#bitcoindevspain

¿Qué es el dinero?

Page 4: Desarrollo con Bitcoin

- 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?

Page 5: Desarrollo con Bitcoin

- 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?

Page 6: Desarrollo con Bitcoin

- 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?

Page 7: Desarrollo con Bitcoin

- 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?

Page 8: Desarrollo con Bitcoin

- 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?

Page 9: Desarrollo con Bitcoin

- Es una moneda electrónica.

#bitcoindevspain

¿Qué es el Bitcoin ?

Page 10: Desarrollo con Bitcoin

- Es una moneda electrónica.

- No tiene autoridad central (Banco Central), se basa en un

sistema descentralizado.

#bitcoindevspain

¿Qué es el Bitcoin ?

Page 11: Desarrollo con Bitcoin

- 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 ?

Page 12: Desarrollo con Bitcoin

- 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 ?

Page 13: Desarrollo con Bitcoin

- 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 ?

Page 14: Desarrollo con Bitcoin

- 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 ?

Page 15: Desarrollo con Bitcoin

- 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 ?

Page 16: Desarrollo con Bitcoin

#bitcoindevspain

Principios de las monedas

ORO EURO BITCOIN

ESCASEZ

PORTABILIDAD

FUNGIBILIDAD

VERIFICACION

DIVISIBILIDAD

PRIVACIDAD

ACEPTACION

Page 17: Desarrollo con Bitcoin

#bitcoindevspain

ORO EURO BITCOIN

ESCASEZ

PORTABILIDAD

FUNGIBILIDAD

VERIFICACION

DIVISIBILIDAD

PRIVACIDAD

ACEPTACION

Principios de las monedas

Page 18: Desarrollo con Bitcoin

#bitcoindevspain

ORO EURO BITCOIN

ESCASEZ

PORTABILIDAD

FUNGIBILIDAD

VERIFICACION

DIVISIBILIDAD

PRIVACIDAD

ACEPTACION

Principios de las monedas

Page 19: Desarrollo con Bitcoin

#bitcoindevspain

ORO EURO BITCOIN

ESCASEZ

PORTABILIDAD

FUNGIBILIDAD

VERIFICACION

DIVISIBILIDAD

PRIVACIDAD

ACEPTACION

Principios de las monedas

Page 20: Desarrollo con Bitcoin

#bitcoindevspain

ORO EURO BITCOIN

ESCASEZ

PORTABILIDAD

FUNGIBILIDAD

VERIFICACION

DIVISIBILIDAD

PRIVACIDAD

ACEPTACION

Principios de las monedas

Page 21: Desarrollo con Bitcoin

#bitcoindevspain

ORO EURO BITCOIN

ESCASEZ

PORTABILIDAD

FUNGIBILIDAD

VERIFICACION

DIVISIBILIDAD

PRIVACIDAD

ACEPTACION

Principios de las monedas

Page 22: Desarrollo con Bitcoin

#bitcoindevspain

ORO EURO BITCOIN

ESCASEZ

PORTABILIDAD

FUNGIBILIDAD

VERIFICACION

DIVISIBILIDAD

PRIVACIDAD

ACEPTACION

Principios de las monedas

Page 23: Desarrollo con Bitcoin

#bitcoindevspain

ORO EURO BITCOIN

ESCASEZ

PORTABILIDAD

FUNGIBILIDAD

VERIFICACION

DIVISIBILIDAD

PRIVACIDAD

ACEPTACION

Principios de las monedas

Page 24: Desarrollo con Bitcoin

#bitcoindevspain

ORO EURO BITCOIN

ESCASEZ

PORTABILIDAD

FUNGIBILIDAD

VERIFICACION

DIVISIBILIDAD

PRIVACIDAD

ACEPTACION

Principios de las monedas

Page 25: Desarrollo con Bitcoin

#bitcoindevspain

ORO EURO BITCOIN

ESCASEZ

PORTABILIDAD

FUNGIBILIDAD

VERIFICACION

DIVISIBILIDAD

PRIVACIDAD

ACEPTACION

Principios de las monedas

Page 26: Desarrollo con Bitcoin

- Sirven para firmar transacciones y operar con el dinero.

#bitcoindevspain

Bitcoin Addresses

Page 27: Desarrollo con Bitcoin

- Sirven para firmar transacciones y operar con el dinero.

- Criptografía de Curva Elíptica: Sin aceleración de hardware.

#bitcoindevspain

Bitcoin Addresses

Page 28: Desarrollo con Bitcoin

- 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

Page 29: Desarrollo con Bitcoin

- 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

Page 30: Desarrollo con Bitcoin

- 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

Page 31: Desarrollo con Bitcoin

- Son movimientos de dinero firmados digitalmente.

#bitcoindevspain

Transacciones

Page 32: Desarrollo con Bitcoin

- Son movimientos de dinero firmados digitalmente.

- Habitualmente el minero genera y firma la transacción,

pero las transacciones pueden ser firmadas offline.

#bitcoindevspain

Transacciones

Page 33: Desarrollo con Bitcoin

- 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

Page 34: Desarrollo con Bitcoin

- 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

Page 35: Desarrollo con Bitcoin

- 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

Page 36: Desarrollo con Bitcoin

#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

Page 37: Desarrollo con Bitcoin

- Existe la necesidad de codificar mensajes en las

transacciones.

#bitcoindevspain

Messaging

Page 38: Desarrollo con Bitcoin

- Existe la necesidad de codificar mensajes en las

transacciones.

- Los mensajes quedan almacenados permanentemente.

#bitcoindevspain

Messaging

Page 39: Desarrollo con Bitcoin

- 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

Page 40: Desarrollo con Bitcoin

- 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

Page 41: Desarrollo con Bitcoin

- 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

Page 42: Desarrollo con Bitcoin

- La BlockChain es una lista de todas las transacciones

hechas en Bitcoin, particionadas en bloques y almacenada

de forma distribuida.

#bitcoindevspain

Blockchain

Page 43: Desarrollo con Bitcoin

- 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

Page 44: Desarrollo con Bitcoin

- 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

Page 45: Desarrollo con Bitcoin

- 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

Page 46: Desarrollo con Bitcoin

- “Minar” es generar colisiones en funciones Hash SHA256.

#bitcoindevspain

Minería

Page 47: Desarrollo con Bitcoin

- “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

Page 48: Desarrollo con Bitcoin

- “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

Page 49: Desarrollo con Bitcoin

- “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

Page 50: Desarrollo con Bitcoin

- “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

Page 51: Desarrollo con Bitcoin

#bitcoindevspain

Minería

Page 52: Desarrollo con Bitcoin

- 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

Page 53: Desarrollo con Bitcoin

- Las principales instrucciones son:

<readable json> decoderawtransaction <hex string>

<private key> dumpprivkey <accountName>

<accountName> getbalance <accountName, confirmations>

<public key> getnewaddress <accountName>

<hex string> getrawtransaction <transaction id>

<transaction id> sendfrom <from accountName, to public

key, amount, comment>

<hex string> signrawtransaction <{…json tx data…}>

<transaction id> sendrawtransaction <hex string>

<hex string> createrawtransaction <hex string>

#bitcoindevspain

Bitcoin RPC API

Page 54: Desarrollo con Bitcoin

- 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

Page 55: Desarrollo con Bitcoin

- 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

Page 57: Desarrollo con Bitcoin

- La cadena de bloques ocupa aproximadamente 40GB que

se almacena de forma distribuida.

#bitcoindevspain

Algunos datos…

Page 58: Desarrollo con Bitcoin

- 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…

Page 59: Desarrollo con Bitcoin

- 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…

Page 60: Desarrollo con Bitcoin

- 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…

Page 61: Desarrollo con Bitcoin

- 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

Page 62: Desarrollo con Bitcoin

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

:=)