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)

Nostr にはさまざまな種類のイベントがあります。よく使われるイベント種別の最新リストは、いつでも Nostr NIPs repository で確認できます。

NIPs

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

なぜNIPsは重要なのか?

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

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

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

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