Blog

|

engineering

Integrando BOLT12 en Strike

Una mirada detrás de escena

Tom Kirkpatrick

Aug 01, 2024

En Strike, estamos innovando constantemente para ampliar los límites de Bitcoin y la Lightning Network (LN) y mejorar la experiencia de nuestros clientes. Hoy, estamos emocionados de anunciar nuestro soporte para BOLT 12 Offers, una tecnología revolucionaria que permite una forma más privada, versátil y fácil de usar para enviar y recibir sats a través de la red Lightning de Bitcoin.

Esta publicación del blog profundiza en nuestro viaje de integración de BOLT 12 en Strike. Es una exploración técnica dirigida tanto a entusiastas de Bitcoin como a nuestros valiosos clientes.

¿Qué es BOLT 12?

Introducido en septiembre de 2020 por Rusty Russell, la especificación BOLT 12 proporciona una versión mejorada del actual estándar BOLT11 para pagos en LN. Si estás familiarizado con LNURL, ¡que Strike también admite! - entonces BOLT 12 debería sonarte familiar en la superficie. Habilita características que mejoran significativamente la experiencia en LN:

  • Códigos QR reutilizables: A diferencia de las facturas BOLT11, que generalmente son de un solo uso, las ofertas BOLT 12 se pueden escanear y pagar múltiples veces. Esto los hace ideales para exhibiciones estáticas como en sitios web, volantes o carteles, eliminando la necesidad de generar y distribuir constantemente nuevas facturas.
  • Mayor seguridad para el usuario: BOLT 12 utiliza mensajes onion, una técnica criptográfica que oculta el camino seguido por los pagos dentro de LN. Esto mejora la privacidad del usuario al dificultar el seguimiento del flujo de sats.
  • Funcionalidad avanzada: BOLT 12 abre puertas a nuevas funcionalidades nativas como reembolsos o retiros estilo cajero automático que anteriormente eran imposibles en la Lightning Network sin el uso de capas complementarias como LNURL.

Nuestro Viaje de Implementación de BOLT 12

Nuestra exploración de BOLT 12 comenzó con un documento de investigación interno que escribimos en septiembre de 2021. Nos intrigaron los posibles beneficios que BOLT 12 podría ofrecer para mejorar las experiencias de pago en LN.

Elaboramos planes para integrar la funcionalidad BOLT 12 en Strike, pero la naturaleza temprana de la propuesta en ese momento, el hecho de que pasaría mucho tiempo antes de que se implementara en LND, combinado con varios otros factores nos obligó a reenfocar esfuerzos en otras funciones principales y jugar un juego de espera para dar tiempo a que las cosas evolucionen aún más.

Entre 2021 y 2022, los miembros de la comunidad Bitcoin continuaron iterando sobre las propuestas de BOLT 12, desarrollando implementaciones y promoviendo la tecnología. Mientras que algunas implementaciones de nodos Lightning fueron rápidas en integrarse, LND, la implementación principal del nodo que usamos en Strike, adoptó un enfoque más cauteloso y deliberado, enfocándose más en la estabilidad del sistema central. El equipo de Lighting Labs desarrolló una hoja de ruta integral por fases para implementar BOLT 12, integrando algunos de los componentes fundamentales poco a poco durante un período de tiempo más largo. Hasta el día de hoy, LND todavía no admite BOLT 12 aunque ahora admite muchos de los componentes principales y está bien encaminado hacia el soporte completo nativo de BOLT 12.

Con la llegada de LNDK en marzo de 2023, una herramienta liderada por Carla Kirk-Cohen y desarrollada junto con el equipo de Spiral, nuestro interés en BOLT 12 se reavivó. Descrita como "un intento experimental de usar LDK para implementar características de BOLT 12 para LND”, básicamente se conecta a las API existentes de LND para brindarnos la capacidad de aprovechar el soporte BOLT 12 integrado de LDK con LND, sin una revisión completa de nuestros sistemas.

Profundización Técnica

La integración involucró varios componentes clave:

  • LND: La API gRPC expuesta por el nodo LND de destino construido con los subservidores rpc apropiados.
  • LDK: Importado como una dependencia en nuestra capa de aplicación para proporcionar capacidades de procesamiento y reenvío de mensajes onion.
  • LNDK: Aunque la visión general arquitectónica de LNDK se refiere de manera lúdica a LNDK como "el monstruo de Frankenstein", en realidad es una solución muy ingeniosa. LNDK actúa como un shim, aprovechando la biblioteca modular lightning de LDK y conectándola a la API gRPC de LND. Esto nos permitió reutilizar la implementación BOLT 12 existente dentro de LDK.

LNDK de un Vistazo

LNDK, el puente ingenioso que permite a Strike aprovechar la funcionalidad BOLT 12 dentro de nuestra infraestructura LND existente, merece una mirada más cercana. Aquí hay una descripción general de alto nivel de su arquitectura y algunas funcionalidades clave que lo hicieron una herramienta tan valiosa para nuestro proceso de integración.

Diseño Modular para la Flexibilidad

Como se mencionó anteriormente, LNDK actúa como un shim, conectando la API gRPC de LND con la biblioteca modular Lightning de LDK. Este diseño ofrece varias ventajas:

  • Reutilización de Componentes: Al aprovechar la implementación BOLT 12 existente de LDK, LNDK evita la necesidad de reinventar la rueda. Esto agiliza el desarrollo y garantiza la compatibilidad con el ecosistema más amplio de Lightning Network.
  • Separación Clara de Preocupaciones: La separación entre la funcionalidad central de LND y el soporte BOLT 12 de LDK proporciona una implementación relativamente limpia que simplifica algunos elementos del mantenimiento.

Mensajería Onion y Pagos de Ofertas

Una de las funcionalidades principales de BOLT 12 es el uso de mensajes onion. Estos mensajes criptográficos permiten que dos nodos en la Lightning Network se comuniquen de forma segura y privada.

El siguiente diagrama muestra cómo interactúan los diversos componentes desde un alto nivel:

Aquí tienes un desglose simplificado de cómo Strike utiliza LND, LDK y LNDK para facilitar el enrutamiento de mensajes onion y el protocolo BOLT 12:

  1. Solicitud de Pago: El usuario de Strike inicia un pago escaneando un código QR de Oferta BOLT 12 o ingresando una dirección DNS legible por humanos desde donde se puede obtener una Oferta BOLT 12 usando BIP 353.
  2. Análisis de Oferta LDK: LDK se utiliza para analizar la Oferta BOLT 12 y extraer detalles del pago.
  3. Construcción de Mensaje Onion: LNDK utiliza las bibliotecas de LDK y las API gRPC de LND para construir mensajes onion que contienen los detalles de la solicitud de factura.
  4. Reenvío del Onion: El mensaje onion construido se retransmite a través de la Lightning Network por LND, atravesando varios nodos hasta llegar al nodo de destino especificado en la Oferta, donde el mensaje onion se desempaqueta, revelando la solicitud incrustada en el mensaje.
  5. Recuperación de una Ruta Ciega: El nodo de destino utiliza mensajería onion para enviar una factura que incluye una ruta ciega que detalla cómo puede ser pagada.
  6. Envío del Pago: LNDK interactúa con la API gRPC de LND para iniciar el proceso de pago.

El siguiente diagrama muestra el flujo de pagos desde un alto nivel:

Plan de Implementación por Fases (3 Fases):

Dado el número de partes móviles, comenzamos delineando un enfoque en tres fases para implementar la funcionalidad BOLT 12 dentro de Strike. A grandes rasgos, el plan fue el siguiente:

