# 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?

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

## Conexión grpc a LND

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
:::