El Bitcoin es una moneda digital nativa de la era de Internet. Podría decirse que otra moneda internacional, pero sin un país de origen, de modo que desafía las fronteras, las políticas comerciales y la inflación arbitraria. En el documento técnico de 2008 (https://bitcoin.org/bitcoin.pdf) Satoshi Nakamoto la describe como "... una versión electrónica de dinero puramente de igual a igual [que] permitiría realizar pagos on line directamente desde una parte a otra sin pasar por una institución financiera ".
Ser de igual a igual significa que Bitcoin no depende de un intermediario, como un banco, y puede transferirse como un activo al portador, como el dinero físico, sin pedirle permiso a nadie. No necesita almacenarse físicamente ya que está protegido por una clave criptográfica, de modo que puede transferirse en minutos a cualquier persona en cualquier parte del mundo. Un componente clave de este sistema financiero de código abierto gratuito es el blockchain, un libro de contabilidad que realiza un seguimiento de quién posee bitcoin y cuánto posee. Éste es almacenado como una copia idéntica por todos los usuarios que deciden ejecutar un nodo completo Bitcoin. Puedes aprender más en bitcoin.org.
El Bitcoin es un experimento económico de una magnitud épica, y su éxito no es seguro en absoluto. En cualquier caso, Bitcoin como nueva tecnología es un esfuerzo increíblemente interesante, especialmente debido a su naturaleza interdisciplinaria y la baja barrera para su acceso. El Bitcoin como moneda sólida, escasa y no inflacionaria que desafía el dinero como uno de los últimos auténticos monopolios de los estados nacionales, podría tener un gran impacto en los principios económicos y en la sociedad en general.
De momento, Bitcoin es más bien un depótico de valor y realmente no está hecho para hacer pequeñas transacciones diarias. Los verdaderos blockchains descentralizados son un recurso escaso y no pueden escalarse para dar cabida a todas las transacciones globales. Si lo piensas bien, no puede ser muy adecuado almacenar todas compras de un café de manera redundante en todo el mundo para toda la eternidad. Sería como obligar a que todo el mundo se descargara el correo electrónico de toda la gente. Estas limitaciones podrían motivar la creación de una mejor tecnología en lo que respecta a los blockchains de Bitcoin que permitiera escalarse exponencialmente, en lugar de simplemente hacerse más grandes de forma lineal.
Aquí es donde entra en acción la denominada "Lightning Network". Como una de múltiples y novedosas extensiones del blockchain, promete dar cabida a transacciones casi ilimitadas, con confirmación instantánea, tarifas mínimas y una mayor privacidad. Suena a algo demasiado bueno para ser verdad, pero esta tecnología está muy explotada, comprometida con los valores del código abierto de cypherpunk y aprovecha los sólidos fundamentos del Bitcoin. Pincha aquí para saber más.
Para preservar la naturaleza descentralizada de este sistema monetario, es importante que todo el mundo tenga al menos la posibilidad de ejecutar su propio nodo Bitcoin, preferiblemente con un hardware de bajo coste como el ODROID.
NOTA: Ten en cuenta que, si bien el Bitcoin ha sido puesto a prueba durante casi una década, Lightning Network aún está en fase beta y su desarrollo continúa siendo muy elevado. Esta guía también te permite configurar tu nodo Bitcoin sin tener en cuenta la parte Lightning. Lee con atención la sección "Mejores prácticas financieras" antes de comprometer tu noto al Bitcoin real.
Objetivo
Esta guía te permitirá ser tu propio banco. El objetivo es configurar un nodo Bitcoin y Lightning que:
- Permita validar totalmente un Nodo Bitcoin completo y no requiera confiar en un tercero.
- Sea fiable tenerlo activo las 24 horas del día, los 7 días de la semana
- Forme parte de y apoye la descentralización de la red Lightning mediante el enrutamiento de pagos
- Se pueda usar para enviar y recibir pagos personales usando la interfaz de línea de comando.
El servidor está configurado sin interfaz gráfica de usuario y se gestiona de forma remota utilizando la línea de comandos Secure Shell (SSH). También puede funcionar como un backend de Bitcoin personal para la billetera de escritorio Electrum.
Destinatarios
Aunque esta guía se esfuerza por proporcionar instrucciones simples y evidentes, el objetivo también es hacerlo todo por nuestra cuenta, sin atajos que impliquen confiar en un tercero. Esto ha hecho que esta guía se vuelva un tanto técnica, pero he tratado de hacerla lo más sencilla posible para que logres entender lo básico sobre el cómo y el por qué.
Advertencia
Todos los componentes de la red Lightning están aún en desarrollo y aquí manejamos dinero real. Esta guía sigue un enfoque conservador: primero configura y pruebalo todo en TestNet Bitcoin, luego, una vez que estés lo suficientemente seguro como para poner dinero real en línea, cambia a Mainnet Bitcoin con unos simples cambios.
Preparativos
Tras publicar la "Guía para principiantes sobre Lightning en una Raspberry Pi", empecé a explorar otro hardware ya que la Raspberry Pi tiene algunos inconvenientes, principalmente en el área de rendimiento y la dificultad que presenta a la hora de conectar sistemas de almacenamiento externo, alog que es muy importante a la hora de almacenar el amplio blockchain Bitcoin.
El ODROID-HC2 de Hardkernel (http://www.hardkernel.com/main/products/prdt_info.php) o el HC1 en un formato más pequeño como mini PC basada en Linux, se adapta perfectamente. Comparandolo con un Raspberry Pi, tiene las siguientes ventajas:
- Precio equiparable al de la Raspberry Pi
- Más potente (CPU de 8 núcleos, 2 GB de RAM, Ethernet Gigabit)
- Alojamiento interno con disco duro, conexión directa con SATA3
- Solo un adaptador de corriente para todo
No cuenta con determinadas características como son la salida HDMI, Wi-Fi integrado o los pines GPIO, pero éstas no son importantes para este proyecto en concreto. El rendimiento es bastante mayor, de modo que parece estar preparado para el futuro ya que estoy seguro que el Bitcoin y Lightning seguirán evolucionando.
Una vez que opté por este hardware, compre el ODROID-HC2 y, después de configurarlo y ejecutarlo durante dos meses, puedo decir que es lo mejor opción para un nodo Bitcoin/Lightning de bajo coste. Como este proyecto también necesita un nombre ñoño, llamaré a mi nodo Thundroid.
Hice un pedido con los siguientes artículos directamente a Hardkernel en Singapur. Hay distribuidores disponibles en todo el mundo, pero desafortunadamente no para Suiza.
- ODROID-HC2 - 54$ (http://www.hardkernel.com/main/products/prdt_info.php?g_code=G151505170472)
- Adaptador de corriente y cable - 7$ (http://www.hardkernel.com/main/products/prdt_info.php?g_code=G151578376044)
- Carcasa ODROID-HC2 (opcional) - 5$ (http://www.hardkernel.com/main/products/prdt_info.php?g_code=G151)
También necesitas lo siguiente:
- Tarjeta Micro SD: 16 GB, incluido un adaptador para tu ordenador habitual
- Disco duro interno: 500 GB o más, SATA, HDD 3,5 "o HDD/SSD de 2,5"
- Cable de red RJ45
El montaje es sencillo: simplemente inserta el disco duro y fíjalo con los tornillos incluidos con tu ODROID. Si has comprado la carcasa de plástico, deslícela sobre la estructura de metal.
Instalando el sistema operativo
Utilizamos Ubuntu 16.04.03 LTE (Sistema operativo mínimo, básico) proporcionado por Hardkernel. Descarga la imagen desde la sección de ODROID-XU4 en wiki.odroid.com
Archivo exacto utilizado: https://odroid.in/ubuntu_16.04lts/ubuntu-16.04.3-4.14-minimal-odroid-xu4-20171213.img.xz
Descarga la imagen, guárdala en tu tarjeta MicroSD, colócala en tu Thundroid, conécta éste a tu red a través de un cable y enchufa el adaptador de corriente. El arranque inicial puede durar varios minutos.
Configura tu router de red para que éste asigne una dirección IP estática a tu Thundroid.
Trabajando en tu Thundroid
Anota tus contraseñas
Necesitarás varias contraseñas, me resulta más fácil escribirlas todas al principio, en lugar de buscarlas a lo largo de toda la guía. Deben ser únicas y seguras, con una extensión de al menos de 12 caracteres. No uses espacios en blanco, comillas o caracteres especiales poco comunes
- Contraseña de usuario
- Contraseña de Bitcoin RPC
- Contraseña de la API Lightning
- Contraseña de semilla Lightning
Guarda una copia de tus contraseñas en un lugar seguro (preferiblemente en un administrador de contraseñas como KeePass o LastPass) y mantén tus notas originales fuera de la vista una vez que el sistema esté funcionando.
La línea de comandos
Todo está configurado desde el prompt de comandos de Linux. A lo largo de toda esta guía utilizaré las siguientes anotaciones:
#: Esto es un comentario, sólo para información $: Esto es un comando de una sola línea para introducir (sin $) y confirmar con la tecla Intro Sin prefijo: Esto el el resultado del comando anterior o algo que se puede copiar/pegar en un archivo.
- Comandos de autocompletado: cuando introduces comandos, puedes usar el tabulador para completar automáticamente, ej. para comandos, directorios o nombres de archivo.
- Historial de comandos: presionando las flechas hacia arriba y hacia abajo en el teclado, puede recuperar los comandos introducidos previamente.
- Usar los privilegios de administrador: nuestros usuarios no tienen privilegios de administrador. Si un comando necesita editar la configuración del sistema, necesitamos usar el comando 'sudo' ("superuser do") como prefijo. En lugar de editar un archivo de sistema con "nano /etc/fstab", usaremos "sudo nano /etc/fstab".
- Usando el editor de texto Nano: Utilizaremos el editor Nano para crear nuevos archivos de texto o editar los existentes. No es complicado, pero guardar y salir no es muy intuitivo. Para Guardar: presiona “Ctrl-O” (para Salir), confirma el nombre del archivo y presiona “Intro”. Para Salir: presionar “Ctrl-X”
* ** Copiar/Pegar **: si estás utilizando Windows y el cliente SSH PuTTY, puede copiar texto desde el shell seleccionándolo con el ratón (sin necesidad de hacer clic en nada) y pegar cosas en la posición del cursor con un clic derecho en cualquier parte de la ventana SSH.
Conectando a Thundroid
Es hora de conectarse a través de SSH y ponerse a trabajar. Para ello, necesitas un cliente Secure Shell (SSH). Instalar, iniciar y conectar:
- Windows: recomiendo usar el cliente SSH [KiTTY] (http://kitty.9bis.com). Puedes copiar texto desde el shell seleccionándolo con el ratón (sin necesidad de hacer clic en nada) y pegar cosas con un clic derecho.
- Mac OS: cliente SSH integrado (http://osxdaily.com/2017/04/28/howto-ssh-client-mac/)
- Linux: simplemente usa el comando nativo, ej. ssh root@192.168.0.20
Usa los siguientes parámetros de conexión SSH:
- Host Name: la dirección estática que configuraste en el router, ej. 192.168.0.20
- Port: 22
- Username: root
- Password: odroid
Configuración básica
Ahora estás conectado por línea de comandos a tu propio nodo Bitcoin. En primer lugar, nos ocupamos de la configuración básica. Introduce los siguientes comandos:
# change root password to [password A] $ passwd # update the operating system $ apt update $ apt upgrade $ apt dist-upgrade $ apt install linux-image-xu3 # answer [y], then [no] (do not abort) # install some additional software $ apt install htop git curl bash-completion jq # set time zone & localization $ dpkg-reconfigure tzdata $ dpkg-reconfigure localesCuando utilices el editor de texto Nano, puedes usar los mismos atajos de teclado para guardar (Ctrl-O, confirmar o cambiar el nombre del archivo, y presiona Intro) y para salir (Ctrl-X).
# change hostname (replace "odroid" with "thundroid" :) in both files $ nano /etc/hostname $ nano /etc/hosts # create user "admin", set [password A] and make it a superuser $ adduser admin $ adduser admin sudo # create user "bitcoin" and set password [password A] $ sudo adduser bitcoin
Montando el disco duro
El disco duro externo está conectado al sistema de archivos y se puede acceder a él como una carpeta normal. Esto se denomina "montaje". Como una instalación de servidor, el sistema nativo de archivos Linux Ext4 es la mejor opción para el disco duro externo.
NOTA: ¡Todos los datos de este disco duro se borrarán con los siguientes pasos!
# get NAME for hard disk $ lsblk -o UUID,NAME,FSTYPE,SIZE,LABEL,MODEL # format hard disk (use [NAME] from above, e.g /dev/sda1) $ mkfs.ext4 /dev/[NAME] # get UUID for hard disk, copy into notepad $ lsblk -o UUID,NAME,FSTYPE,SIZE,LABEL,MODEL # edit fstab and enter new line (replace UUID) at the end, save & exit $ nano /etc/fstab UUID=123456 /mnt/hdd ext4 noexec,defaults 0 0 # create mount point, mount, check and set owner $ mkdir /mnt/hdd $ mount -a $ df /mnt/hdd Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 961300808 600388836 312057600 66% /mnt/hdd $ chown -R bitcoin:bitcoin /mnt/hdd/
Moviendo el archivo Swap
El uso de un archivo Swap puede degradar muy rápido la tarjeta SD. Por lo tanto, lo moveremos al disco duro externo.
# install necessary software package $ apt install dphys-swapfile # change configuration file to use swapfile on external hard disk $ nano /etc/dphys-swapfile CONF_SWAPFILE=/mnt/hdd/swapfile # enable new swap configuration $ sudo dphys-swapfile setup $ sudo dphys-swapfile swapon # reboot, login as "admin" and delete old swapfile $ restart shutdown -r now $ sudo rm /var/swap
Fortificando tu Thundroid
Tu Thundroid será visible desde Internet y es por ello que debe estar protegido contra posibles ataques. Un firewall controla el tráfico y cierra posibles agujeros de seguridad. Inicia sesión como "admin" (no usaremos "root" nuevamente).
UFW: Uncomplicated Firewall
El firewall deniega por defecto todos los intentos de conexión por parte de otros usuarios y permite que solo sean utilizados determinados puertos específicos.
ADVERTENCIA: La línea “ufw allow from 192.168.0.0/24 ...W que aparece a continuación asume que la dirección IP de tu Thundroid es algo así como '192.168.0. ???' ', siendo los signos de interrogación cualquier número de 0 al 255. Si tu dirección IP es '12 .34.56.78 ', debe cambiar esta línea por “ufw allow from 12.34.56.0/24 ...”. De lo contrario, te bloquearás a ti mismo para siempre.
# change session to "root" $ sudo su $ apt install ufw $ ufw default deny incoming $ ufw default allow outgoing # make sure to use the correct subnet mask (see warning above) $ ufw allow from 192.168.0.0/24 to any port 22 comment 'allow SSH from local LAN' $ ufw allow 9735 comment 'allow Lightning' $ ufw deny 8333 comment 'deny Bitcoin mainnet' $ ufw allow 18333 comment 'allow Bitcoin testnet' $ ufw enable $ systemctl enable ufw $ ufw status # exit "root" session back to "admin" $ exit
Fail2ban
Fail2ban monitoriza los intentos de inicio de sesión por SSH y bloquea a un interlocutor remoto durante 10 minutos tras cinco intentos de sesión fallidos. Esto hace que un ataque de fuerza bruta sea inviable, ya que simplemente llevaría demasiado tiempo.
$ sudo apt install fail2ban
Claves SSH
Una de las mejores opciones para proteger el inicio de sesión por SSH es deshabilitar completamente el inicio de sesión mediante contraseña y requerir un certificado de clave SSH. Solo alguien que posea fisicamente la clave privada puede iniciar sesión.
Configura las claves SSH para el usuario "admin" siguiendo este artículo: Configure “No Password SSH Keys Authentication” with PuTTY on Linux Servers
Ahora debería contar con tres archivos creados. Guárdalos, ya que ahora vamos a desactivar el inicio de sesión por contraseña.
- Cierra sesión ('Exit') y asegúrate de que puedes iniciar sesión como "admin" con tu clave SSH
- Edita el archivo de configuración SSH
$ sudo nano /etc/ssh/sshd_config
- Cambia la configuración "ChallengeResponseAuthentication" y "PasswordAuthentication" a "no" (descomenta la línea eliminando el signo # si fuera necesario), guarda los cambios y salte.
# copy the ssh key to user "root", just in case $ sudo mkdir /root/.ssh $ sudo cp /home/admin/.ssh/authorized_keys /root/.ssh/ $ sudo chown -R root:root /root/.ssh/ $ sudo chmod -R 700 /root/.ssh/ $ sudo systemctl restart ssh # exit and login again with your private key $ exitAhora solo puedes iniciar sesión con "admin" o "root" y tu clave SSH. Como no puedes conectar una pantalla al ODROID, SSH es tu única opción.
RECUERDA: ¡Haz una copia de seguridad de tu clave SSH! ¡No tienes ninguna otra alternativa para iniciar sesión! En el peor de los casos, necesitarás grabar la tarjeta MicroSD y configurar nuevamente el sistema; las cosas importantes seguirán estando en el disco duro.
Aumenta tu límite de archivos abiertos
En caso de que tu Thundroid se inunde con solicitudes de Internet, honestas o maliciosas debido a un ataque DDoS, te encontrará rápidamente con el error "can’t accept connection: too many open files’ ". Esto se debe a un límite con los archivos abiertos (que representan conexiones TCP individuales), el cual tiene un valor demasiado bajo.
Edite los siguientes tres archivos, agrega las líneas adicionales justo antes del comentario final, guarda los cambios y salte.
$ sudo nano /etc/security/limits.conf * soft nofile 128000 * hard nofile 128000 root soft nofile 128000 root hard nofile 128000
$ sudo nano /etc/pam.d/common-session session required pam_limits.so
$ sudo nano /etc/pam.d/common-session-noninteractive session required pam_limits.so
Bitcoin
La base del nodo Lightning es un nodo de Bitcoin completamente seguro (https://bitcoin.org/en/bitcoin-core/). Mantiene una copia completa del blockchain y valida todas las transacciones y bloques. Al hacer todo este trabajo nosotros mismos, no necesitamos que nadie más nos aporte confianza.
Al principio, usaremos TestNet Bitcoin para familiarizarnos con sus operaciones. Esta sincronización es gestionada directamente por Thundroid y no debería tardar más de unas cuantas horas. Simplemente déjalo sincronizar por la noche.
Instalación
Descargaremos el software directamente desde bitcoin.org, verificaremos su firma para asegurarnos de que usaremos una versión oficial y la instalaremos.
Inicia sesión como "admin" y crea una carpeta para la descarga:
$ mkdir /home/admin/download $ cd /home/admin/downloadDescargaremos los últimos binarios de Bitcoin Core y comparamos el archivo con la suma de verificación firmada. Esto lo hacemos simplemente por precaución para asegurarnos de que se trata de una versión oficial y no de una maliciosa que intenta robar nuestro dinero.
Hazte con los últimos enlaces de descarga en bitcoin.org/en/download. Suelen cambiar con cada actualización. Ejecuta los siguientes comandos con los nombres de archivo modificados y verifica el resultado donde se te indique.
# download Bitcoin Core binary $ wget https://bitcoin.org/bin/bitcoin-core-0.16.0/bitcoin-0.16.0-arm-linux-gnueabihf.tar.gz $ wget https://bitcoin.org/bin/bitcoin-core-0.16.0/SHA256SUMS.asc $ wget https://bitcoin.org/laanwj-releases.asc # check that the reference checksum matches the real checksum # (ignore the "lines are improperly formatted" warning) $ sha256sum --check SHA256SUMS.asc --ignore-missing > bitcoin-0.16.0-arm-linux-gnueabihf.tar.gz: OK # manually check the fingerprint of the public key $ gpg --with-fingerprint ./laanwj-releases.asc > 01EA 5486 DE18 A882 D4C2 6845 90C8 019E 36C2 E964 # import the public key of Wladimir van der Laan, verify the signed checksum file # and check the fingerprint again in case of malicious keys $ gpg --import ./laanwj-releases.asc $ gpg --verify SHA256SUMS.asc > gpg: Good signature from Wladimir ... > Primary key fingerprint: 01EA 5486 DE18 A882 D4C2 6845 90C8 019E 36C2 E964
Extrae los binarios Bitcoin Core, instálalos y verifica la versión.
$ tar -xvf bitcoin-0.16.0-arm-linux-gnueabihf.tar.gz $ sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-0.16.0/bin/* $ bitcoind --version > Bitcoin Core Daemon version v0.16.0
Prepara el directorio Bitcoin Core
Usamos el demonio Bitcoin, llamado "bitcoind", que se ejecuta en segundo plano sin interfaz de usuario y que almacena todos los datos en el directorio '/home/bitcoin/.bitcoin'. En lugar de crear un directorio como tal, creamos un enlace que apunte a un directorio del disco duro externo.
# change to user "bitcoin" $ sudo su bitcoin # add symbolic link that points to the external hard drive $ mkdir /mnt/hdd/bitcoin $ ln -s /mnt/hdd/bitcoin /home/bitcoin/.bitcoin # Navigate to home directory and check the symbolic link (the target must not be red). $ cd $ ls -laEl contenido de este directorio estará en realidad en el disco duro externo.
Configuración
Necesitamos crear el archivo de configuración para bitcoind. Ábrelo con Nano y pega la siguiente configuración. Guarda y Salte.
$ nano /home/bitcoin/.bitcoin/bitcoin.conf # Thundroid: bitcoind configuration # /home/bitcoin/.bitcoin/bitcoin.conf # remove the following line to enable Bitcoin mainnet testnet=1 # Bitcoind options server=1 daemon=1 txindex=1 disablewallet=1 # Connection settings rpcuser=bitcoin rpcpassword=PASSWORD_[B] zmqpubrawblock=tcp://127.0.0.1:29000 zmqpubrawtx=tcp://127.0.0.1:29000 # Optimizations for limited hardware dbcache=100 maxorphantx=10 maxmempool=50 maxconnections=40 maxuploadtarget=5000NOTA: Cambia rpcpassword por una contraseña segura, de lo contrario tus fondos podrían ser robados.
Inicio automático de bitcoind
El sistema necesita ejecutar el demonio bitcoin automáticamente en segundo plano, incluso cuando nadie esté conectado. Usamos "systemd", un demonio que controla el proceso de inicio usando los archivos de configuración.
Salte de la sesión de usuario "bitcoin" para volver al usuario "admin"
$ exitCrea el archivo de configuración con el editor de texto Nano y copia el siguiente párrafo. Guardalo y Salte.
$ sudo nano /etc/systemd/system/bitcoind.service # Thundroid: systemd unit for bitcoind # /etc/systemd/system/bitcoind.service [Unit] Description=Bitcoin daemon After=network.target [Service] ExecStart=/usr/local/bin/bitcoind -daemon -conf=/home/bitcoin/.bitcoin/bitcoin.conf -pid=/run/bitcoind/bitcoind.pid # Creates /run/bitcoind owned by bitcoin RuntimeDirectory=bitcoind User=bitcoin Group=bitcoin Type=forking PIDFile=/run/bitcoind/bitcoind.pid Restart=on-failure # Hardening measures #################### # Provide a private /tmp and /var/tmp. PrivateTmp=true # Mount /usr, /boot/ and /etc read-only for the process. ProtectSystem=full # Disallow the process and all of its children to gain # new privileges through execve(). NoNewPrivileges=true # Use a new /dev namespace only populated with API pseudo devices # such as /dev/null, /dev/zero and /dev/random. PrivateDevices=true # Deny the creation of writable and executable memory mappings. MemoryDenyWriteExecute=true [Install] WantedBy=multi-user.targetHabilita el archivo de configuración:
$ sudo systemctl enable bitcoind.serviceCopia 'bitcoin.conf' en el directorio de inicio del usuario "admin" para las credenciales RPC:
$ mkdir /home/admin/.bitcoin $ sudo cp /home/bitcoin/.bitcoin/bitcoin.conf /home/admin/.bitcoin/Reinicia Thundroid
$ sudo shutdown -r now
Verificación de las operaciones de bitcoind
Después de reiniciar, el bitcoind debería empezar a sincronizar y validar el blockchain de Bitcoin. Espera un poco, vuelve a conectarte a través de SSH e inicie sesión con el usuario "admin". Verifica el estado del demonio Bitcoin, el cual fue iniciado por systemd (salte con 'Ctrl-C').
$ systemctl status bitcoind
Pueder ver el bitcoind en acción monitorizando su registro log (salte con 'Ctrl-C'):
$ sudo tail -f /home/bitcoin/.bitcoin/testnet3/debug.logUtiliza el cliente Bitcoin Core 'bitcoin-cli' para obtener información sobre el blockchain actual:
$ bitcoin-cli getblockchaininfoNOTA: Cuando "Bitcoind" se esté iniciando, puede que recibas un mensaje de error "verifying blocks". Es normal, simplemente espere unos minutos.
Entre mucha otra información, aparecerá el "verificationprogress". Una vez que este valor alcance casi 1 (0,999 ...), el blockchain está actualizado y completamente validado.
Lightning Network
Descargaremos e instalaremos el LND (Lightning Network Daemon) desde Lightning Labs http://lightning.engineering/. Visita su repositorio Github (https://github.com/lightningnetwork/lnd/blob/master/README.md) para obtener abundante información sobre su proyecto de código abierto y Lightning en general.
Instalar LND
Ahora viene lo bueno: descarga, verifica e instala los archivos binarios LND.
$ cd /home/admin/download $ wget https://github.com/lightningnetwork/lnd/releases/download/v0.4.1-beta/lnd-linux-arm-v0.4.1-beta.tar.gz $ wget https://github.com/lightningnetwork/lnd/releases/download/v0.4.1-beta/manifest-v0.4.1-beta.txt $ wget https://github.com/lightningnetwork/lnd/releases/download/v0.4.1-beta/manifest-v0.4.1-beta.txt.sig $ wget https://keybase.io/roasbeef/pgp_keys.asc $ sha256sum --check manifest-v0.4.1-beta.txt --ignore-missing > lnd-linux-arm-v0.4-beta.tar.gz: OK $ gpg ./pgp_keys.asc > pub 4096R/DD637C21 2017-09-12 Olaoluwa Osuntokun <laolu32@gmail.com> > sub 4096R/5FA079A1 2017-09-12 [expires: 2021-09-12] > 65317176B6857F98834EDBE8964EA263DD637C21 $ gpg --import ./pgp_keys.asc $ gpg --verify manifest-v0.4.1-beta.txt.sig > gpg: Good signature from "Olaoluwa Osuntokun <laolu32@gmail.com>" [unknown] > Primary key fingerprint: 6531 7176 B685 7F98 834E DBE8 964E A263 DD63 7C21
$ tar -xzf lnd-linux-arm-v0.4.1-beta.tar.gz $ ls -la $ sudo install -m 0755 -o root -g root -t /usr/local/bin lnd-linux-arm-v0.4.1-beta/* $ lnd --version > lnd version 0.4.1-beta commit=
Configurar LND
Ahora que LND esta instalado lo configuraremos, debemos configurarlo para que funcione con Bitcoin Core y se ejecute automáticamente al inicio.
Abre una sesión de usuario "bitcoin":
$ sudo su bitcoinCrea el directorio de trabajo LND y el enlace simbólico correspondiente:
$ mkdir /mnt/hdd/lnd $ ln -s /mnt/hdd/lnd /home/bitcoin/.lnd $ cd $ ls -la
Crea el archivo de configuración LND y pega el siguiente contenido (ajústalo a tu alias). Guardalo y Salte.
'$ nano /home/bitcoin/.lnd/lnd.conf' # Thundroid: lnd configuration # /home/bitcoin/.lnd/lnd.conf [Application Options] debuglevel=info debughtlc=true maxpendingchannels=5 alias=YOUR_NAME [LND] color=#68F442 [Bitcoin] bitcoin.active=1 # enable either testnet or mainnet bitcoin.testnet=1 #bitcoin.mainnet=1 bitcoin.node=bitcoind [autopilot] autopilot.active=1 autopilot.maxchannels=5 autopilot.allocation=0.6
Información Adicional
Dentro del repositorio del proyecto LND:
Salte de la sesión de usuario "bitcoin" para volver a "admin"
$ exitCrea una unidad systemd LND con el siguiente contenido. Guarda y Salte.
$ sudo nano /etc/systemd/system/lnd.service # Thundroid: systemd unit for lnd # /etc/systemd/system/lnd.service [Unit] Description=LND Lightning Daemon Wants=bitcoind.service After=bitcoind.service [Service] ExecStart=/usr/local/bin/lnd PIDFile=/home/bitcoin/.lnd/lnd.pid User=bitcoin Group=bitcoin LimitNOFILE=128000 Type=simple KillMode=process TimeoutSec=180 Restart=always RestartSec=60 [Install] WantedBy=multi-user.targetActiva e inicia LND
$ sudo systemctl enable lnd $ sudo systemctl start lnd $ systemctl status lndMonitoriza el aregistro log de LND en tiempo real (salte con 'Ctrl-C')
$ sudo journalctl -f -u lnd
Configurar la billetera LND
Una vez que LND se inicie, el proceso nos espera para que creemos la billetera Bitcoin integrada. No usa la billetera bitcoind.
Inicia una sesión con el usuario "bitcoin"
$ sudo su bitcoin
Crear la billetera LND
$ lncli createSi quieres crear una nueva billetera, introduce tu 'password [C]' como contraseña de la billetera, selecciona 'n' en relación a una semilla existente e introduce el 'password [D]' opcional como contraseña de la semilla. Se creará una nueva semilla de cifrado que consta de 24 palabras.
Estas 24 palabras, combinadas con tu contraseña ('password [D]' opcional) es todo lo que necesitas para restaurar tu billetera Bitcoin y todos los canales Lighting. El estado actual de tus canales, sin embargo, no pueden crearse de nuevo desde esta semilla, ya que esto aún se encuentra en fase de desarrollo para LND.
NOTA: Esta información debe mantenerse en secreto en todo momento. Anota estas 24 palabras manualmente en un pedazo de papel y guárdalo en un lugar seguro. ¡Este pedazo de papel es todo lo que necestia un atacante para vaciar completamente su billetera! No lo guarde en un ordenador. No tomes una foto con tu teléfono móvil. Esta información nunca debe almacenarse en formato digital en ningún lugar.
Salte de la sesión de usuario "bitcoin"
$ exit
Asignar permisos LND a "admin"
Comprueba si se han creado los archivos de permiso “admin.macaroon” y “readonly.macaroon”. De lo contrario, consulta el problema nº 890 abierto de LND (https://github.com/lightningnetwork/lnd/issues/890).
$ ls -la /home/bitcoin/.lnd/
Copia los archivos de permiso y el certificado TLS al usuario "admin" para usar "lncli".
$ mkdir /home/admin/.lnd $ sudo cp /home/bitcoin/.lnd/tls.cert /home/admin/.lnd $ sudo cp /home/bitcoin/.lnd/admin.macaroon /home/admin/.lnd $ sudo chown -R admin:admin /home/admin/.lnd/Asegúrate de que 'lncli' funciona desbloqueando tu billetera (introduce el 'password [C]') y aparecerá cierta información del nodo.
$ sudo systemctl restart lnd $ lncli unlockMonitoriza el progreso de arranque de LND hasta que alcance el blockchain testnet (aproximadamente 1,3 millones de bloques en este momento). Esto puede tardar hasta 2 horas. Después, verás pasar una parrafada muy rápido. Salte con 'Ctrl-C'.
$ sudo journalctl -f -u lnd
Conseguir algo de bitcoin testnet
Ahora tu nodo Lightning está listo. Para usarlo en testnet, puedes conseguir un bitcoin testnet gratis desde un faucet.
Genera una nueva dirección Bitcoin para recibir fondos en cadena
$ lncli newaddress np2wkh
'> "address": "2NCoq9q7............dkuca5LzPXnJ9NQ"Conseguir bitcoin testnet:
<https://testnet.manu.backend.hamburg/faucet>Comprueba el saldo de tu billetera LND.
$ lncli walletbalanceMonitoriza tu transacción (el faucet muestra el ID de TX) en un explorador de Blockchain:
<https://testnet.smartbit.com.au>
LND en acción
Tan pronto como tu operación de financiación sea minada y confirmada, LND comenzará a abrir y mantener canales. Esta función se denomina "Autopilot" y está configurada en el archivo "lnd.conf". Si desea mantener tus canales manualmente, puede desactivar el piloto automático.
Recibete a ti mismo una solicitud de pago en StarBlocks (https://starblocks.acinq.co/#/) o Y’alls (https://yalls.org/) y mueve algunas monedas.
Algunos comandos que puedes intentar:
Listar todos los argumentos de la interfaz de línea de comando (cli)
$ lncliObtener ayuda de un argumento específico
$ lncli help [ARGUMENT]Conocer algunas estadísticas generales sobre tu nodo:
$ lncli getinfoConéctarse a un nodo compañero (puede encontrar algunos nodos para conectarte aquí: https://1ml.com/)
$ lncli connect [NODE_URI]Verifica los nodos a los que está conectado actualmente:
$ lncli listpeersAbrir un canal con un nodo/compañero:
$ lncli openchannel [NODE_PUBKEY] [AMOUNT_IN_SATOSHIS] 0Ten en cuenta que [NODE_URI] incluye @IP:PORT al final, mientras que [NODE_PUBKEY] no.
Verifica el estado de tus canales pendientes:
$ lncli pendingchannelsVerifica el estado de tus canales activos:
$ lncli listchannelsAntes de pagar una factura, debes descodificarla para verificar si la cantidad y la información que contiene son correctos:
$ lncli decodepayreq [INVOICE]Paga una factura:
$ lncli payinvoice [INVOICE]Verifica los pagos que has enviado:
$ lncli listpaymentsCrea una factura:
$ lncli addinvoice [AMOUNT_IN_SATOSHIS]Listar todas las facturas:
$ lncli listinvoicesPara cerrar un canal, necesitsa los dos argumentos siguientes que se pueden determinar con 'listchannels' y que aparecen listados como "channelpoint": 'FUNDING_TXID': 'OUTPUT_INDEX'.
$ lncli listchannels $ lncli closechannel [FUNDING_TXID] [OUTPUT_INDEX]Para forzar el cierre de un canal (si tu compañero no está conectado o no coopera), usa
$ lncli closechannel --force [FUNDING_TXID] [OUTPUT_INDEX]Consulta la referencia de la API Lightning (http://api.lightning.community/) para obtener información adicional
Preparar el mainnet Bitcoin
En la segunda parte de esta guía moveremos el nodo Thundroid Bitcoin & Lightning al mainnet Bitcoin, que usa un blockchain diferente. Al igual que el pequeño blockchain testnet, la blockchain mainnet registra todas las transacciones de Bitcoin y básicamente define quién tiene bitcoins y cuántos tiene. Esta es la información más importante y no debemos confiar en que otra persona nos proporcione esta información. Para configurar nuestro Nodo completo Bitcoin en mainnet, necesitamos:
- Descargar todo el blockchain (~ 200 GB)
- Verificar cada transacción de Bitcoin que haya tenido lugar y cada bloque que se haya minado
- Crear una base de datos índice para todas las transacciones, de modo que podamos consultarla más adelante
- Calcular todos los saldos de direcciones de bitcoin (llamado el conjunto UTXO)
Consulta "Running a Full Node" (https://bitcoin.org/en/full-node) para obtener información adicional.
Como te puedes imaginar Thundroid no está a la altura de esta gran tarea. La descarga no es el problema, la cuestión está en que procesar inicialmente todo el blockchain llevaría varias semanas debido a las restricciones de recursos. Necesitamos descargar y verificar el blockchain con Bitcoin Core en un ordenador normal y luego transferir los datos al Thundroid. Esto solo se hace una vez. Después, Thundroid puede mantenerse al día con los nuevos bloques.
Para cambiar a mainnet, el blockchain mainnet debería estar listo, de esta manera empezaríamos con esta tarea.
Usando un ordenador normal
Suponemos que utilizaras una ordeandor con Windows para esta tarea, aunque puedes realizarla con la mayoría de sistemas operativos. Necesitas tener aproximadamente 250 GB de espacio libre en disco, internamente o en un disco duro externo. Como la indexación crea un tráfico pesado de lectura/escritura, cuanto más rápido sea tu disco duro, mejor. Una unidad interna o un disco duro externo USB3 será significativamente más rápido que uno disco con conexión USB2.
Descargar y verificar Bitcoin Core
Descarga el instalador Bitcoin Core desde bitcoin.org/download y guárdalo en el directorio que deseas utilizar para descargar el blockchain. Para verificar la autenticidad del programa, calcula su suma de verificación y compárala con las sumas de verificación proporcionadas.
En Windows, antepondré a todos los comandos que necesitamos introducir el signo ">", de modo que con el comando "> cd bitcoin", simplemente introduce "cd bitcoin" y presiona Intro.
Abre el prompt de comandos de Windows ('Win + R', introduce 'cmd', pulsa 'Intro'), navega hasta el directorio bitcoin (en mi caso, está en la unidad 'D:', comprobada con el Explorador de Windows) y crea el nuevo directorio 'bitcoin_mainnet'. Luego calcula la suma de verificación del programa descargado.
> G: > cd itcoin > mkdir bitcoin_mainnet > dir > certutil -hashfile bitcoin-0.16.0-win64-setup.exe sha256 6d93ba3b9c3e34f74ccfaeacc79f968755ba0da1e2d75ce654cf276feb2aa16d
Puedes comparar estas sumas de verificación con las sumas de verificación de referencia en tu Thundroid desde el archivo que hemos descargado anteriormente y que ya ha verificado tu autenticidad. Compara el siguiente resultado con la suma de verificación de tu descarga de Bitcoin Core para Windows.
# on Thundroid, with user "admin" $ cat /home/admin/download/SHA256SUMS.asc | grep win 7558249b04527d7d0bf2663f9cfe76d6c5f83ae90e513241f94fda6151396a29 bitcoin-0.16.0-win32-setup.exe 60d65d6e57f42164e1c04bb5bb65156d87f0433825a1c1f1f5f6aebf5c8df424 bitcoin-0.16.0-win32.zip 6d93ba3b9c3e34f74ccfaeacc79f968755ba0da1e2d75ce654cf276feb2aa16d bitcoin-0.16.0-win64-setup.exe 42706da1a95b2db8c5808529f73c2063a0dd770f71e0c8506bfa86dc0f3403ef bitcoin-0.16.0-win64.zip
Instalando de Bitcoin Core
Ejecuta el archivo de instalación de Bitcoin Core. Es posible que tengas que hacer clic derecho y elegir "Ejecutar como administrador". Instálalo usando la configuración por defecto. Inicia el programa 'bitcoin-qt.exe' localizado en el directorio "C:Program FilesBitcoin". Elije tu nueva carpeta "bitcoin_mainnet" como directorio de datos personalizado.
Bitcoin Core abre y empieza a sincronizar inmediatamente el blockchain. Ahora, necesitamos aplicar una configuración adicional muy importante en el archivo "bitcoin.conf". Si no se aplica, todo el blockchain será inútil y necesitará ser revalidado. Usando el menú, abre “Settings”/“Options” y haz clic en el botón “Open Configuration File”. Introduce la siguiente línea:
$ txindex=1Si tu ordenador tiene mucha memoria, puedes aumentar la caché en memoria de la base de datos añadiendo la siguiente línea (con los megabytes de memoria que se van a usar, ajustándolo a tu ordenador):
$ dbcache=6000Guarda y cierra el archivo de texto, salte de Bitcoin Core usando “File”/”Exit” y reinicia el programa. El programa empezará a sincronizar nuevamente.
Deja que el blockchain se sincronice, esto le llevará un día o dos.
Antes de pasar a mainnet
En la parte 2 de esta guía, haremos la transición al mainnet Bitcoin. Este será un punto sin retorno. Hasta aquí, puedes empezar de nuevo. Experimenta con testnet bitcoin. Abre y cierra canales en el testnet. Es importante que te sientas seguro a la hora de realizar operaciones con Thundroid, antes de poner dinero real en línea.
Una vez que cambies a mainnet y envies Bitcoin real a tu Thundroid, tienes "entras en el juego".
- Asegúrate de que tu RaspiBolt está funcionando según lo previsto. Práctica un poco con "bitcoin-cli" y sus opciones. Consulta la documentación de Bitcoin Core RPC (https://bitcoin-rpc.github.io/)
- Realiza ejecuciones simuladas con "lncli" y sus muchas opciones. Consulta la referencia de la API de Lightning (http://api.lightning.community/)
- Prueba algunos reinicios (“sudo shutdown -r now”). ¿Todo se inicia bien?
Nos vemos pronto en la parte 2, "El perfecto nodo Bitcoin Lightning️".