Skip to content

Note

このドキュメントは2026-02-27 03:07PLaMo Translation Modelを使用して自動翻訳されました。

FEP-0391: 特別収集証明

概要

このFediverse拡張提案では、オブジェクトの完全性を検証するための仕組みを提案します。具体的には、以下の2つの方法を提供します: 1. アクティビティ自体にresult属性を付与する方法 2. Createアクティビティの対象オブジェクトに対してinReplyToProofまたはcontextProofを使用する方法

具体例

1. 単純なケース - 単一オブジェクトに対する承認スタンプ

あるユーザーが別のユーザーのノートを承認する場合:

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://example.com/some-like",
  "summary": "User 2がUser 1のNoteを承認しました",
  "actor": {
    "id": "https://example.com/actors/2",
    "followers": "https://example.com/actors/2/followers"
  },
  "type": "Like",
  "object": {
    "id": "https://example.com/some-object",
    "type": "Note",
    "content": "このオブジェクトに対する承認を受け入れます.",
    "likes": "https://example.com/some-object/likes",
    "attributedTo": {
      "id": "https://example.com/actors/1",
      "followers": "https://example.com/actors/1/followers"
    },
    "cc": [
      "https://example.com/actors/1/followers",
      "as:Public"
    ],
    "audience": "https://example.com/some-object/audience"
  },
  "to": "https://example.com/actors/1",
  "cc": [
    "https://example.com/actors/2/followers",
    "https://example.com/some-object/audience",
    "as:Public"
  ],
  "audience": "https://example.com/some-like/audience"
}

承認したユーザーがスタンプを発行する場合:

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://example.com/some-proof",
  "summary": "User 1が承認を承認しました",
  "actor": "https://example.com/actors/1",
  "type": "Add",
  "object": "https://example.com/some-like",
  "target": "https://example.com/some-object/likes",
  "attributedTo": "https://example.com/some-like",
  "to": "https://example.com/actors/2",
  "cc": [
    "https://example.com/actors/2/followers",
    "https://example.com/some-like/audience",
    "as:Public"
  ]
}

承認されたユーザーがUpdateアクティビティでスタンプの証拠を追加する場合:

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://example.com/some-update",
  "summary": "User 2がLikeに証拠を追加して更新しました",
  "actor": {
    "id": "https://example.com/actors/2",
    "followers": "https://example.com/actors/2/followers"
  },
  "type": "Update",
  "object": {
    "id": "https://example.com/some-like",
    "summary": "User 2がUser 1のNoteを承認しました(証拠付き)",
    "actor": "https://example.com/actors/2",
    "type": "Like",
    "object": "https://example.com/some-object",
    "to": "https://example.com/actors/1",
    "cc": [
      "https://example.com/actors/2/followers",
      "https://example.com/some-object/audience",
      "as:Public"
    ],
    "audience": "https://example.com/some-like/audience",
    "result": "https://example.com/some-proof"
  },
  "cc": [
    "https://example.com/actors/2/followers",
    "https://example.com/some-like/audience",
    "as:Public"
  ]
}

もし承認者が暗号学的な証拠を提供していた場合、被承認者はその証拠が失効するまで確実にスタンプを表示できます。承認者は証拠を削除することで黙示的に、または明示的な取り消しアクティビティを発行することで積極的にこのスタンプを取り消すことができます [TODO: resultの代わりにundoneByポイントするRemoveを使用する更新方法を追加]。

2. 複雑なケース - 埋め込みオブジェクトを含むスタンプ

この方法では、Createアクティビティの対象オブジェクトに対してinReplyToProofまたはcontextProofを使用し、アクティビティ自体にresult属性のみを使用することは避けます。

あるユーザーが特定のコンテキストに属するオブジェクトを作成し、それがコンテキストモデレーターによって所有される場合:

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://example.com/create-some-object",
  "actor": "https://example.com/some-actor",
  "type": "Create",
  "object": {
    "id": "https://example.com/some-object",
    "type": "Note",
    "attributedTo": {
      "id": "https://example.com/some-actor",
      "followers": "https://example.com/some-actor/followers"
    },
    "content": "このオブジェクトは特定のコンテキストに属しており、私がそのコンテキストコレクションに追加されたことを証明する証拠があります.",
    "context": {
      "id": "https://example.com/some-context",
      "type": "Collection",
      "attributedTo": "https://example.com/some-context-moderator",
      "audience": "https://example.com/some-context/audience"
    },
    "to": "https://example.com/some-context-moderator",
    "cc": "as:Public"
  },
  "to": [
    "https://example.com/some-context-moderator",
    "https://example.com/some-context/audience"
  ],
  "cc": "as:Public",
  "audience": "https://example.com/create-some-object/audience"
}

コンテキストモデレーターがオブジェクトをコンテキストに追加する場合:

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://example.com/some-proof",
  "summary": "新しい投稿がコンテキストに追加されました",
  "actor": "https://example.com/some-context-moderator",
  "type": "Add",
  "object": "https://example.com/some-object",
  "target": "https://example.com/some-context",
  "attributedTo": "https://example.com/create-some-object",
  "cc": [
    "https://example.com/some-context/audience",
    "https://example.com/some-actor",
    "https://example.com/create-some-object/audience",
    "as:Public"
  ]
}

オブジェクト作成者は、以下の2つの更新を発行できます: 1. Createアクティビティにresultを追加するため 2. そのアクティビティの対象オブジェクトにobject.contextProofを追加するため:

{
  "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/fep/0391"],
  "id": "https://example.com/update-some-object",
  "actor": {
    "id": "https://example.com/some-actor",
    "followers": "https://example.com/some-actor/followers"
  },
  "type": "Update",
  "object": {
    "id": "https://example.com/some-object",
    "type": "Note",
    "attributedTo": "https://example.com/some-actor",
    "content": "このオブジェクトは特定のコンテキストに属しており、私がそのコンテキストコレクションに追加されたことを証明する証拠があります.",
    "context": "https://example.com/some-context",
    "contextProof": "https://example.com/some-proof",
    "to": "https://example.com/some-context-moderator",
    "cc": "as:Public"
  },
  "to": [
    "https://example.com/some-actor/followers",
    "as:Public"
  ]
}
{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://example.com/update-create",
  "actor": "https://example.com/some-actor",
  "type": "Update",
  "object": {
    "id": "https://example.com/create-some-object",
    "actor": "https://example.com/some-actor",
    "type": "Create",
    "object": "https://example.com/some-object",
    "to": "https://example.com/some-context-moderator",
    "cc": "as:Public",
    "result": "https://example.com/some-proof"
  }
}

参考文献

ライセンス

この提案はCreative Commons Attribution 4.0 International Licenseの下で公開されています。詳細はLICENSEファイルを参照してください。