NIP-67 è una proposta aperta che estende il messaggio EOSE esistente in NIP-01 con un terzo elemento facoltativo che indica se il relay ha consegnato tutti gli eventi memorizzati che corrispondono al filtro. L’obiettivo è sostituire l’euristica poco affidabile che i client usano oggi per capire se una subscription è davvero esaurita o è stata interrotta da un limite imposto dal relay.

Il problema

EOSE segna il confine tra eventi memorizzati ed eventi in tempo reale, ma non dice nulla sulla completezza. In pratica i relay impongono un limite per subscription, spesso tra 300 e 1000 eventi, indipendente dal limit richiesto dal client. Un client che chiede le ultime 500 note a un relay limitato a 300 riceve 300 eventi e un EOSE, senza poter distinguere tra “questi sono tutti” e “ci siamo fermati a metà”. Il workaround attuale consiste nel confrontare il numero di eventi con il limit del client e paginare in modo difensivo, ma questo può sia perdere eventi quando il limite del relay è più basso, sia sprecare un round trip quando il limite coincide con il numero reale dei risultati.

I pareggi sui boundary peggiorano la situazione. Paginare con until = oldest_created_at rischia di perdere o duplicare eventi che condividono il timestamp più vecchio del batch, a seconda di come il relay confronta i timestamp.

Il cambiamento

NIP-67 aggiunge un terzo elemento facoltativo a EOSE:

["EOSE", "<subscription_id>", "finish"]   // tutti gli eventi memorizzati corrispondenti sono stati consegnati
["EOSE", "<subscription_id>"]             // nessuna affermazione di completezza (legacy)

Viene definito solo il segnale positivo. Un relay che dichiara il supporto a NIP-67 ma omette l’indicatore sta dicendo che c’è altro. Un relay che non dichiara il supporto continua a usare l’euristica esistente, quindi il cambiamento è retrocompatibile con tutti i client e relay attuali.

I client che sanno che il relay supporta NIP-67 possono smettere di paginare non appena vedono "finish", evitare il round trip extra obbligatorio quando il limite coincide esattamente con il result set e mostrare all’utente un’informazione di completezza accurata.

Stato

La proposta è aperta come PR #2317 nel repository dei NIP.


Fonti primarie:

Menzionato in:

Vedi anche: