Nostrプロトコル

これはNostrプロトコルの高レベルな概要であり、イベント・タイプとNostr Implementation Possibilities(NIPs)の仕組みについての詳細です。

§ 最高レベルのNostr

  • Nostrネットワークは主に以下の2つで構成されています: クライアントリレー.
    • クライアント(Clients) は、ユーザーがリレーにデータを読み書きするために使用するインターフェースです。ソーシャルメディアを例に挙げると、これはTwitter(現X)のウェブアプリやモバイルアプリだと考えてください。Twitterの集中型データベースからデータを読み取り、Twitterの集中型データベースにデータを書き込むためのクライアントです。
    • リレー(Relays) は、データベースのようなものです(ただし、単にデータを保存するだけでなく、もっと多くのことができます)。クライアントにデータを送信してもらい、そのデータをデータベースに保存します。クライアントはリレーからデータを読み取り、ユーザーに見せることができます。
  • すべてのユーザーは公開鍵によって識別されます。すべてのイベント・オブジェクト(投稿メッセージ、フォローリストの更新など)は署名されています。クライアントはこれらの署名が正しいかどうかを検証します。
  • クライアントはリレーからデータを取得し、リレーにデータを公開します。リレーはほとんどの場合、ユーザーが選択します。リレーは互いに通信する必要はありませんが、将来的には通信する可能性があります。
  • 例えば、プロフィールを更新するには、クライアントに指示し、使用したいリレーにkind 0のイベントを送信するだけです。リレーはそのイベントを保存します。
  • 起動時に、クライアントはあなたが指定したリレーからデータを照会します。これは、あなたがフォローしているユーザーのイベントのみを表示するようにフィルタリングすることができます。
  • イベントには多くのkindがあります。イベントはあらゆる種類の構造化されたデータを含むことができ、最も使用される構造は、すべてのクライアントとリレーがそれらをシームレスに扱うことができるように、Nostr Implementation Possibilities(NIPs - 誰もが従うべき標準化されたプロトコル)として、その方法を明記しています。
  • Nostrで見ことができるデータは、完全に接続するリレーに依存します。詳しくは下のネットワーク・ダイアグラムをご覧ください。

ネットワーク・ダイアグラ(図表)

Nostr network diagram

上のダイアグラを見ると、3つのリレーと3人のユーザーがいることがわかります。各ユーザーは異なるクライアントで(異なるプラットフォームで)Nostrに接続しています。

読み取りと書き込みができることがダイアグラからわかります:

  • ボブはアリスの投稿をすべて見ることができますが、メアリーの投稿は何も見ることができません(メアリーの存在すら知りません)。
  • アリスはボブの投稿をすべて見ることができますが、メアリーの投稿は何も見ることができません(メアリーの存在すら知りません)。
  • メアリーはボブとアリスの投稿をすべて見ることができます。これはメアリーがリレー3にのみ投稿を書き込む一方で、ボブとアリスの投稿はリレー2から読み取っているためです。

これは非常に単純化された状況ですが、どのリレーに接続するかによって、Nostr使用時に誰が何を見るかに大きな影響を与えているかが、よく理解できるはずです。

§ イベント(Events)

イベントとは、Nostrネットワークで唯一のオブジェクト・タイプです。各イベント・オブジェクトは kind を持ち、それがどのような種類のイベント(Event Kind)であるか(ユーザーが起こすかもしれないアクションや受信するかもしれないメッセージ)を示します。

kind 1のイベントは以下のようなものです(kind 1は短いテキストメモ用で、Twitterで言うツイートのようなものです)。

{
    "id": "4376c65d2f232afbe9b882a35baa4f6fe8667c4e684749af565f981833ed6a65",
    "pubkey": "6e468422dfb74a5738702a8823b9b28168abab8655faacb6853cd0ee15deee93",
    "created_at": 1673347337,
    "kind": 1,
    "tags": [
        ["e", "3da979448d9ba263864c4d6f14984c423a3838364ec255f03c7904b1ae77f206"],
        ["p", "bf2376e17ba4ec269d10fcc996a4746b451152be9031fa48e74553dde5526bce"]
    ],
    "content": "Walled gardens became prisons, and nostr is the first step towards tearing down the prison walls.",
    "sig": "908a15e46fb4d8675bab026fc230a0e3542bfade63da02d542fb78b2a8513fcd0092619a2c8c1221e581946e0191f2af505dfdf8657a414dbca329186f009262"
}
  • id フィールドはイベントIDを示します。
  • pubkey フィールドはイベントを送信したユーザーの公開鍵を示します。
  • created_at フィールドはイベントがいつ公開されたかを示します。
  • kind フィールドはそれがどのような種類のイベントであるかを示します。
  • tags フィールドはイベント・タグを示します。これらはリンクを作成したり、メディアを追加したり、他のユーザーやイベントに言及するために使用されます。
  • content フィールドはイベント内容を示します。この場合、短いテキストの投稿です。
  • sig フィールドは、クライアントがこの公開鍵を持つユーザーが指定された日付に、実際にこのイベントを送信したかを検証するために使用する署名です。

イベントの種類(Event Kinds)

これは現在の Event kindリストです。最新版のリストは、常にNostr NIPs repositoryにあります。

kind説明NIP
0メタデータ(ユーザー・プロフィール)1
1テキスト(いわゆる「投稿」)1
2推奨リレー1
3フォローリスト(コンタクト)2
4暗号化ダイレクトメッセージ4
5イベント削除9
6リポスト18
7リアクション(いわゆる「いいね!」)25
8バッジ授与58
40チャンネル作成28
41チャンネル・メタデータ28
42チャンネル・メッセージ28
43チャンネル・非表示メッセージ28
44チャンネル・ミュート・ユーザー28
1063ファイル・メタデータ94
1984通報(スパム報告など)56
9734Zapリクエスト57
9735Zapレシート57
10000ミュート・リスト51
10001ピン留めリスト51
10002利用中のリレー・リスト65
13194ウォレット情報47
22242クライアント認証42
23194Wallet Connectリクエスト47
23195Wallet Connectリクエスト47
24133Nostr Connect46
30000カテゴライズされたユーザー・リスト51
30001カテゴライズされたブックマーク・リスト51
30008プロフィール・バッジ58
30009バッジの定義58
30017商品の作成・更新15
30018商品の作成・更新15
30023長文投稿23
30078アプリの固有データ78
30402クラシファイド99
31989ハンドラーの推薦89
31990ハンドラーの情報89

標準化されたタグ

名称その他のパラメータNIP
eevent id (hex)relay URL, marker1, 10
ppubkey (hex)relay URL1
acoordinates to an eventrelay URL33, 23
ra reference (URL, etc)12
thashtag12
ggeohash12
noncerandom13
subjectsubject14
didentifier33
expirationunix timestamp (string)40

§ NIPs

Nostr Implementation Possibilty、略してNIPは、Nostr互換のリレーとクライアント・ソフトウェアが実装しなければならないもの(MUST)、実装すべきもの(SHOULD)、実装してもよいもの(MAY)を文書化したものです。NIPsは、Nostrプロトコルの仕組みをアウトラインとして文書化したものです。

なぜNIPsは重要なのか?

Nostrは非中央集権的で、(Twitter / 現Xのような)中央集権的なサービスに依存しません。つまり、プロトコルの方向性は私たち全員に委ねられているのです!私たちは変更を提案し、主張し、他の人が提案したアイデアに対してフィードバックを提供することができます。

コミュニティに積極的に参加することで、ネットワークの方向性について発言することができます。メイン・リポジトリで公開されたNIPはすでに承認されています。新しいアイデアの追加は、そのリポジトリのプル・リクエストで行います。

どこでNIPsを確認できるか?

現在のNIPはすべてNostr NIP repoで見ることができます。