NIP-51
Lists
様々なイベントのフォロー(タイムラインの表示)、ブックマーク、ミュートのために利用できます
ミュート kind: 10000
ミュートしたユーザの一覧
ピン kind: 10001
ピン留め(固定表示)された投稿
気になった投稿を保存できる
フォローセット kind: 30000
特定の人だけを集めたタイムラインを作ることができる
ブックマークセット kind: 30001
コレクション、投稿のまとめを作ることができる
リストとブックマーク
公開/非公開情報を含められる
tags
content に暗号化された情報を含める
上書き可能イベントを使う
ミュート、ピンの場合
パラメータつき上書き可能イベントを使う
ユーザのリスト、ブックマークの場合
dタグで名前を含められる
/icons/hr.icon
翻訳 commit=5b2461eb
このNIPはユーザが作成できる、物のリストを定義する。リストにはどんなものに対する参照であっても含めることができ、それらの参照は公開または非公開にできる。
リスト内の公開アイテムはイベントのtags配列に指定する。一方、非公開アイテムはイベントのtags配列を真似たJSONの配列として指定されるが、文字列化され、NIP-04と同じ方式(共有鍵は著者の公開鍵と秘密鍵から導出)を使って暗号化され、.contentに格納される。
新しいアイテムを既存のリストに追加するとき、時系列順で格納されるようにクライアントはリストの最後に追加すべきである(SHOULD)。
リストの種類
標準リスト
標準リストはパラメータ付きでない、置換可能イベントを用いる。すなわち、ユーザはそれぞれのイベントの種類ごとにただ一つのリストを持ってもよい。これらは特別な意味を持ち、クライアントはユーザのプロフィールや閲覧体験を強化するためにこれらに頼ってもよい。
例えば、ミュートリストにはユーザがフィード上で見たくないか、迷惑な通知を受け取りたくないスパム投稿者や厄介者の公開鍵を含めることができる。
ミュートリスト (kind: 10000)
ユーザがフィード上で見たくないもののリスト
"p"(公開鍵)、"t"(ハッシュタグ)、"word"(小文字化された文字列)、"e"(スレッド)
ピン留めされたノート (kind: 10001)
プロフィールページで紹介したいイベント
"e"(kind:1 テキスト投稿)
ブックマーク (kind: 10003)
ユーザが保存したいものを含む、分類されていない「グローバル」なリスト
"e" (kind:1 テキスト投稿)、"a" (kind:30023 記事)、"t" (ハッシュタグ), "r" (URLs)
コミュニティ (kind: 10004)
"a" (kind:34550 コミュニティ定義)
チャット (kind:10005)
"e" (kind:40 チャンネル定義)
ブロックしたリレー (kind: 10006)
クライアントが接続してはならないリレー
"relay" (リレーのURL)
検索リレー (kind: 10007)
クライアントが検索クエリを実行するときに使うべきリレー
"relay" (relay URLs)
シンプルなグループ (kind:10009)
"group" (NIP-29 グループのID+必須のリレーのURL)
関心 (kind: 10015)
ユーザが関心があるかもしれない話題、あるいはポインタ
"t" (ハッシュタグ) と "a" (kind:30015 関心セット)
絵文字 (kind: 10030)
ユーザのお気に入りの絵文字、あるいは絵文字セットへのポインタ
"emoji" (NIP-30参照)、"a" (kind:30030 絵文字セット) DMリレー (kind: 10050)
"relay"(NIP-17を参照)
よいWiki作者(kind: 10101)
"p"(公開鍵)
よいWikiリレー
"relay"(リレーURL)
セット
セットは明確に定義された意味を持つリストで、これらを用いてクライアントの機能やUIを強化できる。標準リストと異なり、ユーザはそれぞれのイベントの種類ごとに一つ以上のセットを持つことが予想される。したがって、それぞれのセットは異なる「d」識別子が割り当てられなければならない。
例えば、リレーセットをドロップダウンUIに表示して、イベントを送信するリレーやイベントへの返信を読み込むリレーを切り替えられるようにすることができる。キュレーションセットを使うと、アプリは様々なトピックにタグ付けされた他のユーザが作成したキュレーションを紹介することができる。
メインの識別子の "d" タグとは別に、UIを強化するためにセットは任意で "title"、"image"、"description"タグを持つことができる。
フォローセット (kind:30000)
クライアントが様々な状況でチェックすると決めてもよい、分類されたユーザーのグループ
"p" (pubkeys)
リレーセット (kind:30002)
様々な操作においてユーザが簡単に選ぶことのできる、ユーザ定義のリレーグループ
ブックマークセット (kind:30003)
ラベル付けされた別々のグループに含めなければならないときのためのユーザ定義のブックマーク分類
キュレーションセット (kind:30004)
ユーザーが関心を持っているか、同じカテゴリーに属するとして選んだ記事のグループ
注釈: 古い仕様では "e" (kind:1 notes) も許されていた。互換性に注意。
キュレーションセット(kind:30005)
ユーザーが関心を持っているか、同じカテゴリーに属するとして選んだビデオのグループ
"a" (kind:34235 videos)
関心セット (kind: 30015)
沢山のハッシュタグによって表現される関心のある話題
"t" (hashtags)
絵文字セット (kind: 30030)
分類された絵文字グループ
リリース成果物セット (kind:30063)
ソフトウェアリリースのファイルのグループ
"e" (kind:1063 file metadata NIP-94 イベント), "i" (アプリケーション識別子、典型的にはドメイン表記の逆順), "version" 廃止された標準リスト
いくつかのクライアントは過去にこれらのリストを利用してきた。しかし、上で定義した標準化されたフォーマットへの移行に取り組むべきである。
table:_
イベントの種類 "d" タグ 代わりに使うべきリスト
30000 "mute" kind 10000 ミュートリスト
30001 "pin" kind 10001 ピン留めリスト
30001 "bookmark" kind 10003 ブックマークリスト
30001 "communities" kind 10004 コミュニティリスト
例
/icons/hr.icon
以下、古いNIP-51の翻訳(2023/5/21時点)
「リスト」イベントは公開および/または非公開のタグのリストを持つものとして定義される。公開タグはイベントのtagsに列挙される。非公開タグは暗号化した上でイベントのcontentに含める。非公開タグの暗号化にはNIP-04を用い、共有シークレットとしてリスト作成者の秘密鍵と公開鍵を用いる。各リスト種別には個別のイベントの種類 (kind)を使うべきである。 もし(「ミュート」リストのように)リスト種別がユーザにつき1つだけしか定義できない場合、そのリストは上書き可能イベントとする。これを「上書き可能リスト」と呼んでもよい。
そうでなければ、リストはパラメータつき上書き可能イベントとし、dタグでリストの名前を指定する。これを「パラメータつき上書き可能リスト」と呼んでもよい。
上書き可能リストイベントの例
次の鍵を持つユーザが「ミュート」リストを作ることを考えよう:
code:_
priv: fb505c65d4df950f5d28c9e4d285ee12ffaf315deef1fc24e3c7cd1e7e35f2b1
pub: b1a5c93edcc8d586566fde53a20bdb50049a97b15483cb763854e57016e0fa3d
ユーザが公開情報として次のユーザを含めたい場合:
code:_.json
そして、非公開で次のユーザを含めたい場合(次に示すのは暗号化され、イベントのcontentに置かれるであろうJSON):
code:_.json
[
]
すると、ユーザは「ミュート」リストイベントを次のように作成できるだろう:
code:_.json
{
"kind": 10000,
"tags": [
],
"content": "VezuSvWak++ASjFMRqBPWS3mK5pZ0vRLL325iuIL4S+r8n9z+DuMau5vMElz1tGC/UqCDmbzE2kwplafaFo/FnIZMdEj4pdxgptyBV1ifZpH3TEF6OMjEtqbYRRqnxgIXsuOSXaerWgpi0pm+raHQPseoELQI/SZ1cvtFqEUCXdXpa5AYaSd+quEuthAEw7V1jP+5TDRCEC8jiLosBVhCtaPpLcrm8HydMYJ2XB6Ixs=?iv=/rtV49RFm0XyFEwG62Eo9A==",
...他のフィールド
}
パラメータつき上書き可能リストイベントの例
ユーザがnostrユーザの「カテゴライズされた人々」リストを作りたいとしよう。ユーザは次の鍵を持つとする。
code:_
priv: fb505c65d4df950f5d28c9e4d285ee12ffaf315deef1fc24e3c7cd1e7e35f2b1
pub: b1a5c93edcc8d586566fde53a20bdb50049a97b15483cb763854e57016e0fa3d
ユーザが公開情報としてこれらの情報を含めたいとする:
code:_.json
そして、非公開情報としてこれらのユーザを含めたいとする(これはJSONであり、暗号化され、contentに含められる):
code:_.json
[
]
すると、ユーザは次のような「カテゴライズされた人々」のリストのイベントを作ることになる:
code:_.json
{
"kind": 30000,
"tags": [
],
"content": "VezuSvWak++ASjFMRqBPWS3mK5pZ0vRLL325iuIL4S+r8n9z+DuMau5vMElz1tGC/UqCDmbzE2kwplafaFo/FnIZMdEj4pdxgptyBV1ifZpH3TEF6OMjEtqbYRRqnxgIXsuOSXaerWgpi0pm+raHQPseoELQI/SZ1cvtFqEUCXdXpa5AYaSd+quEuthAEw7V1jP+5TDRCEC8jiLosBVhCtaPpLcrm8HydMYJ2XB6Ixs=?iv=/rtV49RFm0XyFEwG62Eo9A==",
...他のフィールド
}
ユーザがbookmarksの「カテゴライズされたブックマーク」リストを作りたいとしよう。ユーザは次の鍵を持つとする。
code:_
priv: fb505c65d4df950f5d28c9e4d285ee12ffaf315deef1fc24e3c7cd1e7e35f2b1
pub: b1a5c93edcc8d586566fde53a20bdb50049a97b15483cb763854e57016e0fa3d
これらのブックマークを含めたいとする
code:_.json
そして、非公開情報としてこれらのブックマークを含めたいとする(これはJSONであり、暗号化され、contentに含められる):
code:_.json
[
]
すると、ユーザは次のような「カテゴライズされたブックマーク」のリストのイベントを作ることになる:
code:_.json
{
"kind": 30001,
"tags": [
],
"content": "y3AyaLJfnmYr9x9Od9o4aYrmL9+Ynmsim5y2ONrU0urOTq+V81CyAthQ2mUOWE9xwGgrizhY7ILdQwWhy6FK0sA33GHtC0egUJw1zIdknPe7BZjznD570yk/8RXYgGyDKdexME+RMYykrnYFxq1+y/h00kmJg4u+Gpn+ZjmVhNYxl9b+TiBOAXG9UxnK/H0AmUqDpcldn6+j1/AiStwYZhD1UZ3jzDIk2qcCDy7MlGnYhSP+kNmG+2b0T/D1L0Z7?iv=PGJJfPE84gacAh7T0e6duQ==",
...他のフィールド
}
リストイベントの種類
table:_
イベントの種類(kind) リストの種類
10000 ミュート
10001 ピン
30000 カテゴライズされた人々
30001 カテゴライズされたブックマーク