Open16
Nostr というのが流行っているらしい
リレーサーバー
比較
実装
統計情報
EVENT
[
"EVENT",
"<subscription_id>",
{<REQ で要求されたオブジェクト>}
]
OK
[
"OK",
"<id>",
true,
''
]
NOTICE
[
"NOTICE",
"<message>"
]
国内限定リレー
-
wss://relay-jp.nostr.wirednet.jp
- https://relay-jp.nostr.wirednet.jp/
- @imksoo
- CloudFront + EC2 (t3.medium)
-
wss://nostr.h3z.jp
-
wss://nostr.holybea.com
wss://relay.nostr.or.jp
-
wss://nostr.fediverse.jp
-
wss://yabu.me
- https://grafana.gsn.im/d/d690f6e9-83af-4aa8-b6d9-c8532463fb8b
- 海外からは読み込み可だが書き込みは不可 (note)
国産リレー
-
wss://relay.nostr.wirednet.jp
-
wss://nostr-relay.nokotaro.com
-
wss://nostream.ocha.one
(experimental)
運用する際の課題
- スパム対策
- スケール
- コスト
クライアント
使用
Client | Web | PWA | iOS | Android | Note |
---|---|---|---|---|---|
Iris | 〇 | 〇 | 〇 | 〇 | |
Snort | 〇 | 〇 | × | × | リレーの情報が見れる |
Damus | × | × | 〇 | × | 使いやすい |
Amethyst | × | × | × | 〇 |
ライブラリ
参考
NIP-05 Mapping Nostr keys to DNS-based internet identifiers
NIP-11 Relay Information Document
JavaScript
await fetch(`https://${domain}`, {
method: 'GET',
headers: {
'Accept': 'application/nostr+json',
},
});
NIP-07 window.nostr
capability for web browsers
Alby は Nostr 単体では使えない。
NIP-15 End of Stored Events Notice
データ取得をリクエストして EOSE
が来たら完了。
リレーがサポートしているかは NIP-11 の supported_nips
を確認。
EVENT
id
, pubkey
, created_at
, sig
は生成するので省略。
投稿
[
"EVENT",
{
"kind": 1,
"tags": [],
"content": "<投稿内容>",
}
]
REQ
自分に関する情報
[
"REQ",
"<subscription_id>",
{"authors":["<pubkey-hex>"]}
]
CLOSE
[
"CLOSE",
"<subscription_id>"
]
リレーリスト
Client | kind: 10002 | kind: 3 (deprecated) |
---|---|---|
Snort | ⭕️ | ⭕️ |
Iris | ❌ | ⭕️ |
Damus | ❌ | ⭕️ |
Amethyst | ❌ | ⭕️ |
kind: 10002
[
"EVENT",
"<subscription_id>",
{
"id": "<id>",
"pubkey": "<pubkey>",
"created_at": 1234567890,
"kind": 10002,
"tags": [
[
"r",
"wss://eden.nostr.land"
],
[
"r",
"wss://relay.damus.io"
],
[
"r",
"wss://relay.snort.social"
],
[
"r",
"wss://relay.current.fyi"
],
[
"r",
"wss://relay-jp.nostr.wirednet.jp"
],
[
"r",
"wss://nostr.holybea.com"
],
[
"r",
"wss://nostr-relay.nokotaro.com"
],
[
"r",
"wss://nos.lol/"
]
],
"content": "",
"sig": "<sig>"
}
]
kind: 3
[
"EVENT",
"<subscription_id>",
{
"content": "{\"wss://eden.nostr.land\":{\"read\":true,\"write\":true},\"wss://relay.damus.io\":{\"read\":true,\"write\":true},\"wss://relay.snort.social\":{\"read\":true,\"write\":true},\"wss://relay.current.fyi\":{\"read\":true,\"write\":true},\"wss://relay-jp.nostr.wirednet.jp\":{\"read\":true,\"write\":true},\"wss://nostr.holybea.com\":{\"read\":true,\"write\":true},\"wss://nostr-relay.nokotaro.com\":{\"read\":true,\"write\":true}}",
"created_at": 1234567890,
"id": "<id>",
"kind": 3,
"pubkey": "<pubkey>",
"sig": "<sig>",
"tags": [
[
"p",
"<pubkey>"
]
]
}
]
kind 0
- 複数のデータを保持しているリレーがあるので最新を採用
kind 6
リポスト。
Iris
{
"id": "3e568e5fcb2e294b32efa9064a9297725de3e80cf5b645b382ada9748ee6856a",
"pubkey": "83d52b4363d2d1bc5a098de7be67c120bfb7c0cee8efefd8eb6e42372af24689",
"created_at": 1677391085,
"kind": 6,
"tags": [
[
"e",
"c8843678966ae8d092830485111dc932a6c29e0e48343d87a98ac965b7f6c773",
"",
"mention"
],
[
"p",
"a22a2372ed6e77d2391d4392be07547b9e8ba38394cae680219781d5061a8c67"
]
],
"content": "",
"sig": "f14fd6d0081b93766105de7d97b93d3d6519466b5ff476d72595f007f41de638ed4a7b4d087b53d945f73982d4a9a33d4495c72fbf868d8a5792aa718ef37389"
}
Snort
[
"EVENT",
"23201",
{
"id": "0c26843832b742bfa56ce88d860884d402b1e0a45739a55bcafb643c2c8a38e5",
"pubkey": "83d52b4363d2d1bc5a098de7be67c120bfb7c0cee8efefd8eb6e42372af24689",
"created_at": 1677390964,
"kind": 6,
"tags": [
[
"e",
"c2e054959646f1eb4109cefc34dbb0100f6af1c7d3012a5b9a86f1c8af3ccab0"
],
[
"p",
"d1d1747115d16751a97c239f46ec1703292c3b7e9988b9ebdd4ec4705b15ed44"
]
],
"content": "{\"id\":\"c2e054959646f1eb4109cefc34dbb0100f6af1c7d3012a5b9a86f1c8af3ccab0\",\"pubkey\":\"d1d1747115d16751a97c239f46ec1703292c3b7e9988b9ebdd4ec4705b15ed44\",\"created_at\":1677390434,\"kind\":1,\"tags\":[],\"content\":\"NIP-58訳したった\\nhttps://scrapbox.io/nostr/NIP-58\",\"sig\":\"93516654ddae95be81209b90fba3523681a665500f91b4a4d6b39bc7c1ae05d14c46057ad2d709e235ec137170502fc0d64d700a672cd2ed41c1b0abb8140c2b\",\"relays\":[\"wss://nostr.holybea.com\"]}",
"sig": "e10b205653efeaecd718487142d1cdfcc1b345c56c1e8808016cfe1f761bb01519c89ff93bab5016ea88245f086e9e77e3113534627c3e984ba9056bbf82fcf1"
}
]
Damus
[
"EVENT",
"23201",
{
"id": "23c9aea1ac314eb2c23313fbc0704625d18578769075a7557f2ad494c2d90b12",
"pubkey": "83d52b4363d2d1bc5a098de7be67c120bfb7c0cee8efefd8eb6e42372af24689",
"created_at": 1677392543,
"kind": 6,
"tags":
[
[
"e",
"c30b34c922a4a9257f05816dd74ce8be06267d91deb3fea3d810d0d96c6d755c",
"",
"root",
],
[
"p",
"4d39c23b3b03bf99494df5f3a149c7908ae1bc7416807fdd6b34a31886eaae25",
],
],
"content": '{"pubkey":"4d39c23b3b03bf99494df5f3a149c7908ae1bc7416807fdd6b34a31886eaae25","content":"blastrはREST API (今の所POSTのみ) 付きのリレーだよ〜","id":"c30b34c922a4a9257f05816dd74ce8be06267d91deb3fea3d810d0d96c6d755c","created_at":1677392472,"sig":"816b67f363638ae53ca5954b6801a9fadc9f122513fc47be914b2f245c13506133cf25cd7e7a517b13a195647360f3d72489e78d6cf7ee33bf47f09565f9e279","kind":1,"tags":[]}',
"sig": "68c5b35e8f4bd299700a02e23000cb0f70ff93fdaec556473aca3977b74e4aa8dd8297ac21753ffa6f16eff1a25772aaf7efc28a00cf89c75648b9e2f65008d6",
},
]
サービス
その他
NIPs
⭕️ : 必須
🔺 : 任意
-
: 不要
NIP | Relay | Client |
---|---|---|
NIP-01 | ⭕️ | ⭕️ |
NIP-02 | 🔺 | 🔺 |
NIP-03 | ||
NIP-04 | 🔺 | 🔺 |
NIP-05 | - | 🔺 |
NIP-06 | ||
NIP-07 | - | 🔺 |
NIP-08 | 🔺 | 🔺 |
NIP-09 | 🔺 | 🔺 |
NIP-10 | 🔺 | 🔺 |
NIP-11 | 🔺 | 🔺 |
NIP-12 | ||
NIP-13 | ||
NIP-14 | ||
NIP-15 | 🔺 | 🔺 |
NIP-16 | 🔺 | 🔺 |
NIP-19 | - | 🔺 |
NIP | Relay | Client |
---|---|---|
NIP-20 | ||
NIP-21 | - | 🔺 |
NIP-22 | 🔺 | 🔺 |
NIP-23 | ||
NIP-25 | ||
NIP-26 | ||
NIP-28 | ||
NIP-33 | ||
NIP-36 | ||
NIP-40 | ||
NIP-42 | ||
NIP-50 | ||
NIP-56 | ||
NIP-57 | ||
NIP-65 |
リレーから返ってくるエラー
["NOTICE","ERROR: bad req: std::get: wrong index for variant"]
送信した JSON のフォーマットがおかしい。
["NOTICE","ERROR: bad req: uneven size input to from_hex"]
npub1
形式ではなく hex で送る必要がある。
雪猫
アカウント
npub1s02jksmr6tgmcksf3hnmue7pyzlm0sxwarh7lk8tdeprw2hjg6ysp7fxtw
作った
NIP-57 Lightning Zaps
WIP
ログインするとコメントできます