---
# System prepended metadata

title: L402 Workshop
tags: [talleres_mln]

---

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