{
  "schema": "ruthven.proof/1",
  "asset_id": "PT-1140",
  "ruthven_id": "RUTHVEN-PT-0001140",
  "asset_type": "digital_art",
  "title": "PAPER TRAIL #1140",
  "evidence_version": {
    "passport_hash": "sha256:e9fc283094ccdab63b471311277e074a8ee91345c401c20265494083d89d4ff2",
    "package_status": "PINNED",
    "package_version": 1,
    "root_cid": "bafybeieves2ozxpl3aig3w4lgq66oaqcjee6rrkqjc32nuhqkiuj2bxjme",
    "previous_root_cid": null,
    "package_hash": "sha256:3929913512c8bb2dbab5fcbed7e9753929e40d458d86aed8761599cd88c59b30",
    "pinned_at": "2026-10-01T18:24:26.232Z",
    "current": true
  },
  "last_verified_at": "2026-10-02T16:50:24.727Z",
  "retrieved_at": "2026-10-02T16:50:24.727Z",
  "proves": "That the issued record contains each entry exactly as shown. It does not make a statement true: each entry carries its own provenance, and its evidenceType says what kind of thing stands behind it.",
  "passport": {
    "ruthven_id": "RUTHVEN-PT-0001140",
    "version": "1.0",
    "hash": "sha256:e9fc283094ccdab63b471311277e074a8ee91345c401c20265494083d89d4ff2",
    "url": "https://ruthven.ai/origin/paper-trail/1140/index.json",
    "scheme": "ruthven-evidence-merkle-v1",
    "evidence_root": "0x99dfbca3ee3a7627dbeb1cf9b6e55a6ba6e1e17e083e8b66ba35d68feb889ba1",
    "leaf_count": 56,
    "hash_recomputes": true,
    "root_recomputes": true
  },
  "anchor": {
    "status": "ANCHORED",
    "chain": "ethereum",
    "registry": "0xcAAa85A114586009DeDc0b887B0E756D5f55017c",
    "collection_id": "0x710fb89b277e5794f53f6d026164f370efc3079a162e8c6e5b4c05f6a68a4e6e",
    "root": "0x16770c7562dcf6041a4f651ab9bb1ae597fed179436aa8027bf680451700b7f9",
    "block_number": 26102679,
    "scheme": "ruthven-passport-merkle-v1",
    "token_id": 1140,
    "passport_hash": "sha256:e9fc283094ccdab63b471311277e074a8ee91345c401c20265494083d89d4ff2",
    "leaf": "0xd982388ec041204e8720a76bfdd565dbd78d0032871659b0e2e8c6955d36c5fd",
    "proof": [
      "0x2a96e2f9b2c9b75eefa8672490a502a97b0f43ac7ad9f5e9cf9477f1c196aaf4",
      "0xdbe2140464ed0babeed9d72a0005d025f4c7509aa80ce87a6905783aaf095d86",
      "0xedda1062d610bf0e653d44fd6bf3471c7ce26c06b390691cfed1a633c3c4ca57",
      "0x96e495ab3e6902c20d090a2c3951e100143d873124eb52b0804ff3feb5852b7a",
      "0x527b8d78e92e0b10d58ec71e0cb3f8d8776f9358d970221d7a9363d1b3458621",
      "0x6e2df8471432cb922456d5e72ece4291b33615c45c52abfbcc71fc846ee196fb",
      "0x2c2e6af2e4fe05dbc2fe5d1fecc401f5d36bb0f7a3d55e5bf47727ad413c713d",
      "0x026368950c3810cdd0db82d97c29920a0086353d59105d2794238ebff72250c9",
      "0x65e239375a8448f383a744579707b438cfb019bc0a576e25e35cb8c3e22d2c20",
      "0x67657e450c8be1878275d9ce04697e92698ac91d8b4e6d7ae35e310470eb6627",
      "0x94ffde9f04e51d9dc0ad2fe611a5c35823615815767f8e4f08040178a7783260",
      "0x602ff1366ad84cbf4075c844006f1bd841536dd67e9914df50e1cbdef6fa3a6a"
    ],
    "note": "This Passport's hash is a leaf of the series root the studio placed on ethereum (registry 0xcAAa85A114586009DeDc0b887B0E756D5f55017c, block 26102679). The root proves the document is the issued one; it does not make any statement in it true.",
    "how_to_check": [
      "Fetch the Passport at passport.url and recompute its hash; it must equal sha256:e9fc283094ccdab63b471311277e074a8ee91345c401c20265494083d89d4ff2.",
      "On ethereum, call passportRoot(0x710fb89b277e5794f53f6d026164f370efc3079a162e8c6e5b4c05f6a68a4e6e) on 0xcAAa85A114586009DeDc0b887B0E756D5f55017c; it must equal 0x16770c7562dcf6041a4f651ab9bb1ae597fed179436aa8027bf680451700b7f9.",
      "Call verifyPassport(0x710fb89b277e5794f53f6d026164f370efc3079a162e8c6e5b4c05f6a68a4e6e, 1140, 0xe9fc283094ccdab63b471311277e074a8ee91345c401c20265494083d89d4ff2, proof) on the same contract; it must return true. Or fold leaf up proof yourself: keccak256 of each sorted pair, until you reach root."
    ]
  },
  "available": true,
  "reason": null,
  "proofs": [],
  "not_provable": [],
  "not_found": [],
  "paths": [
    "dataSources[clm_5a5e1c3a2dc0587f5de4205b08d7bd9241109e63]",
    "frame",
    "identity.name",
    "identity.registeredBasis",
    "identity.summary",
    "module.collection.collection",
    "module.collection.collectionSize",
    "module.collection.copyrightOwner",
    "module.collection.creator",
    "module.collection.edition",
    "module.collection.tokenNumber",
    "module.construction.archiveSources",
    "module.construction.fragments",
    "module.construction.generations",
    "module.construction.originBody",
    "module.construction.placements",
    "module.construction.summary",
    "module.generation.generatedAt",
    "module.generation.imageSha256",
    "module.generation.model",
    "module.generation.provider",
    "module.hash-verification.items[0]",
    "module.hash-verification.items[1]",
    "module.public-provenance.byteSize",
    "module.public-provenance.canonicalUri",
    "module.public-provenance.fileCount",
    "module.public-provenance.files",
    "module.public-provenance.gatewayUrl",
    "module.public-provenance.history",
    "module.public-provenance.packageHash",
    "module.public-provenance.pinnedAt",
    "module.public-provenance.pinnedVia",
    "module.public-provenance.rootCid",
    "module.public-provenance.status",
    "module.public-provenance.version",
    "module.traits.configVersions",
    "module.traits.figure",
    "module.traits.tokenAttributes",
    "module.traits.trait.Background Colour",
    "module.traits.trait.Bodies",
    "module.traits.trait.Composition",
    "module.traits.trait.Counter-source",
    "module.traits.trait.Density",
    "module.traits.trait.Drawn from",
    "module.traits.trait.Edge",
    "module.traits.trait.Format",
    "module.traits.trait.Layers",
    "module.traits.trait.Lead source",
    "module.traits.trait.Material",
    "module.traits.trait.Origin body",
    "module.traits.trait.Sheet",
    "module.traits.trait.Sliver",
    "module.traits.trait.Sources",
    "provenanceTimeline[clm_53aec566e325238030d86331823dc41c0f2fd99d]",
    "provenanceTimeline[clm_5cc60ac55e28c232608c5d6d9f1bb47c509fabcb]",
    "provenanceTimeline[clm_63e2bfe467799e2cc13d099f6b9cd6ce6135248e]"
  ],
  "how_to_verify": [
    "For each proof: write { \"path\": path, \"entry\": entry } as JSON with object keys sorted, arrays in order and no whitespace; take its SHA-256. It must equal record_hash.",
    "leaf = keccak256( uint256(number) ++ bytes32(that SHA-256) ), the number as 32 bytes big-endian. It must equal leaf.",
    "Fold the proof: for each sibling in order, node = keccak256( smaller ++ larger ) of the pair (node, sibling), compared as unsigned integers. The result must equal passport.evidence_root.",
    "Fetch the Passport at passport.url yourself. Its evidenceCommitment.root must be that root, and its passportHash must be passport.hash.",
    "Read the root for the series from the registry named in anchor, over any RPC endpoint you choose, and check the Passport hash against it.",
    "For an entry that records a file hash, fetch the file by its ipfs:// address from any gateway and compare its SHA-256. That is what makes it more than a statement."
  ]
}