リアクション・リポストのタグ周りの挙動
#開発 #実装ノート
リアクション(kind:7 , NIP-25) や リポスト(kind:6, NIP-18) においてeタグはその対象となるイベントを指し示すために使われます。しかし、いくつかのクライアントでは、複数のeタグを含めることがあります。
リアクションでは最後のeタグとpタグを使うことになっています。
リポストでは仕様上は未定義となっています。
以下は、仕様は未定義であったときの調査です(2023年5月ごろ):
結論
Damusとの互換性を考慮するなら、リアクション先として最後のeタグ、pタグを使うこと
そうでないと、リアクション先として誤った投稿を使うことになる
他のeタグはリアクション先ではないため、無視することになるはず
(追記) リアクションに関してはNIP-25の最新仕様でこのことが明言された
最後のpタグ以外で自分が含まれる場合の対応
Damusは元の投稿のpタグを含めるため、メンションされた人全員が通知を受け取ることになる
考えられる対応
無視する
Damusの挙動との互換性を優先するならマーカーに基づいて自分がメンションされた投稿がリポスト/リアクションされたと表示することもできる(仕様ではNIP-10をkind:1に使うことが想定されていると考えられる)
リアクションで複数のeとpタグを含めるクライアント
Damus
元のkind:1テキスト投稿のeとpタグをそのまま引っ張ってきている
そのため、元々のeタグに付いていたrootやreply等のmarkerやrelayを引き継ぐ
通知先もメンションされた人全員に通知が飛ぶ
hell threadの原因になっていそう
リアクション先のイベントのIDは元々のタグの後、つまり最後に追加される
リアクションで単一のeタグを含めるクライアント
Amethyst
Iris
リアクションを受け取ったときの各クライアントの対応
Damus
自分の投稿ではないが、メンションされている場合は「タグ付けされた投稿に○○がリアクションしました」と表示する
Amethyst
TODO
Iris
最後のIDを取得する
Snort
TODO
Nostr Client Behaviors
https://docs.google.com/spreadsheets/d/16PPbdUiGhcgsSmZueio3CbjF95_11sKDgOGN0r9LBJ0/edit?usp=drivesdk