NIP-37は、あらゆる種類の未署名のドラフトイベントのための暗号化された保存イベントを定義します。長文記事、今後のカレンダーイベント、あるいは後で送りたいメッセージを作成中のユーザは、NIP-44で自分自身の鍵に対して暗号化されたkind 31234イベントとしてドラフトをrelayに保存できます。ドラフトはユーザの鍵を保持する任意のクライアントから復元可能で、同じNIPは、ユーザがプライベートなドラフトを保存したいrelayを指定する別のkind:10013リストイベントも定義しています。

仕組み

ドラフトラップはkind 31234のパラメータ化された置き換え可能イベントです。未署名のドラフトイベントはJSON文字列化され、署名者自身の公開鍵に対してNIP-44で暗号化されて.contentに配置されます。kタグはドラフトのkindを宣言し、クライアントがイベントの種類ごとにドラフトをグループ化できるようにします。dタグはドラフト識別子を運び、ドラフトが進化するにつれてラップを置き換えられるようにします。また、古いドラフトが自動的に期限切れになるようにNIP-40のexpirationタグの使用が推奨されます。

{
  "kind": 31234,
  "tags": [
    ["d", "<identifier>"],
    ["k", "<kind of the draft event>"],
    ["expiration", "<unix-timestamp>"]
  ],
  "content": "<nip44Encrypt(JSON.stringify(draft_event))>"
}

空の.contentフィールドは、ドラフトが削除されたことを示します。

チェックポイント

kind 1234は、親となるkind:31234イベントに属するチェックポイントを定義します。チェックポイントは親のドラフトを指すaタグを持ち、クライアントが最新のドラフトと並んでリビジョン履歴を保存できるようにします。

{
  "kind": 1234,
  "tags": [
    ["a", "31234:<pubkey>:<identifier>"]
  ],
  "content": "<nip44Encrypt(JSON.stringify(draft_event))>"
}

プライベートコンテンツ用のrelayリスト(kind 10013)

kind 10013は、ドラフトラップを含むプライベートコンテンツを保存したいrelayをタグにリストする置き換え可能イベントです。kind 31234を公開するクライアントは、ユーザのkind 10013イベントにリストされたrelayに公開すべきです。これにより、公開投稿に使うrelayセット(NIP-65)とプライベートコンテンツの保存に使うrelayセットが分離されるため、ユーザはプライベートなドラフトを少数の信頼できるrelayに固定でき、そのセットを公開のoutboxで晒すことはありません。

実装

  • Notedeck - プライベート同期用のrelayをkind 10013リストとして保存(2026年6月に追加)

Primary sources:

Mentioned in:

See also: