Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Desarrollo con Bitcoin

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

Desarrollo con Bitcoin

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.
www.paradigmatecnologico.com

Avatar for Paradigma

Paradigma

June 26, 2013
Tweet

More Decks by Paradigma

Other Decks in Technology

Transcript

  1. - Son activos que son valiosos por su escasez -

    Sirven para intercambiarlos por bienes y servicios #bitcoindevspain ¿Qué es el dinero?
  2. - 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?
  3. - 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?
  4. - 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?
  5. - 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?
  6. - 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?
  7. - Es una moneda electrónica. - No tiene autoridad central

    (Banco Central), se basa en un sistema descentralizado. #bitcoindevspain ¿Qué es el Bitcoin ?
  8. - 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 ?
  9. - 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 ?
  10. - 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 ?
  11. - 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 ?
  12. - 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 ?
  13. #bitcoindevspain Principios de las monedas ORO EURO BITCOIN ESCASEZ PORTABILIDAD

    FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION
  14. - Sirven para firmar transacciones y operar con el dinero.

    - Criptografía de Curva Elíptica: Sin aceleración de hardware. #bitcoindevspain Bitcoin Addresses
  15. - 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
  16. - 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
  17. - 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
  18. - Son movimientos de dinero firmados digitalmente. - Habitualmente el

    minero genera y firma la transacción, pero las transacciones pueden ser firmadas offline. #bitcoindevspain Transacciones
  19. - 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
  20. - 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
  21. - 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
  22. #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
  23. - Existe la necesidad de codificar mensajes en las transacciones.

    - Los mensajes quedan almacenados permanentemente. #bitcoindevspain Messaging
  24. - 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
  25. - 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
  26. - 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
  27. - La BlockChain es una lista de todas las transacciones

    hechas en Bitcoin, particionadas en bloques y almacenada de forma distribuida. #bitcoindevspain Blockchain
  28. - 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
  29. - 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
  30. - 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
  31. - “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
  32. - “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
  33. - “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
  34. - “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
  35. - 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
  36. - 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
  37. - 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
  38. - 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
  39. 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
  40. - La cadena de bloques ocupa aproximadamente 40GB que se

    almacena de forma distribuida. #bitcoindevspain Algunos datos…
  41. - 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…
  42. - 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…
  43. - 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…
  44. - 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
  45. { "jsonrpc” : "1.0", "id” : "rpc", "method” : "terminate",

    "params” : [ ”this_conference” ] } :=)