3.8 KiB
NIP-58
Badges
draft
optional
author:cameri
A special event meaning "Badge" is defined as an event with kind 8
having a list of p
tags,
one for each pubkey the author (issuer) wishes to award. A parameterized replaceable event meaning "Profile Badges" is defined as an event with kind 30008
with a d
tag identifier equal to profile_badges
and having an ordered list of e
tags, one for each badge the user wishes to show on their profile. Badges as immutable events are non-transferrable.
Badge event
A Badge's content
field is a JSON-stringified object containing the fields short_desc
, image
, thumbs
and optionally long_desc
. In the case where long_desc
is omitted, it is treated the same equal to short_desc
.
The short_desc
and long_desc
fields are strings that may contain the meaning behind the badge and/or
the reason of it's issuance.
The image
field is the URL of a high-resolution image representing the badge.
The thumbs
field is an object containing thumbnail versions of the image referenced in the image
field. The format of the keys are the dimensions width
xheight
in pixels and the value is an URL pointing to respective thumbnail image.
Profile Badges Event
The number of badges a pubkey can receive is unbounded. The Profile Badge event allows individual users to choose the badges (and order) to show on their profiles.
The content is not used and SHOULD be blank.
The e
tags in the Profile Badge event MUST reference kind 8
events containing a p
tag that matches that of the Profile Badge. Badges that don't meet this criteria MUST be ignored.
Motivation
Users MAY be awarded badges in recognition, in gratitude, for participation, or in appreciation of a certain goal, task or cause.
Users MAY choose to decorate their profiles with badges for fame, notoriety, recognition, support, etc., from badge issuers they deem reputable.
Recommendations
Badge issuers MAY include some Proof of Work as per NIP-13 when minting badges to embed them with an energy cost, arguably making them more special and valuable for users that wish to collect them.
Clients MAY whitelist badge issuers (pubkeys) for the purpose of ensuring they retain a valuable/special factor for their users.
Badge image recommended aspect ratio is 1:1 with a high-res size of 1024x1024 pixels.
Badge thumbnail image recommended sizes are: 512x512 (xl), 256x256 (l), 64x64 (m), 32x32 (s) and 16x16 (xs).
Clients SHOULD render the most appropriate badge thumbnail according to the number of badges chosen by the user and space available. Clients SHOULD render the high-res version on user action (click, tap, hover).
Example of Badge Event
{
"id": "<charlie's issued badge event id>",
"kind": 8,
"pubkey": "<charlie's (issuer) pubkey>",
"tags": [
["p", "<alice's (recipient) pubkey in hex>"]
],
"content": "{
\"long_desc\": \"This user joined our relay 2 years ago.\",
\"short_desc\": \"Two-Year Club\",
\"image\": \"https://relay.nostr/badges/two-year-club.png\",
\"thumbs\": {
\"512x512\": \"https://relay.nostr/badges/two-year-club-512x512.png\",
\"256x256\": \"https://relay.nostr/badges/two-year-club-256x256.png\",
\"128x128\": \"https://relay.nostr/badges/two-year-club-128x128.png\",
\"64x64\": \"https://relay.nostr/badges/two-year-club-64x64.png\",
\"32x32\": \"https://relay.nostr/badges/two-year-club-32x32.png\",
\"16x16\": \"https://relay.nostr/badges/two-year-club-16x16.png\",
}
}",
...other fields...
}
Example of a Profile Badges Event
{
"kind": 30008,
"pubkey": "<alice's pubkey in hex>",
"content": "",
"tags": [
["d", "profile_badges"],
["e", "<charlie's issued badge event id>"],
]
...other fields...
}