1.** Pruebas e Implementación de LNDK:** Establecer la infraestructura y funcionalidad central de BOLT 12 para pruebas internas y observación. 2. Integración de Plataforma y API de LNDK: Extender la plataforma y las API de Strike para exponer la funcionalidad BOLT 12 en todo nuestro entorno. 3. Integración de Aplicaciones de Strike: Integrar las funciones de pago BOLT 12 en los productos de Strike.

Al seguir este enfoque por fases, combinado con conocimientos de nuestras investigaciones anteriores, sentimos que podríamos garantizar una integración controlada y eficiente de la funcionalidad BOLT 12 dentro de Strike.

Implementación del Concepto de Prueba

El primer paso fue pasar del concepto a la prueba de concepto, y tuvimos que superar varios obstáculos técnicos en el camino.

Área de Pruebas BOLT 12 Establecimos un entorno de desarrollo para probar pagos BOLT 12 utilizando diversas combinaciones de nodos (LND, CLN, Eclair y LNDK) y canales (directo, salto único, multi-salto, saltos entre implementaciones). Elegimos hacer de código abierto nuestro nuevo Área de Pruebas BOLT 12 para ponerlo a disposición de la comunidad de desarrollo más amplia. Este área de pruebas resultó invaluable para agilizar el proceso de pruebas y facilitar la colaboración entre Strike y la comunidad de desarrollo de Bitcoin.

Integración de API Trabajamos estrechamente con el equipo de Spiral y los contribuyentes de LNDK para mejorar LNDK con un servidor gRPC e implementación TLS que proporcionara una interfaz bien definida y segura para que nuestra aplicación interactúe con la funcionalidad subyacente BOLT 12 expuesta por LNDK.

Decodificación Nativa de BOLT 12 Aprovechamos las bindings de C# generadas por LDK para habilitar la decodificación de Ofertas y Facturas BOLT 12 directamente dentro de nuestra base de código .NET, lo que nos permitió limitar nuestras interacciones con el daemon LNDK a favor de rutas de código nativas donde fuera posible.

Desafíos y Soluciones Alternativas Trabajando estrechamente con los desarrolladores de LDK y LNDK, pudimos abordar cualquier problema que encontramos en el camino para llevar estas bibliotecas a un estado más estable. Se lanzaron múltiples nuevas versiones de LNDK, LDK y las bindings de C# de LDK en el camino, hasta que tuvimos toda la funcionalidad necesaria funcionando como necesitábamos.

En Adelante... En pocos días, teníamos un concepto de prueba funcional que demostraba la capacidad de pagar Ofertas BOLT 12 directamente desde nuestros sistemas backend de Strike. Con este éxito, nos sentimos seguros para avanzar en la producción de la solución.

De Prueba de Concepto a Producción

El siguiente desafío, ciertamente más lento, involucró transformar la prueba de concepto en un sistema robusto y seguro listo para su uso en el mundo real dentro del entorno de producción de Strike. Aquí proporcionamos algunas ideas sobre el esfuerzo de ingeniería:

Producción de LNDK Participamos activamente en dar forma a muchas características de LNDK para asegurarnos de que cumpliera con nuestros requisitos de seguridad y tuviera la flexibilidad necesaria para ser utilizado en nuestro entorno de producción. Esto implicó varias iteraciones en el diseño, que finalmente resultaron en una interfaz gRPC asegurada por TLS y aprovechando un LND macaron con alcance limitado para autenticación. También agregamos puntos finales más granulares para cada fase del flujo BOLT 12.

Despliegue de Infraestructura Desplegamos nodos LNDK en toda nuestra infraestructura utilizando un enfoque multifacético:

  • Empaquetamos las dependencias y configuraciones necesarias para ejecutar LNDK dentro de un contenedor Docker.
  • Creamos un gráfico Helm para facilitar el despliegue y gestión de nodos LNDK dentro de nuestro entorno Kubernetes.
  • Aprovechamos Terraform para aprovisionar los recursos de infraestructura necesarios para ejecutar los nodos LNDK.
  • Desplegamos un pod LNDK para cada uno de nuestros nodos LND existentes, asegurándonos de que cada instancia de LND tenga un contraparte dedicado de LNDK para manejar BOLT 12.

Soporte de Mensajería Onion en LND Nuestros nodos LND estaban ejecutando la versión 0.17, que carecía de soporte integrado para mensajería onion, un componente crítico para la funcionalidad BOLT 12 de LNDK. Como no estábamos listos para actualizar a LND v0.18 en ese momento, optamos por retroportar el conjunto de cambios relevante de v0.18 a v0.17. Esto aseguró la compatibilidad con BOLT 12 mientras mantenía la estabilidad dentro de nuestra infraestructura existente. En el proceso, pudimos ayudar a dar forma al lanzamiento de LND 0.18, (que estaba en su fase RC final en ese momento), asegurándonos de que se lanzara con todo lo necesario para admitir mensajes onion desde el principio.

Código de Aplicación Listo para Producción Nuestro código monolítico de prueba de concepto experimentó una transformación significativa. La base de código se dividió en componentes más pequeños y enfocados. Esto mejoró la capacidad de mantenimiento y facilitó una integración más fluida con la arquitectura existente de Strike. A un alto nivel, esto comprendió:

  • Agregar bibliotecas de soporte como un Analizador BOLT 12, una implementación de DNSSEC para búsquedas DNS seguras y una fachada gRPC para interactuar con el servidor gRPC de LNDK.
  • Integración con nuestro grupo de nodos LND existente para gestionar las conexiones de nodos LND y distribuir la carga a través de nuestros sistemas.
  • Finalmente, integrar toda la solución con nuestros sistemas principales, API y productos empresariales y de consumo para habilitar pagos BOLT 12 desde Strike.

El Futuro de BOLT 12 en Strike

Aunque hemos logrado con éxito nuestro objetivo de habilitar pagos BOLT 12 básicos dentro de Strike, esto es solo el comienzo. Nuestra integración inicial de BOLT 12 admite el flujo de pago de ofertas más básico, pero allana el camino para características BOLT 12 más emocionantes y avanzadas con el tiempo.

  • Experiencia de Usuario Mejorada: Los usuarios pueden beneficiarse de códigos QR reutilizables, privacidad mejorada a través de mensajes onion hoy, y en el futuro esperamos habilitar funciones más avanzadas como reembolsos y retiros a medida que el ecosistema BOLT 12 madura.
  • Innovación Continua: Estamos comprometidos a permanecer a la vanguardia de la innovación de la Lightning Network. Continuaremos trabajando con la comunidad más amplia para ampliar los límites de LN e integrar tecnologías emergentes como BOLT 12 para brindar a nuestros usuarios la mejor experiencia posible.

Esperamos que esta publicación del blog proporcione una mirada interesante detrás de escena de nuestro viaje de integración de BOLT 12. Como puedes ver, en nuestro caso la implementación requirió una cantidad considerable de trabajo dado que estábamos abriendo camino y ayudando a desarrollar LNDK en el proceso. Sin embargo, con gran parte de este trabajo preliminar ya hecho y disponible en el universo de código abierto, hemos demostrado que existe un camino viable para implementar BOLT 12 para los usuarios de LND. Y para los usuarios de otras implementaciones de nodos como CLN y Eclair, estas capacidades también están disponibles.

Estamos emocionados de ver la evolución continua de BOLT 12 a medida que más servicios y operadores de nodos actualizan en los próximos meses y años.

Si tienes alguna pregunta, ¡no dudes en ponerte en contacto con nosotros!

culture

Money Matters Mailbag: Episode 31

Bitcoin & Dollar Liquidity: Who's Really in Control?

09 Sep, 2024

© 2024 Strike

De cero a bitcoin.

Strike

BitcoinPagosEnviar globalmenteNegociosAPI

Plataforma