diff --git a/NIP.md b/NIP.md index 691f8db4..6e9ba58f 100644 --- a/NIP.md +++ b/NIP.md @@ -15,7 +15,7 @@ | 33863 | Campaign | Self-authored fundraising campaign with a single Bitcoin wallet endpoint (`bc1...` or `sp1...`) | | 30385 | Community Stats Snapshot | Pre-computed per-country / global community leaderboards | | 36639 | Pledge | Donor pledge for concrete submissions, stored as sats | -| 15063 | Verifier Statement | Self-authored statement describing how the author verifies campaigns (one per user) | +| 14672 | Verifier Statement | Self-authored statement describing how the author verifies campaigns (one per user) | ### Agora Protocols @@ -741,7 +741,7 @@ Fold by `(coord, moderator)`, keeping the newest label per pair. A campaign is " --- -## Kind 15063: Verifier Statement +## Kind 14672: Verifier Statement ### Summary @@ -749,13 +749,13 @@ Replaceable event kind for a **self-authored statement describing how the author Exactly one statement per user (replaceable, no `d` tag): publishing a new event replaces the previous one. Clients surface the statement prominently on the author's profile page. -This kind is **distinct from** the `agora.verified` campaign-verification labels (kind 1985, see Kind 33863 above). Those are moderator-signed, gated by the Team Soapbox follow pack, and vouch for one specific campaign. A kind 15063 statement is an open, self-published description of an author's *general* verification methodology and confers no special authority — it is a reputation signal donors read, not an access-control mechanism. +This kind is **distinct from** the `agora.verified` campaign-verification labels (kind 1985, see Kind 33863 above). Those are moderator-signed, gated by the Team Soapbox follow pack, and vouch for one specific campaign. A kind 14672 statement is an open, self-published description of an author's *general* verification methodology and confers no special authority — it is a reputation signal donors read, not an access-control mechanism. ### Event Structure ```json { - "kind": 15063, + "kind": 14672, "pubkey": "", "content": "I personally visit each campaign organizer over video call, confirm their identity against a government ID, and cross-check the cause with at least two independent local sources before I vouch for it. ...", "tags": [ @@ -776,24 +776,24 @@ The `content` field is the verifier statement, formatted as **Markdown**. Client | `alt` | Recommended | NIP-31 human-readable fallback describing the event's purpose. | | `t` | Optional | Agora content marker (`t:agora`). Added at publish time via `withAgoraTag`. | -The statement carries no queryable fields beyond the author and kind — it is identified entirely by `(15063, pubkey)`. +The statement carries no queryable fields beyond the author and kind — it is identified entirely by `(14672, pubkey)`. ### Querying **Fetch a user's verifier statement:** ```json -{ "kinds": [15063], "authors": [""], "limit": 1 } +{ "kinds": [14672], "authors": [""], "limit": 1 } ``` Clients MUST filter by `authors` — a verifier statement only describes the diligence of the pubkey that signed it, so an unfiltered query would be meaningless (and would let anyone's statement be attributed to anyone). ### Client Behavior -- **Becoming a verifier:** a user publishes a kind 15063 event with their statement in `content`. No approval, allowlist, or moderation gate applies. +- **Becoming a verifier:** a user publishes a kind 14672 event with their statement in `content`. No approval, allowlist, or moderation gate applies. - **Withdrawing:** a user republishes the event with empty `content`, or publishes a NIP-09 kind 5 deletion referencing the event. Either way clients stop rendering the verifier section. - **Rendering:** clients SHOULD surface the statement prominently on the author's profile (e.g. a dedicated "Verifier" section in the profile overview), rendering the Markdown content sanitized. -- **Editing:** because the kind is replaceable, the latest event per `(15063, pubkey)` wins. Clients performing an edit SHOULD pass the previous event as `prev` so `published_at` is preserved (NIP-23 convention). +- **Editing:** because the kind is replaceable, the latest event per `(14672, pubkey)` wins. Clients performing an edit SHOULD pass the previous event as `prev` so `published_at` is preserved (NIP-23 convention). --- diff --git a/src/components/profile/ProfileIdentityRail.tsx b/src/components/profile/ProfileIdentityRail.tsx index c4e56957..580a67bc 100644 --- a/src/components/profile/ProfileIdentityRail.tsx +++ b/src/components/profile/ProfileIdentityRail.tsx @@ -390,7 +390,7 @@ export function ProfileOverviewSections({ const { t } = useTranslation(); return (
- {/* Verifier statement (kind 15063) — surfaced first so donors can + {/* Verifier statement (kind 14672) — surfaced first so donors can immediately see how this account verifies campaigns. Renders nothing when the profile has not published a statement. */} diff --git a/src/components/profile/ProfileVerifierSection.tsx b/src/components/profile/ProfileVerifierSection.tsx index b94e9c46..75c75ba7 100644 --- a/src/components/profile/ProfileVerifierSection.tsx +++ b/src/components/profile/ProfileVerifierSection.tsx @@ -12,7 +12,7 @@ interface ProfileVerifierSectionProps { } /** - * Renders a profile's kind 15063 verifier statement — a self-published + * Renders a profile's kind 14672 verifier statement — a self-published * explanation of how the account verifies campaigns. Surfaced prominently * in the profile overview so donors can judge whether to trust the * account's verifications. diff --git a/src/hooks/useVerifierStatement.ts b/src/hooks/useVerifierStatement.ts index 15ceb33e..77a36750 100644 --- a/src/hooks/useVerifierStatement.ts +++ b/src/hooks/useVerifierStatement.ts @@ -7,16 +7,16 @@ import { fetchFreshEvent } from '@/lib/fetchFreshEvent'; import { withAgoraTag } from '@/lib/agoraNoteTags'; /** - * Kind 15063 — Verifier Statement (see NIP.md). + * Kind 14672 — Verifier Statement (see NIP.md). * * A replaceable event (one per user) whose `content` is a freeform Markdown * statement describing how the author verifies campaigns. Anyone can publish * one to "become a verifier"; empty content means the author has withdrawn. */ -export const VERIFIER_STATEMENT_KIND = 15063; +export const VERIFIER_STATEMENT_KIND = 14672; /** - * Query a user's verifier statement (kind 15063). + * Query a user's verifier statement (kind 14672). * * Returns the trimmed Markdown statement, or `null` when the user has no * statement or has withdrawn it (empty content).