Que son los ficheros macaroon en lnd

En esta entrada revisaremos que son los ficheros macaroon utilizados en la implementación de Lightning Network LND y cuál es su funcionamiento.   Vamos a implementar el uso de un fichero invoice.macaroon remoto que nos permitirá realizar ciertas operaciones sobre las facturas creando y pagando una factura de un 1 satoshi.

¿Que son los ficheros macaroon?

Los ficheros macaroon son una especie de cookie utilizados por el cliente lncli y el servidor lnd para comprobar que se tiene derecho a efectuar ciertas operaciones sobre un nodo de Lightning Network.    Cuando se generan los ficheros el servicio busca el ID del macaroon y verifica que dicho fichero se firmó inicialmente con la clave raíz del servicio.   Una de las características especiales de los ficheros macaroon es que se pueden generar ficheros con capacidades limitadas sobre el nodo como por ejemplo generar facturas y poder compartirlo con alguien más.

Por defecto cuando se inicia el servicio lnd se crean 3 ficheros macaroon,  que son el admin.macaroon, el readonly.macaroon y el invoice.macaroon.  Como su nombre lo indica el readonly permite solo ejecutar comandos de solo lectura,  el invoice solo comandos relacionados a las facturas y el admin permite la administración completa del nodo.

¿Para qué sirven estos ficheros?

Lnd permite ejecutar métodos RPC por defecto mediante la exposición de un servicio REST y utiliza los macaroon para la validación y autenticación.   Se debe tener en cuenta que si se ejecuta lnd con la opción –no-macaroons el servidor no tendrá en cuenta ningún llamado de validación.  Para comprobar su funcionamiento debemos utilizar un cliente GRPC que accedan al servicio rest de LND mediante https.  Dado que los ficheros macaroon se codifican como una cadena hexadecimal se debe enviar en dicho formato para lograr la conexión.  Para este caso hemos colaborado  con @jochemin de https://bitcoineando.es para poder acceder a su nodo de forma remota utilizando el fichero invoice.macaroon que él nos ha compartido.   Luego hemos obtenido la cadena hexa del fichero utilizando el comando xxd referido en la documentación del siguiente repositorio.

Para poder implementar el uso de esta funcionalidad hemos clonado el repositorio ubicado en https://github.com/robclark56/lightningtip-PHP/blob/master/frontend/lightningTip.php  modificando la cadena de conexión para acceder su nodo.

Para comprobar que tenemos bien codificada la cadena hexadecimal del fichero invoice del nodo remoto debemos ejecutar desde la consola un llamado al servidor usando CURL. Ejecutando este comando nos permite acceder el API y llamar el método getinfo:

Como el fichero invoice macaroon no nos da permiso de ejecutar el comando getinfo obtenemos esta salida:

Sin embargo al llamar el método invoices nos lista todas las facturas:  (hemos ocultado algunas cadenas y la dirección IP Pública).

Posteriormente hemos modificado el fichero lightningTip.php para cambiar la visualización así:

Ahora ya podemos crear una factura en el nodo de Jochemin y pagarla en este link:

Se aprecia que hemos creado una factura con descripción «prueba» y la hemos pagado. Consultando la factura luego de esto vemos que se ha creado y pagado correctamente en el nodo remoto.

Con estos pasos podemos utilizar una de las funcionalidades de los ficheros macaroon para crear y pagar facturas de cualquier Nodo LND que haya compartido su fichero con nosotros.

Artículo anterior

Que es un nodo de Lightning Network

Siguiente artículo

What are macaroon files in LND