NIP-5Aは、Nostrキーペアの下で静的ウェブサイトをホスティングする方法を定義します。サイト作成者はURLパスをSHA256コンテンツハッシュにマッピングする署名済みマニフェストイベントを公開し、ホストサーバーはそのマニフェストを解決してBlossomストレージからサイトのファイルを配信します。

仕組み

仕様は2つのイベントkindを使用します。Kind 15128はルートサイトマニフェストで、pubkeyごとに1つ存在し、そのキーのデフォルトウェブサイトとして機能します。Kind 35128dタグで識別される名前付きサイトマニフェストで、サブドメインのように機能します。各マニフェストは絶対URLパスを配信されるべきファイルのSHA256ハッシュにマッピングするpathタグを含みます。

{
  "id": "5324d695ed7abf7cdd2a48deb881c93b7f4e43de702989bbfb55a1b97b35a3de",
  "pubkey": "266815e0c9210dfa324c6cba3573b14bee49da4209a9456f9484e5106cd408a5",
  "created_at": 1743465600,
  "kind": 15128,
  "tags": [
    ["path", "/index.html", "186ea5fd14e88fd1ac49351759e7ab906fa94892002b60bf7f5a428f28ca1c99"],
    ["path", "/about.html", "a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456"],
    ["server", "https://blossom.primal.net"],
    ["title", "My Nostr Site"],
    ["source", "https://github.com/lez/nsite"]
  ],
  "content": "",
  "sig": "f4e4a9e785f70e9fcaa855d769438fea10781e84cd889e3fcb823774f83d094cf2c05d5a3ac4aebc1227a4ebc3d56867286c15a6df92d55045658bb428fd5fb5"
}

ホストサーバーはHTTPリクエストを受信し、サブドメインから著者のpubkeyを抽出し、著者のrelayリストからサイトマニフェストを取得し、リクエストされたパスをコンテンツハッシュに解決し、serverタグにリストされたBlossomサーバーから一致するBlobをダウンロードします。

URL解決

ルートサイトはnpubをサブドメインとして使用します。名前付きサイトは生のpubkeyの50文字のbase36エンコーディングに続いてdタグの値を1つのDNSラベルに入れます。DNSラベルは63文字に制限されており、base36 pubkeyは常に50文字を使用するため、名前付きサイト識別子は13文字に制限されます。

実装

  • nsite - NIP-5Aマニフェストを解決しファイルを配信するホストサーバー
  • nsite-manager - サイトマニフェストの構築と公開用UI

主要ソース:

掲載号:

関連項目: