nostrの基本
- ネットワーク上のすべてがイベントと呼ばれる
- イベントの種類を識別するkindプロパティを通じて拡張可能
- Nipsと呼ばれるプロトコル仕様がある (Nostr Implementation Possibility and existsの略)
- オープンソース
イベントオブジェクト
以下は、単純なテキストノート(種類1)のイベント例で、Twitterの投稿のようなものを表します:
{
"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": [
["e", "3da979448d9ba263864c4d6f14984c423a3838364ec255f03c7904b1ae77f206"],
["p", "bf2376e17ba4ec269d10fcc996a4746b451152be9031fa48e74553dde5526bce"]
],
"sig": "908a15e46fb4d8675bab026fc230a0e3542bfade63da02d542fb78b2a8513fcd0092619a2c8c1221e581946e0191f2af505dfdf8657a414dbca329186f009262"
}
- id: イベントの一意のID
- pubkey: イベントを送信したユーザーの公開鍵(公開識別子)
- created_at: イベントが公開された日時
- kind: 前述の通り、イベントの種類
- content: イベントの内容、今回はテキストノート
- tags: イベントに付けられたタグで、リンクや他のユーザーのタグ付け、または他のイベントの参照に使用される。NIP-01では、eはイベント、pは他のユーザー(彼らの公開鍵を介して)を指し、aはイベントの座標(推奨リレーを含む)を指す標準タグを定義している。この仕様は、後のNIP内で見つかるであろうハッシュタグ(タイプt)などの新しいタグタイプで拡張されている。
- sig: クライアントがこのイベントが確かにpubkeyプロパティを介して参照されたユーザーから送信されたことを検証するために使用される クライアントは、kind、pubkey、tags、created_at などの任意のプロパティでイベント サブスクリプションをフィルターできます。これにより、 _「過去 7 日間に Michael がハッシュタグ bitcoin を付けて投稿したすべての投稿を表示する」などのクエリが可能になります。_この仕様により、投稿フィード、イベント タグを介したスレッド、プロフィール ページを作成したり、クライアントにデータ フィード用の独自のアルゴリズムを作成させたりすることができます。
署名アルゴリズム
シュノア署名
Metadata
もう 1 つの重要なイベントの種類はメタデータです。これは、名前、概要、写真、nip05 (Zap に使用されます。これについては次に詳しく説明します) などのユーザー情報に使用されます。メタデータ イベントを送信またはサブスクライブするには、kind 0を使用します。
{
"name": "Michael",
"about": "Software Engineer",
"picture": "me.png",
"nip05": "mikkthemagnificent@getalby.com",
"other": [{"test_key": "test_value"}]
}
otherプロパティを使用すると、 NIP-01またはNIP-05で定義されていないその他のメタデータを柔軟に追加できます。
メタデータの種類をさらにサポートするために、イベントに追加して Twitter、Github、Mastodon、または Telegram 上の ID をリンクできるオプションの_iタグの仕様もあります。この__iタグには、_ platform:identityとproofという 2 つのパラメータがあります。proof は、ユーザーが特定のプラットフォーム上でこの ID を所有していることを検証する文字列またはオブジェクトです。
{
"tags": [
["i", "github:semisol", "9721ce4ee4fceb91c9711ca2a6c9a5ab"],
["i", "twitter:semisol_public", "1619358434134196225"],
["i", "mastodon:bitcoinhackers.org/@semisol", "109775066355589974"]
["i", "telegram:1087295469", "nostrdirectory/770"]
],
}
window.nostr
nostrのアカウントにログインする方法は何個かある
-
nip-07で定義されている
-
公開鍵
- ブロックチェーンのようにすべて内容がリレーで記録されているため。ただしDMの内容の確認や署名はできない
- vitalikの残高を見れるのと同じ感覚
- ブロックチェーンのようにすべて内容がリレーで記録されているため。ただしDMの内容の確認や署名はできない
-
秘密鍵
- もちろん秘密鍵でもログインできる。しかし、秘密鍵の漏洩を避ける設計を行う必要がある
-
window.nostr
- ブラウザ拡張機能によって設定されるwindow.nostrオブジェクトを利用してログインする方法。
- MetaMaskみたいな承認モーダルが出てくる
- ただしモバイルでは課題が多い
- LNBits Nostr Signing Device (NSD)などのハードウェア署名デバイスは、セキュリティをさらに強化するためにも使用できる優れたデバイス
- Yubikeyとかハードウェアウォレット的な立ち位置?
- ブラウザ拡張機能によって設定されるwindow.nostrオブジェクトを利用してログインする方法。