NIP-10
#NIP
On "e" and "p" tags in Text Events (kind 1).
https://github.com/nostr-protocol/nips/blob/master/10.md
テキストイベント(テキスト投稿)内の「e」タグと「p」タグの取り扱い
Twitterのスレッドやリプライ、メンションに相当する機能を実現するためにタグをどのように設定し、扱うべきかを定める仕様
2つのタグの役割
e
返信先のイベントを示す
p
送信先の相手の公開鍵(pubkey)を示す
pタグ
@付き投稿を表現する
知らせたい相手の公開鍵をタグに含める
知りたい側は自分の公開鍵を元にイベントを購読する
位置による"e"タグ (Positional "e" tags)(DEPRECATED, 非推奨)
一般的に使われているが、廃止されたと見做されるべきである
フォーマット
["e", <event-id>, <relay-url>](NIP-01の通り)
event-id = イベントのID
relay-url = 参照されるイベントに関連付けられた推奨されるリレー情報。多くのクライアントが任意のフィールドとして扱う。
意味づけ
eタグなし
イベントにはリプライも参照先もない
1つのeタグ: ["e", <id>]
replyを意味する
2つのeタグ: ["e", <root-id>], ["e", <reply-id>]
1つ目は root、2つ目は reply
<root-id>はリプライチェーンの先頭(root)のイベントのIDを示す。<reply-id>は返信先のイベントのIDを示す。
それ以上のeタグ: ["e", <root-id>] ["e", <mention-id>], ..., ["e", <reply-id>]
1つ目は root、最後は reply、それ以外が mention
<mention-id>はリプライチェーンの中にあるかもしれないし、ないかもしれない。引用されているイベントを示す。
マーク付き"e"タグ (Marked "e" tags)(PREFFERD, 推奨)
スレッド(リプライツリー)を表現するためのタグ
タグのフォーマット
["e", <event-id>, <relay-url>, <marker>, <pubkey>]
event-id (必須) = イベントのID(NIP-19の note...に相当)
relay-url (推奨) = 参照されるイベントに関連付けられた推奨されるリレー情報(未設定の場合は空文字列)
marker (任意) = 種類を表現する
reply = リプライ
root = スレッドの一番大元の投稿。rootイベントへの直接の返信であれば、"root"マーカーだけを使うべき。
mention = 引用もしくはリポストされた投稿のID
なお、NIP-18で引用リポストの定義がある。2024/2/24にNIP-18の定義がeタグを使う方式からqタグを使う方式に変わり、食い違う状況になっている。引用リポストを行う際にはNIP-18を参照のこと。
pubkey(推奨) = 参照されるイベントの作者の公開鍵。relay-urlでイベントを見つけられなかった場合にOutboxモデルを利用して、ユーザの書き込み先リレーから取得するために用いる。
うまく使えば、いわゆる巻き込みRTを防げそう?syusui_s.icon
一部の人だけをpに入れることができる
pを外せば、通知を飛ばしたくないときに使そうな予感
アプリ(クライアント)の実装状況が不明だが、基本公開鍵でsubscribeするのでうまく動きそうな気配
実際の例
メンション
返信先の投稿がないため、pタグだけになる
code:_.json
"tags": "p", "96203d66276e3214ea93b6c78a577c3c9a7279f9ee7e51b22f3b8c17643a819c"
返信
code:_.json
"tags": [
// 返信先の投稿
// 最初の返信の場合、replyでなくrootを使う
"e", "555f1a..(中略)..bb64e", "", "root",
// 返信する相手(通知したい相手)
"p","96203d66276e3214ea93b6c78a577c3c9a7279f9ee7e51b22f3b8c17643a819c"
]
スレッド
code:_.json
"tags": [
// root = スレッドの根っことなる投稿
"e","555f1a..(中略)..bb64e", "", "root",
// reply = 返信先 = スレッド内の別の投稿
"e","42bc59..(中略)..03df4", "", "reply",
// 返信する相手(通知したい相手)
"p","96203d66276e3214ea93b6c78a577c3c9a7279f9ee7e51b22f3b8c17643a819c"
]