Slide 1

Slide 1 text

Nostrにおける 予約投稿の実現可能性を考える Nostr勉強会 #2 かすてらふぃ @jiftechnify

Slide 2

Slide 2 text

自己紹介 かすてらふぃ NIP-05: [email protected] Website: c-stellar.net NostrのTLを遡るツール: Nosaray(のさらい) 作者

Slide 3

Slide 3 text

事の発端: #Zapan 毎週金・土曜日の 朝 6:00〜6:30 に #Zapan タグをつけて投稿し、 Zap(投げ銭)を送り合うイベント cf. https://scrapbox.io/nostr/Zapan

Slide 4

Slide 4 text

朝 6:00 ~ 6:30

Slide 5

Slide 5 text

起きられない

Slide 6

Slide 6 text

予約投稿機能を求める声たち

Slide 7

Slide 7 text

そうだ 予約投稿、しよう。

Slide 8

Slide 8 text

手法1: CLIクライアントを指定時刻に実行 algia (https://github.com/mattn/algia) と at コマンドを組み合わせる # 次の金曜日の朝6 時に 'pura vida' と投稿 echo "algia post 'pura vida'" | at 06:00 Fri # 次の土曜日の朝6 時に ぽわ〜 と投稿 echo "algia powa" | at 06:00 Sat 長所: お手軽 短所: 指定時刻にPCが起動している必要がある コマンドラインに馴染みがない人には厳しいかも

Slide 9

Slide 9 text

手法2: created_at を未来に設定して投稿 Nostrのイベントには created_at (発行時刻) を好きに設定できる → created_at を未来の投稿したい時刻に設定すれば、予約投稿になる…? 結論: なるっちゃなるが不確実 リレーによって、 created_at が未来なイベントの扱いが異なる created_at が現在時刻から大きく離れたイベントを受け付けないリレーも cf. NIP-22 (https://scrapbox.io/nostr/NIP-22)

Slide 10

Slide 10 text

誰にでも使えて 確実に投稿できる 予約投稿システム 欲しい!

Slide 11

Slide 11 text

予約投稿システムの素朴な設計 1. 時刻を指定して、システムに投稿内容を登録 2. 指定時刻になったら、システムがイベントを送信 リレー 予約投稿システム サーバ 2. content: "pura vida", created_at: < 現在時刻>, sig: ??? 予約投稿システム クライアント ユーザ 1. 「⾦曜朝6 時に "pura vida" と投稿」

Slide 12

Slide 12 text

署名はどうする? Nostrイベントには、投稿者の秘密鍵による署名を含める必要がある → 予約投稿システムがイベントを発行できるようにするには、  投稿者の秘密鍵をシステムに渡す必要がある…? そんなシステムを誰が使うだろうか? (いや、誰も使わない)

Slide 13

Slide 13 text

先に署名させておけばいいじゃない 投稿内容ではなく、署名済みのイベントをシステムに登録すれば上手くいく! 1. 指定時刻(未来)の created_at を設定した投稿イベントを生成 2. 生成したイベントに署名を行う 3. システムに署名済みのイベントを登録 4. 指定時刻になったら、システムが署名済みのイベントを送信 システムは、ひたすら登録されたデータをそのままリレーに送るだけ → 投稿者の秘密鍵を知らなくてもよい

Slide 14

Slide 14 text

リレー 予約投稿システム サーバ 4. 3. content: "pura vida", created_at: < ⾦曜朝6 時>, sig: < 投稿者による署名> 転送 予約投稿システム クライアント ユーザ content: "pura vida", created_at: < ⾦曜朝6 時> 1. 2. 署名 設計図解

Slide 15

Slide 15 text

実装は? Nostr It (https://nostrit.com/) 通信内容を覗いた感じ、おそらく今回説明した仕組みで動いている ハッシュタグ未対応 ハッシュタグ対応版を独自に実装したい(未完成 )

Slide 16

Slide 16 text

まとめ Nostr上で実現可能な予約投稿の仕組みを検討した