Me encanta remendar y construir cosas. También estoy fascinado con las monedas digitales, así que recientemente construí mi propio nodo de Bitcoin / Lighting Network con una simple Raspberry Pi. Básicamente, ahora tengo mi propio banco corriendo, utilizando software de código abierto y algo de hardware barato.

Este proyecto fue tanto sobre el proceso de aprendizaje como del resultado. Y creo que tuve éxito: aprendí mucho y mi nodo funciona muy bien. Esta guía es mi intento de compartir mis aprendizajes y te animo a construir tu propio nodo.

¿Por qué estoy entusiasmado con Bitcoin y Lightning Network?

Bitcoin como nueva tecnología es un esfuerzo increíblemente interesante, especialmente debido a su naturaleza interdisciplinaria. Bitcoin como dinero sano va a tener un gran impacto en los principios económicos y la sociedad en general. En mi opinión, una capa base sólida y antifrágil para esta futura red monetaria es la aplicación principal de blockchain y será más importante que la características más novedosas de las altcoins.

Por el momento, Bitcoin es más que un depósito de valor y no es realmente adecuado para pequeñas transacciones diarias. Debido a las limitaciones de la blockchain y el crecimiento de su uso, las tarifas han subido y los modelos comerciales que dependen de transacciones baratas están saliendo excluidos. Esto está bien. Las blockchains verdaderamente descentralizadas son un recurso escaso y no pueden escalarse para acomodar todas las transacciones globales. Los problemas de escala actuales son un gran motivador para construir una mejor tecnología para escalar exponencialmente, en lugar de simplemente agrandar todo para la escala lineal.

Aquí es donde entra Lightning Network. Como una de varias nuevas “extensiones” de blockchain, su promesa es acomodar transacciones casi ilimitadas, con confirmación de pago instantánea, tarifas mínimas y mayor privacidad. Suena casi demasiado bueno para ser cierto, pero en contraste con el ICO omnipresente con su propio token, esta tecnología está bien investigada, comprometida con el espíritu de código abierto de cypherpunk y aprovecha los sólidos fundamentos de Bitcoin.

Para preservar la naturaleza descentralizada de este sistema monetario, creo que es importante que todos puedan ejecutar su propio y confiable nodo de Bitcoin, preferiblemente en un hardware barato como lo es la Raspberry Pi.

Esta es la razón por la que me propuse construir mi RaspiBolt y creo que ahora tengo, a través de numerosas iteraciones, una configuración bastante buena que me gustaría compartir como mi modesta contribución a la comunidad. No soy especialista en sistemas, así que no dude en señalar mejoras.

Sobre esta guía

Propósito

Mi objetivo es configurar un nodo de Bitcoin y Lightning Network que:

  • Sea como un nodo completo de bitcoin completamente validado y no requiera intervención de un tercero.
  • Funcione de manera confiable 24/7.
  • Sea parte y apoye la descentralización de la Lightning Network al enrutar pagos.
  • Se pueda usar para enviar y recibir pagos personales usando la interfaz de línea de comando.

Este servidor está configurado sin interfaz gráfica de usuario y se utiliza de forma remota utilizando la línea de comandos Secure Shell (SSH). En el futuro, este servidor debería funcionar como mi backend personal para billeteras de escritorio y móviles, pero todavía no he encontrado una buena solución para esto. Entonces, la línea de comando es por el momento.

¡Alerta de spoiler! Este es el objetivo de esta guía, comprar un simple Blockaccino:

Audiencia objetivo

Esta guía se esfuerza por dar instrucciones simples e infalibles. Pero el objetivo también es hacer todo nosotros mismos, sin atajos que impliquen intervención de un tercero. Esto hace que esta guía sea bastante técnica y larga, pero trato de hacerlo lo más sencillo posible y explicar todo para que obtengan una comprensión básica del cómo y por qué.

Si te gusta aprender sobre Linux, Bitcoin y Lightning Network, esta guía es para ti.

Algunas advertencias

Todos los componentes de la Lightning Network todavía están en desarrollo y aquí estamos lidiando con dinero real. Por lo tanto, esta guía sigue un enfoque conservador: primero configuren y prueben todo en la testnet de Bitcoin; luego, una vez que se sientan cómodos para utilizar dinero real, cambie a la mainnet de Bitcoin con unos simples cambios.

Preparativos

Requerimientos de hardware

Esta guía se basa en la Raspberry Pi, que es fácil de conseguir y muy flexible. Esta increíble pieza de hardware es una pequeña computadora, cuesta alrededor de $35 dólares y consume muy poca energía.

Es aconsejable obtener la última Raspberry Pi para un mejor rendimiento:

  • Raspberry Pi 3 Modelo B o superior.
  • Tarjeta Micro SD con 8 GB o más.
  • Adaptador de corriente USB: 5V / 1.2A (más amperio estará bien) + cable Micro USB.
  • Disco duro externo: 500 GB o más con fuente de alimentación dedicada.
  • Opcional: Raspberry Pi case.

Utilicé una Raspberry Pi 3 modelo B y la configuré con una tarjeta SD de 8 GB. Para ejecutar un nodo Lightning, la blockchain completa de Bitcoin debe almacenarse localmente, la cual pesa alrededor de 200 GB y sigue creciendo. Compré un enclosure de disco duro barato y reutilicé un viejo disco duro de 500 GB que estaba por ahí.

Para alimentar mi RaspiBolt, utilizo dos adaptadores de potencia, ya que la potencia de salida de los puertos USB de la Raspberry Pi es muy limitada: un viejo cargador USB de 5V con 1.2A y la fuente de alimentación separada del enclosure del disco duro. Es probable que puedas alimentar la Raspberry Pi, incluyendo una nueva unidad de 2.5″ (conectada al Pi), con una fuente de alimentación USB decente (2.5A+), pero no hay garantías.

Descarga la blockchain de Bitcoin

La blockchain de Bitcoin registra todas las transacciones y básicamente define cuántos Bitcoins pertenecen a cada quien. Esta es la información más importante y no debemos confiar en que otra persona proporcione estos datos. Para configurar nuestro nodo completo de Bitcoin en la mainnet, necesitamos:

  • Descargar toda la cadena de bloques (~200 GB).
  • Verificar cada transacción de Bitcoin que haya ocurrido 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 bitcoin (conocido también como set UTXO).

Aquí pueden encontrar información adicional sobre la ejecución de un nodo completo.

Aunque configuraremos primero el RaspiBolt para usar la testnet de Bitcoin, la validación de la blockchain de la mainnet de Bitcoin puede demorar varios días. Esta es la razón por la que comenzaremos esta tarea tan pronto sea posible.

Utilizando una computadora regular

Puedes imaginar que la Raspberry Pi no está del todo a la altura de esta gran tarea. La descarga no es el problema, pero procesar inicialmente todo el blockchain tomaría semanas o meses debido a su baja potencia de cómputo y falta de memoria. Necesitamos descargar y verificar la blockchain con Bitcoin Core en una computadora normal y luego transferir los datos al Pi. Esto debe hacerse solo una vez. Después de eso, la Raspberry Pi puede mantenerse al día con los nuevos bloques.

Esta guía asume que usarán una máquina con Windows para esta tarea, pero funciona con la mayoría de los sistemas operativos. Deben tener aproximadamente 250GB de espacio libre disponible en el disco, internamente o en un disco duro externo (pero no el reservado para la Raspberry Pi). Como la indexación crea un tráfico pesado de lectura / escritura, cuanto más rápido sea el disco duro, mejor. Una unidad interna o un disco duro externo USB 3.x será significativamente más rápido que uno con una conexión USB 2.x.

