Personalizando mi propio monedero Bitcoin con Bitcoinj

En este articulo quiero dar una pequeña introducción al desarrollo de aplicaciones del mundo bitcoin, vamos a desarrollar una pequeña billetera con una interfaz amigable.

¿Que es bitcoinj?

bitcoinj es una biblioteca para trabajar con el protocolo de Bitcoin. Se puede mantener una cartera, enviar / recibir transacciones sin necesidad de una copia local de Bitcoin Core y tiene muchas otras características avanzadas. Está implementado en Java, pero se puede utilizar desde cualquier lenguaje compatible JVM: ejemplos en Python y JavaScript están incluidos.

¿Quienes usan esta bibloteca?

  1. Hivewallet
  2. Multibit
  3. Android Bitcoin Wallet
  4. Biteasy

bitcoinj es un proyecto Open Source con bajo la licencia “Apache licensed” para más información esta es la pagina oficial https://bitcoinj.github.io/

Quiero mostrar el ejemplo que viene dentro de la librería de bitcoinj, esta tiene su documentación oficial pero en ingles por eso lo he querido mostrar en español.

¿Que necesitamos?

  • Sistema Operativo: Linux Debian 7 o superior, si no tienes dinero para comprar una MacBook y usar OS X. Si usas Windows te recomiendo que uses Linux es libre y gratuito!
  • Java 8: Yo estoy usando JDK8u65, descargue la versión tar.gz de aquí.
  • Java FX: Yo estoy usando la versión 2.0, descargue la versión tar.gz de aquí.
  • Intellij IDEA community: Vamos a usar este IDE, puedes descargarlo de aquí.
  • bitcoinj: Lo puedes descargar desde github dentro de sus fuentes esta el ejemplo.

No voy a explicar la instalación estas versiones se descomprimen y están lista para usarse.

Ahora si comenzamos!

bitcoinj viene trae en su código fuente una aplicación básica GUI de cartera bitcoin. Está destinado a ser copiado y usado como base para cualquier aplicación que desea enviar y recibir dinero. Por ejemplo, si usted quiere hacer un juego de cartas que te permiten jugar con bitcoins reales, este sería un buen lugar para empezar. En mí caso voy a comenzar el desarrollo de un core basado en un API Restful para mi aplicación de predimaniabits, la cual estaré documentado en mi blog y publicando en github.

Vamos importar el ejemplo:

Es muy sencillo seguimos los pasos que te muestro a continuación:
Paso 1: Al abrir el IDE por primera vez seleccionamos “Import Project”, si no es la primera vez que abres el IDE enhorabuena por usar Intellij IDEA antes 😀

import_project_paso1

Paso 2: Buscamos los fuentes que nos descargamos anteriormente la carpeta llamada wallettemplate

import_project_paso2
Paso 3: Seleccionamos maven

import_project_paso3
Paso 4: Marcamos donde dice import project maven automatically

import_project_paso4
Paso 5: Seleccionamos el profile

import_project_paso5
Paso 6: Aquí damos siguiente, este es el proyecto que seleccionamos

import_project_paso6
Paso 7: Seleccionamos el sdk 1.8

import_project_paso7
Paso 8: Por ahora vamos a dejar el proyecto con su nombre inicial.

import_project_paso8

Ahora vamos a renombrar el proyecto:

Hacemos clic derecho en el modulo de nuestro proyecto y seleccionamos refactor->rename o ejecutamos el atajo de teclado Mayuscula+F6.

Lo cambiamos el nombre a simplewallet

rename

Archivo Main.java

Vamos a editar el archivo Main.java

Linea 31: Cambiamos el nombre de nuestra aplicación:

por

Linea 33: Muy importante cambiar al ambiente de prueba!

por

Ahora vamos a crear un ListView para que podamos ver mejor las transacciones de nuestro monedero. Para esto necesitamos abrir el main.fxml, si te da el siguiente error solo debes configurar el path del JavaFx que descargamos.

error_javafx

Archivo main.fxml

Eliminamos el Label que viene predeterimando

main_fxml_paso1

Seleccionamos en Controls el elemento ListView y lo movemos hasta el StackPane

main_fxml_paso2

Modificamos el nombre del ListView, en Code: ListView donde dice fx:id a transactionsList

main_fxml_paso3

Modificamos la opacidad a 0.65 para que se siga viendo el fondo de la aplicación.

main_fxml_paso4

Archivo BitcoinUIModel.java

En la linea 24 añadimmos lo siguiente:

Ahora en la linea 44 dentro del metodo update agregamos al final lo siguiente:

Luego al final creamos el metodo getter

Archivo MainController.java

Nos vamos a la linea 37 y agregamos lo siguiente:

Agregamos al final del metodo onBitcoinSetup()

Modificamos el metodo setWallet

Eliminamos donde desde la coma hasta el runLater “, Platform::runLater

Ahora ejecutamos la aplicación Run -> Run Main

run_1

Al terminar de ejecutar nos mostrara nuestra dirección de prueba con la cual podemos ir a un grifo de testnet y sacar unos bitcoins para tener en nuestro monedero de prueba algo de saldo :D. (Cuando terminemos nuestras pruebas lo recomendado es devolver los bitcoins para que otras personas puedan usarlos)

run_2

Nos vamos a setting donde podremos ver el Mnemonic de nuestra billetera.

run_3

Primer vamos a asignar una contraseña para proteger nuestros bitcoin.

run_4

Ahora nos pedirá esta contraseña cuando queramos retirar.

run_5

Ahora voy a sacar unos satoshis de los grifos y voy a ver como llegan a mi billetera 😀

Haskon Faucet: nos dirigimos al siguiente URL http://faucet.xeno-genesis.com/ para entrar al grifo.

run_6

Este me dio 10000 satoshis, ahora voy a otro grifo que es mas bondadoso  CoinFaucet en el siguiente enlace https://testnet.coinfaucet.eu/en/ 😀

run_8

Como podemos ver este me ha dado una modesta cantidad de 2.56BTC

run_9

Ahora si podemos devolver los bits seleccionando la dirección de donación de los grifos.

run_10

 

Este ejemplo no debe usarse para guardar tus bits ya que no esta completamente desarrollado, lo vamos a usar como caso de estudio para desarrollar cosas mas complejas.

 

7 thoughts on “Personalizando mi propio monedero Bitcoin con Bitcoinj

  1. Orlando Milano

    Un saludo cordial. Amigo José Luis, esperando que todo lo tuyo se encuentre bien. Estaré pendiente de la información que pública en este Blog. Información de gran intéres. saludo

    • Sr Milano como esta! gracias por comentar en mi blog 😀 me encuentro bien como ve en lo mio que es la programación jejeje…. muchos saludos amigo

  2. Hi Amigo,
    Within three days your faucet have worked exactly at the point to point in seconds, but now it still came back in the past!
    Your yeyo faucet behind from the time approximately 9 hours!

    Contact with your admin and fix it!
    Thanks.

    • Hello,

      Thank you for reporting the problem let me review it, we are using api FaucetBox and this is the time limiting input

      • Hi amigo,
        So that, if you’re using the API FaucetBox? FauketBoks operating normally. I’m talking about your website, Senior developer!
        What means the time limiting input? Why only at you these errors occur?
        Between 12 and 24 hours, a great difference!
        720 minutes it’s not 1440 minutes.

        Fix it.

  3. Cesar Alfonzo Duran

    Buenas noches Jose luis necesito una gran ayuda de usted si esta de su parte claro.

    Estoy en proceso para crear un blog. Pero necesito una ayuda en algo especifico, espero que me pueda ayudar