NIP-78は、アプリケーションがNostrイベントを使ってユーザーの代わりに任意のデータを保存するための標準イベントkindを定義し、中央サーバーなしでデバイス間の状態同期を可能にします。

仕組み

中心となるイベントkindは30078で、パラメータ化された置換可能イベントです。dタグはアプリケーション定義の識別子文字列で、ストレージスロットを特定のアプリケーションと目的に限定します。

{
  "id": "<64-char hex>",
  "pubkey": "<64-char hex>",
  "created_at": 1747180800,
  "kind": 30078,
  "tags": [
    ["d", "myapp-settings"]
  ],
  "content": "{\"theme\":\"dark\",\"fontSize\":14}",
  "sig": "<128-char hex>"
}

アプリケーションは、一意のdタグ(例:tamagostrich-pet-stateamethyst-settings)と永続化が必要なJSONまたはテキストコンテンツを持つ30078イベントを公開します。30078は置換可能でdタグによってスコープされているため、保存された状態の更新は同じdタグを持つ新しいイベントを公開することを意味し、リレーは最新バージョンのみを保持します。

デバイス間同期

ユーザーの公開鍵とアプリケーションのdタグを知っているクライアントは、ユーザーのリレーセットから現在の状態を取得し、任意のデバイスで再構築できます。データはユーザーの鍵ペアで署名されたイベントに存在し、NIP-65リレーリストのリレーに保存されているため、ユーザーがデータを所有します。

プライベートデータ vs. パブリックデータ

プライベートなアプリケーションデータには、公開前にNIP-44を使用してコンテンツフィールドを暗号化できるため、リレーは鍵の所有者だけが復号できる暗号文のみを保存します。パブリックなアプリケーションデータは、他のクライアントが読み取りと表示ができるよう、暗号化せずに保存できます。

コンテンツ形式

NIP-78はコンテンツ形式を意図的にオープンにしており、アプリケーションが独自のスキーマを選択します。一般的な慣例は、同じリレーを使用するアプリ間の衝突を防ぐため、dタグにアプリケーション名をプレフィックスとして付けることです。

実装

  • Tamagostrichtamagostrich-pet-state kind:30078イベントによるデバイス間ペット状態同期
  • Wisp — kind:30078ウォレットバックアップおよびデバイス間セキュリティ設定同期;NIP-78著者フィルターを使用して単一REQにマージされたアウトボックス購読
  • NosPress — NIP-78イベントに保存されたCMSオーケストレーション状態
  • 複数のNostrクライアント設定同期実装(Amethyst、その他)

主要ソース:

掲載:

関連項目: