NIP-33
Parameterized Replaceable Events
パラメータつき上書き可能イベント(Parameterized Replaceable Events)を定義する。
これは、NIP-16で定義されている上書き可能イベント(Replaceable Events)の拡張版。 ここでは、タグ名の次にくる文字列を「タグの値」と定義する。
パラメータつき上書き可能イベントは、kindが30000 <= n < 40000の範囲のイベント。
受け取り済みの最新のものよりタイムスタンプが新しい、
同じkind かつ
発行者が同じ(同じ鍵で署名されている) かつ
最初のdタグの値が同じ
という条件を満たす パラメータつき上書き可能イベント を受け取ったら、リレーは古いイベントを破棄すべき(SHOULD)である。これにより、実質的に特定の 発行者:kind:dタグの組合せで問い合わせた際に返ってくるイベントが上書きされる形となる。
タイムスタンプが同じ2つのイベントがある場合、idが(辞書順で)小さい方を保持し、他方は破棄すべき(SHOULD)である。
dタグそのものが存在しない場合、またはdタグの値が存在しない場合は、「値が空文字列のdタグを持つ」とみなす。
以下はすべて「値が空文字列のdタグを持つ」とみなされるtagsプロパティの例。
"tags":[["d",""]]
"tags":[]
"tags":[["d"]]
"tags":[["d",""],["d","not empty"]]: 最初のdタグのみを考慮するため
"tags":[["d"],["d","some value"]]: 最初のdタグのみを考慮するため
"tags":[["e"]]: dタグが存在しないため
クライアントは複数の値を持つdタグを用いるべきではない(SHOULD NOT)。
また、#dフィルタによる検索(cf. NIP-12)を可能にするため、値がなくてもdタグを含めるべき(SHOULD)。 参照とタグづけ
パラメータつき上書き可能イベントへのリンクをサポートするために、NIP-19においてnaddrというコードが導入されている。naddrはイベント発行者の公開鍵とdタグ(とリレーURL)のデータを持つ。 noteで特定の投稿を参照するような仕組みがパラメータつき上書き可能イベントにも用意されているよ、という話jiftechnify.icon
naddrコードに対応するタグは次のような aタグとなる:
["a", "<kind>:<pubkey>:<d-identifier>", "<relay url>"]
クライアントの想定挙動
リレーがこのNIPに対応しているかどうかを知るために、NIP-11のsupported_nipsを用いるべき(SHOULD)。 このNIPに対応していないリレーにパラメータつき上書き可能イベントを送ってもよい(MAY)が、同じkindの上書き可能イベントが複数送られてくることを想定し、最新のイベントのみを使うようにすべき(SHOULD)。
dタグによるフィルタ(#d)を用いるべき(SHOULD)。
dタグがない・dタグの値がないイベントが#dフィルタで送られてこないことを考慮すべきで(shouldとあるが大文字でないのでどう解釈すべきか不明)、常に値を持つdタグを含めることが推奨される。