# Lightning Polar ###### tags: `talleres_mln` Lightning Polar (en adelante Polar) es una aplicación desarrollada por [Jamal James](https://twitter.com/jamaljsr) y de código abierto. Permite crear rápidamente una de Lightning local con tantos nodos Bitcoin y Lightning como se quiera. Los nodos Lightning pueden ser LND, CLN y Eclair, y como nodo Bitcoin solo permite Bitcoin Core. **Tabla de contenido** [TOC] ## Autor Twitter para correcciones, comentarios o sugerencias: [@colendis](https://twitter.com/colendis) El presente tutorial fue elaborado para el [Seminario socrático de Mastering Lightning](https://libreriadesatoshi.com/) a través de [@libreriadesatoshi](https://twitter.com/libdesatoshi). ## Requisitos Para la realización de este taller basta con descargar e instalar [Lightning Polar](https://lightningpolar.com/). Si tienes ganas 💪🏼, puedes descargarte su código fuente desde [Github](https://github.com/jamaljsr/polar/), compilarlo y ejecutarlo. Polar necesita Docker y Docker Compose para poder funcionar. Se recomienda Docker Desktop si tu sistema operativo es Windows o Mac OS, y Docker Engine si estás utilizando Linux. Tanto Docker Desktop como Docker Engine incluyen Docker y Docker Compose. Sabrás si te falta alguno de los dos, si al iniciar Polar aparece un mensaje como este: ![]( ) ## Crear una red Lightning En este taller vas a crear una red Lightning formada por un nodo Bitcoin y tres nodos Lightning (LND, CLN y Eclair). ![](https://hackmd.io/_uploads/B11ND9_Uh.png) Tras crear la red verás el nodo Bitcoin, y los nodos de Alice, Bob y Carol (que a estas alturas ya deberías conocer 😂): ![](https://hackmd.io/_uploads/BkC-_9_Ln.png) Ahora mismo tienes la red Lightning creada pero apagada. Junto al nombre de cada nodo Lightning verás el icono de la implementación a la que pertenece. En este caso, el nodo de Alice es LND, el nodo de Bob es CLN, y el de Carol es Eclair. Si haces clic sobre cada nodo verás más información como la versión y el estado. Haz clic en el botón Inicio para iniciar la red. A partir de este momento, Polar descargará todas las imágenes docker que le falten. Este proceso puede tomar varios minutos si tu conexión a internet no es muy rápida. Sabrás que tu red Lightning ha iniciado correctamente cuando veas la etiqueta `Iniciado` junto al nombre de tu red, y todos los nodos Bitcoin y Lightning aparezcan con un puntito verde: ![](https://hackmd.io/_uploads/SyPd95_Lh.png) Si haces clic sobre cada nodo ahora verás mucha más información como el saldo, alias, clave pública, canales, etc. ## Abrir un canal Si aún no lo has hecho, ahora vas a abrir tu primer canal 🥳. Haz clic derecho sobre el nodo de Alice y selecciona la opción `Abrir canal saliente`: ![](https://hackmd.io/_uploads/SkLfp5d8n.png) Elige a Bob como destino e introduce 250.000 sats como capacidad: ![](https://hackmd.io/_uploads/S16Y6cOL3.png) Haz clic en `Abrir canal`. ¿Recuerdas los mensajes `open_channel`, `accept_channel`, `funding_created`, `funding_signed` y `funding_locked` que has visto en el [Seminario de Lightning Network](https://github.com/lnbook/lnbook/blob/develop/07_payment_channels.asciidoc)? Pues los nodos de Alice y Bob se los están intercambiando para poder abrir el canal de 250.000 sats. Además, para que todo esto vaya más rápido, el nodo Bitcoin está creando todos los bloques necesarios para que la funding transaction alcance la profundidad necesaria. Todo esto ocurre en cuestión de segundos, ¿no es maravilloso? Si haces clic sobre el nodo de Alice podrás ver más información sobre el canal que se acaba de abrir con Bob. ### Ejercicio 1 :::info ¿Por qué el canal abierto tiene una capacidad menor a los 250.000 stats que se había escogido? ::: ### Ejercicio 2 :::info ¿Recuerdas la diferencia entre balance y capacidad? ::: ## Crear y pagar una factura Ahora vas a generar una factura desde el nodo de Carol para que la pague Alice. Como te habrás dado cuenta, la factura no se va a poder pagar porque, aunque Alice tiene balance suficiente, no existe una ruta entre Alice y Carol. Haz clic derecho sobre el nodo de Carol y selecciona la opción `Crear factura`: ![](https://hackmd.io/_uploads/rkTo7su83.png) Introduce 50.000 sats como cantidad a pagar: ![](https://hackmd.io/_uploads/r1oMVodLn.png) Haz clic en `Crear factura` y después en `Copiar y cerrar`: ![](https://hackmd.io/_uploads/H1zoNo_I2.png) La factura es una cadena de texto que empieza por `ln`: `lnbcrt500u1pj8kfpdpp5p2ehzvmlmap0zvlsmu27w2ewd9xjpfc06390gg892v4sgu3u8peqdq62pshjmt9de6zqar0yp3kzun0dssp5fl9t6ysdevzvwankrcqyq8785d7r3vhhzp50ptwdalxh8f2lhzmsmqz9gxqrrsscqp79q2sqqqqqysgq9nsa9n797nfckjkjrswq53zyanmgtx8wp5th6u70phjyf23jy8g4ufnc8t6e76dyr9263lm8m2zpsu5w0zz8g46peskdqnhgjzfsrpqp0djux4` Te invito a que decodifiques la factura mediante alguna herramienta como [Lightning Decoder](https://lightningdecoder.com), y que compruebes que todos los campos tienen los valores que esperas. Consulta el contenido del [Seminario de Lightning Network](https://github.com/lnbook/lnbook/blob/develop/15_payment_requests.asciidoc) si hay algún campo que no entiendes. Si quieres profundizar, te invito a que eches un ojo al [BOLT 11](https://github.com/lightning/bolts/blob/master/11-payment-encoding.md). Ahora Alice va a pagar la factura que Bob ha creado. Haz clic derecho sobre el nodo de Alice y selecciona `Pagar factura`. Copia la factura en el campo `Factura BOLT 11` y haz clic en `Pagar Factura`. Deberías ver un mensaje de error que indica que la factura no se ha podido pagar porque no se ha podido encontrar una ruta: ![](https://hackmd.io/_uploads/ryA2IsOL3.png) ¿Qué debería ocurrir para que Alice pueda pagar la factura de Carol? Necesitamos que exista una ruta entre el nodo de Alice y Carol con suficiente balance para hacer el pago de los 50.000 sats. Vamos a abrir un canal entre Bob y Carol de 250.000 sats para que así exista una ruta desde Alice a Carol pasando por Bob. Haz clic derecho sobre el nodo de Bob y selecciona `Abrir canal saliente`. Selecciona como nodo destino a Carol y como capacidad 150.000 sats. Haz clic en `Abrir canal` y espera a que se complete el proceso. Ahora ya existe una ruta entre el nodo de Alice y Carol, por lo que no tendría que haber ningún problema para pagar la factura que hemos creado. Al realizar el pago deberías ver una notificación de éxito como esta: ![](https://hackmd.io/_uploads/BJR-KidUh.png) Para que el pago se complete, los nodos han estado [actualizando sus commitment transactions](https://github.com/lnbook/lnbook/blob/develop/07_payment_channels.asciidoc#sending-payments-across-the-channel). Cuando el pago llega a Carol, libera el preimage para que todos los nodos que han participado en la ruta puedan eliminar el HTLC de su commitment transaction. ### Ejercicio 3 :::info Comprueba que los balances de los canales han cambiado acorde con el importe de factura y las fees pagadas. ::: ## Cerrar un canal Para cerrar un canal de forma colaborativa, haz clic derecho sobre el canal entre Bob y Carol y selecciona `Cerrar canal`. La línea verde que representa el canal desaparecerá cuando el proceso se complete. Para cerrar un canal de [forma colaborativa](https://https://github.com/lnbook/lnbook/blob/develop/07_payment_channels.asciidoc#closing-the-channel-cooperative-close), los dos nodos deben estar conectados e intercambiar los mensajes `shutdown` y `closing_signed`. ### Ejercicio 4 :::info ¿Qué otros tipos de cierre de canal existen? Te animo a que intentes reproducirlos en Polar. ::: ## Terminal de un nodo Lightning Polar está muy bien. Agiliza y facilita procesos. Pero, ¿cómo podemos hablar directamente con el nodo de Alice? Haz clic derecho en el nodo de Alice y selecciona `Ejecutar terminal`. Se abrirá un terminal de comandos con el que podrás hablar directamente con el nodo LND de Alice. También puedes ver que aparece el alias `lncli="lncli --network regtest"`. Un alias es un nombre generalmente corto que el terminal traduce a otro comando generalmente más largo. En este caso el alias o comando `lncli` es lo mismo que `lncli --network regtest`. Obtener la información del nodo de Alice mediante: ``` $ lncli getinfo ``` Verás información como la versión de LND que está utilizando, el número de peers al que está conectada (en este caso a Bob y a Carol), la altura del bloque de bitcoin del que tiene constancia, las features que soporta, su dirección, etc. ### Ejercicio 5 :::info ¿Por qué el nodo de Alice está conectada a dos peers si solo tiene abierto un canal con Bob? ::: ### Ejercicio 6 :::info Comprueba que la información que has obtenido es la misma que ves a través de la interfaz de Polar. ::: Es importante conocer los comandos que tu nodo Lightning ofrece. Si quieres tener una lista completa de todos los comandos del nodo de Alice, ejecuta: ``` $ lncli help ``` ### Ejercicio 7 :::info Mediante el terminal, te animo a crear una factura para que la pueda pagar Bob. ::: ## Detener y exportar la red Lightning En cualquier momento puedes detener la red de Lightning haciendo clic en `Detener`. Esta acción detendrá todas las imágenes docker de forma segura. Para volver a iniciarla solo tienes que hacer clic en `Inicio`, Polar iniciará todas las imágenes docker y podrás seguir utilizando la red. También puedes exportar la red mediante la opción `Exportar`. Esta opción genera un archivo ZIP con toda la información necesaria para poder reproducir exactamente el mismo estado en cualquier otro sitio. ![](https://hackmd.io/_uploads/B1exLh_I3.png) ### Ejercicio 8 :::info Prueba a exportar una red e importarla de nuevo. :::