Para copiar la blockchain a la Raspberry Pi posteriormente, hay varias opciones:

  • Recomendada: La mejor configuración es formatear el disco duro externo de la Raspberry Pi con el sistema de archivos Ext4, que es más adecuado para nuestro caso. Usando WinSCP, copiamos la blockchain de la computadora con Windows a través de la red local.
  • O también: si desea utilizar un disco duro externo para tu Raspberry Pi que ya contenga datos, ej. porque ya descargaron la cadena de bloques, esto también funciona. Puede usar el disco como está, pero necesita omitir la parte de formateo más adelante en esta guía.

Descargar y verificar Bitcoin Core

Descarguen el instalador Bitcoin Core y guárdenlo en el directorio que desea utilizar para descargar la cadena de bloques. Para verificar la autenticidad del programa, calculamos su suma de comprobación y la comparamos con las sumas de comprobación proporcionadas.

En Windows, precederé a darle todos los comandos que necesite ingresar con >, de modo que con el comando > cd bitcoin, simplemente ingresen cd bitcoin y presionen enter.

Abran el Símbolo del Sistema de Windows (Win+R, ingrese cmd, presione Enter), naveguen hasta el directorio bitcoin (para mí, está en la unidad D:, verifiquen en el Explorador de Windows) y creen un nuevo directorio llamado bitcoin_mainnet. Luego calculen la suma de verificación del programa ya descargado:

> G:
> cd \bitcoin
> mkdir bitcoin_mainnet
> dir
> certutil -hashfile bitcoin-0.16.0-win64-setup.exe sha256
6d93ba3b9c3e34f74ccfaeacc79f968755ba0da1e2d75ce654cf276feb2aa16d

Compare este valor con las firmas de lanzamiento. Para los binarios de Windows v0.16.0, es

32 bit:  7558249b04527d7d0bf2663f9cfe76d6c5f83ae90e513241f94fda6151396a29

64 bit:  6d93ba3b9c3e34f74ccfaeacc79f968755ba0da1e2d75ce654cf276feb2aa16d

Por lo general, también deberías verificar la firma de este archivo, pero es un problema en Windows, por lo que lo haremos en la Raspberry Pi más adelante.

Instalación de Bitcoin Core

Ejecuten el archivo de instalación de Bitcoin Core (es posible que necesiten hacer clic con el botón derecho y elegir “Ejecutar como administrador“) e instalarlo utilizando la configuración predeterminada. Inicien el programa bitcoin-qt.exe en el directorio “C:\ProgramFiles\Bitcoin“. Elijan su nueva carpeta “bitcoin_mainnet” como el directorio de datos personalizado.

Bitcoin Core abre y comienza a sincronizar inmediatamente la cadena de bloques. Desafortunadamente, necesitamos establecer una configuración adicional en el archivo “bitcoin.conf”, de lo contrario, toda la cadena de bloques será inútil. Usando el menú, abran Configuración / Opciones y haga clic en el botón Abrir archivo de configuración. Ingresen la siguiente línea:

txindex=1

Si su computadora tiene mucha memoria, puede aumentar la caché en memoria de la base de datos agregando la siguiente línea (con megabytes de memoria para usar, ajustados a su computadora):

dbcache=6000

Guarden y cierren el archivo de texto, salgan de Bitcoin Core usando File / Exit y reinicien el programa. El programa comenzará a sincronizarse nuevamente.

Dejen sincronizar la blockchain, por ahora ya podemos comenzar a trabajar en la Raspberry Pi.

Raspberry Pi

Elige tus contraseñas

Necesitarán varias contraseñas y me resulta más fácil escribirlas todas al principio, en lugar de encontrarlas en toda la guía. Deben ser únicas y muy seguras, con al menos 12 caracteres de longitud. No usen caracteres especiales poco comunes, espacios en blanco o comillas (‘ o “).

[ A ] Master user password
[ B ] Bitcoin RPC password
[ C ] LND wallet password
[ D ] LND seed password (opcional)

Si necesitas inspiración para crear tus contraseñas: el comic xkcd: Password Strength es divertido y contiene mucha verdad. Guarden una copia de sus contraseñas en un lugar seguro (preferiblemente en un gestor de contraseñas como KeePass) y mantenga sus notas originales fuera de la vista una vez que el sistema esté en funcionamiento.

Preparando el sistema operativo

El nodo se ejecuta en modo headless, es decir, sin teclado ni pantalla, por lo que se utilizaremos el sistema operativo Raspbian Stretch Lite.

  1. Descarguen la imagen Raspbian Stretch Lite.
  2. Escriba la imagen en su tarjeta SD con esta guía.

Habilitar Secure Shell

Sin teclado o pantalla, no es posible la interacción directa con la Raspberry Pi durante la configuración inicial, es por ello que después de escribir la imagen en la tarjeta Micro SD, creen un archivo vacío llamado “ssh” (sin extensión) en el directorio principal de la tarjeta. Esto hace que Secure Shell (ssh) se habilite desde el inicio y podremos iniciar sesión de forma remota.

  • Creen un archivo ssh en el directorio principal de la tarjeta MicroSD

Usar el WiFi

No lo recomendaría, pero pueden ejecutar su RaspiBolt con una conexión de red inalámbrica. Para evitar el uso de un cable de red para la configuración inicial, puede preconfigurar la configuración inalámbrica:

  • Cree un archivo wpa_supplicant.conf en la tarjeta MicroSD con el siguiente contenido:

country=[COUNTRY_CODE]
ctrl_interface=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid=[WIFI_SSID]
    psk=[WIFI_PASSWORD]
}

  • Reemplacen [COUNTRY_CODE] con el código ISO2 de su país (por ejemplo, US)
  • Reemplacen [WIFI_SSID] y [WIFI_PASSWORD] con las credenciales de su propia WiFi.

Iniciando la Raspberry Pi

  • Expulsen de forma segura la tarjeta sd de tu computadora.
  • Inserten la tarjeta sd en el Raspberry Pi.
  • Si aún no configuraste el WiFi: conecta el Raspberry Pi a tu red con un cable de Ethernet.
  • Enciendan el Raspberry Pi conectándolo al cargador del teléfono móvil usando el cable Micro USB.

Conectándose a la red

El al iniciar el nodo obtendrá una nueva dirección IP en su red doméstica. Esta dirección puede cambiar con el tiempo. Para hacer que la Raspberry Pi sea accesible desde Internet, le asignaremos una dirección fija.

Accediendo a su router

Para fijar la dirección de nuestra Raspberry Pi debemos acceder a las configuraciones de nuestro router: puede ser el cablemódem o el punto de acceso WiFi. Entonces, primero tenemos que acceder al router. Para averiguar su dirección:

  • Inicien el símbolo del sistema en una computadora que esté conectada a su red doméstica (en Windows, haga clic en el menú Inicio y escriba cmd directamente o en el cuadro de búsqueda, y presione Enter).
  • Ingresen el comando ipconfig (o ifconfig en Mac / Linux)
  • Busquen “Puerta de enlace predeterminada” y anote la dirección (por ejemplo, “192.168.0.1”)

Información adicional: accediendo a las configuraciones de su router

Ahora abran su navegador web y accedan a su router ingresando la dirección IP, como una dirección web normal. Necesita iniciar sesión y ahora pueden buscar todos los clientes conectados a su red doméstica. Uno de ellos debe aparecer como “raspberrypi”, junto con su dirección IP local (por ejemplo, “192.168.0.240”).

No saben la contraseña de su router? Traten con: routerpasswords.com

Si su enrutador todavía usa la contraseña por defecto: ¡cámbienla!

Establecer una dirección fija

