Nostr
P2Pのツイッターを作りたい
アカウントは秘密鍵と公開鍵で成り立つ
各ユーザーはノードのような役割で、投稿などの情報はリレーされる
ツイッターには管理者がいて、広告・バンなどを一方的にされる
Nostrの仕組みは?
クライアントとリレーの2つのコンポーネントがあります。各ユーザーはクライアントを実行します。リレーは誰でも実行できる。
すべてのユーザーは公開鍵で識別されます。すべての投稿は署名されます。各クライアントはこれらの署名を検証する。
クライアントは任意のリレーからデータを取得し、任意のリレーにデータを公開する。リレーは他のリレーと会話することはなく、ユーザーと直接会話するだけである。
例えば、ユーザが誰かを「フォロー」するには、その公開鍵からの投稿を知るリレーに問い合わせるようクライアントに指示するだけでよい。
クライアントは起動時に、フォローしているすべてのユーザーについて知っているすべてのリレーからデータを照会し(たとえば、直近1日のすべての更新)、そのデータを時系列にユーザーに表示する。
投稿」はあらゆる種類の構造化データを含むことができるが、最もよく使われるものは、すべてのクライアントとリレーがシームレスにそれらを扱えるように、標準に取り込まれる予定である。
鍵について
各Nostrアカウントは公開鍵と秘密鍵のペアに基づいています。単純に考えると、公開鍵がユーザー名で秘密鍵がパスワードです。パスワードとは異なり、秘密鍵は紛失してもリセットできません。
通常、公開鍵は接頭辞npub1、秘密鍵は接頭辞nsec1の文字列で表されます。秘密鍵は、パスワード・マネージャーのような安全な場所に保管するようにしてください。
プロトコルとクライアント
Nostr自体は単なるプロトコルであり、インターネット上でメッセージをやり取りするための合意された手順です。
Nostr(プロトコル)にはクライアントを介してアクセスします。クライアントはウェブ、デスクトップ、モバイルアプリのいずれでも可能です。クライアントはリレーからデータをフェッチしたり、新しいデータを生成してリレーにプッシュしたりすることができます。
Nostrに存在する唯一の "データ "はイベントである。
署名イベント
これらのイベントには署名(sig)が含まれていなければならない。署名によって、そのイベントが真の作者によって作成されたことを数学的に証明することができる。
署名を作成するためには、クライアントはあなたの秘密鍵を必要とします。ネイティブアプリは通常、最初に開くときに秘密鍵を貼り付ける場所がある。秘密鍵からあなたの公開鍵も導き出すことができる。
ウェブアプリの場合、秘密鍵を貼り付けることは推奨されません。代わりに、ウェブクライアントがあなたの鍵を学習することなく使用できるようにするNostr関連の機能を実装したブラウザ拡張機能を使用することをお勧めします。Flamingo、Alby、nos2xなどがその例です。
フォローする友達を探す
Twitterユーザーであれば、nostr.directoryを使って、TwitterアカウントとNostr公開鍵をリンクしているTwitterユーザーを見つけることができます。Snortはまた、あなたの代わりにフォロワーのシームレスなインポートを行います。
そうでなければ、例えば、nostr.bandをチェックし、彼らのインタラクションやリプライなどを見ることで、著名なNostrキーを何十人もフォローし始めることができます。
他のクライアントを使うことはできますか?
はい!公開鍵と秘密鍵のペアを作ったので、このペアをどのNostrクライアントでも使ってアカウントにアクセスすることができます。クライアントはNostrプロトコルでブロードキャストされたメッセージを見るためのインターフェースに過ぎないことを忘れないでください。
Nostrの開発の初期段階なので、全てのクライアントが全てのプロトコルの機能を同じようにサポートしているわけではありません。nostr.netのクライアントページをチェックして、あなたに最適なクライアントを見つけるか、nostr.netの他の利用可能なクライアントの混乱に飛び込む価値があります。
プロトコル
Nostrプロトコルの仕組みと理由の詳細
Nostrの概要
クライアントとリレーです。各ユーザーはクライアントを実行します。誰でもリレーを実行できる。
すべてのユーザーは公開鍵で識別される。すべての投稿は署名される。各クライアントはこれらの署名を検証する。
クライアントは選択したリレーからデータを取得し、選択したリレーにデータを公開する。リレー同士は会話せず、直接ユーザーと会話する。
例えば、ユーザが誰かを「フォロー」するには、その公開鍵からの投稿を知るリレーに問い合わせるようクライアントに指示するだけでよい。
イベント
イベントはNostrプロトコルの原子単位です。ここでは、様々なタイプのイベントについて簡単に説明します。
イベントとは?
イベントはNostrネットワーク上の唯一のオブジェクトタイプです。以下はその一例です:
code:event
{
"id": "4376c65d2f232afbe9b882a35baa4f6fe8667c4e684749af565f981833ed6a65",
"pubkey": "6e468422dfb74a5738702a8823b9b28168abab8655faacb6853cd0ee15deee93",
"created_at": 1673347337,
"kind": 1,
"content": "Walled gardens became prisons, and nostr is the first step towards tearing down the prison walls.",
"tags": [
],
"sig": "908a15e46fb4d8675bab026fc230a0e3542bfade63da02d542fb78b2a8513fcd0092619a2c8c1221e581946e0191f2af505dfdf8657a414dbca329186f009262"
}
つまり、Twitterのようなフィード、返信、コメントで使用されることを意図した、通常の、シンプルで短い、プレーンテキストのメモです。
それぞれの種類番号には意味がある。例えば、0は "metadata "イベントであり、ユーザーが自分の名前やプロフィール写真など、自分自身についての詳細を提供するために使用される。リレーは、種類によって異なる扱いをすることができる。例えば、リレーは通常、kind:0イベントの古いバージョンを削除し、最後のものだけを保持する。
一般的に、基本的なソーシャルネットワーキングNostrアプリを構築するのに必要なのはkind:0とkind:1だけですが、その他のkindは他の機能を提供するためにクライアントが必要に迫られて考案したものです。これらはNIPsで規定されています。ソーシャル・ネットワーキングとは無関係な種類もあり、クライアントが他の機能を提供するために必要なものもあります。この考え方は、Nostrで考えられる新しいユースケースごとに、サブプロトコルを考え、NIPとして提案することで、その機能を実装することに興味を持つ既存および将来のクライアントとの相互運用性を最大化することです。
created_atプロパティは、イベント作成者によって設定されたUNIXタイムスタンプで、通常は作成された時刻に設定されるが、それに対するチェックは行われない。
内容は、kindが何を意味するかに依存する。kind:1の場合、それは他人が読むことを意味する単なるプレーンテキスト文字列である。
同様に、タグも種類に依存するが、通常kind:1のイベントに表示され、他の種類にも表示される一般的なタグは、公開鍵に言及するために使用される "p "と、別のイベントを参照するために使用される "e "である。
NIPs(Nostrインプリメンテーションの可能性)
NIPとは何か、なぜ気にする必要があるのか?
基本プロトコルを記述した最初のNIPであるNIP-01を除けば、すべてのNIPはオプションです。
NIPとは何ですか?
NIPは相互運用性を促進するために存在します。各開発者が共通の問題に対して独自の解決策を考え、自分のアプリだけに実装するのは良い考えとは言えません。誰もが互いに互換性のあるソリューションを実装する方が良いのです。NIPはこのプロセスを調整するために存在する。
同じように、新しいアイデアはある開発者のアプリでは素晴らしく見えるかもしれないが、他の多くのアプリが同じ標準を実装し、それらがうまく相互運用できれば、間違いなくもっと良く見えるだろう。
なぜ気にする必要があるのか?
Nostrは非中央集権的で、(Twitterのような)中央集権的なサービスに所有されていません。つまり、プロトコルの方向性は私たち全員に委ねられているのです!私たちは変更を提案し、主張し、他の人が提案したアイデアに対してフィードバックを提供することができます。コミュニティに積極的に参加することで、ネットワークの方向性について発言することができます。メインリポジトリで公開されているNIPはすでに承認されています。新しいアイデアの追加は、そのリポジトリのPull Requestで行います。
NIPsはどこにありますか?
Nostr NIPsリポジトリで、現在の全てのNIPを見ることができます。
クライアント
クライアントは、Nostrプロトコルにアクセスし、相互作用する方法です。
クライアントとは?
Nostrのクライアントとは、Nostrプロトコルにアクセスしてやり取りするためのアプリのことです。TwitterのiOSアプリやウェブアプリで、Twitterのツイートフィードにアクセスするようなものです。
Nostrのプロトコルは非常にシンプルで柔軟性があるため、クライアントによってプロトコルのアプローチ方法は様々だ。あるクライアントはTwitterと全く同じような体験をさせようとし、またあるクライアントはプロトコルに対するリレーの重要性を強調し、それをユーザーに公開しようとし、またあるクライアントはユーザーに負担をかけすぎることなく、検閲に対する最大限の耐性を確保するためにヒューリスティックやアルゴリズムを使おうとする。
クライアントを切り替えることはできますか?
クライアントはリレーが保持する基礎データにアクセスするための手段に過ぎないので、クライアントを切り替えたり、好きなだけクライアントにサインインすることができます。各クライアントが同じリレーのデータを見ている限り、各クライアントで同じメッセージが表示されます。
クライアントに秘密鍵を入力する必要がありますか?
一般的に、秘密鍵はどのクライアントにも入力しないほうがよいでしょう。秘密鍵の入力を求めるクライアントのほとんどは、あなたの秘密鍵を安全に保つために最善を尽くしていますが、ソフトウェアの性質上、あなたの秘密鍵が漏洩する可能性のある違反、悪用、バグが常に存在します。
秘密鍵はNostrにおけるあなたのアイデンティティであり、もし秘密鍵が漏洩した場合、あなたはフォロワーを失い、ゼロからアイデンティティを再構築しなければならないことを覚えておいてください。
リレーとは?
リレーとは何ですか?
リレーとは何ですか?
リレーはNostrのバックエンドサーバーのようなものです。Nostrクライアントがメッセージを送ることができ、そのメッセージを保存したり、他の接続されたクライアントにブロードキャストしたりします。
リレーの世界は日進月歩で変化しているので、将来的には多くの変化が起こるだろう。Nostrは分散型であり、データの保存と再送をリレーに依存しているため、Nostrクライアントが遅いと感じたら、それは使用しているリレーが原因である可能性が高いです。クライアントにもう少しリレーを追加する価値があるかもしれません。
リレーのリストはどこにありますか?
既知のリレーをブラウズして速度を評価するのに最適なリソースはnostr.watchサイトです。
使用しているリレーがすべて機能しなくなったらどうなりますか?
過去に使用した全てのリレーがオフラインになった場合、全ての投稿は復元不可能になります。これがNostrが多くのリレーに接続できるようにしている理由の一つです。とはいえ、本当に検閲されないことに興味があるなら、自分専用のリレーを運営することもできる。
自分専用のリレーを走らせるべきでしょうか?
ほとんどの人にとって、いや、手間をかける価値はない。とはいえ、もしあなたが技術的で、自分のスピーチを絶対に検閲されないようにしたいのであれば、自分専用のリレーを走らせることができますし、走らせるべきです。そうすることで、あなたのNostrへの投稿ややりとりを常にコピーしておくことができます。私たちはこのガイドを作成中ですが、それまでの間、Andre Nevesによるガイドをご覧ください。
個人的なリレーや無名のリレーで、誰かが私を見つけるにはどうしたらいいでしょうか?
NIP-19のnprofileコードかNIP-05の "relays "フィールドを使うことで、興味のありそうな人たちに、あなたがどこにパブリッシュしているかを示唆することができるはずです。
もしそうすることができれば(そしてあなたのクライアントが手助けしてくれれば)、あなたが使っているリレーのリストを、あなたが使っていない他の複数のリレーに公開することができます。
最後に、他のクライアントがあなたについて言及したり返信したりするイベントには、リレーのヒントを含めるべきです。
どのような公開リレーがありますか?
nostr.watchのウェブサイトには、アドレスだけでなく、各リレーに関する多くの情報が掲載された非常に完全なリストがあります。
どのようにリレーを実行できますか?
オープンソースの実装を自分のサーバーで実行するか、relay.toolsやrelaying.ioのようなリレーホスティングサービスからリレーを借りることができます。