{
  "tool_id": "art-606-erc165-interface-id-verifier",
  "tool_version": "1.0.0",
  "display_name": "ERC-165 Interface ID Verifier",
  "mcp_name": "verify_erc165_interface_id",
  "mandate_type": "compliance_control",
  "wave": 99,
  "gpu": false,
  "url": "https://ainumbers.co/chaingraph/art-606-erc165-interface-id-verifier.html",
  "description": "Recomputes an ERC-165 interfaceId as the XOR of 4-byte function selectors (the first 4 bytes of keccak256 of each canonical Solidity signature) over a caller-declared list of function signatures, using the vendored keccak256 bundle already pinned in this repository. Zero network calls: this tool never queries a live contract's supportsInterface(bytes4) and makes no claim about what any deployed contract actually returns. Compares the recomputed id against an optional claimed_interface_id and flags a match against seven well-known standard ids (ERC-165 itself, ERC-721 core/Metadata/Enumerable, ERC-1155 core/MetadataURI, ERC-2981) purely as a courtesy label, never as verification. Malformed signature entries are excluded from the XOR and reported separately rather than silently dropped. A CONSISTENT match only establishes that the declared function list hashes to that value -- never that the list is complete, correct, or actually implemented anywhere.",
  "input_schema_ref": "chaingraph/art-606-erc165-interface-id-verifier.html#manifest",
  "consumes": [],
  "feeds": [],
  "status": "live",
  "conformance_fixtures": true,
  "compute_capability": "server",
  "compute_proof_ready": "ready",
  "compute_images": [
    {
      "system": "sha256-source",
      "image_id": "sha256:4e23a23b5e2ec1ba559f1dc3c84e9e352b8006df0c0049b25a218cf70c88fede",
      "valid_from": "2026-07-10"
    },
    {
      "system": "risc0",
      "image_id": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
      "valid_from": "2026-08-12"
    }
  ],
  "compute_proof": {
    "type": "ZkVmReceipt",
    "system": "risc0",
    "receiptFormat": "groth16-bn254",
    "imageId": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
    "seal": "DDt7s7u5DfpVK2yiutiIgEtFFZGvopztSaGwKzaeKXgNAzaxZJltTiEfLnZI5EyXTcOeRSOoKbl6XEIa3uz4lyq81iLv8CnmdhgGFJvtc/5JmfJRimJcjBKBOl12lTknIW4dN/5sPDcuO491r4a3+y1AwRScP8uNjWo3K1rl7wURnpdLphgv0k5KwEzuOcYKILMIltF6uPcl4hWyfELWEgaxuPBBuYAIMwoCo4PQnxWVFW8icH2xTNjZbUMf2kj4JNRPyzytigzfDmGCZ5URcfi20pZTEVleQCI7ukZHIUoMtmmHIfa+cOTHL6paLlJHbFykYj7WL+nNdR4PJ20e7A==",
    "journal": {
      "chaingraph_version": "0.4.0",
      "kernel_digest": "sha256:4e23a23b5e2ec1ba559f1dc3c84e9e352b8006df0c0049b25a218cf70c88fede",
      "output": {
        "claimed_interface_id": "0x80ac58cd",
        "computed_interface_id": "0x80ac58cd",
        "duplicate_signatures": [],
        "findings": [
          {
            "check": "signature_format_validity",
            "detail": "9 function signature(s) parsed and hashed cleanly.",
            "verdict": "CONSISTENT"
          },
          {
            "check": "claimed_id_match",
            "detail": "computed_interface_id matches the claimed value.",
            "verdict": "CONSISTENT"
          }
        ],
        "known_standard_match": "ERC-721 (core)",
        "malformed_signatures": [],
        "not_proven": [
          {
            "detail": "ERC-165 conformance is confirmed by calling supportsInterface(bytes4) on the live contract and checking it returns true. This tool never makes that call -- it only recomputes the id definition offline from a declared function list.",
            "item": "On-chain supportsInterface() response"
          },
          {
            "detail": "function_signatures is caller-supplied. Omitting or adding a function changes the XOR result; this tool cannot know whether the declared list matches any real interface definition unless the result happens to match a known_standard_match entry.",
            "item": "Function list completeness"
          },
          {
            "detail": "A computed interfaceId says nothing about whether a contract genuinely implements the corresponding functions correctly -- only that the declared signature strings hash to this value.",
            "item": "Actual contract implementation"
          }
        ],
        "overall_determination": "CONSISTENT",
        "scope_note": "Recomputes the ERC-165 interfaceId as the XOR of 4-byte function selectors (first 4 bytes of keccak256 of the canonical signature) over a caller-declared list of function signatures. Zero network calls -- this tool never queries a live contract's supportsInterface(bytes4). A CONSISTENT match against a claimed_interface_id only means the declared function list hashes to that value; it says nothing about whether any deployed contract actually implements those functions or returns true from supportsInterface() for this id.",
        "selectors": [
          {
            "canonical_signature": "balanceOf(address)",
            "selector": "0x70a08231",
            "signature": "balanceOf(address)"
          },
          {
            "canonical_signature": "ownerOf(uint256)",
            "selector": "0x6352211e",
            "signature": "ownerOf(uint256)"
          },
          {
            "canonical_signature": "safeTransferFrom(address,address,uint256,bytes)",
            "selector": "0xb88d4fde",
            "signature": "safeTransferFrom(address,address,uint256,bytes)"
          },
          {
            "canonical_signature": "safeTransferFrom(address,address,uint256)",
            "selector": "0x42842e0e",
            "signature": "safeTransferFrom(address,address,uint256)"
          },
          {
            "canonical_signature": "transferFrom(address,address,uint256)",
            "selector": "0x23b872dd",
            "signature": "transferFrom(address,address,uint256)"
          },
          {
            "canonical_signature": "approve(address,uint256)",
            "selector": "0x095ea7b3",
            "signature": "approve(address,uint256)"
          },
          {
            "canonical_signature": "setApprovalForAll(address,bool)",
            "selector": "0xa22cb465",
            "signature": "setApprovalForAll(address,bool)"
          },
          {
            "canonical_signature": "getApproved(uint256)",
            "selector": "0x081812fc",
            "signature": "getApproved(uint256)"
          },
          {
            "canonical_signature": "isApprovedForAll(address,address)",
            "selector": "0xe985e9c5",
            "signature": "isApprovedForAll(address,address)"
          }
        ]
      }
    }
  },
  "export_capability": [
    "json"
  ]
}