Ahora necesitamos establecer una dirección IP fija (estática) para la Raspberry Pi. Normalmente, pueden encontrar esta configuración en la solapa de “Servidor DHCP”. La dirección debe ser la misma que la dirección actual, simplemente cambien la última parte a un número inferior (por ejemplo, 192.168.0.240 → 192.168.0.20).

Necesita información adicional? Googleen “[la marca de su enrutador] configurar la dirección IP dhcp estática”.

Redireccionamiento de puertos

Luego, se debe configurar el “Reenvío de puertos” (Port Forwarding). Las diferentes aplicaciones utilizan diferentes puertos de red, y el router necesita saber a qué dispositivo de red interno debe dirigirse el tráfico de un puerto específico. El reenvío de puertos debe configurarse de la siguiente manera:

Application nameExternal portInternal portInternal IP addressProtocol (TCP or UDP)
bitcoin83338333192.168.0.20BOTH
bitcoin test1833318333192.168.0.20BOTH
lightning97359735192.168.0.20BOTH

Información adicional: configuración de redireccionamiento de puertos.

Guarden y aplique estas configuraciones del router, las revisaremos más tarde. Desconecten la Raspberry Pi de la fuente de alimentación, esperen unos segundos y vuelva a enchufarlo. El nodo ahora debería obtener la nueva dirección IP fija.

Trabajando en la Raspberry Pi

Introducción a la línea de comandos

Ahora vamos a trabajar en la línea de comando de la Raspberry Pi, que puede ser nuevo para ustedes. A continuación encontrarán información básica que les ayudará a navegar e interactuar con su Raspberry Pi.

Ingresando comandos

Al ingresar los comandos, la Raspberry Pi mostrará los resultados debajo de su comando. Para dejar en claro dónde comienza un comando, cada comando en esta guía comienza con el signo $. La respuesta del sistema está marcada con el carácter >.

En el siguiente ejemplo, simplemente ingrese ls -la y presione la tecla enter/return:

$ ls -la
> example system response

  • Autocompletar Comandos: cuando ingresen comandos, pueden usar la tecla Tab para completar automáticamente, ej. para comandos, directorios o nombres de archivo.
  • Historial de comandos: presionandoyen su teclado, pueden recuperar los comandos ingresados ​​previamente.
  • Comandos comunes de Linux: para obtener una lista de referencia muy selectiva de los comandos de Linux, consulten la sección de preguntas y respuestas.
  • Utilizar los privilegios de administrador: nuestro usuario habitual no tiene 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, usamos sudo nano /etc /fstab.

Por razones de seguridad, el usuario “bitcoin” no puede usar el comando sudo.

  • Usando el editor de texto Nano: usamos el editor Nano para crear nuevos archivos de texto o editar los existentes. No es complicado, pero guardar y salir no es intuitivo.

Para guardar: presiona Ctrl-O (para Salida), confirma el nombre del archivo y presiona la tecla Enter

Para salir: presionar Ctrl-X

  • Copiar / Pegar: si están utilizando Windows y el cliente PuTTY SSH, puede copiar texto desde la terminal seleccionándolo con el mouse (sin necesidad de hacer clic en nada) y pegar cosas en la posición del cursor con un clic derecho en cualquier parte la ventana.

Conectando al Raspberry Pi

Ahora es el momento de conectarse a la Raspberry Pi vía SSH y ponerse a trabajar. Para eso, se necesita un cliente SSH (Secure Shell):

  • Windows: PuTTY (sitio web)
  • Mac OS: pueden usar cliente SSH incorporado (ver este artículo)
  • Linux: utiliza la terminal y los comandos nativos, ej. ssh pi@192.168.0.20
  • Use la siguiente configuración de conexión SSH:
  • nombre de host: la dirección estática que configuramos en el routerr, ej. 192.168.0.20
  • puerto: 22
  • usuario: pi
  • contraseña: raspberry

Información adicional: uso de SSH con Raspberry Pi

Raspi-Config

Ahora están en la línea de comandos de su propio nodo de Bitcoin. Primero terminamos la configuración de la Raspberry Pi. Ingresen el siguiente comando:

$ sudo raspi-config

  • Primero, en 1 cambie su contraseña a su password [A].
  • A continuación, elija Actualización 8 para obtener la herramienta de configuración más reciente.
  • Opciones de red 2: puede darle un lindo nombre a su nodo (como “RaspiBolt”) y configurar su conexión Wifi (solo Pi 3).
  • Opciones de arranque 3: escoger Desktop / CLI Console
  • Localización 4: configure su zona horaria.
  • Avanzado 7: ejecutar Expand Filesystem y establecer Memory Split a 16..
  • Salir al seleccionar , y ya que no es necesario reiniciar.

Actualización de Software

Es importante mantener el sistema actualizado con parches de seguridad y actualizaciones de aplicaciones. La Advanced Packaging Tool (apt) lo hace fácil:

$ sudo apt-get update
$ sudo apt-get upgrade

Hagan esto regularmente cada pocos meses para obtener actualizaciones relacionadas con la seguridad.

Moviendo el espacio de intercambio (Swap file)

El uso de un espacio de intercambio puede degradar su tarjeta SD muy rápidamente. Por lo tanto, lo moveremos al disco duro externo.

  • Editamos el archivo de configuración y reemplazamos las entradas existentes con las que siguen a continuación. Guardamos y salimos. $ sudo nano /etc/dphys-swapfile
CONF_SWAPFILE=/mnt/hdd/swapfile
CONF_SWAPSIZE=1000

Activamos la nueva configuración swap

$ sudo dphys-swapfile setup
$ sudo dphys-swapfile swapon

Eliminen el viejo archivo swap

$ sudo rm /var/swap

Agregar el usuario “admin”

Esta guía utiliza el usuario principal “admin” en lugar de “pi” para que sea más reutilizable con otras plataformas.

  • Creen el nuevo usuario y agréguenlo al grupo “sudo”

$ sudo adduser admin
$ sudo adduser admin sudo

  • Establezcan la contraseña utilizando su contraseña [A] y configuren la linea de comandos (standar shell) como “bash”

$ sudo passwd admin
$ sudo chsh admin -s /bin/bash

  • Y mientras lo hace, cambien la contraseña del usuario administrador “root” a su contraseña [A].

$ sudo passwd root

  • Reinicien e inicien sesión con el nuevo usuario “admin”

$ sudo shutdown -r now

Agregar el usuario del servicio “bitcoin”

Los procesos de Bitcoin y Lightning Network se ejecutarán en segundo plano (como daemon) y usarán el usuario “bitcoin” por razones de seguridad. Este usuario no tiene derechos de administrador y no puede cambiar la configuración del sistema.

  • Ingrese el siguiente comando, configure su password [A] y confirme todas las preguntas con la tecla enter/return:

$ sudo adduser bitcoin

Montaje de disco duro externo

El disco duro externo está conectado al sistema de archivos y se puede acceder a él como una carpeta normal (a esto se llama montar una unidad). Conecten su disco duro a la Raspberry Pi que está funcionando y enciendna la unidad. Puede seguir trabajando con un disco duro recién formateado (recomendado) o un disco existente que ya contiene datos.

Opción 1 (recomendada): Formatear el disco duro cen Ext4

Como en una instalación de un servidor, el sistema de archivos nativo de Linux Ext4 es la mejor opción para el disco duro externo. ¡Todos los datos en este disco duro serán borrados con los siguientes pasos!

Obtengan el nombre (NAME) de la partición principal en el disco duro externo

$ lsblk -o UUID,NAME,FSTYPE,SIZE,LABEL,MODEL

  • Formateen el disco duro externo con Ext4 (usen el [NAME] de arriba, p. Ej., /dev/sda1)

$ sudo mkfs.ext4 /dev/[NAME]

  • Copien el UUID que se proporciona como resultado de este comando de formato a su bloc de notas local (Windows).
  • Editen el archivo fstab y agreguen la siguiente línea (reemplace UUID=123456 por el de su dispositivo) al final

$ sudo nano /etc/fstab
UUID=123456 /mnt/hdd ext4 noexec,defaults 0 0

Opción 2: Utilizando el disco duro existente con NTFS

Si desean utilizar su disco duro que ya contiene la cadena de bloques de la mainnet de Bitcoin, simplemente deben montarlo como a continuación:

  • Identifiquen la partición y anoten el UUID a la izquierda (p. Ej., “12345678”) y verifiquen el FSTYPE (debe ser “ntfs”)

$ sudo lsblk -o UUID,NAME,FSTYPE,SIZE,LABEL,MODEL
$ sudo apt-get install ntfs-3g

  • Abran el archivo “/etc/fstab” en el editor de texto Nano y agreguen la siguiente línea, pero usando el “UUID” de su dispositivo mencionado arriba, guarden y salgan

$ sudo nano /etc/fstab

UUID=12345678 /mnt/hdd ntfs defaults,auto,umask=002,gid=bitcoin,users,rw 0 0

Tenga en cuenta que montamos usando umask=002,gid=bitcoin, que solo proporciona al usuario el acceso de escritura “bitcoin”. El usuario “admin” solo puede leer y debe usar sudo cuando escribe en el disco.

Continuamos con el resto de opciones

Los siguientes pasos son válidos independientemente de la opción elegida arriba.

  • Creen el directorio para agregar el disco duro y establecer el propietario correcto

$ sudo mkdir /mnt/hdd

  • Monten todas las unidades y verifiquen el sistema de archivos. ¿Está “/mnt/hdd” en la lista?

$ sudo mount -a
$ df /mnt/hdd

Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sda1      479667880 73756 455158568   1% /mnt/hdd
  • Establezacan el propietario

$ sudo chown -R bitcoin:bitcoin /mnt/hdd/

  • Cambien al usuario “bitcoin”, naveguen hasta el disco duro y creen el directorio bitcoin.

$ sudo su bitcoin
$ cd /mnt/hdd
$ mkdir bitcoin
$ ls –la

  • Creen un archivo de prueba en el nuevo directorio y elimínenlo

$ touch bitcoin/test.file
$ rm bitcoin/test.file

  • Salgan de la sesión de usuario de “bitcoin”

$ exit

Si este comando les da un error, es probable que su disco duro externo esté montado en modo de “solo lectura”. Esto debe arreglarse antes de continuar. Si no puede solucionarlo, consideren formatear el disco duro externo utilizando la Opción 1 anterior, lo cual debería evitar problemas como este.

Información adicional: configuración de almacenamiento externo

Mejorando la seguridad de tu Raspberry Pi

Los siguientes pasos necesitan privilegios de administrador por lo que se deben ejecutar con el usuario “admin”.

Habilitando el Firewall

La Raspberry Pi será visible desde Internet y, por lo tanto, debe estar protegida contra ataques. Un firewall controla qué tráfico está permitido y cierra posibles agujeros de seguridad.

La línea ufw allow from 192.168.0.0/24 … abajo, supone que la dirección IP de tu Raspberry Pi es algo así como 192.168.0.???, el ??? siendo cualquier número del 0 al 255. Si su dirección IP es 12.34.56.78, debe adaptar esta línea a ufw allow from 12.34.56.0/24….

$ sudo apt-get install ufw
$ sudo su
$ ufw default deny incoming
$ ufw default allow outgoing
$ 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 allow 8333  comment ‘allow Bitcoin mainnet’
$ ufw allow 18333 comment ‘allow Bitcoin testnet’
$ ufw enable
$ systemctl enable ufw
$ ufw status
$ exit

Información adicional: UFW Essentials

fail2ban

El inicio de sesión de SSH en la Raspberry Pi debe estar especialmente protegido. El firewall bloquea todos los intentos de inicio de sesión desde fuera de su red, pero se deben tomar medidas adicionales para evitar que un atacante, quizás desde su red, pruebe todas las contraseñas posibles.

La primera medida es instalar “fail2ban”, un servicio que corta cualquier sistema con cinco intentos de inicio de sesión fallidos durante diez minutos. Esto hace que un ataque de fuerza bruta sea inviable, ya que simplemente llevaría demasiado tiempo.

Yo mismo, ingresando contraseñas incorrectas

$ sudo apt-get install fail2ban

La configuración inicial debería estar bien, ya que está habilitada para utilizar SSH por defecto. Si quieres sumergirte más en este tema, puedes personalizar la configuración.

Bitcoin registra su tasa de transacción más alta desde el 2017

Iniciar sesión con claves SSH

Una de las mejores opciones para asegurar el inicio de sesión en SSH es deshabilitar completamente el inicio de sesión con contraseña y requerir un certificado de clave SSH. Solo alguien con posesión física de la clave privada puede iniciar sesión.

  • Configuren las claves SSH para el usuario “admin”, aquí un tutorial:

Configurar “Autenticación de claves SSH sin contraseña” con PuTTY en servidores Linux

Ahora debería generar tres archivos. Guárdenlos a salvo, ahora desactivaremos el inicio de sesión con contraseña.

  • Cierren la sesión (exit) y asegúrense de que pueden iniciar sesión como “administrador” con su clave SSH
  • Editen el archivo de configuración ssh

