Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Bitcoin Development - Desarrollo con Bitcoin

1,299 views

Published on

Introducción a Bitcoin y al desarrollo con el API RPC.

Published in: Technology
  • Be the first to comment

Bitcoin Development - Desarrollo con Bitcoin

  1. 1. Por: Alberto Gómez Toribio @gotoalberto
  2. 2. -  Son activos que son valiosos por su escasez #bitcoindevspain ¿Qué es el dinero?
  3. 3. -  Son activos que son valiosos por su escasez -  Sirven para intercambiarlos por bienes y servicios #bitcoindevspain ¿Qué es el dinero?
  4. 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 #bitcoindevspain ¿Qué es el dinero?
  5. 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 titulos a cambio de oro. #bitcoindevspain ¿Qué es el dinero?
  6. 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? #bitcoindevspain ¿Qué es el dinero?
  7. 7. -  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?
  8. 8. -  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?
  9. 9. -  Es una moneda electrónica. #bitcoindevspain ¿Qué es el Bitcoin ?
  10. 10. -  Es una moneda electrónica. -  No tiene autoridad central (Banco Central), se basa en un sistema descentralizado. #bitcoindevspain ¿Qué es el Bitcoin ?
  11. 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. #bitcoindevspain ¿Qué es el Bitcoin ?
  12. 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. #bitcoindevspain ¿Qué es el Bitcoin ?
  13. 13. -  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 ?
  14. 14. -  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 ?
  15. 15. -  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 ?
  16. 16. #bitcoindevspain Principios de las monedas ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION
  17. 17. #bitcoindevspain ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION Principios de las monedas
  18. 18. #bitcoindevspain ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION Principios de las monedas
  19. 19. #bitcoindevspain ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION Principios de las monedas
  20. 20. #bitcoindevspain ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION Principios de las monedas
  21. 21. #bitcoindevspain ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION Principios de las monedas
  22. 22. #bitcoindevspain ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION Principios de las monedas
  23. 23. #bitcoindevspain ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION Principios de las monedas
  24. 24. #bitcoindevspain ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION Principios de las monedas
  25. 25. #bitcoindevspain ORO EURO BITCOIN ESCASEZ PORTABILIDAD FUNGIBILIDAD VERIFICACION DIVISIBILIDAD PRIVACIDAD ACEPTACION Principios de las monedas
  26. 26. -  Sirven para firmar transacciones y operar con el dinero. #bitcoindevspain Bitcoin Addresses
  27. 27. -  Sirven para firmar transacciones y operar con el dinero. -  Criptografía de Curva Elíptica: Sin aceleración de hardware. #bitcoindevspain Bitcoin Addresses
  28. 28. -  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
  29. 29. -  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
  30. 30. -  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
  31. 31. -  Son movimientos de dinero firmados digitalmente. #bitcoindevspain Transacciones
  32. 32. -  Son movimientos de dinero firmados digitalmente. -  Habitualmente el minero genera y firma la transacción, pero las transacciones pueden ser firmadas offline. #bitcoindevspain Transacciones
  33. 33. -  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
  34. 34. -  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
  35. 35. -  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
  36. 36. #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
  37. 37. -  Existe la necesidad de codificar mensajes en las transacciones. #bitcoindevspain Messaging
  38. 38. -  Existe la necesidad de codificar mensajes en las transacciones. -  Los mensajes quedan almacenados permanentemente. #bitcoindevspain Messaging
  39. 39. -  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
  40. 40. -  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
  41. 41. -  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
  42. 42. -  La BlockChain es una lista de todas las transacciones hechas en Bitcoin, particionadas en bloques y almacenada de forma distribuida. #bitcoindevspain Blockchain
  43. 43. -  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
  44. 44. -  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
  45. 45. -  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
  46. 46. -  “Minar” es generar colisiones en funciones Hash SHA256. #bitcoindevspain Minería
  47. 47. -  “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
  48. 48. -  “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
  49. 49. -  “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
  50. 50. -  “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
  51. 51. #bitcoindevspain Minería
  52. 52. -  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
  53. 53. -  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
  54. 54. -  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:password@127.0.0.1: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:password@127.0.0.1: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:password@127.0.0.1:8332 #bitcoindevspain Bitcoin RPC API
  55. 55. -  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:password@127.0.0.1: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:password@127.0.0.1:8332   #bitcoindevspain Bitcoin RPC API
  56. 56. 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
  57. 57. -  La cadena de bloques ocupa aproximadamente 40GB que se almacena de forma distribuida. #bitcoindevspain Algunos datos…
  58. 58. -  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…
  59. 59. -  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…
  60. 60. -  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…
  61. 61. -  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
  62. 62.            {      "jsonrpc”      :  "1.0",      "id”                :  "rpc",                        "method”        :  "terminate",        "params”        :  [                                                                        "this_conference"                                                          ]                }                                                          :=)

×