NIP-02는 팔로우 리스트를 저장하는 kind 3 이벤트를 정의합니다. 이 간단한 메커니즘이 타임라인을 가능하게 하는 소셜 그래프를 구동합니다.

구조

kind 3 이벤트에는 팔로우한 pubkey를 나열하는 p 태그가 포함됩니다:

{
  "id": "d7a8f...",
  "pubkey": "a3b9c...",
  "created_at": 1734912000,
  "kind": 3,
  "tags": [
    ["p", "91cf9..af5f", "wss://alicerelay.example.com", "alice"],
    ["p", "14aeb..8dad", "wss://bobrelay.example.com", "bob"],
    ["p", "612ae..982b", "", ""]
  ],
  "content": "",
  "sig": "e4f8a..."
}

p 태그에는 네 가지 위치가 있습니다: 태그 이름, 팔로우한 pubkey(hex), 선택적 릴레이 URL 힌트, 선택적 “petname”(로컬 닉네임). 릴레이 힌트는 다른 클라이언트에게 해당 사용자의 이벤트를 어디서 찾을 수 있는지 알려줍니다. petname을 사용하면 자체 선언된 표시 이름에 의존하지 않고 연락처에 기억하기 쉬운 이름을 지정할 수 있습니다.

교체 가능 동작

Kind 3은 교체 가능 범위(0, 3, 10000-19999)에 속하므로 릴레이는 pubkey당 최신 버전만 유지합니다. 새 사람을 팔로우하면 클라이언트가 기존의 모든 팔로우와 새 팔로우를 포함하는 완전히 새로운 kind 3을 게시합니다. 즉, 팔로우 리스트는 매번 완전해야 하며 증분 업데이트를 게시할 수 없습니다.

타임라인 구축

홈 피드를 구성하기 위해 클라이언트는 사용자의 kind 3을 가져와 모든 p 태그 pubkey를 추출한 다음 해당 작성자의 kind 1 이벤트를 구독합니다:

["REQ", "home", {"kinds": [1], "authors": ["91cf9...", "14aeb...", "612ae..."], "limit": 50}]

릴레이가 일치하는 노트를 반환하면 클라이언트가 렌더링합니다. kind 3의 릴레이 힌트는 클라이언트가 각 팔로우한 사용자에 대해 어떤 릴레이를 쿼리할지 알 수 있게 도와줍니다.

Petname과 신원

petname 필드는 탈중앙화된 명명 체계를 가능하게 합니다. 사용자가 프로필에서 주장하는 이름을 신뢰하는 대신 자신만의 레이블을 지정할 수 있습니다. 클라이언트는 “alice (내 동생)“처럼 표시할 수 있으며, 여기서 “alice"는 그녀의 kind 0 프로필에서 가져오고 “내 동생"은 당신의 petname입니다. 이는 전역 사용자 이름이 제공할 수 없는 맥락을 제공합니다.

실용적 고려 사항

kind 3 이벤트는 교체 가능하고 완전해야 하므로 클라이언트는 업데이트 시 알 수 없는 태그를 보존해야 합니다. 다른 클라이언트가 당신의 클라이언트가 이해하지 못하는 태그를 추가한 경우, 맹목적으로 덮어쓰면 해당 데이터가 손실됩니다. 처음부터 다시 구축하지 말고 새 팔로우를 추가하세요.


주요 출처:

언급된 곳:

참고: