Skip to content

nostr-jp/learn-nostr-by-crafting-deno

Repository files navigation

「手を動かして学ぶ Nostrプロトコル」演習環境 (Deno版)

Hello Nostr! 先住民が教えるNosteの歩き方 (技術書典にて頒布) 内の記事「手を動かして学ぶ Nostrプロトコル」(pp.65-75) の演習環境を含むリポジトリです。

演習環境のセットアップ

まず、Denoをインストールします(既にインストール済みの場合はスキップしてください)。

# macOS または Linux の場合
curl -fsSL https://deno.land/x/install/install.sh | sh

# Windows の場合 (PowerShell)
irm https://deno.land/install.ps1 | iex

次に、以下のコマンドで演習環境をクローンし、演習環境のディレクトリに移動します。

git clone https://github.com/nostr-jp/learn-nostr-by-crafting-deno.git
cd learn-nostr-by-crafting-deno

演習の進め方

演習環境には、演習の各節に対応するソースファイルが用意されています。ファイル名の先頭(1-1〜2-3)が、対応する節を表します。 本文の説明に従ってソースコードの /* Q-1: ... */ となっている部分に適切なコードを書いて、目的の機能を実装していきましょう。

実装が完了したら、以下のようにして実行します。

deno run -A 1-1_fetch_posts_raw_ws.ts

一部のプログラムは、実行時にコマンドライン引数を渡す必要がありますのでご注意ください。

Deno Task

以下のDeno Taskが用意されていますので、必要に応じて利用してください。例えば deno task gen-key-pair のようにして実行します。

  • gen-key-pair: 秘密鍵と公開鍵のペアを生成
  • to-hex <bech32形式のデータ>: npub... nsec... のようなフォーマット(bech32形式といいます)のデータを、16進文字列形式に変換
    • bech32形式では、先頭の文字列(接頭辞)がデータの種類を表します。以下にNostrで使われている接頭辞の例を示します
    • npub...: 公開鍵
    • nprofile...: 公開鍵 + 付加情報
    • nsec...: 秘密鍵
    • note...: 投稿のイベントID
    • nevent...: 一般の(投稿に限らない)イベントID + 付加情報
  • sub-reply <リレーURL> <公開鍵(hex形式)>: 指定したリレーに接続し、指定した公開鍵を対象とするリプライを購読して表示
    • 1-4節の演習にて、リプライ実装チェッカーからのリプライ(チェック結果)を受け取るのに使うとよいでしょう

ヒント

  • 1-2節以降で利用する nostr-tools のGitリポジトリはこちら

  • 1-3節: 自分が普段利用している秘密鍵を調べるには?

    • Webブラウザ拡張機能(NIP-07)を利用している場合は、拡張機能のオプションから確認できるはずです
    • Amethystの場合: 画面左上のアイコンをタップ →「Backup Keys」→「Copy my secret key」
    • Damusの場合: 画面左上のアイコンをタップ→「設定」→「鍵」→「ログイン用秘密鍵」を確認
  • 1-4節: 各種Nostrクライアントで投稿のイベントIDを調べる方法。取得できるIDはbech32形式のため、npmスクリプトto-hex を使ってhex形式に変換する必要があります

    • Snort: 投稿下方の ︙ →「Copy ID」
    • Iris: 投稿右上の … →「Copy Note ID」
    • Rabbit: 投稿下方の … →「IDをコピー」
    • nostter: 投稿右下の {…} →「Note ID」を確認
  • 1-4節: 各種Nostrクライアントで投稿者の公開鍵を調べる方法。取得できるIDはbech32形式のため、npmスクリプトto-hex を使ってhex形式に変換する必要があります

    • Snort: 投稿者のアイコンをクリック → 表示されるプロフィール画面でnpubから始まる文字列を確認
    • Iris: 投稿者のアイコンをクリック → 右上の … → 「Copy User ID」
    • Rabbit: 投稿者のアイコンをクリック → 表示されるプロフィール画面でnpubから始まる文字列を確認
    • nostter: 投稿者のアイコンをクリック → 表示されるプロフィール画面でnpubまたはnprofileから始まる文字列を確認
  • 1-4節: リプライの実装が正しいか確認してくれる リプライ実装チェッカーbot を用意しています。公開鍵は以下の通り

    27a8b993069842712a29b03f534e85f1a3dfcdbe51cdd2c79232ccc30ecb66e8
    

訂正・更新

誤字の訂正、ならびに執筆当時から状況が変化したために古くなってしまった内容に関する補足などを以下にまとめます。

正誤表

単純な誤字・誤表記の訂正。

箇所 備考
pp.68 9-11行目 Relay.connect()
Relay.sub()
Relay#connect()
Relay#sub()
これらは実際にはRelayのインスタンスメソッドだが、クラスメソッドのように見える表記となっており、誤解が生じる可能性があるため訂正
pp.69 6行目 Relay.publish() Relay#publish() 同上
pp.73 「フォロー」の節 5行目 ...、続いてそれ含まれる... ...、続いてそれ含まれる...

関数signEventの改称

pp.69 5行目で説明している関数signEventは、nostr-toolsのバージョン1.11.1よりgetSignatureという名前に改称されました。 古い名前の関数は非推奨化されており、早いうちに移行すべきと考えられます。

改称にまつわる詳細な経緯については こちら を参照のこと

以上を踏まえ、pp.69 5行目の内容を以下の通り訂正します。

(旧) ・関数 signEvent() にイベントと秘密鍵を渡して署名

(新) ・関数 getSignature() にイベントと秘密鍵を渡して署名を得る

あわせて、演習問題のコードについても新しい名前の関数を利用するように変更してあります。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published