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.
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:
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.
La integración involucró varios componentes clave:
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.
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:
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:
El siguiente diagrama muestra el flujo de pagos desde un alto nivel:
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.
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.
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:
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ó:
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.
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!
© 2024 Strike
De cero a bitcoin.
Legal