Thundroid - Parte 2 Migración desde Bitcoin Testnet a Mainnet

¿Recuerdas la Parte 1 de esta guía? Configuramos un completo nodo de Bitcoin con Lightning desde cero, llegamos bastante lejos para asegurar nuestro sistema y empezamos a probar Bitcoin en testnet. Si no te has hecho con la Parte 1, léala primero ya que esta parte no tiene mucho sentido sin ella. El objetivo de esta guía es cambiar nuestro Thundroid de Bitcoin testnet a mainnet y realizar transacciones con dinero real.

Buenas prácticas financieras El Bitcoin es un activo al portador como dinero en efectivo físico, de modo que las transacciones no se pueden revertir. Controlar tu bitcoin en realidad significa controlar las claves privadas que te permiten usarlo. Esto significa que, si alguien tiene acceso a tus claves privadas, esta persona tiene control total sobre tu bitcoins. Una vez que se envían a una dirección diferente, no hay nada que puedas hacer para recuperarlos.

Para administrar tu bitcoin, necesitas una “Wallet” o billetera. Esta es una aplicación que administra las claves privadas. Tenemos que hacer una distinción muy importante:

  • Hot wallet: una aplicación que administra su clave privada y está expuesta a Internet. Es una aplicación móvil muy cómoda, pero podría ser potencialmente pirateada. Esta billetera suele usarse para cantidades pequeñas y para un uso diario.
  • Cold storage: tu clave privada nunca ha estado expuesta a ninguna red. Algunos ejemplos son las billeteras en papel que se crean y/o imprimen utilizando un ordenador sin conexión, o billeteras de hardware como Ledger o Trezor. Así es como aseguras tus ahorros en bitcoin.

Por definición, este proyecto es un hot wallet ya que está conectado a internet. Dicho esto, ¡No almacene grandes cantidades de dinero en su Thundroid!

  • Bitcoin: no use la billetera integrada en Bitcoin Core para nada. El camino a seguir es utilizar una pequeña billetera de hardware para proteger tus claves privadas con Thundroid como tu back-end de confianza para enviar/verificar las transacciones. Más sobre este tema más adelante.
  • Lightning: como toda la red aún está en fase beta, es evidente que no debes poner los ahorros de tu vida en ella. Experimentar con pequeñas cantidades está bien, pero hazlo bajo tu propia responsabilidad.

Tenga en cuenta que, aunque Bitcoin ha sido puesto a prueba durante casi una década y se usa para mover miles de millones de dólares estadounidenses todos los días, Lightning Network aún está en fase beta y está bajo desarrollado. Esta guía también te permite configurar tu nodo Bitcoin ignorando la parte de Lightning.

Cambiar a Mainnet La configuración actual de tu Thundroid se ejecuta en Bitcoin testnet. Asegúrate de que tu sistema funciona sin problemas para que podamos pasar a copiar la cadena de bloques de mainnet que ya descargaste con un ordenador corriente (ver Parte 1).

En tu ordenador habitual, comprueba el progreso de la verificación en Bitcoin Core. Para continuar, debe estar completamente sincronizado (ver barra de estado). Cierra Bitcoin Core en Windows para que podamos copiar toda la estructura de datos a Thundroid. Esto nos llevará alrededor de 6 horas.

NOTA: Si te quedas atascado, echa un vistazo a mi repositorio GitHub. Puedes buscar respuestas entre las cuestiones ya resueltos o abrir un nuevo tema si lo consideras necesario.

Activar el acceso por contraseña de forma temporal Para copiar los datos con el usuario "bitcoin", necesitamos habilitar temporalmente el inicio de sesión con contraseña. Como usuario "admin", edita el archivo de configuración de SSH y coloca un # delante de "PasswordAuthentication no" para deshabilitar toda la línea. Guarda y Salte.

$ sudo nano /etc/ssh/sshd_config
# PasswordAuthentication no
Reinicia el demonio SSH.
$ sudo systemctl restart ssh
Copiar la cadena de bloques de mainnet usando SCP Estamos utilizando "Secure Copy" (SCP), así que, descarga e instala WinSCP, un programa gratuito de código abierto. Existen otros programas de SCP disponibles para Mac o Linux que funcionan de manera similar. No uses rsync ya que este te puede ocasionar problemas más adelante.

Con WinSCP, ahora puedes conectarte a tu Pi con el usuario "bitcoin". Ambos protocolos SCP y SFTP funcionan, bajo mi experiencia SCP es un poco más rápido.

Figura 1 - Iniciar sesión con el nombre de usuario "Bitcoin"

