Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Nostr版togetterのNosliとNIP-33 / About Nosli and NIP-33

鎌倉
March 10, 2023

Nostr版togetterのNosliとNIP-33 / About Nosli and NIP-33

Nostrを利用して動くtogetterライクなサービス「nosli」を開発しました。
サービスの概要と、その際に利用することになったNIP-33という仕様、またそれらを取り巻く関連NIP (NIP-02、NIP-16、NIP-23、NIP-58) について説明しています。

鎌倉

March 10, 2023
Tweet

More Decks by 鎌倉

Other Decks in Technology

Transcript

  1. Nostr൛togetterͷNosliͱ
    NIP-33
    ח૔ / @akiomik
    #nostrstudy #1

    View Slide

  2. ࣗݾ঺հ
    • ח૔ / @akiomik


    • NostrͰ͸Nostrends (nostr൛;͊΅ͬͨʔతͳ΋ͷ) Λ࡞ͬͨ


    • ࠷ۙ͸Bluesky༻ͷAndroidΞϓϦʮ੨Ӣʯͷ։ൃ


    • དྷि΋ATP/Blueskyษڧձʹొஃ༧ఆ😢


    • https://iris.to/akiomik.github.io

    View Slide

  3. ͓඼ॻ͖
    • Nosli֓ཁ


    • NIP-02


    • NIP-16


    • NIP-33


    • NIP-23


    • NIP-58

    View Slide

  4. NIP-33Λ֮͑ͯ΋Β͍͍ͨ

    View Slide

  5. Nosli

    View Slide

  6. Nosli
    • Nostrͷ౤ߘ (kind1) Λ·ͱΊΔWebαʔϏε


    • Nostr൛ͷtogetterతͳ΋ͷ


    • https://nosli.vercel.app/


    • ໊લͷ༝དྷ͸ௗͷϊεϦͱNostr + list͔Β

    View Slide

  7. NosliͷεΫϦʔϯγϣοτ

    View Slide

  8. NosliͷγεςϜશ๴

    View Slide

  9. ϦϨʔΛKVSͱͯ͠࢖͍ͬͯΔ

    View Slide

  10. ϦϨʔΛKVSͱͯ͠࢖͍ͬͯΔ
    㱺 ͜Ε͕NIP-33

    View Slide

  11. NostrͷΠϕϯτ͸


    มߋɾमਖ਼͕Ͱ͖ͳ͍

    View Slide

  12. NostrͷΠϕϯτ͸վ᜵Ͱ͖ͳ͍
    • Πϕϯτ͝ͱʹൿີ伴Ͱॺ໊͞Ε͍ͯΔ


    • ౤ߘ΍ϦΞΫγϣϯ͸मਖ਼΍มߋ͸Ͱ͖ͳ͍ (ຊਓͰ͋ͬͯ΋)

    View Slide

  13. SNSʹ͸มߋ͍ͨ͠σʔλ͕ͨ͘͞Μ
    • ϑΥϩʔϦετ


    • ϓϩϑΟʔϧ


    • (Nostrͷ৔߹) ϦϨʔ

    View Slide

  14. NIP-02


    Contact List and Petnames

    View Slide

  15. NIP-02


    Contact List


    and Petnames
    {
    "kind": 3,
    "tags": [
    [
    "p",
    "91cf9..4e5ca",
    "wss://alicerelay.com/",
    "alice"
    ],
    [
    "p",
    "14aeb..8dad4",
    "wss://bobrelay.com/nostr",
    "bob"
    ],
    ],
    ...other fields
    }
    • ࣗ෼͕୭ΛϑΥϩʔ͠
    ͍ͯΔ͔ͷϦετ


    • ϑΥϩʔ͍ͯ͠Δਓͷ
    npub͕ྻڍ͞Ε͍ͯΔ

    View Slide

  16. NIP-02 Contact List and Petnames
    • Kind3͸͋ͱউͪํࣜ


    • ϦϨʔ΍ΫϥΠΞϯτ͸৽͍͠Kind3Λड͚औͬͨΒɺखݩʹ͋Δݹ
    ͍Kind3Λফ͢͜ͱ͕๬·Ε͍ͯΔ (SHOULD)

    View Slide

  17. NIP-16


    (Replaceable Events)

    View Slide

  18. NIP-16 (Replaceable Events)
    • NIP-16͸֤छΠϕϯτΛఆ͍ٛͯ͠Δ


    • Replaceable Events͸NIP-02ͷKind3Λ൚༻తʹͨ͠΋ͷ


    • Kind 10000 <= n < 20000


    • ͢Ͱʹࣗ෼͕ૹͬͨKind͕ଘࡏ͢Δ৔߹͸্ॻ͖͢Δ (SHOULD)


    • ར༻ྫ: NIP-65 Relay List Metadata (Kind 10002)


    • 㱺 ͜ΕͰϢʔβ × KindͰσʔλΛอ࣋Ͱ͖ΔΑ͏ʹͳͬͨ

    View Slide

  19. NIP-33


    Parameterized Replaceable Events

    View Slide

  20. NIP-33


    Parameterized Replaceable Events
    • Kind 30000 <= n < 40000


    • NIP-16ͷ֓೦ʹdλάͱ͍͏Ωʔ͕ՃΘͬͨ΋ͷ


    • ݹ͍σʔλ͸৽͍͠σʔλͰஔ׵͞ΕΔ͜ͱΛظ଴ (SHOULD)


    • ެ։伴 × Kind × dλάͰҰҙʹͳΔσʔλ


    • 㱺 ϢʔβID × ςʔϒϧ × ओΩʔ ͱΈͳͤ͹KVSͱͯ͠࢖͑Δ

    View Slide

  21. NIP-23


    Long-form
    Content
    {
    "kind": 30023,
    "created_at": 1675642635,
    "content": "Lorem ipsum #[3] #[4]",
    "tags": [
    ["d", "lorem-ipsum"],
    ["title", "Lorem Ipsum"],
    ["published_at", "1296962229"],
    ["t", "placeholder"],
    ["e", "b3e3...4f87", "wss://relay.example.com"],
    [
    "a",
    "30023:a695...a919:ipsum",
    "wss://relay.nostr.org"
    ]
    ],
    "pubkey": "...",
    "id": "..."
    }
    • Kind 30023


    • NIP-33Λ࢖ͬͯఆٛ͞
    Ε͍ͯΔ


    • ؆୯ʹ͍͑͹ϒϩά

    View Slide

  22. NosliͷεΫϦʔϯγϣοτ

    View Slide

  23. Nosliͷ


    σʔλ
    {
    "kind": 30023,
    "content": "#[4] #[5] #[6]...",
    "tags": [
    ["d", "welcome-to-bluesky"],
    ["title", "NostrຽɺBluesky΁ཱཱྀͭ"],
    ["t", "nosli"],
    ["e", "b3e3...4f87"],
    ["e", "a3b3...a6d6"],
    ["e", "030a...36ba"],
    ],
    "pubkey": "...",
    "id": "..."
    }
    • Kind 30023ͦͷ··


    • ଞͷαʔϏεͷσʔλΛ
    ಡΈࠐ·ͳ͍ͨΊʹ nosli
    λά͕෇༩͞Ε͍ͯΔ

    View Slide

  24. Nosliͷ࢓૊Έ
    • NIP-23 (Kind 30023) ͷ1σʔλΛ1ͭͷʮ·ͱΊʯͱͯ͠ѻ͍ͬͯΔ


    • ʮ·ͱΊʯͷຊจʹ౤ߘ (Kind1) ͷIDΛྻڍ͍ͯ͠Δ


    • ୯ͳΔKind 30023ͳͷͰɺରԠ͍ͯ͠ΔΫϥΠΞϯτͳΒӾཡͱฤू
    ΋Մೳ

    View Slide

  25. ͜ͷ਺೔࿩୊ʹͳ͍ͬͯΔ (ͨ) όοδ📛

    View Slide

  26. NIP-58


    Badges
    {
    "pubkey": "alice",
    "kind": 30009,
    "tags": [
    ["d", "bravery"],
    ["name", "Medal of Bravery"],
    [
    "image",
    "https://nostr.io/bravery.png",
    "1024x1024"
    ],
    ],
    ...
    }
    {
    "kind": 30008,
    "pubkey": "bob",
    "tags": [
    ["d", "profile_badges"],
    ["a", "30009:alice:bravery"],
    [
    "e",
    "",
    "wss://nostr.academy"
    ],
    ["a", "30009:alice:honor"],
    ],
    ...
    }
    • Kind 30009/8/30008


    • ͦΕͧΕόοδఆٛɺ
    όοδ෇༩ɺϢʔβ
    όοδΛද͍ͯ͠Δ

    View Slide

  27. ࠷ޙʹ
    • NIP-33ʹΑͬͯnostr্ʹ৭ʑͳΞϓϦΛ࡞ΕΔΑ͏ʹͳΔ


    • ී௨ͷDBͳͲͱ͸झ͕ҟͳΔ͚Ͳٯʹ໘ന͍΋ͷ͕Ͱ͖Δ͔΋


    • σʔλͷӬଓੑ͸୭΋อূͯ͘͠Εͳ͍ (౰ͨΓલ)


    • ݹ͍ϦϨʔͷσʔλΛҾ͖౰ͯͯ͠·͏ͱյΕΔՄೳੑ΋͋Δ


    • ͋·ΓϦϨʔʹෛՙΛ͔͚ͳ͍Α͏ʹ࢖͓͏🙏

    View Slide

  28. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide