# L402 Workshop ###### tags: `talleres_mln` Este es un workshop de introducción al estándar L402. **Tabla de contenido** [TOC] ## Autor Twitter para correcciones, comentarios o sugerencias: [@bitao36](https://twitter.com/bitao36) 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). ## Requerimientos :information_source: :::info Tener instalado Linux Tener instalado Polar Haber creado una red con dos nodos uno de ellos LND Tener instalado Python 3.10 ::: ## Que son los códigos de estado HTTP Los códigos de estado son una parte esencial del protocolo HTTP, utilizados para comunicar el resultado de una solicitud realizada por un cliente a un servidor. ## Por qué el estado 402 no fué usado? ![image](https://hackmd.io/_uploads/B1Dhj0pwA.png) Entre todos los códigos de estado definidos en el estándar HTTP, hay uno que fue prácticamente olvidado: el código de estado 402. El código de estado 402, “Pago Requerido” (en inglés, “Payment Required”), fue definido en la especificación original de HTTP/1.1, pero nunca se ha utilizado de manera generalizada en la web. Fué pensado para uso futuro, pero el futuro es ahora. ## Que es L402 Olaoluwa Osuntokun de Lightning Labs el 30 de Marzo del 2020 publica la especificación LSAT la cual contempla el uso del código de estado http 402 , un token de autorización llamado macaroon y un lightning invoice. ``` LSAT= HTTP 402 + MACAROON + LIGHTNING INVOICE ``` LND que es la implementación de la lightning network desarrollada por Lightning Labs usa macaroons, no así todas las demás implementaciones, entonces el estándar ha pasado a llamarse L402, y así el macaroon se puede generalizar como un token de la siguiente forma: ``` L402= HTTP 402 + TOKEN + LIGHTNING INVOICE ``` Bueno , esto suena muy bien pero ¿para que sirve? L402 sirve como autenticación y al mismo tiempo como un sistema de pago nativo de Internet utilizando Lightning Network. Un negocio puede ofrecer un nuevo nivel de servicio que se ubica entre lo gratuito y la suscripción, sin necesidad de inicio de sesión, correo electrónico, ni contraseñas. Los casos de uso más importantes y visibles son: Pago por acceso a contenido premium,pay-per-view,micropagos automatizados,autenticación y autorización en servicios basados en Lightning Network y monetización de APIs. ## Diagrama básico de como funciona ![image](https://hackmd.io/_uploads/HybynATDR.png) ## Conexión grpc a LND ![ClienteServidorLND.drawio](https://hackmd.io/_uploads/SJ3qqCawR.png) En este diagrama simple se muestran los componentes que nos permitirán ejecutar el proyecto: * Cliente: Postman u otro * Servidor: Ejecución del proyecto Python flask * LND: Nodo seleccionado * Lightning Network: Red de regtest ejecutada en Polar ## Implementación en Python En este repositorio está una implementación sencilla de L402 https://github.com/bitao36/L402LNDPy ### Ejecutar el proyecto * Descarga el repositorio * Ejecuta Polar y carga la red * Agrega el archivo cert y los macaroons del nodo LND en su correspondiente carpeta * Ejecuta el proyecto En este momento el servidor esta escuchando peticiones en el puerto 8080 ### Testear Puedes usar Postman o cualquier otro cliente que te permita testear APIS Introduce la url http://127.0.0.1:8080 y se debe recibir ``` Response: Needs payment Status code: 402 Header: WWW-Authenticate : L402 token="", invoice=lnbc.... ``` Ahora debes pagar el invoice para obtener la preimagen y hacer de nuevo el request agregando la siguiente cabecera: ``` Authorization: L402 token:preimagen ``` En este momento no se ha implementado alguna autenticación para el token por eso con solo poner la palabra token y una preimagen se dará acceso al recurso. Si proporcionaste una preimagen válida debes recibir la siguiente respuesta: ``` Response: Premium content Status code: 200 ``` ## :zap: Donaciones :::success Si te fue útil este material puedes agradecer a @bitao36, enviándole un aporte vía Lightning Address: bitao36@getalby.com :::