|
|
@@ -15,7 +15,7 @@
|
|
|
|
| 33863 | Campaign | Self-authored fundraising campaign with a single Bitcoin wallet endpoint (`bc1...` or `sp1...`) |
|
|
|
|
| 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 |
|
|
|
|
| 30385 | Community Stats Snapshot | Pre-computed per-country / global community leaderboards |
|
|
|
|
| 36639 | Pledge | Donor pledge for concrete submissions, stored as sats |
|
|
|
|
| 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
|
|
|
|
### 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
|
|
|
|
### 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.
|
|
|
|
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
|
|
|
|
### Event Structure
|
|
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
{
|
|
|
|
"kind": 15063,
|
|
|
|
"kind": 14672,
|
|
|
|
"pubkey": "<author-pubkey>",
|
|
|
|
"pubkey": "<author-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. ...",
|
|
|
|
"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": [
|
|
|
|
"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. |
|
|
|
|
| `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`. |
|
|
|
|
| `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
|
|
|
|
### Querying
|
|
|
|
|
|
|
|
|
|
|
|
**Fetch a user's verifier statement:**
|
|
|
|
**Fetch a user's verifier statement:**
|
|
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
```json
|
|
|
|
{ "kinds": [15063], "authors": ["<pubkey>"], "limit": 1 }
|
|
|
|
{ "kinds": [14672], "authors": ["<pubkey>"], "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).
|
|
|
|
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
|
|
|
|
### 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.
|
|
|
|
- **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.
|
|
|
|
- **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).
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|