NIP-91은 Nostr 릴레이 구독에서 태그 배열에 대한 AND 필터 의미론을 추가한다. 여러 릴레이에 구현이 등장한 후 2026-03-03에 머지되었다.

문제점

Nostr의 필터 시스템(NIP-01)은 단일 태그 필터 내의 여러 값을 OR 논리로 결합한다. 클라이언트가 필터에 두 개의 p 태그 값을 지정하면, 릴레이는 어느 한쪽 pubkey에 매칭되는 이벤트를 반환한다. 두 pubkey를 동시에 참조하는 이벤트만 요청할 방법이 없었다.

이로 인해 클라이언트는 릴레이에서 이벤트를 과다 수신한 후 로컬에서 필터링해야 했고, 대역폭 사용량과 처리 시간이 증가했다.

작동 방식

NIP-91은 태그 배열에 대한 AND 의미론을 도입한다. 클라이언트가 지정된 태그 값 모두에 매칭되는 이벤트가 필요할 때, 기본 합집합(union) 동작 대신 교집합(intersection) 매칭을 선택할 수 있다.

이는 “대화의 두 참여자 모두를 태그한 이벤트"나 “두 개의 필수 라벨을 동시에 가진 이벤트” 같은 쿼리에 중요하다. 이 변경 전에는 릴레이가 더 넓은 상위 집합만 응답할 수 있었고, 정확한 교집합은 클라이언트에게 맡겨야 했다.

왜 중요한가

AND 필터는 릴레이 측 인덱스를 더 유용하게 만든다. 클라이언트가 릴레이에 더 작고 이미 관련성 높은 결과 세트를 요청할 수 있어, 대역폭과 로컬 후처리가 줄어든다. 이 효과는 모바일 클라이언트와 태그가 많은 대규모 데이터셋에 대한 쿼리에서 가장 두드러진다.

상호운용성 참고사항

머지 시점에 nostr-rs-relay, satellite-node, worker-relay, applesauce에 작동하는 구현이 존재했다. 이 제안은 번호 재지정 전에 NIP-119로 번호가 매겨져 있었다.

릴레이 채택이 따라잡는 동안 클라이언트는 여전히 혼합된 지원 상태를 예상해야 한다. 실용적인 폴백은 새로운 의미론을 구현하지 않은 릴레이를 위해 기존 클라이언트 측 교집합 경로를 유지하는 것이다.


주요 출처:

언급된 뉴스레터:

같이 보기: