Kihagyás

Nostr Compass #38 — 2026-09-02

Eredeti forrás: nostrcompass.org/en/newsletters/2026-09-02-newsletter/

Vezértörténetek

Voca 1.0 — offline Android Nostr-olvasó felolvasással

Voca 1.0 (2026-08-27) offline Android kliens, amely a telefon saját TTS hangján olvassa fel a cikkeket, PDF-eket, Markdown fájlokat és Nostr jegyzeteket. Minden letöltött eventet ellenőriz az újraszámított id és BIP-340 Schnorr aláírás ellen a bootstrap relayk, a szerző NIP-65 relay listája (kind 10002) és a referenciában hordozott hint-ek alapján — a relay megtagadhatja a választ, de nem írhat a szerző szájába. Az npub hozzáadásával a szerző NIP-23 hosszú formátumú cikkei (kind 30023) egy on-device inboxba kerülnek az RSS/Atom feedek mellé. Az 1.1.0 (2026-08-29, Zapstore) mondatszintű görgetést, hosszú dokumentum-simítást és widget-helyreállítást hoz.

nostream — DVM routing és NIP-42 authenticated üzemmód

A TypeScript relay implementáció tárolja és kiszolgálja a NIP-89 application handler eventeket (kind 31989/31990), és a függőben lévő NIP-90 jobokat átadja egy worker processnek, amely siker esetén a relay saját kulcsával ír alá egy kind 6000-6999 result eventet. A NIP-42 (client authentication) session-önként követi az authenticated pubkey-t, és opcionálisan kötelezővé teheti az AUTH-ot publish előtt, amit a NIP-11 dokumentumban is jelez. Az admin HTTP végpontok fogadhatnak NIP-98 aláírt HTTP authorization-t (operátori bekapcsolással + allowlist pubkey-kkal).

NDK for Dart — negentropy v1, multi-relay request lifetime, sig-cache

A Dart NDK NIP-77 (negentropy) implementációja rossz have/need setet adott a v1 codec hiánya miatt — a fix visszaadja a relaynél levő és még szükséges id-ket. Az azonos filtert különböző relaykre küldött requestek eddig összemosódtak: mostantól a különböző relay/lifetime szerinti requestek külön maradnak, és a signature-verification eredménye cache-elve van, így duplikált delivery nem futtat új ellenőrzést.

Divine Mobile — wrapped DM törlés és aláírás determinisztikussá tétele

A NIP-09 (kind 5) gift wrap-ekre küldött törlés nem alkalmazódott, mert a kliens mindent, ami nem reakció, már feldolgozottnak tekintett — mostantól a törlés a megnevezett message-re oldódik fel. A második "delete-for-everyone" az elsővel együtt repült, de mostantól concurrent delete-ek mind publikálódnak. Az 1:1 NIP-17 (gift wrap) szövegnél egy token kerül a NIP-59 rumor belsejébe, hogy a másodperc-azonos küldések különböző id-t kapjanak. A caller által már aláírt kind 4/5 event aláírása megmarad (nem fűződik hozzá client tag utólag).

Conduit Relay — NIP-42 protected inbox alapértelmezetten enforce

A Go relay a kind 1059 gift wrap-eket egy recipient-protected inboxban tárolja, és alapértelmezetten megköveteli a NIP-42 AUTH-ot mint a címzett — különben a request elutasítódik. A mixed-kind filterek, wildcardok, countok és negentropy-kérések ezekre a wrap-ekre restricted-ként viselkednek, így egy másik AUTH sem dumpolhatja ki valaki más inboxát. A challenge-only mód AUTH-ot kínál a read blokkolása nélkül; a disabled szabadon beenged.

Amethyst v1.14.0 — NIP-84 highlightok + relay-failure javítások

Az Amethyst 1.14.0 a NIP-84 (kind 9802) highlightokat a composerből, highlights feedből vagy share-ből indítja. A release hozza a NIP-29 channel törlést (PR #3812) és a NIP-66 relay-probe kiterjesztést (PR #3836, #3857). Javít egy SharedKeyCache hash-collision sebezhetőséget és constant time MAC-összehasonlítást (PR #3833), egy connect-time AUTH race-t (PR #3838), egy ANR convoy-t okozó subscription-state lock-ot (PR #3851), és a csak-első-filter-összehasonlítást (PR #3856). A Concord soft ban-ek (PR #3885), a relay authentication redesign (PR #3899, #3905, #3931, #3937, #3955), egy vezetett first-run és Settings flow a key backup-hoz (PR #3909), a Cashu proof backfill és history paging (PR #3941), valamint a public chat mute (PR #3939) is a release része. A trusted list-ek (kind 30392–30395) mostantól NIP-50 (full-text search) indexeltek csak cím szerint. A NIP-47 wallet refusals (QUOTA_EXCEEDED, RESTRICTED, timeout) mostantól látszanak a UI-ban.

Mostro v0.18.5 — signed order validálás + audit event expiry

A v0.18.5 a transportot alapértelmezetten NIP-44 (payload encryption)-re állítja, a gift wrap explicit opt-in marad. A waiting-state timeout a take time-hoz horgonyzódik (PR #879), a settled-order buyer payout at most once dispatch-höz kötött (PR #881), és bounded non-blocking send_payment várakozással megy (PR #883). Egy timeout-slash winner fizetésre tett kísérlet (PR #875) vissza lett vonva (PR #885) ugyanabban a tag-ben. A pending order book többé nem republish-öl óránként/induláskor változatlanul (PR #888), a kind 38386 dispute event-ek created_at tag-et kaptak (PR #878). A signature check mostantól a spam gate előtt fut — a kind 14 replay slotba eddig áldozati másolat kerülhetett érvénytelen signature-rel, most a daemon először verifikál, és invalid wrap-et ejt. A kind 8383 fee-audit event-ek NIP-40 expiry-je 15 napról 1 évre nőtt (public payment record szerep). Cashu-enabled node-on az order-felvétel a seller-től kér 2-of-3 escrow lockot Nostron át, és kihagyja a Lightning hold invoice létrehozását.

Napstr 0.2.0 — audio katalógusok Nostron, fájlátvitel Tor-on

A desktop audio kliens a katalógusokat és a live seedereket Nostron publikálja, a fájlokat pedig egy bundlelt Tor processzen át mozgatja — nincs direct-IP fallback. Discovery: kind 30421 catalogue entry (SHA-256 digest, public basename, méret, formátum), kind 30422 availability heartbeat (10 perces lejárat, seedelni kész file id-k). Publikus beszélgetés NIP-C7 (kind 9) chat message-eken át megy, NEM relay-owned group-on. A download NIP-17 (gift wrap) negotiation-nel indul (kind 14 rumor a request/offer/refusal belsejében), a Tor a bytokat onion address-en át mozgatja, és a teljes SHA-256 digest verify után a file lejátszhatóvá válik. v0.1.7 → v0.2.0: audiobook kollekciók + Napstrfy (Android companion) — kind 30423 manifest-ek rendezett fejezeteket listáznak. A companion handshake timeout-ol, ha nem fejeződik be; a seeder copy + hash után szolgál, a célútvonal a Napstr folder valódi gyermeke kell legyen.

Címkézett release-ek

  • MDK v0.9.17 — legújabb KeyPackage-ek, membership activity, durable sends. Az előző két release (0.9.14, 0.9.15) újdonságaira épít: oldest-first → newest valid current-profile package választás, epoch-gap recovery gates, account cleanup, discovery/operational relayk szétválasztása. A 0.9.16 epoch divergence mérése a current epoch-pal (PR #1565, #1563), és bevezeti a marmot-c macro-generated C ABI-t a UniFFI bindingok felett. A 0.9.17 egy member walk-ba foldolja a pass-admission scaneket, contested group state-ot anélkül vizsgál, hogy a teljes history graph-ot seedelné, csökkenti a deferred-peel sweep idle poll költségét. A marmot-c 0.9.17 és WN Agent 0.9.17 ugyanabból a commit-ból épülnek.

  • pakstr v0.16.0 — kind 32267 application-event azonosítók a publish pipeline-on. A Zapstore publication pipeline (0.13.0–0.15.0) után a CLI a kind 32267 event ID-kat logolja lookup/publish/replace során. Stale listing metadata trigger-elt republish esetén kiírja a régi és új ID-t is, így a publisher megerősítheti, melyik listing event él a relayn. A no-op reuse ismétlődő ID-ként jelenik meg a logban.

Unreleased work

  • Zap Cooking — bunker session reload mostantól a bunker saját relay-jeire scopiálja a NIP-46 (remote signing) forgalmat session restore és nostrconnect pairing során is. Üres relay set-et elutasít a malformed stored recordból. A NIP-98 signed HTTP authentication gatingeli a paid cooking-assistant chat-et, a cookbook introduction-t és a gated-recipe updatet — a server a request body-t egyszer olvassa, a signature-t pontosan azon a payload-on verifikálja, és az identity a verified auth event-ből jön, nem a body-ban kapott pubkey-ből. A chat preview header nélkül is működik, de a present-but-invalid signature elutasítódik, és a cookbook introduction mindig igényli. A gated recipe update megköveteli, hogy a verified key match-eljen a stored author-ral — másoknak "recipe does not exist" válasz jön (nem confirmálja, melyik paid record létezik).

  • nostrord — NIP-17 wrapped DM-ek mostantól eljutnak ugyanarra az accountra más eszközről. A sender self-copy önálló publikálása megállítja azt a hibát, ahol a recipient wrap első relay acceptance-e eldobta a más eszközök által fetch-elt copy-t. NIP-42 AUTH completion után a wrap újraküldődik, és a send a first relay acceptance-kor success-re jelölődik (egy failing host nem stallolja a többit). A NIP-59 decryption-failed parked gift wrap-ek timer-en retry-olnak. NIP-C7 (kind 9) reply-k a leading NIP-19 nevent parent pointer-t a q tag mellé ismétlik — ha a body-t nyitja és a reply parent-et nevezi meg, single reply quote-ként renderelődik. A quoted-event linkek nevent-et kódolnak author, kind, és a quote forrásául szolgáló relay mezőkkel.

Protokoll munka és NIP frissítések

NIPs repository

  • NIP-67 — paginációs hint az EOSE üzenethez. A merged "auth" hint a finish és more mellé egy harmadik értéket ad: a relay jelezheti, hogy további tárolt event-ek válhatnak láthatóvá, ha a user authentikál. A relaynek a NIP-42 AUTH challenge-t az EOSE előtt kell küldenie, ami a hintet hordozza. A párhuzamos NIP-42 kiegészítés definiálja a flow-t a kliens oldaláról.
  • NIP-84 — portable highlights tag-séma frissítés. A highlightok a forrást structured i tag-ekkel jelölhetik NIP-73 (external content IDs) szerint, az a/e (Nostr event) és r (egyéb) tag-ek mellett. A quote highlightok a MUST-ról SHOULD-ra változtak a quote repost-szerű renderelésben.

Nostr Wallet Connect

  • A list_transactions response a matching tranzakciók teljes számát adja (opcionális total_count mező a NWC-05 wallet-history extension-ben), nem a current page sorainak számát. A commit dokumentálja, hogy a total a pagination-t kizárja.

NIP Deep Dive: Reposts and Reactions (NIP-18 / NIP-25)

A NIP-18 (reposts) és NIP-25 (reactions) továbbra is draft optional státuszú — a NIPs repository-ban vannak és kliensek implementálják, de nem véglegesek.

NIP-18 — Reposts

  • A kind 6 event egy aláírt pointert ad a follower-eknek egy meglévő kind 1 note-ra. Az e tag értéke a note id-ja, harmadik entry egy relay URL, ahol a note fetch-elhető. A p tag az eredeti szerző pubkey-ját tartja SHOULD-ként. NIP-70 protected event repostja content legyen üres, hogy a protected payload ne másolódjon.
  • A quote egy citation egy másik event belsejében, NEM kind 6 wrapper. Amikor egy kliens NIP-21 (nostr: URI) nevent/note/naddr-t említ, q tag-re kell konvertálni: ["q", "<event-id> or <event-address>", "<relay-url>", "<pubkey-if-a-regular-event>"].
  • A kind 6 csak kind 1 note-oké. A kind 16 generic repost bármilyen más event kind-et wrap-elhet — SHOULD k tag a stringified kind értékkel, addressable target-re SHOULD a tag a kind:pubkey:d-tag koordinátával (különben a repost egy specifikus verziót target-ál, és content a teljes JSON stringjét hordozza).

NIP-25 — Reactions

  • Kind 7 event, content MUST a reaction értéke (+ vagy üres = like/upvote, - = dislike/downvote, emoji/NIP-30 shortcode NEM like/dislike). A target a tag-ekben van, NEM a content-ből: MUST e tag a target event id-jával (SHOULD relay hint, több e esetén a target id utolsó), SHOULD p tag a target author-ra (utolsó ha több van), SHOULD a tag addressable target-re, MAY k tag a target stringified kind-jével.
  • Egy emoji + NIP-30 shortcode content-ben + egy emoji tag (image URL) a custom-emoji reaction. Nem-Natív Nostr event-re a reaction MUST kind 17 + NIP-73 k/i tag-ek.
  • A deep dive két live event-et mutat be (kind 6 Damus iOS Primal, kind 7 Divine), demonstrálva, hogy a relay által visszaadott event-ek egyes mezőket elhagyhatnak (pl. relay hint) — a klienseknek validálniuk kell a valódi event-eket.

Implementációk

  • Amethyst definiálja a repost és reaction event típusokat a jelenlegi protocol layerben.
  • Snort NIP-18 helper-eket implementál (quote-link tag handling) és NIP-25 event-reaction tag-eket hoz létre.
  • Ditto (kombinált Mastodon szerver + Nostr relay) kind 16 generic reposts-ot k tag-gel és a koordinátával addressable target-ekre, és kind 7 reaction szemantikát alkalmaz (utolsó e tag = target).
Vissza a tetejére