Pedidos de Pago (BOLT 11)

El formato de la invoice, por dentro

⚡ Lightning · Técnico

La invoice es el pedido de pago que la origen lee para saber cuánto, para quién y con qué payment_hash. El formato es el BOLT 11, y en el fondo es una cadena bech32 — la misma codificación de las direcciones segwit, pero sin límite de tamaño.

La estructura de la cadena

Una invoice lnbc… tiene dos partes, separadas por el último 1 (el separador bech32):

Estructura de una invoice BOLT 11: HRP (ln + red + valor), separador 1, y la parte de datos (timestamp, campos con tag y firma), todo en bech32.

Los campos con tag

Cada campo de la parte de datos tiene un tipo (1 carácter bech32) y un tamaño. Los principales:

La firma prueba quién la emitió

Al final viene la firma (65 bytes: r, s y un byte de recuperación), hecha sobre el HRP + la parte de datos. El detalle elegante: con el byte de recuperación, el pagador puede recuperar la clave pública (el node id) de quien firmó — así que la invoice prueba quién la emitió, incluso sin el campo n.

A partir de la firma (r, s y byte de recuperación), el pagador recupera la clave pública del emisor — probando quién creó la invoice.

Pega una invoice y ve todo decodificado — incluso el nodo recuperado de la firma:

Decodificador de Invoice (BOLT 11)

Decodificador de Invoice (BOLT 11)

Pega una invoice lnbc... de prueba para ver red, valor, campos y nodo firmante. No pegues datos privados.

Acepta el texto de la invoice, opcionalmente con prefijo lightning:.

Resultado de la invoice

La evolución: offers (BOLT 12)

La invoice BOLT 11 tiene dos inconvenientes: es de uso único (cada pago necesita una invoice nueva) y expira. Terrible para un botón de donación fijo o un QR impreso en un cartel.

El BOLT 12 lo resuelve con los offers: una dirección de pago reutilizable (la cadena empieza con lno1). Un mismo offer sirve para cualquier valor, cuantas veces quieras, y no expira.

Cómo un offer se convierte en un pago

A diferencia del BOLT 11 (donde la invoice ya es el documento final que pagas), el offer es solo una invitación. A la hora de pagar:

  1. La cartera del pagador lee el offer y envía una solicitud de invoice (invoice_request) al destinatario — por la propia red Lightning, en un mensaje cifrado (onion), y no por un servidor web.
  2. El destinatario responde con una invoice fresca (una invoice BOLT 12, con su propio payment_hash), firmada al momento.
  3. La cartera paga esa invoice normalmente.

Todo eso ocurre tras bastidores, en segundos, y usa caminos cegados (blinded paths) para ocultar el nodo del destinatario. Resultado: cada pago tiene una invoice única (sin reutilizar payment_hash) y quien recibe queda más privado.

Offer (BOLT 12) × Lightning Address

Los dos dan una "dirección reutilizable", pero por caminos bastante diferentes:

Por eso nuestra página de donación ofrece los dos: una Lightning Address (funciona en casi cualquier cartera) y, para quien tenga una cartera compatible, un offer BOLT 12.

El BOLT 12 aún está en adopción: ya funciona en carteras/nodos como Phoenix, Core Lightning y versiones recientes de LND, pero no todas las carteras lo reconocen (Wallet of Satoshi, por ejemplo, todavía no). También hay extensiones en desarrollo, como offers con recurrencia (suscripciones).

A continuación, bajamos al nivel de los mensajes intercambiados entre los nodos: el protocolo Wire.