$ sudo nano /etc/ssh/sshd_config

  • Cambien los ajustes “ChallengeResponseAuthentication” y “PasswordAuthentication” a “no” (eliminen el símbolo numeral (#) de la línea si es necesario)

  • Guarden el archivo de configuración y salgan
  • Copien la clave pública SSH para el usuario “root”, por si acaso

$ 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

  • Salgan e inicien sesión de nuevo. Ya no pueden iniciar sesión con “pi” o “bitcoin”, solo lo usuarios “admin” y “root” tienen las claves SSH necesarias.

$ exit

¡Hagan una copia de seguridad de sus claves SSH! Deberán adjuntar una pantalla y un teclado a su Raspberry Pi si las pierden.

Bitcoin

La base del nodo Lightning es el nodo de Bitcoin Core totalmente confiable. Este mantiene una copia completa de la blockchain y valida todas las transacciones y bloques. Al hacer todo este trabajo nosotros mismos, no es necesaria la intervención de un tercero.

Al principio, usaremos la TestNet de Bitcoin para familiarizarnos con sus operaciones. Esta sincronización es manejada directamente por la Raspberry Pi y no debería tomar más de unas pocas horas. Solo déjala sincronizar toda la noche.

Instalación

Descargaremos el software directamente desde bitcoin.org, verificaremos su firma para asegurarnos de que usamos un lanzamiento oficial y lo instalaremos.

  • Inicien sesión como “administrador” y creen una carpeta de descarga.

$ mkdir /home/admin/download
$ cd /home/admin/download

Descargamos los últimos binarios de Bitcoin Core (la aplicación) y comparamos el archivo con la suma de comprobación firmada (checksum). Esta es una precaución para asegurarse de que se trata de un lanzamiento oficial y no una versión maliciosa que intenta robar nuestro dinero.

  • Obtenemos los últimos enlaces de descarga en bitcoin.org/en/download, que cambian con cada actualización. Luego ejecuten los siguientes comandos (con nombres de archivos ajustados a la última versión) y verifique la salida donde se indica:

$ 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

  • Verifiquen que la suma de verificación de referencia coincida con la suma de comprobación real.

$ sha256sum –check SHA256SUMS.asc –ignore-missing
> bitcoin-0.16.0-arm-linux-gnueabihf.tar.gz: OK

  • Comprueben manualmente la huella digital de la clave pública:

$ gpg ./laanwj-releases.asc
> 01EA5486DE18A882D4C2684590C8019E36C2E964

  • Importen la clave pública de Wladimir van der Laan, verifique el archivo de suma de comprobación firmado y verifique la huella digital nuevamente en caso de llaves maliciosas

$ 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

  • Ahora sabemos que las claves de bitcoin.org son válidas, por lo que también podemos verificar las sumas de verificación binarias de Windows. Compare la siguiente salida con la suma de comprobación de su descarga de Windows Bitcoin Core.

$ cat 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

  • Extraiga los binarios de Bitcoin Core, instálelos y verifique 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

Preparando el directorio Bitcoin Core

Usamos el daemon de Bitcoin, llamado “bitcoind”, que se ejecuta en segundo plano sin interfaz de usuario y almacena todos los datos en el directorio /home/bitcoin/.bitcoin. En lugar de crear un directorio real, creamos un enlace que apunta a un directorio en el disco duro externo.

  • Cambien al usuario “bitcoin” e ingrese la contraseña.

$ sudo su bitcoin

  • Agregamos un enlace simbólico que apunta al disco duro externo

$ ln -s /mnt/hdd/bitcoin /home/bitcoin/.bitcoin

  • Naveguen hasta el directorio de inicio y compruebe el enlace simbólico (el objetivo no debe ser rojo). El contenido de este directorio estará en realidad en el disco duro externo.

$ cd
$ ls –la

Configuración

Ahora, el archivo de configuración para bitcoind necesita ser creado. Ábralo con Nano y pegue la configuración a continuación. Guardar y Salir.

$ nano /home/bitcoin/.bitcoin/bitcoin.conf

# RaspiBolt LND Mainnet: 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=raspibolt
rpcpassword=PASSWORD_[B]
zmqpubrawblock=tcp://127.0.0.1:29000
zmqpubrawtx=tcp://127.0.0.1:29000

# Raspberry Pi optimizations
dbcache=100
maxorphantx=10
maxmempool=50
maxconnections=40
maxuploadtarget=5000

Cambie rpcpassword a su contraseña segura password [B], de lo contrario, sus fondos podrían ser robados.

Información adicional: opciones de configuración en Bitcoin Wiki

Configurar el inicio automatico de bitcoind

El sistema necesita ejecutar el daemon de bitcoin automáticamente en segundo plano, incluso cuando nadie está conectado. Usamos “systemd”, un daemon que controla el proceso de inicio usando los archivos de configuración.

  • Salga de la sesión de usuario “bitcoin” de vuelta al usuario “admin”

$ exit

  • Cree el archivo de configuración en el editor de texto Nano y copie el siguiente párrafo.

$ sudo nano /etc/systemd/system/bitcoind.service

# RaspiBolt LND Mainnet: systemd unit for bitcoind
# /etc/systemd/system/bitcoind.service

[Unit]
Description=Bitcoin daemon
Wants=getpublicip.service
After=getpublicip.service

# for use with sendmail alert (coming soon)
#OnFailure=systemd-sendmail@%n

[Service]
User=bitcoin
Group=bitcoin
Type=forking
PIDFile=/home/bitcoin/.bitcoin/bitcoind.pid
ExecStart=/usr/local/bin/bitcoind -pid=/home/bitcoin/.bitcoin/bitcoind.pid
KillMode=process
Restart=always
TimeoutSec=120
RestartSec=30

[Install]
WantedBy=multi-user.target
  • Guarden y salen
  • Habiliten el archivo de configuración

$ sudo systemctl enable bitcoind.service

  • Copien conf al directorio de inicio “admin” del usuario para obtener credenciales de RPC

$ mkdir /home/admin/.bitcoin

$ sudo cp /home/bitcoin/.bitcoin/bitcoin.conf /home/admin/.bitcoin/

  • Reinicien la Raspberry Pi

$ sudo shutdown -r now

 Verificando operaciones de bitcoind

 Después de reiniciar, el bitcoind debería comenzar y empezar a sincronizar y validar la blockchain de Bitcoin.

  • Esperen un poco, reconéctense a través de SSH e inicien sesión con el usuario “admin”.
  • Comprueben el estado del daemon de bitcoin que fue iniciado por systemd (salir con Ctrl-C)

$ systemctl status bitcoind.service

  • Pueden ver bitcoind en acción al monitorear su archivo de registro (salir con Ctrl-C)

$ sudo tail -f /home/bitcoin/.bitcoin/testnet3/debug.log

  • Utilice Bitcoin Core client bitcoin-cli para obtener información sobre la cadena de bloques actual

$ bitcoin-cli getblockchaininfo

  • Tengan en cuéntalo siguiente:
  • Cuando “bitcoind” todavía está comenzando, puede recibir un mensaje de error como “verificando bloques”. Eso es normal, solo dale unos minutos.
  • Entre otros datos, se muestra el “progreso de verificación”. Una vez que este valor se acerca al 1 (0,999 …), la blockchain estará actualizada y completamente validada.

Explorando bitcoin-cli

Si todo funciona sin problemas, este es el momento perfecto para familiarizarse con Bitcoin Core y jugar con bitcoin-cli hasta que la cadena de bloques esté actualizada.

Un gran punto de partida es el libro “Mastering Bitcoin” de Andreas Antonopoulos, que es de código abierto, y en este sentido, especialmente el capítulo 3 (ignoren la primera parte de cómo compilar desde el código fuente):

  • ¡Pueden adquirir una copia del libro en físico en Amazon!
  • Pueden obtener una copia en PDF gratuita desde aquí.
  • También pueden leerlo en línea desde Github.

Información adicional: referencia de bitcoin-cli

Una vez que la blockchain se ha sincronizado con la testnet de Bitcoin, se puede configurar el nodo Lightning Network.

Lightning Network: LND

Descargaremos e instalaremos el LND (Lightning Network Daemon) de Lightning Labs. Consulten su repositorio en Github para obtener abundante información sobre el proyecto que es de código abierto y Lightning en general.

Script de IP pública

Para anunciar nuestra dirección IP pública en la red Lightning, primero necesitamos obtener nuestra dirección IP de una fuente externa a nuestra red. Como usuario “admin”, creamos la siguiente secuencia de comandos que verifica la IP cada 10 minutos y la almacena localmente.

  • Como usuario “admin”, creen la siguiente secuencia de comandos, guárdenla y salgan

$ sudo nano /usr/local/bin/getpublicip.sh

#!/bin/bash
# RaspiBolt LND Mainnet: script to get public ip address
# /usr/local/bin/getpublicip.sh

echo 'getpublicip.sh started, writing public IP address every 10 minutes into /run/publicip'
while [ 0 ];
    do
    printf "PUBLICIP=$(curl -vv ipinfo.io/ip 2> /run/publicip.log)\n" > /run/publicip;
    sleep 600
done;
  • La hacemos ejecutable

$ sudo chmod +x /usr/local/bin/getpublicip.sh

  • Creamos la unidad systemd correspondiente, guardamos y salimos.

$ sudo nano /etc/systemd/system/getpublicip.service

# RaspiBolt LND Mainnet: systemd unit for getpublicip.sh script
# /etc/systemd/system/getpublicip.service

[Unit]
Description=getpublicip.sh: get public ip address from ipinfo.io
After=network-online.target

[Service]
User=root
Group=root
LimitNOFILE=65536
Type=simple
ExecStart=/usr/local/bin/getpublicip.sh
ExecStartPost=/bin/sleep 5
Restart=always

RestartSec=600
TimeoutSec=10

[Install]
WantedBy=multi-user.target
  • Habilitamos el inicio automático de systemd

$ sudo systemctl enable getpublicip
$ sudo systemctl start getpublicip
$ sudo systemctl status getpublicip

  • Verificamos si el archivo de datos ha sido creado

$ cat /run/publicip
PUBLICIP=91.190.22.151

Instalando LND

Ahora lo bueno: descargamos, verificamos e instalamos los archivos binarios LND.
$ cd /home/admin/download
$ wget https://github.com/lightningnetwork/lnd/releases/download/v0.4-beta/lnd-linux-arm-v0.4-beta.tar.gz
$ wget https://github.com/lightningnetwork/lnd/releases/download/v0.4-beta/manifest-v0.4-beta.txt
$ wget https://github.com/lightningnetwork/lnd/releases/download/v0.4-beta/manifest-v0.4-beta.txt.sig
$ wget https://keybase.io/roasbeef/pgp_keys.asc
$ sha256sum –check manifest-v0.4-beta.txt –ignore-missing
> lnd-linux-arm-v0.4-beta.tar.gz: OK
$ gpg ./pgp_keys.asc

> 65317176B6857F98834EDBE8964EA263DD637C21
$ gpg –import ./pgp_keys.asc
$ gpg –verify manifest-v0.4-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-beta.tar.gz
$ ls -la
$ sudo install -m 0755 -o root -g root -t /usr/local/bin lnd-linux-arm-v0.4-beta/*
$ lnd –version
> lnd version 0.4.0-alpha

Configuración de LND

Ahora que LND está instalado, debemos configurarlo para que funcione con Bitcoin Core y se ejecute automáticamente al inicio.

  • Abrimos una sesión de usuario de “bitcoin”

$ sudo su bitcoin

  • Creamos 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

  • Creamos el archivo de configuración LND y pegamos el siguiente contenido (ajústenlo a su alias). Guardamos y salimos.

$ nano /home/bitcoin/.lnd/lnd.conf

# RaspiBolt LND Mainnet: 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: pueden ingresar a la documentación de sample-lnd.conf.

  • Salimos de la sesión del usuario “bitcoin” e ingresamos como “admin”

$ exit

  • Creamos una unidad systemd LND y con el siguiente contenido. Guardamos y salimos.

$ sudo nano /etc/systemd/system/lnd.service

# RaspiBolt LND Mainnet: systemd unit for lnd
# /etc/systemd/system/lnd.service

[Unit]
Description=LND Lightning Daemon
Wants=bitcoind.service
After=bitcoind.service

# for use with sendmail alert
#OnFailure=systemd-sendmail@%n

[Service]
# get var PUBIP from file
EnvironmentFile=/run/publicip

ExecStart=/usr/local/bin/lnd --externalip=${PUBLICIP}
PIDFile=/home/bitcoin/.lnd/lnd.pid
User=bitcoin
Group=bitcoin
Type=simple
KillMode=process
TimeoutSec=180
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target
  • Habilitamos e iniciamos LND

$ sudo systemctl enable lnd
$ sudo systemctl start lnd
$ systemctl status lnd

  • Monitoreamos el archivo de registro LND en tiempo real (salir con Ctrl-C)

$ sudo journalctl -f -u lnd

Configuración de la billetera LND

Una vez que se inicia LND, el proceso nos orienta a crear la billetera Bitcoin integrada (no utiliza la billetera bitcoind).

  • Inicien una sesión de usuario de “bitcoin”

$ sudo su bitcoin

  • Crean la billetera LND

$ lncli create

Si desean crear una nueva billetera, ingresen su password [C] como contraseña de la billetera, seleccione n con respecto a una semilla existente e ingrese opcionalmente password [D] como frase de contraseña inicial. Se creará una nueva semilla de cifrado que consta de 24 palabras.

40_cipher_seed

Estas 24 palabras, combinadas con su frase de contraseña (password [D] opcional) es todo lo que necesita para restaurar su billetera Bitcoin y todos los canales de Lightning. El estado actual de sus canales, sin embargo, no puede recrearse desde esta semilla, esto requiere una copia de seguridad continua el cual aún se encuentra en desarrollo para LND.

Esta información debe mantenerse en secreto en todo momento. Escriba estas 24 palabras manualmente en un pedazo de papel y guárdelo en un lugar seguro. ¡Este pedazo de papel es todo lo que un atacante necesita para vaciar completamente su billetera! No lo guarde en una computadora. No tomes una foto con tu teléfono móvil. Esta información nunca se debe almacenar en ningún lugar en forma digital.

  • Salir de la sesión de usuario de “bitcoin”

$ exit

Asignar permisos LND a “admin”

  • Comprueben si se han creado los permisos para los archivos admin.macaroon y readonly.macaroon (de lo contrario, aquí encontraran más información 890). $ ls -la /home/bitcoin/.lnd/

40_ls_macaroon.png

  • Copien los permisos de archivos 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úrense de que lncli funciona desbloqueando con su billetera (ingresa la password [C]) y obtengan algunas datos sobre el nodo.

$ lncli unlock

Supervisen el progreso de arranque LND hasta que alcance la blockchain testnet (aproximadamente 1,3 millones de bloques en este momento). Esto puede demorar hasta 2 horas, después de eso verán mayor fluidez (salga con Ctrl-C). $ sudo journalctl -f -u lnd

Probando la testnet de Bitcoin

Ahora su nodo Lightning Network está listo. Para usarlo en la testnet, puedes obtener un bitcoin de testnet gratis de una faucet.

  • Generen una nueva dirección de Bitcoin para recibir fondos en la cadena

$ lncli newaddress np2wkh
> "address": "2NCoq9q7............dkuca5LzPXnJ9NQ"

  • Obtengan el bitcoin gratis de la testnet:

https://testnet.manu.backend.hamburg/faucet

  • Verifiquen el saldo de su billetera LND

$ lncli walletbalance

  • Controlen su transacción (el faucet muestra la ID de TX) en un explorador de Blockchain:

https://testnet.smartbit.com.au/

LND en acción

Tan pronto como la transacción se mine y se confirme, LND comenzará a abrir y mantener canales. Esta función se denomina “Piloto automático” y está configurada en el archivo “lnd.conf”. Si desean gestionar sus canales manualmente, pueden desactivar el piloto automático.

Pueden obtener una solicitud de pago en StarBlocks o Y’alls y para mover algunas moneda.

  • $ lncli listpeers
  • $ lncli listchannels
  • $ lncli sendpayment --pay_req=lntb32u1pdg7p...y0gtw6qtq0gcpk50kww
  • $ lncli listpayments

Información adicional: Lightning API

Antes de continuar con la mainnet

Este es el punto de no retorno. Hasta ahora, pueden volver a empezar. Experimenten con la testnet de bitcoin. Abran y cierren canales en la testnet.

Una vez que cambien a la mainnet y envían Bitcoin reales a Su RaspiBolt, tienes “piel en el juego”.

  • Asegúrense de que su RaspiBolt esté funcionando como se esperaba.
  • Practiquen un poco con Bitcoin-Cli y sus opciones (vean la documentación de Bitcoin Core RPC)
  • Hagan una ejecución en seco con lncli y sus múltiples opciones (consulte la referencia de Lightning API)
  • Prueben hacer algunos reinicios (sudo shutdown -r now), ¿está todo empezando bien?

Mainnet

¿Se sientes cómodos poniendo en juego un bitcoin real? He aquí cómo hacerlo.

Descargo de responsabilidad: esta guía se proporciona tal como está y sin ninguna garantía. La mayoría de los componentes descritos están en desarrollo y esta guía puede contener errores factuales que resulten en la pérdida de sus bitcoins. Use esta guía bajo su propio riesgo.

Descargo de responsabilidad de Lightning Labs: ya que este es el primer lanzamiento de lnd para la mainnet, recomendamos que los usuarios experimenten con pequeñas cantidades (#craefulgang #craefulgang #craefulgang).

Copien la blockchain de mainnet

La configuración actual se ejecuta en la testnet de Bitcoin. Sin embargo, al principio comenzamos a descargar la mainnet de Bitcoin en su computadora habitual. Confirmen el progreso de verificación directamente en Bitcoin Core en esta computadora. Para continuar, debe estar completamente sincronizado (ver barra de estado).

Tan pronto como finalice la verificación, cierren Bitcoin Core en Windows. Ahora copiaremos toda la estructura de datos a la RaspiBolt. Esto toma alrededor de 6 horas.

Permitir temporalmente el acceso con contraseña

Para copiar los datos con el usuario “bitcoin”, necesitamos habilitar temporalmente el inicio de sesión con contraseña.

  • Como usuario “admin”, editen el archivo de configuración SSH y pongan un # delante de “PasswordAuthentication no” para deshabilitar toda la línea. Guardar y Salir.

$ sudo nano /etc/ssh/sshd_config
# PasswordAuthentication no

  • Reinicie el daemon SSH

$ sudo systemctl restart ssh

Copien usando WinSCP

Estamos utilizando “Secure Copy” (SCP), así que descargue e instale WinSCP, un programa gratuito y de código abierto.

  • Con WinSCP, ahora pueden conectarse a su Pi con el usuario “bitcoin”.

50_WinSCP_connection.png

  • Acepten el certificado del servidor y naveguen a los directorios locales y remotos de bitcoin:

Local: d:\bitcoin\bitcoin_mainnet\

Remote: \mnt\hdd\bitcoin\

  • Ahora pueden copiar los dos subdirectorios, block y chainstate, de Local a Remoto. Esto tomará alrededor de 6 horas.

50_WinSCP_copy.png

La transferencia no debe ser interrumpida. Asegúrese de que su computadora no se quede dormida.

Información adicional: Estructura del directorio de datos de Bitcoin Core

Error con respecto a las marcas de tiempo

Al utilizar un disco duro externo NTFS, es posible que obtenga el siguiente error:

La carga del archivo ‘…..’ se realizó correctamente, pero se produjo un error al configurar los permisos y / o la marca de tiempo.

Pueden ignorar esto con seguridad y elegir skip all ya que NTFS no admite los métodos de marca de tiempo necesarios.

Inhabilitar inicio de sesión de contraseña

  • Como usuario “admin”, eliminen el # delante de “PasswordAuthentication no “para habilitar la línea. Guarden y Salen.

$ sudo nano /etc/ssh/sshd_config
PasswordAuthentication no

PasswordAuthentication no

  • Reinicie el daemon SSH.

$ sudo systemctl restart ssh

De vuelta a su testnet de Bitcoin

Para evitar quemar nuestra testnet de Bitcoin, y como cortesía para los siguientes evaluadores, cerramos todos nuestros canales y retiramos los fondos a 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 vuelvan a estar en nuestra billetera en la cadena.

$ lncli channelbalance
$ lncli walletbalance

  • Envíen la cantidad provista por walletbalance menos 500 satoshis para contabilizar los honorarios. Si obtienen un error de “fondos insuficientes”, deduzca un poco más hasta que la transacción se emita.

$ lncli sendcoins 2N8hwP1WmJrFF5QWABn38y63uYLhnJYJYTF [cantidad]

Ajustar configuración

  • Detengan los servicios de Bitcoin y Lightning.

$ sudo systemctl stop lnd
$ sudo systemctl stop bitcoind

  • Editen el archivo “bitcoin.conf” comentando testnet = 1 out. Guarden y salgan.$ sudo nano /home/bitcoin/.bitcoin/bitcoin.conf
# remove the following line to enable Bitcoin mainnet
#testnet=1
  • Copien la actualización de “bitcoin.conf” al usuario “admin” para conceder credenciales.

$ sudo cp /home/bitcoin/.bitcoin/bitcoin.conf /home/admin/.bitcoin/

  • Editen el archivo “lnd.conf” cambiando de bitcoin.testnet = 1 a bitcoin.mainnet = 1. Guarden y salgan.

$ sudo nano /home/bitcoin/.lnd/lnd.conf

# enable either testnet or mainnet
#bitcoin.testnet=1
bitcoin.mainnet=1

Reiniciando bitcoind & lnd para correr en la mainnet

No continúen hasta que la blockchain de mainnet haya terminado de copiarse por completo.

  • Inicien Bitcoind y comprueben si está funcionando en la mainnet

$ sudo systemctl start bitcoind
$ systemctl status bitcoind.service
$ sudo tail -f /home/bitcoin/.bitcoin/debug.log (recuerden salir con Ctrl-C)
$ bitcoin-cli getblockchaininfo

  • Esperen hasta que la cadena de bloques esté completamente sincronizada: “blocks” = “headers”, de lo contrario, podrían encontrarse con problemas de rendimiento / memoria al crear una nueva cartera en la mainnet.
  • Inicien LND y verifiquen su funcionamiento.

$ sudo systemctl start lnd
$ systemctl status lnd
$ sudo journalctl -f -u lnd

  • Si todo funciona bien, reinicien la RaspiBolt y verifiquen las operaciones nuevamente. $ sudo shutdown -r now
  • Monitoreen el proceso de inicio primero de bitcoind y luego de lnd

$ sudo tail -f /home/bitcoin/.bitcoin/debug.log
$ sudo journalctl -f -u lnd

  • Creen la billetera principal con la misma password [C] exacta que en la testnet. Si usan otra contraseña, necesita volver a crear sus credenciales de acceso.

$ lncli create

 

  • Copien los archivos de permisos y el certificado TLS al usuario “admin” para usar lncli

 

$ sudo cp /home/bitcoin/.lnd/tls.cert /home/admin/.lnd
$ sudo cp /home/bitcoin/.lnd/admin.macaroon /home/admin/.lnd

  • Asegurense de que lncli funciona desbloqueando su billetera (ingresa la password [C]) y obteniendo algunas datos sobre el nodo.

$ lncli unlock
$ lncli getinfo

  • Supervisen el progreso de arranque de LND hasta que alcance la blockchain testnet (aproximadamente 1,3 millones de bloques en este momento). Esto puede tomar hasta 2 horas, luego verán mucha charla muy rápida (salga con Ctrl-C).

$ sudo journalctl -f -u lnd

Importante: ¡debe desbloquear manualmente la billetera LND después de cada reinicio del servicio LND!

Comiencen a usar la Lightning Network

Financien su nodo

¡Felicidades, tu RaspiBolt está en online en la mainnet de Bitcoin! Para abrir canales y comenzar a usarlo, debe financiarlo con algunos bitcoin. Para empezar, coloca en tu nodo solo lo que estás dispuesto a perder. Dinero del monopoly.

  • Generen una nueva dirección de Bitcoin para recibir fondos en la cadena

$ lncli newaddress np2wkh
> "address": "3.........................."

  • Desde su billetera de Bitcoin regular, envíen una pequeña cantidad de bitcoin a esta dirección
  • Verifiquen el saldo de su billetera LND

$ lncli walletbalance

LND en acción

Tan pronto como su primera transacción se mine y se confirme, LND comenzará a abrir y mantener canales. Esta función se denomina “Piloto automático” y está configurada en el archivo “lnd.conf”. Si desean mantener sus canales manualmente, puede desactivar el piloto automático.

Algunos comandos para probar:

  • Enumerar todos los parámetros para la interfaz de línea de comando (cli)

$ lncli

  • Obtener ayuda para un comando en específico

$ lncli help [ARGUMENT]

  • Mostrar algunas estadísticas generales sobre tu nodo:

$ lncli getinfo

  • Conéctarse con un par (pueden encontrar algunos nodos para conectarse aquí: https://1ml.com/

$ lncli connect [NODE_URI]

  • Verifiquen los pares a los que están conectado actualmente:

$ lncli listpeers

  • Abrir un canal con un peer:

$ lncli openchannel [NODE_PUBKEY] [AMOUNT_IN_SATOSHIS] 0

Tengan en cuenta que el [NODE_URI] incluye @IP: PORT al final, mientras que [NODE_PUBKEY] no lo incluye

  • Verifiquen el estado de sus canales pendientes:

$ lncli pendingchannels

  • Verifiquen el estado de sus canales activos:

$ lncli listchannels

  • Antes de pagar una factura, deben descifrarla para verificar si el monto y otras informaciones son correctas:

$ lncli decodepayreq [INVOICE]

  • Pagar una factura:

$ lncli payinvoice [INVOICE]

  • Verifiquen los pagos que han enviado:

$ lncli listpayments

  • Crear una factura

$ lncli addinvoice [AMOUNT_IN_SATOSHIS]

  • Enumeren todas las facturas:

$ lncli listinvoices

  • Para cerrar un canal, necesitan los dos argumentos siguientes que se pueden determinar con listchannels y se enumeran como “channelpoint”: FUNDING_TXID : OUTPUT_INDEX .
    $ lncli listchannels
    $ lncli closechannel [FUNDING_TXID] [OUTPUT_INDEX]
  • para forzar el cierre de un canal (si su compañero no está conectado o no coopera), utilice

$ lncli closechannel --force [FUNDING_TXID] [OUTPUT_INDEX]

Información adicional: API de LND

Pruébalo

Para probar tu nuevo nodo Lightning, puedes enviarme un micro-tip: ‘Beginner’s Guide to ️⚡Lightning️⚡ on a Raspberry Pi’  en Y’alls (US$ 0.01)

Explora la mainnet de Lightning Network

Hay muchos recursos geniales para explorar la mainnet de Lightning con respecto a tu propio nodo.

  • Recksplorer: Mapa de Lightning Network
  • 1ML: Motor de búsqueda y análisis de Lightning Network
  • Inroute.com: Lista completa de recursos de la red Lightning

Bonus

Vista general del sistema

Para obtener una vista general del estado del sistema, he creado un shell script que se muestra al inicio o cuando es requerido.

60_status_overview.png

El script deberá correr como root, asi que hechenle un ojo antes de correrlo.

$ cd /home/admin/download/
$ wget https://gist.githubusercontent.com/Stadicus/57122492cb3ea4b5ce606ac0df6db8ae/raw/66039dfd8428707051148bf5eebcbaabfff39200/20-raspibolt-welcome.sh
  
# verifiquen el script & salgan
$ nano 20-raspibolt-welcome.sh

# eliminen el script de bienvenida existente e instalen el nuevo
$ sudo mv /etc/update-motd.d /etc/update-motd.d.bak
$ sudo mkdir /etc/update-motd.d
$ sudo cp 20-raspibolt-welcome.sh /etc/update-motd.d/
$ sudo chmod +x /etc/update-motd.d/20-raspibolt-welcome.sh
$ sudo ln -s /etc/update-motd.d/20-raspibolt-welcome.sh /usr/local/bin/raspibolt

Ahora pueden correr este script con el comando raspibolt y el mismo se mostrará cada vez que inicien sesión.

Mejorando la interfaz de línea de comandos

Pueden mejorar la interfaz de la línea de comandos para cada usuario, activando un color diferente en las configuraciones. Pueden utilizar amarillo o rojo. Yo utilizo el rojo para el usuario “admin” y el amarillo para el usuario “bitcoin”.

# editando el archivo .bashrc del usuario "admin" (abajo detallo las configuraciones)
$ nano /home/admin/.bashrc
$ sudo nano /home/bitcoin/.bashrc
# recarguen el archivo .bashrc (o salgan y vuelvan a iniciar sesion)
$ source /home/admin/.bashrc
# Para activar color para la terminal, quitar el simbolo # a la siguiente linea:
force_color_prompt=yes

# Personalizando la terminal (reemplazando la linea PS1), usar solo el rojo o el amarillo, no ambos.
# Usuario en amarillo
PS1="${debian_chroot:+($debian_chroot)}\[\e[33m\]\u \[\033[01;34m\]\w\[\e[33;40m\] ฿\[\e[m\] "
# Usuario en rojo
PS1="${debian_chroot:+($debian_chroot)}\[\e[31m\]\u \[\033[01;34m\]\w\[\e[33;40m\] ฿\[\e[m\] "

# Configura "ls" para que use siempre la opción -la
alias ls='ls -la --color=always'

60_pimp_prompt.png

Preguntas mas frecuentes

¿Puedo hacerme rico al enrutar los pagos de Lightning?

Nadie lo sabe. Probablemente no. Obtendrás comisiones mínimas. No me importa. ¡Disfruta el viaje!

¿Puedo adjuntar el disco duro con formato Ext4 a mi computadora con Windows?

El sistema de archivos Ext4 no es compatible con Windows estándar, pero con software adicional como Linux File Systems de Paragon Software (ofrecen una versión de prueba gratuita de 10 días) es posible.

¿Qué hacen todos los comandos de Linux?

Esta es una (muy) corta lista de los comandos mas comunes para Linux. Para conocer mas sobre un comando específico, puede ingresar man [command] para visualizar la página de manual (escriba q para salir).

comandodescripcionejemplo
cdcambiar directoriocd /home/bitcoin
lslistar contenido del directoriols -la /mnt/hdd
cpcopiarcp file.txt newfile.txt
mvmovermv file.txt moved_file.txt
rmremovermv temporaryfile.txt
mkdircrear directoriomkdir /home/bitcoin/newdirectory
lncrear enlaceln -s /target_directory /link
sudoejecutar comando en superusuariosudo nano textfile.txt
sucambiar a una diferente cuenta de usuariosudo su bitcoin
chowncambiar propietario de archivochown bitcoin:bitcoin myfile.txt
chmodcambiar permisos de archivochmod +x executable.script
nanoeditor de textonano textfile.txt
tarherramienta de archivostar -cvf archive.tar file1.txt file2.txt
exitsalir de sesion actualexit
systemctlservicio systemdsudo systemctl start bitcoind
journalctlregistro de systemdsudo journalctl -u bitcoind
htopmonitor de uso de los procesos y recursoshtop
shutdownapagar o reiniciar la Raspberry Pisudo shutdown -r now

¿Dónde puedo obtener más información?

Si desea obtener más información acerca del Bitcoin y siente curiosidad por el funcionamiento interno de Lightning Network, los artículos a continuación  ofrecen una muy buena introducción:


Esta guía ha sido publicada bajo licencia MIT y también está disponible en inglés. CoinCrispy colaboró con Stadicus para la traducción y edición de esta guía en español.


19550140.jpgStadicus es un entusiasta de la tecnología y un maximalista del Bitcoin radicado en Suiza quien está convencido que “crear un nodo de Lightning Network asequible ayudará a preservar la naturaleza descentralizada del Bitcoin”Puedes seguir a Stadicus en Twitter.

Más en CoinCrispy