NIP-57: Zaps
NIP-57 define zaps, una forma de adjuntar pagos Lightning a identidades y contenido de Nostr. Estandariza tanto la solicitud de una invoice habilitada para zap como el evento de recibo que las carteras publican después del pago.
Cómo funciona
- El cliente descubre el endpoint LNURL del destinatario a partir de los metadatos del perfil o de una etiqueta
zapen el evento objetivo. - El cliente envía una solicitud de zap kind
9734firmada al callback LNURL del destinatario, no a los relays. - El usuario paga la invoice.
- El servidor de la cartera del destinatario publica un recibo de zap kind
9735en los relays listados en la solicitud de zap. - Los clientes validan y muestran el zap.
Solicitud de zap (kind 9734)
La solicitud de zap es un evento firmado que identifica al pagador y al objetivo previsto. Suele incluir:
- Etiqueta
pcon la pubkey del destinatario - Etiqueta
econ el evento que recibe el zap (opcional) - Etiqueta
amounten millisatoshis - Etiqueta
relaysque lista dónde publicar el recibo
El contenido direccionable puede usar una etiqueta a en lugar de, o junto con, una etiqueta e. La etiqueta opcional k registra el kind del objetivo.
Recibo de zap (kind 9735)
Lo publica el servidor de la cartera del destinatario después de la confirmación del pago. Contiene:
- La solicitud de zap original en una etiqueta
description - Etiqueta
bolt11con la invoice pagada - Etiqueta
preimageque prueba el pago
Los clientes deberían validar el recibo frente a la nostrPubkey LNURL del destinatario, el monto de la invoice y la solicitud de zap original. Un recibo sin esa validación es solo una afirmación.
Confianza y tradeoffs
Los zaps son útiles porque hacen visibles los pagos dentro del grafo social, pero el recibo sigue siendo creado por la infraestructura de cartera del destinatario. La propia especificación señala que un recibo de zap no es una prueba universal de pago. Se entiende mejor como una declaración firmada por la cartera de que se pagó una invoice vinculada a una solicitud de zap.
Un cliente que valida debe comprobar cuatro cosas antes de mostrar un recibo como zap: que la firma del recibo coincide con la nostrPubkey anunciada en la respuesta LNURL del destinatario, que el monto de la invoice bolt11 coincide con la etiqueta amount de la solicitud de zap embebida, que el hash de descripción de la invoice compromete la solicitud de zap serializada y que el preimage hashea al payment_hash de la invoice. Los clientes que renderizan conteos agregados de zaps sin realizar estas comprobaciones son trivialmente falseables por un atacante que publique eventos kind 9735 forjados.
Zaps privados y anónimos
Los zaps privados añaden una capa de confidencialidad encima. Un remitente puede cifrar el content de la solicitud de zap para el destinatario e incluir una etiqueta anon en la solicitud externa, de modo que la red de relays vea el objetivo del pago pero no pueda leer la nota adjunta. Un zap anónimo va un paso más allá: el cliente genera un keypair efímero nuevo para la propia solicitud de zap, así que el recibo sigue probando que hubo un pago, pero el destinatario no puede vincular el zap con la pubkey de largo plazo del remitente.
Objetivos de zap y splits
NIP-57 sustenta el sistema de objetivos de zap especificado en NIP-75. Un objetivo es un evento kind 9041 que declara una cantidad objetivo y un conjunto de relays donde cuentan los recibos, y los clientes calculan el progreso sumando montos validados bolt11 de eventos kind 9735 coincidentes.
Los zap splits, definidos en un apéndice del NIP, permiten que un destinatario publique un perfil kind 0 con múltiples etiquetas zap ponderadas para que un único pago de zap se divida atómicamente entre varias pubkeys. Amethyst, Damus y noStrudel implementan el pago dividido de extremo a extremo.
Fuentes primarias:
Mencionado en:
- Boletín #1: Noticias
- Boletín #2: Noticias
- Boletín #3: Cambios notables de código
- Boletín #9: Actualizaciones de NIP
- Boletín #19: Análisis de NIP
Ver también: