Nostr Compassへようこそ。Nostrの週刊ガイドです。

今週の内容: Amethystは、Marmot準拠、NIP-72 community、NIP-75 zap goals、MoQベースaudio roomをまとめて進めました。TollGateは、NostrとCashu上のpay-per-use internet access仕様をv0.1.0として固め、nostreamNIP-45NIP-62、compression、query hardening、完全なNIP-11 parityを進めました。Forgeswornは、signing、identity、paid API discoveryのstackを一気に公開しました。ShockWalletは、NostrネイティブなLightning wallet同期を押し進め、Formstr suiteはsecurity hardeningとRRULE supportを中心に26 PRをマージしました。StableKraft、Keep、topaz、WoT Relay、Flotilla、NipLockも今週の出荷に並びます。今週のdeep diveはNIP-72NIP-57です。

Top Stories

Amethyst ships Marmot MIP compliance, NIP-72 communities, zap goals, and MoQ audio rooms

Amethystは今週57本のPRをマージし、Marmot encrypted groupの準拠作業、community support、live stream向けzap goals、Media over QUICベースaudio roomをまとめて押し進めました。PR #2462は埋め込みMDKをMIP-01とMIP-05 wire formatへ合わせ、VarInt encodingとMDK test vectorによるround-trip validationを追加しました。PR #2435はMIP-00 KeyPackage Relay List supportを加え、PR #2436はWhite Noiseとのcross-client testingで見つかったadmin gateとmedia handlingの差分を埋めました。PR #2466PR #2471はMLS commit framingとouter-layer復号の正しさを修正し、PR #2477PR #2493はさらにcommit pathとmessage encryptionの整合性を詰め、reference vectorに対するcryptography validatorを追加しました。PR #2488は、Marmot/MLS group操作をscriptableに扱えるCLIのamyも出荷しています。

community側では、PR #2468がkind 34550定義の作成、moderator追加、relay hint設定、aタグによる投稿、kind 4549 approval event管理を含むNIP-72 supportを追加しました。絵文字ではPR #2458PR #2473がemoji set supportと完全なNIP-30 emoji-pack管理UIを追加しました。live surfaceでは、PR #2469NIP-53 Live Activities画面へNIP-75 zap goalsを統合し、goal header、progress bar、one-tap zap、top-zappers leaderboardを導入しました。PR #2486は専用のLive Streams feed、PR #2491はproof-of-agreementとevent builder、PR #2461はfeed内lowest-resolution HLS、picture-in-picture、full-screen時の自動解像度選択を追加しています。

もっとも野心的なのはreal-time audioです。PR #2494Media over QUIC transport clientとaudio room supportを追加しました。MoQのpub-sub modelは、WebSocket relayよりライブ音声に向いており、trackやpriorityごとのsubscriptionを可能にします。PR #2487のPublic Chats画面と組み合わせると、Amethystはpublic audio roomとMarmot encrypted messagingを並行して持つことになります。PR #2485PR #2490はFollow Packs discovery feedとonboarding統合を追加し、PR #1983はMarmot DMやmentionのためのalways-on notification serviceを導入し、PR #2480はadaptive cache sizing付きHLS video cachingを加えました。

TollGate v0.1.0 stabilizes pay-per-use internet over Nostr and Cashu

TollGateは4月21日にv0.1.0 releaseを出し、pay-per-use network access向け仕様群に最初のtag付きsnapshotを与えました。WiFi router、Ethernet switch、Bluetooth tetherのような接続制御デバイスが価格を広告し、Cashu ecash tokenを受け取り、sessionを管理できます。数satsを持つlocal Cashu walletがあれば、accountもsubscriptionもKYCもなく、その場で次の1分または1MBの接続を買えます。

releaseは3層構造を固定しています。TIP-01はAdvertisement、Session、Noticeの3つの基本event shapeを定義し、TIP-02はCashu payment layerを追加して、gateが広告する任意mintからcustomerがtokenを償還できるようにします。上位のinterface layerではHTTP-01からHTTP-03が制限的OS向けplain HTTP surfaceを定義し、NOSTR-01がWebSocketを張れるclient向けのNostr transportを定義します。medium layerではWIFI-01がcaptive portal routingを扱います。payment assetがcredentialではなくbearer tokenなので、customerは事前ネット接続なしで最初の接続を購入でき、TollGate同士がuplinkを買い合うmulti-hop構成も可能です。詳しくは新しいTollGate topic pageにまとめました。

nostream merges 53 PRs for NIP-45, NIP-62, compression, and query hardening

nostreamは、TypeScript relay implementationとして今週53本のPRをマージしました。feature面では、PR #522NIP-45 COUNT supportを追加し、PR #544NIP-62 right-to-vanishをadvertised feature listへ加え、PR #548は最近のtag-case conventionに沿って#Aから#Zのuppercase tag filterを受け入れるようにし、PR #514はevent import/exportにgzipとxz compressionを追加しました。

query performanceとcorrectnessも強化されています。PR #534はbenchmark harnessとfilter-to-SQL translationの最適化を導入し、PR #524はwhitelist/blacklist pubkeyのprefix match bugをexact-matchへ修正し、PR #553は同一created_at時のconcurrent insert raceを避けるdeterministic tie-breakerをupsertManyへ追加しました。PR #493X-Forwarded-Forをtrusted proxyだけに限定し、PR #557はretention、authentication hint、optional field整理を含めて完全なNIP-11 parityを達成しました。

Shipping This Week

Primal Android ships Explore tab, NIP-05 verification, and audio player

Primal Androidは先週のfeed redesignに続き11本のPRを積みました。PR #1021はpopular user、follow pack、curated feedを軸にしたExplore tabを導入し、PR #1015はPrimalのAdvanced Search DSLから初期値を作るfeed editorを追加しました。PR #994はprofile向けNIP-05 verification UIを追加し、PR #997はin-feed audio playerを埋め込み、audio attachmentをその場で再生できるようにしています。PR #1018はwallet QR scanner経由のNIP-46 nostr-connect pairingも追加しました。

strfry adds Prometheus write-path metrics and fixes NIP-42 AUTH envelope

strfryはoperator向け改善をまとめて出しました。PR #194は専用Prometheus write-path metrics exporterとconnection gaugeを追加し、PR #197はconnectionごとのup/down bytesとcompression ratioをlogへ出すようにしました。PR #192はfilter tag limitをruntime-configurable optionへ昇格させ、PR #201NIP-42 AUTH failure responseをNOTICEからNIP準拠のOK envelopeへ修正しました。

Shopstr hardens storefront security across 13 PRs

Shopstrは今週13本のPRをマージし、storefront security fixが大半を占めました。PR #434はseller-to-visitor script executionを許していたstored JavaScript holeを閉じ、PR #417はreflected XSSを防ぐためstorefront policy HTML renderingをescapeし、PR #418は未認証cached-event deletion APIを閉じました。PR #433PR #419PR #435PR #414も認証とSSRF関連の穴を塞いでいます。機能面では、PR #421がfailed relay publish queueのreplay safetyを改善し、PR #425がwallet event fetchを修復し、PR #392がcheckout前にstored cart discountを再検証するようにしました。

Nostria v3.1.26 through v3.1.28 add background music playback on Android

Nostriaは今週v3.1.22からv3.1.28まで6リリースを出しました。中心はv3.1.26のAndroid background music playbackで、audio再生中にappが生き続け、notification barやlock screenからmedia controlを行えます。続くv3.1.27v3.1.28はこの新しいmedia-service surfaceをhardeningしました。Newsletter #18では、その直前のlocal image generation releaseを扱っています。

Wisp v0.18.0-beta adds Normie Mode, For You feed, and NIP-29 group config

Wispは4月16日にv0.18.0-betaを出しました。PR #462は法定通貨建て表示を増やすNormie Modeを追加し、PR #464はtopic pickerとfirst-post coach付きのonboarding刷新を行い、PR #469はextended follow、trending event、followed hashtagを混ぜるFor You feedを加えました。protocol面ではPR #471NIP-29 group configurationを実装し、PR #478NIP-42 AUTH完了前にgroup 902190079009を送らないよう順序を修正し、PR #481はmentionされたpubkeyのNIP-65 inbox relayへnoteをbroadcastするようにしました。

NoorNote v0.8.4 adds Scheduled Posts and live stream zapping

NoorNotev0.8.4v0.8.5を出しました。v0.8.4の中心はScheduled Posts add-onで、appは署名済みイベントをNoorNote運営relayへ渡し、指定時刻に公開させます。秘密鍵は端末外へ出ません。同じreleaseはNIP-53経由でstream chat overlayへsatsが現れるone-tap live stream zapも追加し、fiat-rate APIが一時停止してもwallet balanceを表示し続けるようにしました。v0.8.5では長いAndroid scrollでpostが重複するtimeline deduplication bugが修正されています。

topaz v0.0.2 ships a Nostr relay for Android

topazは、fiatjafによるAndroid phone上で動く新しいNostr relayで、2026-04-17にv0.0.2を公開しました。現段階ではscopeは狭く、インストール可能なAndroid packageとして動作するrelayを提供することが主眼です。

StableKraft v1.0.0 ships the first stable music-and-podcast PWA release

StableKraftは、podcast feed由来のmusicを発見、整理、再生するNext.js PWAで、authとsocial featureにNostr、V4V paymentにLightningを使います。2026-04-18にv1.0.0へ到達しました。同週には、15-minute OPML cacheとillegal XML strippingでfeed ingestionを改善し、follow-up fixでnightly reparse windowを720時間から24時間へ縮め、新規feedのself-healを速めています。

NipLock ships a NIP-17-based password manager

NipLockは、credentialをNIP-17 gift-wrapped DMとして保存し、device間で同期するpassword managerです。各password entryは自分の鍵から自分自身へのNIP-17 DMであり、同じ鍵で認証した任意deviceへ同じイベントが複製されます。署名はraw nsecnos2xのようなbrowser extension、またはNIP-46経由のAmberで行えます。

flotilla-budabit polishes its NIP-34 repo surface

Budabit communityによるFlotilla fork、flotilla-budabitは、NIP-34 git-over-nostr workflow周辺のfixをまとめて出しました。repo discussion controlの復元、detail pageでのsticky repo tab保持、saved GRASP relayからのrepo announcement読み込み、maintainer適用patch statusの同期などが含まれます。upstream Flotillaと近い状態を保ちながら、Budabit contributor向けrepo viewを優先しています。

rx-nostr 3.7.2 through 3.7.4 add default verifier and optional constructor args

rx-nostrは、RxJSベースのNostr libraryで、3.7.23.7.33.7.4を出しました。PR #192はdefault Schnorr verifierを追加し、paired releaseのcrypto@3.1.6@noble/curves利用bugを修正しました。PR #195createRxNostr()の引数をoptionalにし、zero-configでのquick integrationを可能にしています。

Keep Android v1.0.0 ships with reproducible builds and zero trackers

Keepは、Nostrネイティブなpassword and secret managerで、hardening PRの積み上げの後、4月21日にv1.0.0を出しました。PR #241はpinnedかつverifiedなtoolchainを使うreproducible build recipeを追加し、PR #248はGoogle ML KitをZXingへ置き換えてGoogle Play Services依存を外し、PR #252はv1.0.0 buildのtrackerがゼロであることを示すExodus Privacy scanを公開しました。PR #256はZapstore配布向けzapstore.yaml manifestも追加しています。

Flotilla 1.7.3 and 1.7.4 add kind-9 wrapping for richer NIP-29 rooms

Flotillaは、hodlbodによるNIP-29 groups clientで、1.7.31.7.4を出しました。中心となるprotocol changeは、calendar eventやpollのようなnon-chat contentをkind 9で包むことです。これにより、それらをgroupへ送ったときroom contextが保たれます。同じrelease lineではpoll、Aegis URL schemeによるNIP-46 login、space inviteのnative share、room mention、mobile clipboard image paste、draft、video in call、feed pagination改善も入りました。

WoT Relay v0.2.1 migrates eventstore to LMDB

WoT Relayは、bitvoraによるweb-of-trust filtered relayで、2026-04-22にv0.2.1を出しました。PR #97はeventstoreをLMDBへ移行し、初期trust graph構築時にupstream read budgetを使い切らないようWoT bootstrap fetchを調整し、PR #99golang.org/x/cryptoをv0.45.0へ上げ、PR #100はreleaseに合わせてadvertised NIP-11 software URLとversion stringを更新しました。

Formstr suite: Pollerama security pass, Forms i18n, Calendar RRULE support

Formstr suiteは今週26本のPRをマージし、Pollerama、Forms、Nostr Calendar全体で明確なsecurityテーマが見えました。Polleramaでは、PR #182がlogout時のcached DM失効、PR #175がsecure browser storageへのlocal key移動、PR #171がkind 0 profile contentのJSON.parse防御を行い、product面ではPR #186がHTTPS deep linking、PR #169がpoll result上のauthor名clickable化を追加しました。

Formstr側では、PR #475がaudio/video URL support、PR #439がi18n、PR #466がGoogle Forms importer、PR #463がsensitive key logのconsole出力削除を行いました。Nostr Calendar by Formstrは同日にv1.3.0v1.4.0を出し、PR #107で複数およびcustom RRULE support、PR #101でRFC 5545に従うfloating RRULE dateのUTC解釈、PR #97でshared event追加、PR #86でlist-level notification preference、PR #112でlogin/loading path再設計を行いました。3つのprojectはすべてNIP-52 eventを基盤にしています。

Also shipped: notedeck, nostr.blue, cliprelay, Captain’s Log

大きな見出し機能はないものの、複数clientが小刻みなreleaseを出しました。notedeckv0.10.0-beta.4でcolumn renderingとrelay pool fixを出し、nostr.blue v0.8.6はDioxus 0.7.5を取り込み、native audio bridgeをmanganis::ffi pluginへ変えてAndroid buildを復旧しました。cliprelayはDesktop v0.0.3とAndroid v0.0.4を出し、clipboard sync loopを引き締め、32-bit Android variantを落としました。Captain’s Logは、sync relayのliveness detectionを含む3つのalpha buildを公開しています。

In Development

whitenoise-rs refactors to session-scoped account views

whitenoise-rsは、Marmot clientのRust daemonとして、global singletonからaccountごとのAccountSession viewへ移る15本のPRをマージしました。PR #743AccountSessionAccountManagerの土台を置き、PR #753がscoped relay handleを追加し、続くphaseでdraftとsetting、message operation、group read/write、membership、push notification、key-package read、group creationを順に移し、PR #770でevent dispatchまでsession所有へ移しました。目標は、shared monolithを副作用の漏れにくいper-account surfaceへ分解することです。

White Noise app adds block/unblock UI, leave-group, and offline notices

White Noiseは、missingだったgroup lifecycle controlを追加しました。PR #578はblock/unblock UIを出し、PR #571PR #572はRust側のclear_chatdelete_chatleave_and_delete_groupをappへ結び、PR #569PR #576はchatとsettings画面へoffline noticeを追加しました。PR #585は「全key package削除」を「legacy key package削除」へ狭め、migration時にcurrent keyまで消えないようにしています。

MDK adds mixed-version invite support and SelfUpdate convergence

MDKは7本のPRをマージしました。PR #261はinvitee capabilityのLCDとしてRequiredCapabilitiesを計算し、AmethystとWhite Noise間のmixed-version inviteを可能にしました。PR #264はSelfUpdate wire formatを実装間で収束させ、PR #262はmalformed inviteeがstray stateを残さないようkey package parse順を修正し、PR #256PR #259はrobustnessを強化し、PR #265group_required_proposals accessorを公開しました。

nostter adds NIP-44 encryption across people lists, bookmarks, and mutes

nostterは10本のPRをマージしました。PR #2088はmute listへ、PR #2089はbookmarkへ、PR #2090はpeople listへNIP-44 encryptionを追加し、適用可能な箇所ではNIP-04から移行しました。PR #2087は、encrypted kind-10000 flowが安定したためlegacy kind-30000 mute migration pathを削除しています。

zap.cooking ships Nourish scoring and a reusable comment thread

zap.cookingは今週20本のPRをマージしました。中心機能は新しいNourish recipe scoring moduleで、PR #317PR #319がrecipeを栄養軸で評価します。同時にPR #299からPR #302までの4段階refactorでComments moduleが再利用可能なCommentThreadへ抽出されました。加えてrecipe scaling、media upload button統一、profile Replies tabも入りました。

ridestr extracts shared rider coordinator

ridestrは10本のPRをマージし、Compose screenをfocused componentへ分割しつつ、rider/driver protocol logicを共有:common coordinator moduleへ抽出しました(PR #70)。PR #60はRoadflare側向けkind 3189 driver-ping receiverを追加しています。

Blossom drafts a BUD-01 Sunset header for blob expiration

Blossomは、SHA-256 hashでkey付けされたHTTP blob storage protocolで、PR #99を開き、BUD-01へSunset headerを追加する案を提示しました。serverはこのheaderでblobがいつ配信終了になるかを未来timestampとして広告でき、clientは404へ当たる前にretention制限を把握できます。標準RFC 8594 semanticsを使い、serverは助言として長めに保持しても、best-effortで宣言通り期限を守ってもよい設計です。

New Projects

Forgesworn publishes a 29-repo cryptographic toolkit for Nostr

Forgeswornは、5日間で29本のopen-source repositoryを公開し、signing、identity、attestation、web of trust、paid API discoveryをまとめたstackを提示しました。signing stackの中心は、1つのmaster secretから無制限のunlinkable Nostr identityを導くnsec-treeと、Tor default-onのRaspberry Pi向けNIP-46 remote signerであるHeartwoodです。SapwoodはHeartwoodのweb management UIで、heartwood-esp32はHeltec WiFi LoRa 32 board上の同種token logic実験です。nsec-tree-cliはoffline-first operation向けにderivation、proof、Shamir recovery flowを公開します。

identityとtrustでは、Signetv1.6.0へ到達し、QR pairing flowとsession pubkey pinningを備えたdecentralized identity verification protocolを提供します。nostr-attestationsは、credential、endorsement、vouch、provenance、licensing、trustを1つのkind 31000イベントへ統合し、nostr-veilNIP-85 assertionをsecp256k1上のLSAG ring signatureで支えるprivacy-preserving web of trustを構築します。monetization側では、toll-boothがExpress、Hono、Deno、Bun、Cloudflare Workers向けL402 middlewareを提供し、toll-booth-dvmがそれをNIP-90 DVMとして公開し、toll-booth-announceがkind 31402のHTTP 402 service discoveryへつなぎます。全体はTypeScript中心、zero-dependency志向で、anvilというbash-only supply-chain-hardened release toolで出荷されています。

ShockWallet ships Nostr-native Lightning wallet sync and multi-node connections

ShockWalletは、self-custodial Lightning nodeとの接続transportとしてNostrを使うLightning walletです。appは1つ以上のLightning.Pub nodeとnprofile経由でpairし、walletとnodeの間でpayment authorizationをend-to-endで署名します。PR #608はchannels dashboard UIを改善し、PR #606は新規PUB user向けadmin-invite-link QR flowを追加し、PR #607はmetrics dashboardの可読性を上げました。

ShockWalletは、multi-device wallet state syncにNIP-78 application-specific data eventを使います。これによりdesktop browserとphoneのwallet viewをcentralized sync serverなしで一致させます。これはNIP-47のさらに下の層にあり、NIP-47が既存walletへ支払いを依頼するinterfaceであるのに対し、ShockWalletはwallet自身のaccount/session transportとしてNostrを使っています。並行して、teamはwallet-to-app connection向けsession pairing protocolのCLINKも進めています。

Nostrability issues migrate to git over Nostr after GitHub censorship

Nostrabilityは、elsatによるNostr client/relay interop trackerで、GitHub organizationが停止された後、issue workflowをgit over Nostrへ移しています。issue trackerは現在GitWorkshop/ngit上にあり、既存issueも引き継がれ、今後のinterop reportをNostrネイティブなinfrastructure内で扱えるようになりました。

nowhere encodes full websites into URL fragments and routes orders through Nostr

nowhereは、site全体をURL fragmentにserializeし、dictionary substitutionとraw DEFLATEで圧縮し、base64urlで符号化する新しいAGPL-3.0 projectです。HTTPではfragmentがserverへ送られないため、pageを配るhostは中身を見ず、site自体もserverへ保存されません。projectはevent、fundraiser、store、petition、message、drop、art、forumの8種類を用意し、creatorによる署名とURL単位のpassword encryptionもサポートします。store、forum、petitionではlive communicationが必要で、その通信はephemeral keyとNIP-44 encryptionを使ってNostr relay越しに流れます。nowhr.xyz readerにより、短いstore URLはprintable QR codeとしても実用的です。

relayk.itはSoapbox teamのsamが作った、Shakespeareベースのrelay discovery clientで、完全にbrowser内で動作します。Brainstorm Searchは、network全体のcontent surfacingに焦点を当てたsingle-page Nostr search UIとして公開されました。

Protocol and Spec Work

NIP Updates

NIPs repositoryでの最近のproposalとdiscussionです。

Open PRs and Discussions:

  • NIP-67: EOSE Completeness HintPR #2317):relayがfilterに一致する保存済みイベントをすべて返し切ったかどうかを示す、任意の3番目要素をEOSEへ追加する提案です。relay上限によって途中で切られたのか、本当に全部なのかをclientが区別できるようにします。
  • NIP-5D: Nostr AppletsPR #2303):NIP-5Aの静的websiteと、進行中のNIP-5CのWASM scrollの中間にあたる、sandboxed iframe/WebViewで動くinteractive applet配布の提案です。
  • NIP-29: Subgroups specPR #2319):1つのgroup内に複数parallel channelを持てるsubgroup hierarchyを追加し、旧client向けの単一hタグ形を保つ案です。
  • NIP-29: Explicit role permissions on kind 39003PR #2316):kind 39003 role eventへ明示permission schemaを導入し、moderatorのようなroleがrelayごとに別意味になる問題を減らす提案です。
  • NIP-11: access_control field for gated-relay discoveryPR #2318):relayのgating modeとaccess request endpointを示すaccess_control objectを追加する案です。
  • NIP-63a: Minimal Payment Gateway DescriptorPR #2315):先週扱ったkind 10164 payment gateway descriptorのfield layout調整が続いています。
  • NIP-XX: Agent Reputation Attestations (Kind 30085)PR #2320):Nostr上のautonomous agentやserviceについて、reliabilityやhonest advertisingを署名付きで評価するkind 30085 addressable eventを提案します。
  • NIP-TPLD: Transient Private Location DataPR #2309):kind 20411、recipientごとのNIP-44 encryption、ttl tag semanticsの議論が続いています。
  • marmot-ts 0.5.0 release PRPR #70):TypeScript Marmot clientのbreaking change群をまとめたrelease PRで、legacy kind 443と新kind 30443両対応、constructorとstorage layerの見直しが含まれます。

NIP Deep Dive: NIP-72 (Moderated Communities)

NIP-72は、topic-based communityをNostr上で扱うためのモデルです。relayがmembershipとmoderationのauthorityになるNIP-29とは異なり、NIP-72 communityは通常のNostr eventとして存在し、関係するkindを運べるrelayならどこでも配信できます。誰でも投稿でき、認識済みmoderatorが承認した投稿だけがcommunity feedに表示されます。

communityはkind 34550のaddressable eventで定義されます。dタグが安定slugになり、namedescriptionimagerulesタグが表示用metadataを持ち、pタグにmoderator markerを付けてmoderator pubkeyを列挙します。relayタグにはauthorrequestsapprovalsといったmarkerを付けて、どこへどの種別のイベントを出すべきかのhintを載せられます。ユーザーはkind 1 noteやkind 30023 articleなど任意の通常イベントへ、community coordinateである34550:<creator_pubkey>:<slug>を値に持つaタグを追加して投稿します。その投稿はそれ単体でも有効なNostr eventですが、community-aware clientは認識済みmoderatorのapprovalが付いたものだけをcommunity feedへ出します。

approvalはmoderatorが公開する別個のkind 4549イベントです。そこにはsubmissionを指すeタグ、投稿者を指すpタグ、communityを指すaタグが入り、contentにはstringifyされたsubmission eventがcache copyとして埋め込まれます。これにより、元投稿が後で消されても承認済みpostをrenderできます。approval modelの利点は3つあります。moderation判断が透明でaudit可能であること、同じ投稿が複数communityで承認され得ること、そしてkind 34550からmoderatorが外されれば、そのmoderatorの古いapprovalがread layerで無効化されることです。NIP-72は、spamをwireに流したくないclosed spaceより、curated front page的なpublic topic communityに向いています。

NIP Deep Dive: NIP-57 (Zaps)

NIP-57は、Lightning paymentをNostr identityやeventへ結び付け、かつ検証可能な支払いreceiptをrelayへ戻す方法を定義します。senderが誰で、いくらを、誰へ、どの対象のために支払ったかをNostr clientが検証可能な形で見られるようにする仕様で、LNURL、Lightning、Nostrの3層をまたいでいます。

flowには4つのactorがいます。senderのclientは、recipientのkind 0 profile metadataのlud06またはlud16、またはzap対象イベントのzapタグからLNURL endpointを見つけます。そのclientは意図した支払いを記述するkind 9734 zap requestを署名し、relayではなくrecipientのLNURL callbackへ送ります。recipient側のLNURL serverはrequestを検証し、description hashがrequest eventの文字列表現へコミットするLightning invoiceを返し、senderが支払うとsenderが指定したrelay setへkind 9735 zap receiptを公開します。zap requestにはpタグ、任意のeまたはaタグ、amountrelays、任意のmessageを入れるcontent、対象kindを示すkタグが入ります。zap receiptにはdescriptionタグ内のrequest全文、bolt11preimageが入り、recipientのLNURL responseでadvertiseされたnostrPubkeyでwallet serverが署名します。

clientがkind 9735 receiptをzapとして表示するなら、4点を検証すべきです。receipt署名がLNURL nostrPubkeyと一致すること、bolt11金額が埋め込みrequestのamountと一致すること、invoiceのdescription hashがstringified requestへコミットしていること、preimageがinvoiceのpayment_hashへハッシュされることです。これをしないzap count集計は簡単に偽造されます。private zapではcontentを暗号化してanonタグを付け、anonymous zapではephemeral keypairまで新しく生成します。NIP-57はさらにNIP-75 zap goalの土台にもなっており、AmethystPR #2469はこの週、NIP-53 Live Activities画面でgoal progressとtop-zapper leaderboardを描画するようにしました。付録で定義されるzap splitにより、1回のzapを複数recipientへweight付きで分配することもできます。


今週は以上です。何か作っているものがある、または共有したい更新がある場合は、NostrでDMを送るか、nostrcompass.orgで見つけてください。