{"id":256,"date":"2016-01-05T23:24:00","date_gmt":"2016-01-05T23:24:00","guid":{"rendered":"https:\/\/www.joseluisestevez.com\/?p=256"},"modified":"2017-02-01T11:27:17","modified_gmt":"2017-02-01T11:27:17","slug":"personalizando-mi-propio-monedero-bitcoin-con-bitcoinj","status":"publish","type":"post","link":"https:\/\/www.joseluisestevez.com\/index.php\/2016\/01\/05\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\/","title":{"rendered":"Personalizando mi propio monedero Bitcoin con Bitcoinj"},"content":{"rendered":"<p>En este articulo quiero dar una peque\u00f1a introducci\u00f3n al desarrollo de aplicaciones del mundo bitcoin,\u00a0vamos a desarrollar una peque\u00f1a billetera con una interfaz amigable.<\/p>\n<h2>\u00bfQue es bitcoinj?<\/h2>\n<p>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\u00edsticas avanzadas. Est\u00e1 implementado en Java, pero se puede utilizar desde cualquier lenguaje compatible JVM: ejemplos en Python y JavaScript est\u00e1n incluidos.<\/p>\n<p><!--more--><\/p>\n<h2>\u00bfQuienes usan esta bibloteca?<\/h2>\n<ol>\n<li><a href=\"https:\/\/www.hivewallet.com\/\" target=\"_blank\">Hivewallet<\/a><\/li>\n<li><a href=\"https:\/\/multibit.org\/\" target=\"_blank\">Multibit<\/a><\/li>\n<li><a href=\"https:\/\/play.google.com\/store\/apps\/details?id=de.schildbach.wallet\" target=\"_blank\">Android Bitcoin Wallet<\/a><\/li>\n<li><a href=\"https:\/\/www.biteasy.com\/\" target=\"_blank\">Biteasy<\/a><\/li>\n<\/ol>\n<p>bitcoinj es un proyecto Open\u00a0Source con bajo la licencia \u00abApache licensed\u00bb para m\u00e1s informaci\u00f3n esta es la pagina oficial <a href=\"https:\/\/bitcoinj.github.io\/\" target=\"_blank\">https:\/\/bitcoinj.github.io\/<\/a><\/p>\n<p>Quiero mostrar el ejemplo que viene dentro de la librer\u00eda de bitcoinj, esta tiene su documentaci\u00f3n oficial pero en ingles por eso lo he querido mostrar en espa\u00f1ol.<\/p>\n<h2>\u00bfQue necesitamos?<\/h2>\n<ul>\n<li><strong>Sistema Operativo: Linux Debian 7 o superior<\/strong>, si no tienes dinero para comprar una MacBook y usar OS X. Si usas Windows te recomiendo que uses Linux es libre y gratuito!<\/li>\n<li><strong>Java 8:<\/strong> Yo estoy usando JDK8u65, descargue la versi\u00f3n tar.gz de <a href=\"http:\/\/www.oracle.com\/technetwork\/java\/javase\/downloads\/index.html\" target=\"_blank\">aqu\u00ed<\/a>.<\/li>\n<li><strong>Java FX:<\/strong> Yo estoy usando la versi\u00f3n 2.0, descargue la versi\u00f3n tar.gz de <a href=\"http:\/\/www.oracle.com\/technetwork\/java\/javase\/downloads\/javafxscenebuilder-info-2157684.html\" target=\"_blank\">aqu\u00ed<\/a>.<\/li>\n<li><strong>Intellij IDEA community: <\/strong>Vamos a usar este IDE, puedes descargarlo de <a href=\"https:\/\/www.jetbrains.com\/idea\/\" target=\"_blank\">aqu\u00ed<\/a>.<\/li>\n<li><strong>bitcoinj:<\/strong> Lo puedes descargar desde <a href=\"https:\/\/github.com\/bitcoinj\/bitcoinj\" target=\"_blank\">github<\/a> dentro de sus fuentes esta el ejemplo.<\/li>\n<\/ul>\n<p>No voy a explicar la instalaci\u00f3n estas versiones se descomprimen y est\u00e1n lista para usarse.<\/p>\n<h2>Ahora si comenzamos!<\/h2>\n<p>bitcoinj viene trae en su c\u00f3digo fuente una aplicaci\u00f3n b\u00e1sica GUI de cartera bitcoin. Est\u00e1 destinado a ser copiado y usado como base para cualquier aplicaci\u00f3n 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\u00eda un buen lugar para empezar. En m\u00ed caso voy a comenzar el desarrollo de un core basado en un API Restful para mi aplicaci\u00f3n de predimaniabits, la cual estar\u00e9 documentado en mi blog y publicando en github.<\/p>\n<h2>Vamos importar el ejemplo:<\/h2>\n<p>Es muy sencillo seguimos los pasos que te muestro a continuaci\u00f3n:<br \/>\n<strong>Paso 1:<\/strong> Al abrir el IDE por primera vez seleccionamos \u00abImport Project\u00bb, si no es la primera vez que abres el IDE enhorabuena por usar Intellij IDEA antes \ud83d\ude00<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso1.png\" rel=\"attachment wp-att-259\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-259 size-full\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso1.png\" alt=\"import_project_paso1\" width=\"777\" height=\"461\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso1.png 777w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso1-300x178.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso1-768x456.png 768w\" sizes=\"auto, (max-width: 777px) 100vw, 777px\" \/><\/a><\/p>\n<p><strong>Paso 2:<\/strong> Buscamos los fuentes que nos descargamos anteriormente la carpeta llamada wallettemplate<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso2.png\" rel=\"attachment wp-att-260\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-260 size-full\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso2.png\" alt=\"import_project_paso2\" width=\"508\" height=\"578\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso2.png 508w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso2-264x300.png 264w\" sizes=\"auto, (max-width: 508px) 100vw, 508px\" \/><\/a><br \/>\n<strong>Paso 3<\/strong>: Seleccionamos maven<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso3.png\" rel=\"attachment wp-att-261\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-261 size-full\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso3.png\" alt=\"import_project_paso3\" width=\"807\" height=\"688\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso3.png 807w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso3-300x256.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso3-768x655.png 768w\" sizes=\"auto, (max-width: 807px) 100vw, 807px\" \/><\/a><br \/>\n<strong>Paso 4:<\/strong> Marcamos donde dice import project maven automatically<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso4.png\" rel=\"attachment wp-att-262\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-262 size-full\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso4.png\" alt=\"import_project_paso4\" width=\"811\" height=\"690\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso4.png 811w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso4-300x255.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso4-768x653.png 768w\" sizes=\"auto, (max-width: 811px) 100vw, 811px\" \/><\/a><br \/>\n<strong>Paso 5:<\/strong> Seleccionamos el profile<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso5.png\" rel=\"attachment wp-att-263\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-263 size-full\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso5.png\" alt=\"import_project_paso5\" width=\"810\" height=\"685\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso5.png 810w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso5-300x254.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso5-768x649.png 768w\" sizes=\"auto, (max-width: 810px) 100vw, 810px\" \/><\/a><br \/>\n<strong>Paso 6:<\/strong> Aqu\u00ed damos siguiente, este es el proyecto que seleccionamos<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso6.png\" rel=\"attachment wp-att-264\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-264 size-full\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso6.png\" alt=\"import_project_paso6\" width=\"809\" height=\"690\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso6.png 809w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso6-300x256.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso6-768x655.png 768w\" sizes=\"auto, (max-width: 809px) 100vw, 809px\" \/><\/a><br \/>\n<strong>Paso 7:<\/strong> Seleccionamos el sdk 1.8<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-265 size-full\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso7.png\" alt=\"import_project_paso7\" width=\"810\" height=\"688\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso7.png 810w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso7-300x255.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso7-768x652.png 768w\" sizes=\"auto, (max-width: 810px) 100vw, 810px\" \/><br \/>\n<strong>Paso 8:<\/strong> Por ahora vamos a dejar el proyecto con su nombre inicial.<a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso7.png\" rel=\"attachment wp-att-265\"><br \/>\n<\/a><\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso8.png\" rel=\"attachment wp-att-266\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-266 size-full\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso8.png\" alt=\"import_project_paso8\" width=\"811\" height=\"688\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso8.png 811w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso8-300x255.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/import_project_paso8-768x652.png 768w\" sizes=\"auto, (max-width: 811px) 100vw, 811px\" \/><\/a><\/p>\n<p>Ahora vamos a renombrar el proyecto:<\/p>\n<p>Hacemos clic derecho en el modulo de nuestro proyecto y seleccionamos refactor-&gt;rename o ejecutamos el atajo de teclado Mayuscula+F6.<\/p>\n<p>Lo cambiamos el nombre a simplewallet<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/rename.png\" rel=\"attachment wp-att-267\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-267 size-large\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/rename-1024x576.png\" alt=\"rename\" width=\"1024\" height=\"576\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/rename-1024x576.png 1024w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/rename-300x169.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/rename-768x432.png 768w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/rename.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<h2>Archivo Main.java<\/h2>\n<p>Vamos a editar el archivo Main.java<\/p>\n<p><strong>Linea 31:<\/strong> Cambiamos el nombre de nuestra aplicaci\u00f3n:<\/p>\n<pre class=\"lang:java decode:true\">public static String APP_NAME = \"WalletTemplate\";\r\n<\/pre>\n<p>por<\/p>\n<pre class=\"lang:java decode:true\">public static String APP_NAME = \"SimpleWallet\";<\/pre>\n<p><strong>Linea 33: <em>Muy importante cambiar al ambiente de prueba!<\/em><\/strong><\/p>\n<pre class=\"lang:java decode:true\">public static NetworkParameters params = MainNetParams.get();<\/pre>\n<p>por<\/p>\n<pre class=\"lang:java decode:true\">public static NetworkParameters params = TestNet3Params.get();<\/pre>\n<p>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.<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/error_javafx.png\" rel=\"attachment wp-att-269\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-269 size-large\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/error_javafx-1024x576.png\" alt=\"error_javafx\" width=\"1024\" height=\"576\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/error_javafx-1024x576.png 1024w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/error_javafx-300x169.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/error_javafx-768x432.png 768w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/error_javafx.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<h2>Archivo\u00a0main.fxml<\/h2>\n<p>Eliminamos el Label que viene predeterimando<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso1.png\" rel=\"attachment wp-att-270\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-270 size-large\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso1-1024x576.png\" alt=\"main_fxml_paso1\" width=\"1024\" height=\"576\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso1-1024x576.png 1024w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso1-300x169.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso1-768x432.png 768w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso1.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Seleccionamos en Controls el elemento ListView y lo movemos\u00a0hasta el StackPane<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso2.png\" rel=\"attachment wp-att-271\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-271 size-large\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso2-1024x576.png\" alt=\"main_fxml_paso2\" width=\"1024\" height=\"576\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso2-1024x576.png 1024w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso2-300x169.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso2-768x432.png 768w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso2.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Modificamos el nombre del ListView, en Code: ListView donde dice fx:id a transactionsList<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso3.png\" rel=\"attachment wp-att-272\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-272 size-large\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso3-1024x576.png\" alt=\"main_fxml_paso3\" width=\"1024\" height=\"576\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso3-1024x576.png 1024w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso3-300x169.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso3-768x432.png 768w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso3.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Modificamos la opacidad a 0.65 para que se siga viendo el fondo de la aplicaci\u00f3n.<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso4.png\" rel=\"attachment wp-att-273\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-273 size-large\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso4-1024x576.png\" alt=\"main_fxml_paso4\" width=\"1024\" height=\"576\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso4-1024x576.png 1024w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso4-300x169.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso4-768x432.png 768w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/main_fxml_paso4.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<h2>Archivo\u00a0BitcoinUIModel.java<\/h2>\n<p>En la linea 24 a\u00f1adimmos lo siguiente:<\/p>\n<pre class=\"lang:java decode:true \">private ObservableList&lt;Transaction&gt; transactions = FXCollections.observableArrayList();<\/pre>\n<p>Ahora en la linea 44 dentro del metodo update agregamos al final lo siguiente:<\/p>\n<pre class=\"lang:java decode:true\">private void update(Wallet wallet) {\r\n        balance.set(wallet.getBalance());\r\n        address.set(wallet.currentReceiveAddress());\r\n        transactions.setAll(wallet.getTransactionsByTime());\r\n}<\/pre>\n<p>Luego al final creamos el metodo getter<\/p>\n<pre class=\"lang:java decode:true \">public ObservableList&lt;Transaction&gt; getTransactions() {\r\nreturn transactions;\r\n}<\/pre>\n<h2>Archivo\u00a0MainController.java<\/h2>\n<p>Nos vamos\u00a0a\u00a0la linea 37 y agregamos lo siguiente:<\/p>\n<pre class=\"lang:java decode:true \">public ListView&lt;Transaction&gt; transactionsList;<\/pre>\n<p>Agregamos al final del metodo onBitcoinSetup()<\/p>\n<pre class=\"lang:java decode:true \">        Bindings.bindContent(transactionsList.getItems(), model.getTransactions());\r\n\r\n        transactionsList.setCellFactory(new Callback&lt;ListView&lt;Transaction&gt;, ListCell&lt;Transaction&gt;&gt;() {\r\n            @Override\r\n            public ListCell&lt;Transaction&gt; call(ListView&lt;Transaction&gt; param) {\r\n                return new TextFieldListCell&lt;Transaction&gt;(new StringConverter&lt;Transaction&gt;() {\r\n                    @Override\r\n                    public String toString(Transaction tx) {\r\n                        Coin value = tx.getValue(Main.bitcoin.wallet());\r\n                        if(value.isPositive()) {\r\n                            return \"Incoming payment of \"+MonetaryFormat.BTC.format(value);\r\n                        }\r\n                        else if (value.isNegative()) {\r\n                            Address address = tx.getOutput(0).getAddressFromP2PKHScript(Main.params);\r\n                            return \"Outbound payment to \"+address;\r\n                        }\r\n                        return \"Payment with id \"+tx.getHash();\r\n                    }\r\n\r\n                    @Override\r\n                    public Transaction fromString(String string) {\r\n                        return null;\r\n                    }\r\n                });\r\n            }\r\n        });\r\n<\/pre>\n<p>Modificamos el metodo setWallet<\/p>\n<pre class=\"lang:java decode:true \">    public void setWallet(Wallet wallet) {\r\n        wallet.addEventListener(new AbstractWalletEventListener() {\r\n            @Override\r\n            public void onWalletChanged(Wallet wallet) {\r\n                super.onWalletChanged(wallet);\r\n                update(wallet);\r\n            }\r\n        }, Platform::runLater);\r\n        update(wallet);\r\n    }<\/pre>\n<p>Eliminamos donde desde la coma hasta el runLater \u00ab<em>, Platform::runLater<\/em>\u00bb<\/p>\n<pre class=\"lang:java decode:true\">    public void setWallet(Wallet wallet) {\r\n        wallet.addEventListener(new AbstractWalletEventListener() {\r\n            @Override\r\n            public void onWalletChanged(Wallet wallet) {\r\n                super.onWalletChanged(wallet);\r\n                update(wallet);\r\n            }\r\n        });\r\n        update(wallet);\r\n    }<\/pre>\n<p>Ahora ejecutamos la aplicaci\u00f3n Run -&gt; Run Main<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_1.png\" rel=\"attachment wp-att-276\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-276 size-large\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_1-1024x576.png\" alt=\"run_1\" width=\"1024\" height=\"576\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_1-1024x576.png 1024w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_1-300x169.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_1-768x432.png 768w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_1.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Al terminar de ejecutar nos mostrara nuestra direcci\u00f3n 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)<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_2.png\" rel=\"attachment wp-att-277\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-277 size-large\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_2-1024x576.png\" alt=\"run_2\" width=\"1024\" height=\"576\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_2-1024x576.png 1024w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_2-300x169.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_2-768x432.png 768w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_2.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Nos vamos a setting donde podremos ver el Mnemonic de nuestra billetera.<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_3.png\" rel=\"attachment wp-att-278\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-278 size-large\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_3-1024x576.png\" alt=\"run_3\" width=\"1024\" height=\"576\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_3-1024x576.png 1024w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_3-300x169.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_3-768x432.png 768w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_3.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Primer vamos a asignar una contrase\u00f1a para proteger nuestros bitcoin.<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_4.png\" rel=\"attachment wp-att-279\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-279 size-large\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_4-1024x576.png\" alt=\"run_4\" width=\"1024\" height=\"576\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_4-1024x576.png 1024w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_4-300x169.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_4-768x432.png 768w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_4.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Ahora nos pedir\u00e1 esta contrase\u00f1a cuando queramos retirar.<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_5.png\" rel=\"attachment wp-att-280\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-280 size-large\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_5-1024x576.png\" alt=\"run_5\" width=\"1024\" height=\"576\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_5-1024x576.png 1024w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_5-300x169.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_5-768x432.png 768w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_5.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Ahora voy a sacar unos satoshis de los grifos y voy a ver como llegan a mi billetera \ud83d\ude00<\/p>\n<p>Haskon Faucet: nos dirigimos al siguiente URL <a href=\"http:\/\/faucet.xeno-genesis.com\/\" target=\"_blank\">http:\/\/faucet.xeno-genesis.com\/<\/a> para entrar al grifo.<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_6.png\" rel=\"attachment wp-att-281\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-281 size-large\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_6-1024x576.png\" alt=\"run_6\" width=\"1024\" height=\"576\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_6-1024x576.png 1024w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_6-300x169.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_6-768x432.png 768w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_6.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Este me dio 10000 satoshis, ahora voy a otro grifo que es mas bondadoso \u00a0CoinFaucet en el siguiente enlace <a href=\"https:\/\/testnet.coinfaucet.eu\/en\/\" target=\"_blank\">https:\/\/testnet.coinfaucet.eu\/en\/<\/a>\u00a0\ud83d\ude00<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_8.png\" rel=\"attachment wp-att-282\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-282 size-large\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_8-1024x576.png\" alt=\"run_8\" width=\"1024\" height=\"576\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_8-1024x576.png 1024w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_8-300x169.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_8-768x432.png 768w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_8.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Como podemos ver este me ha dado una modesta cantidad de 2.56BTC<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_9.png\" rel=\"attachment wp-att-283\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-283 size-large\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_9-1024x576.png\" alt=\"run_9\" width=\"1024\" height=\"576\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_9-1024x576.png 1024w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_9-300x169.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_9-768x432.png 768w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_9.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Ahora si podemos devolver los bits seleccionando la direcci\u00f3n de donaci\u00f3n de los grifos.<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_10.png\" rel=\"attachment wp-att-284\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-284 size-large\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_10-1024x576.png\" alt=\"run_10\" width=\"1024\" height=\"576\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_10-1024x576.png 1024w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_10-300x169.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_10-768x432.png 768w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/run_10.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h3><em>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.<\/em><\/h3>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En este articulo quiero dar una peque\u00f1a introducci\u00f3n al desarrollo de aplicaciones del mundo bitcoin,\u00a0vamos a desarrollar una peque\u00f1a billetera con una interfaz amigable. \u00bfQue 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 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":257,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25,30,20,8,6],"tags":[28,31,9,12],"class_list":["post-256","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bitcoin","category-bitcoinj","category-cursos","category-java","category-linux","tag-bitcoin","tag-bitcoinj","tag-java","tag-linux"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Personalizando mi propio monedero Bitcoin con Bitcoinj - El Blog de Jose Luis Estevez<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.joseluisestevez.com\/index.php\/2016\/01\/05\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Personalizando mi propio monedero Bitcoin con Bitcoinj - El Blog de Jose Luis Estevez\" \/>\n<meta property=\"og:description\" content=\"En este articulo quiero dar una peque\u00f1a introducci\u00f3n al desarrollo de aplicaciones del mundo bitcoin,\u00a0vamos a desarrollar una peque\u00f1a billetera con una interfaz amigable. \u00bfQue 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 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.joseluisestevez.com\/index.php\/2016\/01\/05\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\/\" \/>\n<meta property=\"og:site_name\" content=\"El Blog de Jose Luis Estevez\" \/>\n<meta property=\"article:published_time\" content=\"2016-01-05T23:24:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-02-01T11:27:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/bitcoinjlogo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"600\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"yeyo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"yeyo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2016\\\/01\\\/05\\\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2016\\\/01\\\/05\\\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\\\/\"},\"author\":{\"name\":\"yeyo\",\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/#\\\/schema\\\/person\\\/6a17b38fcac664fdb33a5fba8056d0ee\"},\"headline\":\"Personalizando mi propio monedero Bitcoin con Bitcoinj\",\"datePublished\":\"2016-01-05T23:24:00+00:00\",\"dateModified\":\"2017-02-01T11:27:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2016\\\/01\\\/05\\\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\\\/\"},\"wordCount\":881,\"image\":{\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2016\\\/01\\\/05\\\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.joseluisestevez.com\\\/wp-content\\\/uploads\\\/2016\\\/01\\\/bitcoinjlogo.jpg\",\"keywords\":[\"Bitcoin\",\"bitcoinj\",\"Java\",\"Linux\"],\"articleSection\":[\"Bitcoin\",\"bitcoinj\",\"Cursos\",\"Java\",\"Linux\"],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2016\\\/01\\\/05\\\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\\\/\",\"url\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2016\\\/01\\\/05\\\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\\\/\",\"name\":\"Personalizando mi propio monedero Bitcoin con Bitcoinj - El Blog de Jose Luis Estevez\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2016\\\/01\\\/05\\\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2016\\\/01\\\/05\\\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.joseluisestevez.com\\\/wp-content\\\/uploads\\\/2016\\\/01\\\/bitcoinjlogo.jpg\",\"datePublished\":\"2016-01-05T23:24:00+00:00\",\"dateModified\":\"2017-02-01T11:27:17+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/#\\\/schema\\\/person\\\/6a17b38fcac664fdb33a5fba8056d0ee\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2016\\\/01\\\/05\\\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2016\\\/01\\\/05\\\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2016\\\/01\\\/05\\\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.joseluisestevez.com\\\/wp-content\\\/uploads\\\/2016\\\/01\\\/bitcoinjlogo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.joseluisestevez.com\\\/wp-content\\\/uploads\\\/2016\\\/01\\\/bitcoinjlogo.jpg\",\"width\":2400,\"height\":600},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2016\\\/01\\\/05\\\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/www.joseluisestevez.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Personalizando mi propio monedero Bitcoin con Bitcoinj\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/#website\",\"url\":\"https:\\\/\\\/www.joseluisestevez.com\\\/\",\"name\":\"El Blog de Jose Luis Estevez\",\"description\":\"Desarrollador Senior\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.joseluisestevez.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/#\\\/schema\\\/person\\\/6a17b38fcac664fdb33a5fba8056d0ee\",\"name\":\"yeyo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3565e9dac43d5a8d2b807866a3af3ab66eeacb68b2d28fc63b962ad40c6ef4c7?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3565e9dac43d5a8d2b807866a3af3ab66eeacb68b2d28fc63b962ad40c6ef4c7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3565e9dac43d5a8d2b807866a3af3ab66eeacb68b2d28fc63b962ad40c6ef4c7?s=96&d=mm&r=g\",\"caption\":\"yeyo\"},\"description\":\"Arquitecto de Software emprendedor con ardua experiencia en el camino de la tecnolog\u00eda.\",\"sameAs\":[\"http:\\\/\\\/www.joseluisestevez.com\"],\"url\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/author\\\/yeyo\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Personalizando mi propio monedero Bitcoin con Bitcoinj - El Blog de Jose Luis Estevez","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.joseluisestevez.com\/index.php\/2016\/01\/05\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\/","og_locale":"es_ES","og_type":"article","og_title":"Personalizando mi propio monedero Bitcoin con Bitcoinj - El Blog de Jose Luis Estevez","og_description":"En este articulo quiero dar una peque\u00f1a introducci\u00f3n al desarrollo de aplicaciones del mundo bitcoin,\u00a0vamos a desarrollar una peque\u00f1a billetera con una interfaz amigable. \u00bfQue 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 [&hellip;]","og_url":"https:\/\/www.joseluisestevez.com\/index.php\/2016\/01\/05\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\/","og_site_name":"El Blog de Jose Luis Estevez","article_published_time":"2016-01-05T23:24:00+00:00","article_modified_time":"2017-02-01T11:27:17+00:00","og_image":[{"width":2400,"height":600,"url":"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/bitcoinjlogo.jpg","type":"image\/jpeg"}],"author":"yeyo","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"yeyo","Tiempo de lectura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.joseluisestevez.com\/index.php\/2016\/01\/05\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\/#article","isPartOf":{"@id":"https:\/\/www.joseluisestevez.com\/index.php\/2016\/01\/05\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\/"},"author":{"name":"yeyo","@id":"https:\/\/www.joseluisestevez.com\/#\/schema\/person\/6a17b38fcac664fdb33a5fba8056d0ee"},"headline":"Personalizando mi propio monedero Bitcoin con Bitcoinj","datePublished":"2016-01-05T23:24:00+00:00","dateModified":"2017-02-01T11:27:17+00:00","mainEntityOfPage":{"@id":"https:\/\/www.joseluisestevez.com\/index.php\/2016\/01\/05\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\/"},"wordCount":881,"image":{"@id":"https:\/\/www.joseluisestevez.com\/index.php\/2016\/01\/05\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\/#primaryimage"},"thumbnailUrl":"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/bitcoinjlogo.jpg","keywords":["Bitcoin","bitcoinj","Java","Linux"],"articleSection":["Bitcoin","bitcoinj","Cursos","Java","Linux"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/www.joseluisestevez.com\/index.php\/2016\/01\/05\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\/","url":"https:\/\/www.joseluisestevez.com\/index.php\/2016\/01\/05\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\/","name":"Personalizando mi propio monedero Bitcoin con Bitcoinj - El Blog de Jose Luis Estevez","isPartOf":{"@id":"https:\/\/www.joseluisestevez.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.joseluisestevez.com\/index.php\/2016\/01\/05\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\/#primaryimage"},"image":{"@id":"https:\/\/www.joseluisestevez.com\/index.php\/2016\/01\/05\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\/#primaryimage"},"thumbnailUrl":"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/bitcoinjlogo.jpg","datePublished":"2016-01-05T23:24:00+00:00","dateModified":"2017-02-01T11:27:17+00:00","author":{"@id":"https:\/\/www.joseluisestevez.com\/#\/schema\/person\/6a17b38fcac664fdb33a5fba8056d0ee"},"breadcrumb":{"@id":"https:\/\/www.joseluisestevez.com\/index.php\/2016\/01\/05\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.joseluisestevez.com\/index.php\/2016\/01\/05\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.joseluisestevez.com\/index.php\/2016\/01\/05\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\/#primaryimage","url":"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/bitcoinjlogo.jpg","contentUrl":"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2016\/01\/bitcoinjlogo.jpg","width":2400,"height":600},{"@type":"BreadcrumbList","@id":"https:\/\/www.joseluisestevez.com\/index.php\/2016\/01\/05\/personalizando-mi-propio-monedero-bitcoin-con-bitcoinj\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.joseluisestevez.com\/"},{"@type":"ListItem","position":2,"name":"Personalizando mi propio monedero Bitcoin con Bitcoinj"}]},{"@type":"WebSite","@id":"https:\/\/www.joseluisestevez.com\/#website","url":"https:\/\/www.joseluisestevez.com\/","name":"El Blog de Jose Luis Estevez","description":"Desarrollador Senior","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.joseluisestevez.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/www.joseluisestevez.com\/#\/schema\/person\/6a17b38fcac664fdb33a5fba8056d0ee","name":"yeyo","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/3565e9dac43d5a8d2b807866a3af3ab66eeacb68b2d28fc63b962ad40c6ef4c7?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/3565e9dac43d5a8d2b807866a3af3ab66eeacb68b2d28fc63b962ad40c6ef4c7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3565e9dac43d5a8d2b807866a3af3ab66eeacb68b2d28fc63b962ad40c6ef4c7?s=96&d=mm&r=g","caption":"yeyo"},"description":"Arquitecto de Software emprendedor con ardua experiencia en el camino de la tecnolog\u00eda.","sameAs":["http:\/\/www.joseluisestevez.com"],"url":"https:\/\/www.joseluisestevez.com\/index.php\/author\/yeyo\/"}]}},"_links":{"self":[{"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/posts\/256","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/comments?post=256"}],"version-history":[{"count":7,"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/posts\/256\/revisions"}],"predecessor-version":[{"id":287,"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/posts\/256\/revisions\/287"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/media\/257"}],"wp:attachment":[{"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/media?parent=256"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/categories?post=256"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/tags?post=256"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}