{
  "tool_id": "art-606-erc165-interface-id-verifier",
  "note": "golden_hash filled by `node golden-parity.test.mjs --update`.",
  "vectors": [
    {
      "name": "malformed-missing-fields",
      "policy_parameters": {},
      "output_payload": {
        "overall_determination": "INDETERMINATE",
        "findings": [
          {
            "check": "input_validation",
            "verdict": "INDETERMINATE",
            "detail": "function_signatures is required and must be a non-empty array of canonical Solidity function signature strings"
          }
        ],
        "computed_interface_id": null,
        "claimed_interface_id": null,
        "known_standard_match": null,
        "selectors": [],
        "malformed_signatures": [],
        "duplicate_signatures": [],
        "not_proven": [
          {
            "item": "On-chain supportsInterface() response",
            "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": "Function list completeness",
            "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": "Actual contract implementation",
            "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."
          }
        ],
        "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."
      },
      "golden_hash": "2420c54838453d620ee7e39592be98ba9ec1b902ff7079b1fb7f0454599151e1"
    },
    {
      "name": "erc721-core-consistent-with-claim",
      "policy_parameters": {
        "function_signatures": [
          "balanceOf(address)",
          "ownerOf(uint256)",
          "safeTransferFrom(address,address,uint256,bytes)",
          "safeTransferFrom(address,address,uint256)",
          "transferFrom(address,address,uint256)",
          "approve(address,uint256)",
          "setApprovalForAll(address,bool)",
          "getApproved(uint256)",
          "isApprovedForAll(address,address)"
        ],
        "claimed_interface_id": "0x80ac58cd"
      },
      "output_payload": {
        "overall_determination": "CONSISTENT",
        "findings": [
          {
            "check": "signature_format_validity",
            "verdict": "CONSISTENT",
            "detail": "9 function signature(s) parsed and hashed cleanly."
          },
          {
            "check": "claimed_id_match",
            "verdict": "CONSISTENT",
            "detail": "computed_interface_id matches the claimed value."
          }
        ],
        "computed_interface_id": "0x80ac58cd",
        "claimed_interface_id": "0x80ac58cd",
        "known_standard_match": "ERC-721 (core)",
        "selectors": [
          {
            "signature": "balanceOf(address)",
            "canonical_signature": "balanceOf(address)",
            "selector": "0x70a08231"
          },
          {
            "signature": "ownerOf(uint256)",
            "canonical_signature": "ownerOf(uint256)",
            "selector": "0x6352211e"
          },
          {
            "signature": "safeTransferFrom(address,address,uint256,bytes)",
            "canonical_signature": "safeTransferFrom(address,address,uint256,bytes)",
            "selector": "0xb88d4fde"
          },
          {
            "signature": "safeTransferFrom(address,address,uint256)",
            "canonical_signature": "safeTransferFrom(address,address,uint256)",
            "selector": "0x42842e0e"
          },
          {
            "signature": "transferFrom(address,address,uint256)",
            "canonical_signature": "transferFrom(address,address,uint256)",
            "selector": "0x23b872dd"
          },
          {
            "signature": "approve(address,uint256)",
            "canonical_signature": "approve(address,uint256)",
            "selector": "0x095ea7b3"
          },
          {
            "signature": "setApprovalForAll(address,bool)",
            "canonical_signature": "setApprovalForAll(address,bool)",
            "selector": "0xa22cb465"
          },
          {
            "signature": "getApproved(uint256)",
            "canonical_signature": "getApproved(uint256)",
            "selector": "0x081812fc"
          },
          {
            "signature": "isApprovedForAll(address,address)",
            "canonical_signature": "isApprovedForAll(address,address)",
            "selector": "0xe985e9c5"
          }
        ],
        "malformed_signatures": [],
        "duplicate_signatures": [],
        "not_proven": [
          {
            "item": "On-chain supportsInterface() response",
            "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": "Function list completeness",
            "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": "Actual contract implementation",
            "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."
          }
        ],
        "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."
      },
      "golden_hash": "98f61413f4fe412dfbf6cbf371cbfbe90fd4e0eabbdf16cdd2b9a510d0c980eb"
    },
    {
      "name": "erc1155-vs-claimed-721-mismatch",
      "policy_parameters": {
        "function_signatures": [
          "balanceOf(address,uint256)",
          "balanceOfBatch(address[],uint256[])",
          "setApprovalForAll(address,bool)",
          "isApprovedForAll(address,address)",
          "safeTransferFrom(address,address,uint256,uint256,bytes)",
          "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"
        ],
        "claimed_interface_id": "0x80ac58cd"
      },
      "output_payload": {
        "overall_determination": "INCONSISTENT",
        "findings": [
          {
            "check": "signature_format_validity",
            "verdict": "CONSISTENT",
            "detail": "6 function signature(s) parsed and hashed cleanly."
          },
          {
            "check": "claimed_id_match",
            "verdict": "INCONSISTENT",
            "detail": "computed_interface_id (0xd9b67a26) does NOT match the claimed value (0x80ac58cd)."
          }
        ],
        "computed_interface_id": "0xd9b67a26",
        "claimed_interface_id": "0x80ac58cd",
        "known_standard_match": "ERC-1155 (core)",
        "selectors": [
          {
            "signature": "balanceOf(address,uint256)",
            "canonical_signature": "balanceOf(address,uint256)",
            "selector": "0x00fdd58e"
          },
          {
            "signature": "balanceOfBatch(address[],uint256[])",
            "canonical_signature": "balanceOfBatch(address[],uint256[])",
            "selector": "0x4e1273f4"
          },
          {
            "signature": "setApprovalForAll(address,bool)",
            "canonical_signature": "setApprovalForAll(address,bool)",
            "selector": "0xa22cb465"
          },
          {
            "signature": "isApprovedForAll(address,address)",
            "canonical_signature": "isApprovedForAll(address,address)",
            "selector": "0xe985e9c5"
          },
          {
            "signature": "safeTransferFrom(address,address,uint256,uint256,bytes)",
            "canonical_signature": "safeTransferFrom(address,address,uint256,uint256,bytes)",
            "selector": "0xf242432a"
          },
          {
            "signature": "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)",
            "canonical_signature": "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)",
            "selector": "0x2eb2c2d6"
          }
        ],
        "malformed_signatures": [],
        "duplicate_signatures": [],
        "not_proven": [
          {
            "item": "On-chain supportsInterface() response",
            "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": "Function list completeness",
            "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": "Actual contract implementation",
            "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."
          }
        ],
        "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."
      },
      "golden_hash": "7d1a8cc7bb58ebba893a854319bc70ee3b994396428cffd792caa2fc6606b0ab"
    },
    {
      "name": "malformed-signature-partial-no-claim",
      "policy_parameters": {
        "function_signatures": [
          "ownerOf(uint256)",
          "not a valid sig!!"
        ]
      },
      "output_payload": {
        "overall_determination": "INCONSISTENT",
        "findings": [
          {
            "check": "signature_format_validity",
            "verdict": "INCONSISTENT",
            "detail": "1 of 2 declared entries were malformed and excluded from the XOR: not a valid sig!!."
          },
          {
            "check": "claimed_id_match",
            "verdict": "INDETERMINATE",
            "detail": "No claimed_interface_id was supplied to compare against."
          }
        ],
        "computed_interface_id": "0x6352211e",
        "claimed_interface_id": null,
        "known_standard_match": null,
        "selectors": [
          {
            "signature": "ownerOf(uint256)",
            "canonical_signature": "ownerOf(uint256)",
            "selector": "0x6352211e"
          }
        ],
        "malformed_signatures": [
          {
            "signature": "not a valid sig!!",
            "reason": "does not match name(type,type,...) shape"
          }
        ],
        "duplicate_signatures": [],
        "not_proven": [
          {
            "item": "On-chain supportsInterface() response",
            "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": "Function list completeness",
            "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": "Actual contract implementation",
            "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."
          }
        ],
        "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."
      },
      "golden_hash": "297a15d8cba80cbb9f7672bdb908d9401254c88c33b4d40018fd5db8740b568c"
    }
  ]
}