Acepta el certificado del servidor y navega hasta los directorios locales y remotos de bitcoin:

  • Local: d:\bitcoin\bitcoin_mainnet\
  • Remoto: \mnt\hdd\bitcoin\

Ahora puedes copiar los dos subdirectorios blocks y chainstate de Local a Remoto. Esto nos llevará unas 6 horas.

Figura 2: Copiando los dos subdirectorios blocks y chainstate de Local a Remoto

NOTA: La transferencia no debe interrumpirse. Asegúrate de que tu ordenador no entre en modo reposo.

Desactivar de nuevo inicio de sesión por contraseña Como usuario "admin", elimina el signo # que hay delante de "PasswordAuthentication no" para habilitar la línea. Guarda, salte del archivo de configuración y reinicia el daemon ssh.

$ sudo nano /etc/ssh/sshd_config
PasswordAuthentication no

# Restart the SSH daemon.
$ sudo systemctl restart ssh
Enviar de vuelta tu Bitcoin testnet Para evitar que se consuma nuestro Bitcoin testNet, y a modo de cortesía para los siguientes analistas, cerramos todos nuestros canales y retiramos los fondos de la dirección indicada en el sitio web de Bitcoin Testnet Faucet.
$ lncli closeallchannels
Espere hasta que el saldo del canal sea cero y los fondos hayan sido devueltos a nuestra billetera en cadena.
$ lncli channelbalance
$ lncli walletbalance
Envía la cantidad contemplada por walletbalance de menos 500 satoshis para justificar las tarifas. Si recibes un error de "insufficient funds", reduce un poco más hasta que la transacción se emita.
$ lncli sendcoins 2N8hwP1WmJrFF5QWABn38y63uYLhnJYJYTF [amount]
Ajustar la configuración Detener los servicios de Bitcoin y Lightning:
$ sudo systemctl stop lnd
$ sudo systemctl stop bitcoind
Elimina la billetera LND. Edita el archivo "bitcoin.conf" comentando 'testnet = 1', luego guarda y salte.
$ sudo nano /home/bitcoin/.bitcoin/bitcoin.conf
# remove the following line to enable Bitcoin mainnet
#testnet=1
Copia "bitcoin.conf" actualizado al usuario "admin" para las credenciales (el comando bitcoin-cli busca "rpcpassword")
$ sudo cp /home/bitcoin/.bitcoin/bitcoin.conf /home/admin/.bitcoin/
Edita el archivo "lnd.conf" cambiando de bitcoin.testnet=1 a bitcoin.mainnet=1, luego guarda y salte.
$ sudo nano /home/bitcoin/.lnd/lnd.conf
# enable either testnet or mainnet
#bitcoin.testnet=1
bitcoin.mainnet=1
Elimina los archivos de autorización LND (* .macaroon). Están vinculados a la billetera actualmente activa y deben crearse cuando creamos una nueva billetera para mainnet.
$ sudo rm /home/bitcoin/.lnd/*.macaroon
$ sudo rm /home/bitcoin/.lnd/data/macaroons.db
Reiniciar bitcoind & lnd para mainnet NOTA: No continúes hasta que la tarea de copia de la cadena de bloques de mainnet haya finalizado por completo. Inicia Bitcoind y comprueba si está funcionando en mainnet:
$ sudo systemctl start bitcoind
$ systemctl status bitcoind.service
$ sudo tail -f /home/bitcoin/.bitcoin/debug.log  (exit with Ctrl-C)
$ bitcoin-cli getblockchaininfo
Espera hasta que la cadena de bloques esté completamente sincronizada. "blocks" = "headers", de lo contrario podrías encontrarse con problemas de rendimiento/memoria al crear una nueva billetera mainnet. Inicia LND y revisa su funcionamiento. Esperará a que se cree la billetera.
$ sudo systemctl start lnd
$ systemctl status lnd
Crear una billetera mainnet Una vez iniciado LND, debemos crear una nueva billetera Bitcoin integrada para mainnet. Inicia una sesión de usuario "bitcoin" y crea una nueva billetera
$ sudo su - bitcoin
$ lncli create
Si quieres crear una nueva billetera, introduce tu contraseña [C] como contraseña de la billetera, selecciona n en relación a una semilla existente e introduce la contraseña opcional [D] como contraseña de la semilla

Figura 3 - Creando una nueva billetera Bitcoin integrada para mainnet

Las 24 palabras iniciales que se muestran, combinadas con tu contraseña opcional, es la copia de seguridad para su Bitcoin en cadena. El estado actual de tus canales, sin embargo, no se pueden volver a crear a partir de esta semilla, esto todavía está bajo desarrollo en LND.

NOTA: esta información debe mantenerse en secreto en todo momento. Escribe estas 24 palabras manualmente en vertical sobre un pedazo de papel y guárdalo en un lugar seguro. ¡Este pedazo de papel es todo lo que necesita un atacante para vaciar completamente tu billetera! No lo guardes en un ordenador. No tomes una foto con tu teléfono móvil. Esta información nunca debe almacenarse en ningún sitio en formato digital.

Salte de la sesión de usuario "bitcoin". Para usar lncli con el usuario "admin", copia los archivos de permiso y el certificado TLS. Verifica si está operativo.

$ exit
$ sudo cp /home/bitcoin/.lnd/tls.cert /home/admin/.lnd
$ sudo cp /home/bitcoin/.lnd/admin.macaroon /home/admin/.lnd
Comprueba si funciona al obtener alguna información del nodo
$ lncli getinfo
Reinicia Ind y desbloquea tu billetera (introduce la contraseña [C])
$ sudo systemctl restart lnd   
$ lncli unlock
Monitoriza el progreso de arranque de LND hasta que se ponga al día de la cadena de bloques de mainnet (aproximadamente 515k bloques en este momento). Esto puede tardar hasta 2 horas, después de lo cual verás una larga parrafada pasar muy rápido. Salte con Ctrl-C.
$ sudo journalctl -f -u lnd
Este comando devolverá "synced_to_chain: true" si LND está listo.
$ lncli getinfo
Mejorar el proceso de inicio Lleva un poco de tiempo acostumbrarse al hecho de que la billetera LND debe desbloquearse manualmente cada vez que se reinicia el demonio LND. Esto tiene sentido desde el punto de vista de la seguridad, ya que la billetera está encriptada y la clave no se almacena en la misma máquina. Sin embargo, para operaciones seguras, esto no es óptimo para nada, ya que puedes recuperar LND fácilmente si tiene que reiniciar por alguna razón (por un bloqueo o un corte de energía), pero luego se queda bloqueada y no puede operar en absoluto.

Es por eso que un script que desbloque automáticamente la billetera resulta muy útil. La contraseña se almacena como texto plano en un directorio al que sólo tiene acceso root, claramente no es muy seguro, pero es razonablemente aceptable en este caso. Siempre puede optar por realizar un desbloqueo manual o implementar una solución que desbloquee la billetera desde una máquina remota.

Como usuario "admin", crea un nuevo directorio y guarda tu contraseña de la billetera LND [C] en un archivo de texto:

$ sudo mkdir /etc/lnd
$ sudo nano /etc/lnd/pwd
El siguiente script desbloquea la billetera LND a través de su servicio web (interfaz REST). Cópialo en un nuevo archivo.
$ sudo nano /etc/lnd/unlock
#!/bin/sh
# LND wallet auto-unlock script
# 2018 by meeDamian, robclark56

# Delay is needed to make sure bitcoind and lnd are ready.  You can still 
# unlock the wallet manually if you like.  Adjust to your needs:
/bin/sleep 300s

LN_ROOT=/home/bitcoin/.lnd

curl -s \
        -H "Grpc-Metadata-macaroon: $(xxd -ps -u -c 1000 ${LN_ROOT}/admin.macaroon)" \
        --cacert ${LN_ROOT}/tls.cert \
        -d "{\"wallet_password\": \"$(cat /etc/lnd/pwd | tr -d '\n' | base64 -w0)\"}" \
        https://localhost:8080/v1/unlockwallet > /dev/null 2>&1

echo "$? $(date)" >> /etc/lnd/unlocks.log
exit 0
Haz que el directorio y todo el contenido sólo sea accesible por "root"
$ sudo chmod 400 /etc/lnd/pwd
$ sudo chmod 100 /etc/lnd/unlock
$ sudo chown root:root /etc/lnd/*
Nota: Me Encontré con el problema de que curl no funcionaba correctamente en mi máquina y tuve que volver a instalar una librería antes de que su funcionamiento fuera el adecuado:
$ sudo apt install --reinstall libroken18-heimdal.
Crea una nueva unidad systemd que se inicie inmediatamente después de LND.
$ sudo nano /etc/systemd/system/lnd-unlock.service

# Thundroid: system unit for lnd unlock script
# /etc/systemd/system/lnd-unlock.service

[Unit]
Description=LND wallet unlock
After=lnd.service
Wants=lnd.service

[Service]
ExecStart=/etc/lnd/unlock
Type=simple

[Install]
WantedBy=multi-user.target
Edita el archivo de configuración de LND para activar la interfaz REST en el puerto 8080:
$ sudo nano /home/bitcoin/.lnd/lnd.conf
# add the following line in the [Application Options] section
restlisten=localhost:8080
Recarga systemd y habilita la nueva unidad. Reinicia tu Thundroid y mira el proceso de inicio para ver si la billetera se desbloquea automáticamente.
$ sudo systemctl daemon-reload
$ sudo systemctl enable lnd-unlock.service
$ sudo shutdown -r now
---- reconnect ----
# Unlocking the wallet will take several minutes due to the build in delay
$ sudo journalctl -u lnd -f
Nota: una forma más elegante sería ejecutar el script con ExecStartPost=+/etc/lnd/unlock en la unidad lnd.service. Esto te permitiría desbloquear la billetera si el servicio LND se reinicia fuera del proceso de inicio. El =+ es necesario para ejecutar LND con el usuario "bitcoin" y el script de desbloqueo con privilegios root. Desafortunadamente, esto solo está disponible a partir de la versión de sistema 331, pero nosotros estamos usando la versión 229.

Empezar a usar Lightning Network Financiar tu nodo ¡Felicidades, tu Thundroid ahora está vivo en el Bitcoin mainnet! Para abrir canales y empezar a usarlo, debe financiarlo con un bitcoin. Para empezar, pon solo en tu nodo lo que estás dispuesto a perder, y trátalo como dinero monopolio. Genera una nueva dirección Bitcoin para recibir fondos en cadena:

$ lncli newaddress np2wkh
> "address": "3.........................."
Desde tu billetera Bitcoin habitual, envía una pequeña cantidad de bitcoin a esta dirección, o pídele a su amigo frustrado con los Bitcoin que te envíe algunos dólares. A continuación, comprueba el saldo de tu billetera LND:
$ lncli walletbalance
Monitoriza tu transacción en un explorador Blockchain tal y como se describe en https://smartbit.com.au.

LND en acción

Tan pronto como tu operación de financiación sea minada y confirmada, LND empezará a abrir y a mantener canales. Esta función se denomina "Autopilot" y está configurada en el archivo "lnd.conf". Si desea mantener sus canales manualmente, puede desactivar el piloto automático.

Puedes usar los mismos comandos que aparecen en la Parte Parte 1 de esta guía o usa, dirígete a la referencia LND API o simplemente escribe lncli --help.

Pruébalo y explora el mainnet de Lightning Existen muchos y excelentes recursos para explorar el mainnet de Lightning con respecto a tu propio nodo.

¿Qué será lo próximo? Ahora tiene tu propio nodo completo Bitcoin/Lightning. Los objetivos inicialmente definidos fueron los siguientes y los hemos conseguidos todos:

  • Una validación completa del nodo completo Bitcoin que no requiere confiar en un tercero
  • Funciona de un modo fiable 24/7
  • Soporta la descentralización de la red Lightning mediante el enrutamiento de pagos
  • Se puede usar para enviar y recibir pagos personales usando la interfaz de línea de comando.
  • ¿funcionalidad? No tanta...

¿El nodo Bitcoin Lightning ya es perfecto? Es torpe y la línea de comando simplemente no da la talla. En la Parte 3 de esta guía, continuaremos ampliando Thundroid con aplicaciones adicionales que lo utilizan como nuestro propio backend privado.

  • La billetera de escritorio Electrum es la billetera perfecta para usuarios avanzados que manejan transacciones regulares de Bitcoin en cadena. Debido a que es compatible con una amplia variedad de billeteras de hardware, tus claves privadas nunca deben exponerse a ningún ordenador on-line (posiblemente comprometido). Con Electrum Personal Server ejecutándose en Thundroid, usted tiene control total para enviar, recibir y verificar transacciones de Bitcoin con una gran seguridad y privacidad.

Figura 4 - La billetera de escritorio Electrum

  • La billetera móvil Shango lightning es perfecta para pagos que sean pequeños e instantáneos sobre la marcha. Se conecta a tu Thundroid y proporciona una interfaz de usuario ordenada en tu teléfono iOS/Android para enviar y recibir pagos, y administrar pares y canales. Aún está en beta cerrado, espero que se haga público justo a tiempo.

Figura 5 - La billetera móvil Shango Lightning

¡Acompáñame en la parte 3 de la guía "El nodo de Bitcoin Lightning perfecto" y descubre algunas aplicaciones punteras que funcionan muy bien sobre nuestro completo nodo Bitcoin!

Be the first to comment

Leave a Reply