clone

every nostr nip as a chapter of an illustrated, early-2000s printed game manual

main
nip.guide / site / nips / 85.html
85.html 25.6K
1<!DOCTYPE html>2<html lang="en">3<head>4<meta charset="utf-8">5<meta name="viewport" content="width=device-width, initial-scale=1">6<title>NIP-85 - Trusted Assertions — Nostr Instruction Manual</title>7<meta name="description" content="NIP-85: Trusted Assertions. Providers publish signed web-of-trust scores and counts as kinds 30382-30385; users pick providers with kind 10040.">8<link rel="preload" href="../assets/fonts/michroma-400-latin.woff2" as="font" type="font/woff2" crossorigin>9<link rel="preload" href="../assets/fonts/exo2-var-latin.woff2" as="font" type="font/woff2" crossorigin>10<link rel="preload" href="../assets/fonts/sairacondensed-600-latin.woff2" as="font" type="font/woff2" crossorigin>11<link rel="preload" href="../assets/fonts/sairacondensed-700-latin.woff2" as="font" type="font/woff2" crossorigin>12<link rel="preload" href="../assets/fonts/sairacondensed-500-latin.woff2" as="font" type="font/woff2" crossorigin>13<link rel="preload" href="../assets/fonts/sharetechmono-400-latin.woff2" as="font" type="font/woff2" crossorigin>14<link rel="preload" href="../assets/fonts/exo2-400i-latin.woff2" as="font" type="font/woff2" crossorigin>15<link rel="icon" href="../assets/favicon.svg" type="image/svg+xml">16<link rel="stylesheet" href="../assets/manual.css">17</head>18<body>1920<svg width="0" height="0" style="position:absolute">21 <defs>22 <marker id="arr" markerWidth="9" markerHeight="9" refX="7" refY="4.5" orient="auto">23 <path d="M1,1 L8,4.5 L1,8 Z" fill="#f26a00"/>24 </marker>25 <marker id="arrb" markerWidth="9" markerHeight="9" refX="7" refY="4.5" orient="auto">26 <path d="M1,1 L8,4.5 L1,8 Z" fill="#2e5f9e"/>27 </marker>28 </defs>29</svg>3031<div class="page">32 <span class="staple s1"></span><span class="staple s2"></span>3334 <header class="band">35 <a class="logo" href="../index.html">NOSTR<b>▸</b>PROTOCOL MANUAL</a>36 <span class="booklet-note">Chapter 85 - Web of Trust</span>37 </header>38 <nav class="tabs">39 <a href="../index.html">Contents</a>40 <a href="#overview" class="on">Overview</a>41 <a href="#spec">Spec</a>42 <a href="#examples">Examples</a>43 <a href="#history">History</a>44 </nav>4546 <div class="chapter">47 <div class="nipno" data-n="85">85</div>48 <div class="titles">49 <div class="kicker">Nostr Implementation Possibility - Hex № 85</div>50 <h1>Trusted Assertions</h1>51 <p class="sub">Outsource heavy web-of-trust math to providers you pick. They publish signed scores; your client just reads them.</p>52 </div>53 </div>5455 <main class="spread">56 <div class="main">5758 <h2 class="bar" id="overview"><span class="num">1</span> Overview</h2>59 <p>Some web-of-trust calculations need a large volume of events and much computing power. A phone client cannot crawl the whole network to rank every pubkey. This NIP moves that work to a <strong>service provider</strong> that the user declares as trusted.</p>60 <p>The provider runs its algorithm over the network. It then publishes the results as signed <strong>Trusted Assertion</strong> events (TAs). An assertion is a small addressable event: "this pubkey has rank 89" or "this note received 12 zaps". Clients fetch these events and show the numbers.</p>61 <p>The user stays in control through a <strong>kind 10040</strong> list. It names the provider key and relay for each result type the user wants. Two providers can compute the same metric in different ways. The user picks the provider whose view matches their own.</p>6263 <div class="box hint">64 <span class="tag">Hint!</span>65 <p>Think of a provider as a strategy guide hotline. You do not solve the whole map yourself. You call the hotline you trust, and it tells you the score. Different hotlines give different answers - that is the point.</p>66 </div>6768 <figure class="diagram">69 <div class="frame">70 <svg viewBox="0 0 560 190" role="img" aria-label="A trust provider reads many events from the network, computes results, and publishes signed assertion events that a client downloads">71 <rect class="d-actor" x="10" y="70" width="110" height="50" rx="8"/>72 <text class="d-actor-label" x="65" y="93" text-anchor="middle">Network</text>73 <text class="d-note" x="65" y="110" text-anchor="middle">many events</text>74 <rect class="d-actor" x="190" y="70" width="120" height="50" rx="8"/>75 <text class="d-actor-label" x="250" y="93" text-anchor="middle">Provider</text>76 <text class="d-note" x="250" y="110" text-anchor="middle">runs algorithm</text>77 <rect class="d-actor" x="370" y="20" width="110" height="44" rx="8"/>78 <text class="d-actor-label" x="425" y="47" text-anchor="middle">TA relay</text>79 <rect class="d-actor" x="440" y="126" width="110" height="50" rx="8"/>80 <text class="d-actor-label" x="495" y="149" text-anchor="middle">Client</text>81 <text class="d-note" x="495" y="166" text-anchor="middle">shows scores</text>82 <path class="d-msg d-flow" d="M122,95 L187,95"/>83 <path class="d-msg d-flow" d="M312,88 C340,70 340,55 367,45"/>84 <path class="d-msg blue d-flow" d="M482,66 C500,90 500,105 495,124"/>85 <text class="d-label" x="155" y="85" text-anchor="middle">crawl</text>86 <text class="d-label" x="330" y="42" text-anchor="middle">kind 3038x</text>87 <text class="d-label" x="530" y="98" text-anchor="middle">REQ</text>88 <circle r="4" fill="#f26a00">89 <animateMotion dur="2.6s" repeatCount="indefinite" path="M312,88 C340,70 340,55 367,45"/>90 </circle>91 <circle r="4" fill="#2e5f9e">92 <animateMotion dur="2.6s" begin="1.3s" repeatCount="indefinite" path="M482,66 C500,90 500,105 495,124"/>93 </circle>94 </svg>95 </div>96 <figcaption>Fig. 85-1 — <b>Offloaded trust.</b> The provider does the heavy computation and publishes signed assertions. The client only downloads small events.</figcaption>97 </figure>9899 <h2 class="bar" id="spec"><span class="num">2</span> Assertion Events</h2>100 <p>A Trusted Assertion is always an addressable event as defined in <a href="01.html">NIP-01</a>. The <code>d</code> tag holds the <strong>subject</strong> of the assertion. The NIP recognizes four subject types. Each subject type maps to one event kind:</p>101102 <div class="tscroll"><table class="ref">103 <caption>Subject types and kinds</caption>104 <tr><th>Subject</th><th>Event kind</th><th><code>d</code> tag value</th></tr>105 <tr><td>User</td><td class="btn">30382</td><td><code>&lt;pubkey&gt;</code></td></tr>106 <tr><td>Event</td><td class="btn">30383</td><td><code>&lt;event_id&gt;</code></td></tr>107 <tr><td>Addressable event</td><td class="btn">30384</td><td><code>&lt;event_address&gt;</code></td></tr>108 <tr><td><a href="73.html">NIP-73</a> identifier</td><td class="btn">30385</td><td><code>&lt;i-tag&gt;</code></td></tr>109 </table></div>110111 <p>Calculation results live in pre-defined tags. Providers and clients agree on the syntax and semantics of each tag. This example ranks a pubkey with a web-of-trust score of 89:</p>112113 <div class="crt">114 <div class="titlebar">Wire format - kind 30382 assertion</div>115<pre>{116 <span class="k">"kind"</span>: 30382,117 <span class="k">"pubkey"</span>: <span class="c">&lt;service pubkey&gt;</span>,118 <span class="k">"tags"</span>: [119 [<span class="s">"d"</span>, <span class="s">"e88a691e98d9987c964521dff60025f6…27850411"</span>], <span class="c">// target user's pubkey</span>120 [<span class="s">"rank"</span>, <span class="s">"89"</span>]121 ],122 <span class="k">"content"</span>: <span class="s">""</span>,123 <span class="c">// created_at, id, sig …</span>124}</pre>125 </div>126127 <div class="box warn">128 <span class="tag">Warning!</span>129 <p>A provider must use a different service key for each distinct algorithm. When an algorithm is personalized to one user's point of view or settings, the provider must use one key per user. One key, one algorithm, one viewpoint.</p>130 </div>131132 <h2 class="bar" id="k30382"><span class="num">3</span> Kind 30382 — Users as Subject</h2>133 <p>Kind 30382 rates a person. The <code>d</code> tag holds the target pubkey. These result types are declared:</p>134135 <div class="tscroll"><table class="ref">136 <caption>Kind 30382 result types</caption>137 <tr><th>Result type</th><th>Tag name</th><th>Tag value format</th></tr>138 <tr><td>Follower count</td><td class="btn">followers</td><td>int</td></tr>139 <tr><td>User rank</td><td class="btn">rank</td><td>int, normalized 0-100</td></tr>140 <tr><td>First post time</td><td class="btn">first_created_at</td><td>unix timestamp</td></tr>141 <tr><td>Post count</td><td class="btn">post_cnt</td><td>int</td></tr>142 <tr><td>Reply count</td><td class="btn">reply_cnt</td><td>int</td></tr>143 <tr><td>Reactions count</td><td class="btn">reactions_cnt</td><td>int</td></tr>144 <tr><td>Zap amount received</td><td class="btn">zap_amt_recd</td><td>int, sats</td></tr>145 <tr><td>Zap amount sent</td><td class="btn">zap_amt_sent</td><td>int, sats</td></tr>146 <tr><td>Zap number received</td><td class="btn">zap_cnt_recd</td><td>int</td></tr>147 <tr><td>Zap number sent</td><td class="btn">zap_cnt_sent</td><td>int</td></tr>148 <tr><td>Avg zap amount/day received</td><td class="btn">zap_avg_amt_day_recd</td><td>int, sats</td></tr>149 <tr><td>Avg zap amount/day sent</td><td class="btn">zap_avg_amt_day_sent</td><td>int, sats</td></tr>150 <tr><td>Reports received</td><td class="btn">reports_cnt_recd</td><td>int</td></tr>151 <tr><td>Reports sent</td><td class="btn">reports_cnt_sent</td><td>int</td></tr>152 <tr><td>Common topics</td><td class="btn">t</td><td>string</td></tr>153 <tr><td>Generally active start</td><td class="btn">active_hours_start</td><td>int, 0-24, UTC</td></tr>154 <tr><td>Generally active end</td><td class="btn">active_hours_end</td><td>int, 0-24, UTC</td></tr>155 </table></div>156157 <p>Each provider can compute these values its own way. One provider may exclude the user's muted pubkeys from the follower count. Another provider may keep them. The user picks the provider whose method matches their view. Zap metrics come from <a href="57.html">NIP-57</a> receipts. Report metrics come from <a href="56.html">NIP-56</a> events.</p>158159 <h2 class="bar" id="k30383"><span class="num">4</span> Kind 30383 — Events as Subject</h2>160 <p>Kind 30383 rates one regular event. The <code>d</code> tag holds the event id. Providers can attach these tags:</p>161162 <div class="tscroll"><table class="ref">163 <caption>Kind 30383 result types</caption>164 <tr><th>Result type</th><th>Tag name</th><th>Tag value format</th></tr>165 <tr><td>Event rank</td><td class="btn">rank</td><td>int, normalized 0-100</td></tr>166 <tr><td>Event comment count</td><td class="btn">comment_cnt</td><td>int</td></tr>167 <tr><td>Event quote count</td><td class="btn">quote_cnt</td><td>int</td></tr>168 <tr><td>Event repost count</td><td class="btn">repost_cnt</td><td>int</td></tr>169 <tr><td>Event reaction count</td><td class="btn">reaction_cnt</td><td>int</td></tr>170 <tr><td>Event zap count</td><td class="btn">zap_cnt</td><td>int</td></tr>171 <tr><td>Event zap amount</td><td class="btn">zap_amount</td><td>int, sats</td></tr>172 </table></div>173174 <h2 class="bar" id="k30384"><span class="num">5</span> Kind 30384 — Addressables as Subject</h2>175 <p>Kind 30384 rates all versions of one addressable event together. The <code>d</code> tag holds the event address (<code>kind:pubkey:d-value</code>). The tag set mirrors kind 30383:</p>176177 <div class="tscroll"><table class="ref">178 <caption>Kind 30384 result types</caption>179 <tr><th>Result type</th><th>Tag name</th><th>Tag value format</th></tr>180 <tr><td>Address rank</td><td class="btn">rank</td><td>int, normalized 0-100</td></tr>181 <tr><td>Address comment count</td><td class="btn">comment_cnt</td><td>int</td></tr>182 <tr><td>Address quote count</td><td class="btn">quote_cnt</td><td>int</td></tr>183 <tr><td>Address repost count</td><td class="btn">repost_cnt</td><td>int</td></tr>184 <tr><td>Address reaction count</td><td class="btn">reaction_cnt</td><td>int</td></tr>185 <tr><td>Address zap count</td><td class="btn">zap_cnt</td><td>int</td></tr>186 <tr><td>Address zap amount</td><td class="btn">zap_amount</td><td>int, sats</td></tr>187 </table></div>188189 <h2 class="bar" id="k30385"><span class="num">6</span> Kind 30385 — External Identifiers as Subject</h2>190 <p>Kind 30385 rates things outside Nostr: books, locations, movies, websites, and hashtags. The <code>d</code> tag holds a <a href="73.html">NIP-73</a> identifier (an <code>i</code> tag value). Add the matching NIP-73 <code>k</code> tags to the event as well.</p>191192 <div class="tscroll"><table class="ref">193 <caption>Kind 30385 result types</caption>194 <tr><th>Result type</th><th>Tag name</th><th>Tag value format</th></tr>195 <tr><td>Rank</td><td class="btn">rank</td><td>int, normalized 0-100</td></tr>196 <tr><td>Comment count</td><td class="btn">comment_cnt</td><td>int</td></tr>197 <tr><td>Reaction count</td><td class="btn">reaction_cnt</td><td>int</td></tr>198 </table></div>199200 <h2 class="bar" id="k10040"><span class="num">7</span> Declaring Trusted Providers — Kind 10040</h2>201 <p>A <strong>kind 10040</strong> event lists the user's preferred source for each result. Each tag names a <code>kind:tag</code> pair, then the publisher's pubkey, then the relay where the assertion events live. Providers may use multiple keys and relays, including a key per user for personalized algorithms.</p>202 <p>Users can share this list publicly as plain tags. Or they can keep it private: JSON-stringify the tag list, encrypt it with <a href="44.html">NIP-44</a>, and store it in the <code>content</code> field.</p>203204 <div class="crt">205 <div class="titlebar">Wire format - kind 10040 provider list</div>206<pre>{207 <span class="k">"kind"</span>: 10040,208 <span class="k">"tags"</span>: [209 [<span class="c">&lt;kind:tag&gt;</span>, <span class="c">&lt;service key&gt;</span>, <span class="c">&lt;relay hint&gt;</span>],210 <span class="c">// examples</span>211 [<span class="s">"30382:rank"</span>, <span class="s">"4fd5e210530e4f6b…fe5f12fe"</span>, <span class="s">"wss://nip85.nostr.band"</span>],212 [<span class="s">"30382:rank"</span>, <span class="s">"3d842afecd5e293f…2d44a42d"</span>, <span class="s">"wss://nostr.wine"</span>],213 [<span class="s">"30382:zap_amt_sent"</span>, <span class="s">"4fd5e210530e4f6b…fe5f12fe"</span>, <span class="s">"wss://nip85.nostr.band"</span>]214 ],215 <span class="k">"content"</span>: <span class="c">nip44Encrypt(JSON.stringify([216 [&lt;kind:tag&gt;, &lt;service key&gt;, &lt;relay hint&gt;],217 // examples218 ["30383:rank", "4fd5e210530e4f6b…fe5f12fe", "wss://nip85.nostr.band"],219 ["30384:rank", "4fd5e210530e4f6b…fe5f12fe", "wss://nip85.nostr.band"]220 ]))</span>,221 <span class="c">// other fields …</span>222}</pre>223 </div>224225 <p>When a provider offers several algorithms, or several points of view of one algorithm, the key in each tag should point to the key created for that specific algorithm or point of view.</p>226227 <div class="box tech">228 <span class="tag">Tech Note</span>229 <p>The source example is loose in two ways. First, its <code>nip44Encrypt(</code> call is never closed before the trailing comment. Second, it shows public tags and an encrypted <code>content</code> list in the same event, while the prose frames public and private as a user choice. The spec does not say how a client merges the two lists if both are present.</p>230 </div>231232 <h2 class="bar" id="ops"><span class="num">8</span> Operational Rules</h2>233 <ul>234 <li>Providers should update Trusted Assertions as fast as new information arrives. But they should re-publish an event only when its contents actually change. This avoids re-downloading the same information.</li>235 <li>Providers may limit access to results by publishing to paid relays.</li>236 <li>In a TA, a <code>p</code>, <code>e</code>, or <code>a</code> tag with the same value as the <code>d</code> tag may be added. It carries a relay hint to the home relay of that user or event.</li>237 </ul>238239 <h2 class="bar" id="discovery"><span class="num">9</span> Provider Discoverability</h2>240 <p>A provider should sign a <strong>kind 0</strong> metadata event (<a href="01.html">NIP-01</a>) for each service key. It explains who controls the key and what the current version of the algorithm is about:</p>241242 <div class="crt">243 <div class="titlebar">Wire format - kind 0 for a service key</div>244<pre>{245 <span class="k">"kind"</span>: 0,246 <span class="k">"pubkey"</span>: <span class="c">&lt;service pubkey&gt;</span>,247 <span class="k">"tags"</span>: [],248 <span class="k">"content"</span>: <span class="s">"{249 \"name\": \"Vitor's Brainstormer\",250 \"about\": \"A Web of Trust algorithm from Vitor's point of view that251 considers Follows and Mutes, but no reports, and gives extra252 score points for anyone around Boston\",253 \"picture\": \"https://brainstorm.com/logo.png\",254 \"website\": \"https://brainstorm.com\"255 }"</span>,256 <span class="c">// other fields …</span>257}</pre>258 </div>259260 <div class="box tech">261 <span class="tag">Tech Note</span>262 <p>The kind 0 example in the source uses <code>=</code> between keys and values inside <code>content</code> (for example <code>\"name\" = \"…\"</code>). That is not valid JSON. The block above shows the intended shape with <code>:</code>. Treat the source example as illustrative only.</p>263 </div>264265 <p>A client that wants to offer a list of providers to its users should:</p>266 <ol>267 <li>Download the kind 10040 events of the user's follow list.</li>268 <li>Connect to each listed relay. Download the kind 0 of each service key.</li>269 <li>Parse the kind 0 and collect the <code>website</code> property.</li>270 <li>Load the OpenGraph tags of that website. Display them as clickable items.</li>271 </ol>272273 <figure class="diagram">274 <div class="frame">275 <svg viewBox="0 0 560 300" role="img" aria-label="Sequence diagram: client fetches the user's kind 10040 list, then requests the kind 30382 assertion from the provider relay and receives it">276 <line class="d-wire" x1="110" y1="40" x2="110" y2="285" stroke-dasharray="3 4"/>277 <line class="d-wire" x1="450" y1="40" x2="450" y2="285" stroke-dasharray="3 4"/>278 <rect class="d-actor" x="55" y="8" width="110" height="30" rx="6"/>279 <text class="d-actor-label" x="110" y="28" text-anchor="middle">Client</text>280 <rect class="d-actor" x="395" y="8" width="110" height="30" rx="6"/>281 <text class="d-actor-label" x="450" y="28" text-anchor="middle">Relays</text>282 <path class="d-msg" d="M110,62 L445,62"/>283 <text class="d-label" x="280" y="55" text-anchor="middle">["REQ", "s1", {"kinds":[10040],"authors":[&lt;user&gt;]}]</text>284 <path class="d-msg blue" d="M450,95 L115,95"/>285 <text class="d-label" x="280" y="88" text-anchor="middle">["EVENT", "s1", {10040: provider key + relay}]</text>286 <path class="d-msg" d="M110,140 L445,140"/>287 <text class="d-label" x="280" y="133" text-anchor="middle">["REQ", "s2", {"kinds":[30382],"authors":[&lt;service key&gt;],"#d":[&lt;pubkey&gt;]}]</text>288 <text class="d-note" x="280" y="158" text-anchor="middle">sent to the relay hinted in the 10040 tag</text>289 <path class="d-msg blue d-flow" d="M450,190 L115,190"/>290 <text class="d-label" x="280" y="183" text-anchor="middle">["EVENT", "s2", {30382: ["rank","89"]}]</text>291 <path class="d-msg blue" d="M450,225 L115,225"/>292 <text class="d-label" x="280" y="218" text-anchor="middle">["EOSE", "s2"]</text>293 <text class="d-note" x="280" y="260" text-anchor="middle">The client renders "rank 89" next to the profile.</text>294 </svg>295 </div>296 <figcaption>Fig. 85-2 — <b>Assertion lookup.</b> The 10040 list tells the client where to ask; the provider relay answers with the signed assertion.</figcaption>297 </figure>298299 <h2 class="bar" id="examples"><span class="num">10</span> Worked Example</h2>300 <p>Alice wants to see trust ranks in her client. She declares a provider, and her client fetches an assertion about Bob. Orange lines go to the relay. Blue lines come from the relay.</p>301302 <div class="crt">303 <div class="titlebar">Session transcript - declaring, then reading an assertion</div>304<pre><span class="c">-- Alice publishes her provider list --</span>305<span class="send">→ ["EVENT", {"kind":10040,"pubkey":"a11ce9f2…","created_at":1749821000,306 "tags":[["30382:rank","4fd5e210…","wss://nip85.nostr.band"]],307 "content":"","id":"c3f1a0d2…","sig":"90ab41ce…"}]</span>308<span class="recv">← ["OK", "c3f1a0d2…", true, ""]</span>309310<span class="c">-- Her client asks the hinted relay for Bob's assertion --</span>311<span class="send">→ ["REQ", "wot", {"kinds":[30382], "authors":["4fd5e210…"],312 "#d":["b0b7c4e1a95d20fa88431fe1dd2ae9b4…13cf02aa"]}]</span>313<span class="recv">← ["EVENT", "wot", {"kind":30382,"pubkey":"4fd5e210…","created_at":1749820500,314 "tags":[["d","b0b7c4e1a95d20fa88431fe1dd2ae9b4…13cf02aa"],315 ["rank","89"],["followers","1204"],["zap_cnt_recd","312"],316 ["p","b0b7c4e1a95d20fa88431fe1dd2ae9b4…13cf02aa","wss://bob.example"]],317 "content":"","id":"7e2d90bc…","sig":"d4e88a01…"}]</span>318<span class="recv">← ["EOSE", "wot"]</span>319<span class="c">-- Client shows: Bob - rank 89 - 1204 followers (per this provider) --</span></pre>320 </div>321322 <h2 class="bar" id="history"><span class="num">11</span> Version History</h2>323 <p>NIP-85 is young. Vitor Pamplona proposed it after a long-running pull request discussion. Notable changes, newest first:</p>324 <ul class="patchnotes">325 <li class="minor"><span class="ver">2026</span><span class="when">2026-06</span>Repo-wide cleanup by fiatjaf changed the code fence language of the examples.</li>326 <li><span class="ver">2026</span><span class="when">2026-05</span>Clarifications pass: tightened wording on subjects, keys, and tag semantics.</li>327 <li><span class="ver">2026</span><span class="when">2026-02</span>Added Appendix 1: service provider discoverability through kind 0 metadata on each service key.</li>328 <li class="minor"><span class="ver">2026</span><span class="when">2026-01</span>Typo fixes shortly after merge.</li>329 <li><span class="ver">Origin</span><span class="when">2026-01-22</span>Vitor Pamplona merged the initial Trusted Assertions spec (PR #1534): kinds 30382-30385, kind 10040, and the result-type tables.</li>330 </ul>331332 <div class="credits">333 <h3 class="cardhead">Original Proposal - Credits</h3>334 <table>335 <tr><td>Author</td><td>Vitor Pamplona</td></tr>336 <tr><td>First commit</td><td>2026-01-22 — “Trusted Assertions (#1534)” - <a href="https://github.com/nostr-protocol/nips/pull/1534">PR #1534</a></td></tr>337 <tr><td>Status</td><td><span class="chip draft">draft</span><span class="chip">optional</span></td></tr>338 <tr><td>Source</td><td><a href="https://github.com/nostr-protocol/nips/blob/master/85.md">85.md on GitHub</a> - <a href="https://github.com/nostr-protocol/nips/commits/master/85.md">full change history</a></td></tr>339 </table>340 </div>341342 <h2 class="bar"><span class="num">12</span> See Also</h2>343 <ul>344 <li><a href="01.html">NIP-01</a> — addressable events, the <code>d</code> tag, and kind 0 metadata that this NIP builds on.</li>345 <li><a href="73.html">NIP-73</a> — external content identifiers; the subjects of kind 30385 assertions.</li>346 <li><a href="44.html">NIP-44</a> — the encryption used to keep a kind 10040 provider list private.</li>347 <li><a href="57.html">NIP-57</a> — zaps; the source of all zap amount and zap count metrics.</li>348 <li><a href="56.html">NIP-56</a> — reporting; the source of the report count metrics.</li>349 <li><a href="25.html">NIP-25</a> — reactions; the source of the reaction count metrics.</li>350 </ul>351 </div>352353 <aside>354 <div class="cartridge">355 <div class="inner">356 <h3 class="cardhead">Spec Card</h3>357 <div class="lights"><span class="led on"></span><span class="led on"></span><span class="led on"></span></div>358 <dl>359 <dt>Status</dt><dd><span class="chip draft">draft</span><span class="chip">optional</span></dd>360 <dt>Defines</dt><dd>Trusted Assertion events - result-type tags - provider lists</dd>361 <dt>Kinds</dt><dd>30382 - 30383 - 30384 - 30385 - 10040</dd>362 <dt>Requires</dt><dd><a href="01.html">NIP-01</a> - <a href="73.html">NIP-73</a> - <a href="44.html">NIP-44</a> (private lists)</dd>363 <dt>Transport</dt><dd>standard relay flow - paid relays allowed</dd>364 <dt>First commit</dt><dd>2026-01-22</dd>365 <dt>Last updated</dt><dd>2026-06-13</dd>366 </dl>367 </div>368 </div>369 </aside>370 </main>371372 <nav class="navbtns">373 <a href="84.html">◀ NIP-84: Highlights</a>374 <a href="86.html">NIP-86: Relay Management API ▶</a>375 </nav>376377 <footer class="pagefoot">378 <a href="../index.html">Nostr Protocol Manual</a>379 <span class="pageno">NIP 85 / F4</span>380 </footer>381</div>382383<script src="../assets/webmcp.js" defer></script>384</body>385</html>