Saltar al contenido

Cómo crear una ‘watch-only wallet’ en Bitcoin Core con Xpub de Electrum Wallet

Tiempo de lectura aprox: 7 minutos, 56 segundos

Caso 2

Si te perdiste el artículo con el primer ejercicio sobre como crear una watch-only en Bitcoin Core, puedes pasarte por aquí y leerlo. Es importante porque encontraras información y explicaciones que en este segundo artículo voy a dar por hecho que ya leíste.

En este segundo tutorial vamos a ver como importar una clave pública privada dentro de Bitcoin Core. Es interesante conocer esta otra posibilidad ya que Electrum es una de las wallets más potentes y versátiles del mercado a día de hoy y poder operar con ella y tener en el Nodo tu watch-only wallet es un set muy potente, desde mi punto de vista.

Como en el artículo anterior, hay algunas consideraciones y pre-requisitos a tener en cuenta.

Consideraciones.

  • Primero que nada, como mencioné en el artículo anterior, los pasos a dar no son nada complicados , tómalo con calma, eso si, antes de hacer nada en real, es decir con tus Bitcoins de verdad, entiende PERFECTAMENTE lo que vas a hacer.
  • Dado el punto anterior te pido que antes leas el contenido completo, si es necesario tomate un par de días o los que necesites, el artículo estará aquí!!.
  • No vas a necesitar UN solo satoshi para experimentar con todo lo que aquí te voy a comentar, así que NO tengas miedo, vamos a realizar todo de manera segura para poder entender realmente el proceso. Y los datos aquí usados los podrás usar al 100% para prácticar.
  • Por último pero no menos importante, es necesario que entiendas el concepto de derivation path, si no lo tienes claro, pásate por aquí y dale una leída.

Pre-requisitos:

  • Sistema Operativo Linux (y el software aquí mencionado instalado bajo el mismo equipo)
  • Bitcoin Core instalado, de preferencia la versión 0.19.1 o posterior.
  • Python 3 instalado en la computadora (la mayoría de las distribuciones de Linux lo tienen pre-instalado.
  • Electrum Wallet instalada en la computadora, de preferencia no instales la versión appimage, sino sigue las instrucciones que indican “Installation from Python sources”.
  • Leer este enlace donde explico como puedes configurar tu Nodo para que funcione como un entorno de pruebas, llamado regtest.

Si no cumples con los pre-requisitos, puedes continuar leyendo sin problema.

Crear cartera en Electrum y obtener Xpub de Electrum.

Vamos a continuar trabajando en regtest, como en el Caso 1, por lo cual todo es seguro y no estamos tocando bitcoins reales.

Vamos a utilizar Electrum Wallet por lo que ya comenté antes, pero ademas Electrum tiene otra ventaja, tiene la posibilidad de emular también estar conectada a la red de regtest (en realidad testnet pero para los efectos es la mismo).

Así que lo primero que vamos hacer es ejecutar Electrum Wallet. En regtest se ejecuta desde la línea de comandos indicando la ruta donde está instalado Electrum y la opción –regtest

Crear cartera

Ejemplo (en mi caso esta es la ruta para ejecutar):

~/.local/share/run_electrum –regtest

Al ejecutar ese comando se desplegará una ventana como la que vemos a continuación, donde introducimos el nombre de la cartera que queremos crear, en este caso le pondré “Cartera_Pagos_del_Trabajo” (tu puedes ponerle el nombre que desees):

A continuación saldrá una ventana de dialogo pidiéndonos definir el tipo de cartera. La cartera la puedes crear de diferentes tipos (multi firma, estándar, con factor de 2 autenticaciones, etc), para efectos de este artículo vamos a crear una cartera estándar, indicando que nos cree una nueva semilla y que sea Segwit, como se ve en las imágenes a continuación.

semilla: sail gaze body share fat urban soap cherry fancy merge animal aerobic

Pasada esta pantalla la siguiente nos pedirá que confirmemos que hemos salvado nuestras semillas y tendremos que introducirlas una a una nuevamente, esto es una medida de seguridad que aunque parezca tediosa es muy importante.

Lo siguiente que se nos pedirá, será introducir una contraseña para dotar de mayor seguridad a tu cartera, estos pasos como comentaba aunque parezcan tediosos son muy importantes y dan mayor seguridad a tu cartera en la vida real.

Por último nos saldrá un mensaje indicando que la cartera esta en testnet (para nuestro caso regtest), ningún problema, vamos a seguir.

Obtener Xpub de la cartera

Creada la cartera vamos a obtener el XPub de ella y la copiamos. Para ello en el menú vamos a “Wallet/Information” Guíate de las imágenes a continuación:

En la ventana de información de la cartera copiamos y guardamos la Master Public Key ya que la vamos a usar más adelante, para este ejemplo es la siguiente, es importante que esta llave la guardes, la vamos a usar más adelante:

vpub5W32rCYwPNCQALHNY6aZym47GTDq5ocQWPLZ56UnmzMhS2H9ztsAR2Zbs1vS7GqeLwdZRBQwwMV46K1AbXh8NFrGhRfS3wt3EEPqNxum9RQ

Con esto ya hemos creado nuestra cartera y además hemos obtenido la Xpub con la que trabajaremos. No olvides que este ejercicio nos sirve para simular y obtener la Xpub, tu podrías ya tener una cartera creada en Electrum por lo que en real, cuando quieras realizar estos pasos solo tendrías que venir a la parte de obtener la Xpub.

En esta cartera SI que podrás firmar tus transacciones para gastar Bitcoins y recibir directamente, pero imagina que es la cartera que quieres usar para almacenar y solo gastar de vez en cuando y ahora te interesaría vigilar que no haya movimientos que tu no controles, para ello vigilaremos los movimientos desde el nodo creando una cartera de vigilancia.

Dónde veas que el comando dice –regtest debes recordar que cuando ya quieras realizar estos pasos en real, deberás de eliminar esa parte (–regtest), no lo olvides.

Perdona si soy repetitivo con esto, pero es fundamental que lo tengas en mente.

Iniciar el nodo, crear watch-only y transformar e importar Xpub en Bitcoin Core

Iniciar el nodo

Todo lo vamos a realizar desde la línea de comandos con ayuda del cliente RPC que tiene Bitcoin Core y veremos algunas cosas en el cliente gráfico llamado Bitcoin-Qt.

Como comentaba al inicio del artículo damos por hecho que tienes cubiertos los pre-requisitos y que ya tienes instalado Bitcoin Core y ahora, lo que vamos a hacer es arrancar el nodo en la red de pruebas de regtest, para ello ejecutamos el comando:

$ bitcoind -regtest -daemon

Bitcoin Core starting

Crear watch-only wallet dentro del nodo

Ahora vamos a crear la cartera dentro del nodo, nuestra cartera, la voy a llamar “WatchOnly_Cartera_del_Trabajo”, pero puedes ponerle el nombre que gustes.

El comando a ejecutar es createwallet, los parámetros que vamos a usar es <nombre_cartera> y <true>. El parámetro “true” le indica al comando createwallet que la cartera que se va a crear será en modalidad watchonly, que como te decía significa que no va a contener las llaves privadas:

El comando entonces es:

$ bitcoin-cli –regtest createwallet WatchOnly_Cartera_del_Trabajo true

{

"name": "WatchOnly_Cartera_del_Trabajo",

"warning": ""

}

Un breve paréntesis hasta aquí. Las claves publicas que usa la cartera de Bitcoin Core usan la versión comprimida del formato BIP32 que se estableció como estándar para el uso de claves, tanto publicas como privadas en Bitcoin Core, otras carteras, como en este caso Electrum usan la versión extendida de ese formato BIP32, por eso es necesario hacerle una transformación.

Transformar Xpub a formato Base58

Como siguiente paso, vamos a convertir la llave extendida que obtuvimos de Electrum (master public key) en el formato Base58 que es el formato que Bitcoin Core reconoce, para ello es importante que en tu maquina previamente hayas instalado la función base58 de python (por ello tener python esta en los pre-requisitos).

En mi caso fue muy sencillo ya que la distribución de Linux que uso ya lo tenía instalado por defecto, pero si no es tú caso, basta que ejecutes el comando:

$ pip install Base58

Otro comando necesario pero que ya viene en las distribuciones de Linux es el comando printf.

Esta es la explicación del comando a usar.

Al comando printf, se le pasa la llave maestra publica, después, la salida del comando printf le pasamos la función base58 para que la convierta con las opciones -dc (decode y checksum) y luego el resultado de esa ejecución se la pasamos de entrada al comando xxd con la opción -p, para que haga el volcado a pantalla en formato hexadecimal pero con representación ascii, dicho lo anterior el comando es el siguiente (incluir las comillas):

$ printf «vpub5W32rCYwPNCQALHNY6aZym47GTDq5ocQWPLZ56UnmzMhS2H9ztsAR2Zbs1vS7GqeLwdZRBQwwMV46K1AbXh8NFrGhRfS3wt3EEPqNxum9RQ» | base58 -dc | xxd -p

La salida de ese comando te va a dejar unas líneas como lo siguiente:

045f1cf601f672307c800000009ad49d51a64d3b8e9a40fc97b68eefebd9

fcc0eb05ce897fe395560651ef10b902673463bc2a5041ebbba48954b84f

8c52bc621ad832476d24999c020ce76fb276

La salida la divide en 3 líneas, tomas esas 3 líneas y las pones en una sola línea y de esa única línea tomas los últimos 66 caracteres, es importante que solo sean los últimos 66 (inicias contando desde el final y vas hacía el principio), aquí el ejemplo.

Toda la línea:

045f1cf601f672307c800000009ad49d51a64d3b8e9a40fc97b68eefebd9fcc0eb05ce897fe395560651ef10b902673463bc2a5041ebbba48954b84f8c52bc621ad832476d24999c020ce76fb276

Y solo los últimos 66:

02673463bc2a5041ebbba48954b84f8c52bc621ad832476d24999c020ce76fb276

Esos últimos 66 caracteres representan la versión comprimida de la Master Public Key (33 bytes)

Importar Xpub comprimida a la cartera watch-only del nodo

Ahora con esos caracteres que son la llave publica maestra en formato base58 comprimido, vamos a proceder a importarlas en el Nodo para que en la cartera que creamos anteriormente, importe esas claves, eso significará que la cartera va a derivar todas las direcciones publicas internamente en algo llamado Keypool del Nodo, pero como hemos dicho no podrá firmarlas y por ende no podrá gastar desde el Nodo.

Lo que vamos a hacer es ejecutar el comando:

$ bitcoin-cli –regtest -rpcwallet=WatchOnly_Cartera_del_Trabajo importpubkey 02673463bc2a5041ebbba48954b84f8c52bc621ad832476d24999c020ce76fb276 «WatchOnly Wallet en mi Nodo» false

rpcwallet es necesario para indicarle al nodo el nombre de nuestra wallet, ya que el nodo crea siempre una wallet por defecto (wallet.dat) y si no le indicamos el nombre no sabrá con cuál quieres trabajar.

El comando importpubkey como es casi obvio, es el que se encarga de realizar la importación de la llave publica, le pasamos como parámetro la clave en formato Base58, puedes ponerle una etiqueta a las direcciones que va a generar en este caso le estamos poniendo “WatchOnly Wallet en mi Nodo”, pero podrías ponerle lo que consideres.

Las etiquetas son muy importantes, te ayudan a identificar tus gastos por ello te la recomiendo.

Por último la palabra “false” (sin las comillas), este parámetro le indica al comando que una vez que termine no realice un re-escaneo de todas las transacciones de la blockchain, esto es importante porque en caso de no hacerlo, el proceso de re-escaneo es tardado, pero si es una cartera en la que ya has realizado operaciones previamente a que hayas realizado el proceso de importación, entonces seguramente si te interesa realizarlo.

Hasta aquí ya hemos creado la wallet en Electrum y con esto último hemos transformado e importado las claves públicas en nuestro Nodo. Y para ver que es así, vamos a arrancar la wallet del nodo de manera gráfica y verificar que todo esta bien.

Verificar desde la cartera del nodo la importación exitosa de la Xpub.

Lo primero a realizar es detener el nodo, para ello ejecutamos el comando

$ bitcoin-cli stop

Bitcoin Core stopping

Acto seguido arrancamos desde el entorno gráfico del nodo con el comando

$ bitcoin-qt -regtest &

Y veremos que la cartera se ha creado y procederemos a abrirla como se indica en la imagen siguiente:

Damos click en abrir “Archivo/Abrir Monedero” y con ello ya tendremos disponible nuestra cartera para ver las direcciones que se han creado en modalidad de solo ver o de vigilancia.

Esto lo podemos constatar dando click en el Menú “Ventana/Direcciones de recepción” y veremos en la ventana modal que se abrirá a continuación, las direcciones que se han derivado a partir de nuestra master public key que a su vez obtuvimos y transformamos para importar en el nodo, como se ve en la siguiente imagen.

Veras sólo 3 direcciones, una de cada tipo (legacy, multifirma y Segwit), pero esto no significa que solo esas 3 direcciones serán las que vas a poder vigilar, es solo que conformen se vayan usando el nodo irá generando más (desde esa opción de menú “Ventana/Direcciones de recepción”) o bien si usas alguna desde tu Electrum wallet, el nodo mantendrá bajo vigilancia cualquier dirección que pertenezca a tu llave pública. Espero sea claro este concepto.

Otra opción de validar la creación de nuestra watch-only wallet es con la ejecución del comando

$ bitcoin-cli -rpcwallet=WatchOnly_Cartera_del_Trabajo getwalletinfo

Donde como podrás validar la salida de ese comando te indica entre otras cosas que las llaves privadas de esa cartera no están habilitadas.

{
"walletname": "WatchOnly_Cartera_del_Trabajo",
"walletversion": 169900,
"balance": 0.00000000,
"unconfirmed_balance": 0.00000000,
"immature_balance": 0.00000000,
"txcount": 0,
"keypoololdest": 1594131102,
"keypoolsize": 0,
"keypoolsize_hd_internal": 0,
"paytxfee": 0.00000000,
"private_keys_enabled": false,
"avoid_reuse": false,
"scanning": false
}

También podrías realizar el envío de bitcoins desde el nodo simulando el que alguien, te enviará algo de bitcoin a una dirección de tu wallet Electrum desde regtest y verías como la cartera de vigilancia lo registra, eso lo abordamos en el ejercicio del artículo anterior y además lo muestro en este vídeo de soporte para el entendimiento de este artículo.

Guía visual del artículo

Como siempre agradezco que hayas llegado hasta aquí, este es un artículo largo por las imágenes pero con un procedimiento muy sencillo de aplicar y creo que merece la pena el conocerlo y entenderlo.

Mi intención es ir mostrando que con el nodo podemos hacer muchas cosas más que solo validar y emitir bloques y transacciones..

Si te ha gustado o te ha resultado de utilidad, por favor déjamelo saber con un comentario por twitter en mi cuenta: @decentralized_b o bien déjame una propina, te lo agradeceré mucho y me motiva a seguir generando contenido ya que con ello podré tener más tiempo para hacerlo.

Pero lo más importante, si crees que puede ayudar a otros más, compártelo.

Si estas leyendo esta entrada y nos has leído aún la primera parte, no dejes de pasarte por aquí!.

Sobre el autor de este artículo