{
  "tool_id": "art-607-erc1967-proxy-slot-classifier",
  "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": "declared_slot is required; storage_value is required"
          }
        ],
        "declared_slot": null,
        "storage_value": null,
        "matched_role": null,
        "classification_summary": "Input validation failed -- see finding detail.",
        "embedded_address": null,
        "embedded_address_checksummed": null,
        "known_eip1967_slots": {
          "implementation": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc",
          "admin": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103",
          "beacon": "0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50",
          "rollback": "0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143"
        },
        "not_proven": [
          {
            "item": "Current on-chain storage",
            "detail": "declared_slot and storage_value are both caller-supplied, read by the caller from their own eth_getStorageAt call or a block explorer. This tool never fetches them and cannot confirm they are current."
          },
          {
            "item": "Upgrade safety",
            "detail": "A recognized slot with an address-shaped value says nothing about whether that implementation, admin, or beacon address is safe, audited, or behaves correctly."
          },
          {
            "item": "Proxy pattern correctness",
            "detail": "A non-standard (unrecognized) declared_slot does not prove the contract is not a proxy -- only that this particular slot is not one of the four canonical EIP-1967 slots. Some proxies use EIP-1967 for one role and a custom slot for another."
          }
        ],
        "scope_note": "Recomputes the four canonical EIP-1967 storage slots (bytes32(uint256(keccak256(label)) - 1)) fresh on every call, then classifies a caller-supplied (declared_slot, storage_value) pair: which role declared_slot matches, if any, and whether storage_value looks like the zero-padded 20-byte address EIP-1967 expects. Zero network calls -- this tool never reads live chain state. Address/slot-level fact only: it renders no upgrade-safety, admin-trustworthiness, or implementation-safety judgment."
      },
      "golden_hash": "e6e617301b20d0b26b8d197f5be25ca6076f658ce5994e432e7f369efe648911"
    },
    {
      "name": "implementation-slot-address-value",
      "policy_parameters": {
        "declared_slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc",
        "storage_value": "0x0000000000000000000000005b38da6a701c568545dcfcb03fcb875f56beddc4"
      },
      "output_payload": {
        "overall_determination": "CONSISTENT",
        "findings": [
          {
            "check": "slot_classification",
            "verdict": "CONSISTENT",
            "detail": "declared_slot matches the canonical EIP-1967 \"implementation\" slot."
          },
          {
            "check": "storage_value_shape",
            "verdict": "CONSISTENT",
            "detail": "storage_value is a zero-padded 20-byte address, as EIP-1967 mandates for this slot family."
          }
        ],
        "declared_slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc",
        "storage_value": "0x0000000000000000000000005b38da6a701c568545dcfcb03fcb875f56beddc4",
        "matched_role": "implementation",
        "classification_summary": "EIP-1967 \"implementation\" slot, holding address 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4.",
        "embedded_address": "0x5b38da6a701c568545dcfcb03fcb875f56beddc4",
        "embedded_address_checksummed": "0x5B38Da6a701c568545dCfcB03FcB875f56beddC4",
        "known_eip1967_slots": {
          "implementation": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc",
          "admin": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103",
          "beacon": "0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50",
          "rollback": "0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143"
        },
        "not_proven": [
          {
            "item": "Current on-chain storage",
            "detail": "declared_slot and storage_value are both caller-supplied, read by the caller from their own eth_getStorageAt call or a block explorer. This tool never fetches them and cannot confirm they are current."
          },
          {
            "item": "Upgrade safety",
            "detail": "A recognized slot with an address-shaped value says nothing about whether that implementation, admin, or beacon address is safe, audited, or behaves correctly."
          },
          {
            "item": "Proxy pattern correctness",
            "detail": "A non-standard (unrecognized) declared_slot does not prove the contract is not a proxy -- only that this particular slot is not one of the four canonical EIP-1967 slots. Some proxies use EIP-1967 for one role and a custom slot for another."
          }
        ],
        "scope_note": "Recomputes the four canonical EIP-1967 storage slots (bytes32(uint256(keccak256(label)) - 1)) fresh on every call, then classifies a caller-supplied (declared_slot, storage_value) pair: which role declared_slot matches, if any, and whether storage_value looks like the zero-padded 20-byte address EIP-1967 expects. Zero network calls -- this tool never reads live chain state. Address/slot-level fact only: it renders no upgrade-safety, admin-trustworthiness, or implementation-safety judgment."
      },
      "golden_hash": "9a0862079cc6a67ee2e2e8ee88c78cb2fb5718500ce7fd5fbee7559580bf4f1f"
    },
    {
      "name": "non-standard-slot-address-value",
      "policy_parameters": {
        "declared_slot": "0x1111111111111111111111111111111111111111111111111111111111111111",
        "storage_value": "0x000000000000000000000000ab8483f64d9c6d1ecf9b849ae677dd3315835cb2"
      },
      "output_payload": {
        "overall_determination": "INCONSISTENT",
        "findings": [
          {
            "check": "slot_classification",
            "verdict": "INCONSISTENT",
            "detail": "declared_slot does not match any of the four canonical EIP-1967 slots (implementation, admin, beacon, rollback)."
          },
          {
            "check": "storage_value_shape",
            "verdict": "CONSISTENT",
            "detail": "storage_value is a zero-padded 20-byte address, as EIP-1967 mandates for this slot family."
          }
        ],
        "declared_slot": "0x1111111111111111111111111111111111111111111111111111111111111111",
        "storage_value": "0x000000000000000000000000ab8483f64d9c6d1ecf9b849ae677dd3315835cb2",
        "matched_role": null,
        "classification_summary": "Non-standard slot: declared_slot is not one of the four canonical EIP-1967 slots.",
        "embedded_address": "0xab8483f64d9c6d1ecf9b849ae677dd3315835cb2",
        "embedded_address_checksummed": "0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2",
        "known_eip1967_slots": {
          "implementation": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc",
          "admin": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103",
          "beacon": "0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50",
          "rollback": "0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143"
        },
        "not_proven": [
          {
            "item": "Current on-chain storage",
            "detail": "declared_slot and storage_value are both caller-supplied, read by the caller from their own eth_getStorageAt call or a block explorer. This tool never fetches them and cannot confirm they are current."
          },
          {
            "item": "Upgrade safety",
            "detail": "A recognized slot with an address-shaped value says nothing about whether that implementation, admin, or beacon address is safe, audited, or behaves correctly."
          },
          {
            "item": "Proxy pattern correctness",
            "detail": "A non-standard (unrecognized) declared_slot does not prove the contract is not a proxy -- only that this particular slot is not one of the four canonical EIP-1967 slots. Some proxies use EIP-1967 for one role and a custom slot for another."
          }
        ],
        "scope_note": "Recomputes the four canonical EIP-1967 storage slots (bytes32(uint256(keccak256(label)) - 1)) fresh on every call, then classifies a caller-supplied (declared_slot, storage_value) pair: which role declared_slot matches, if any, and whether storage_value looks like the zero-padded 20-byte address EIP-1967 expects. Zero network calls -- this tool never reads live chain state. Address/slot-level fact only: it renders no upgrade-safety, admin-trustworthiness, or implementation-safety judgment."
      },
      "golden_hash": "e58d31014e5f7de7a43ab32589eb9f4f67ac7b66a03ea23478d009f2a2e98c56"
    },
    {
      "name": "beacon-slot-zero-value",
      "policy_parameters": {
        "declared_slot": "0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50",
        "storage_value": "0x0000000000000000000000000000000000000000000000000000000000000000"
      },
      "output_payload": {
        "overall_determination": "INDETERMINATE",
        "findings": [
          {
            "check": "slot_classification",
            "verdict": "CONSISTENT",
            "detail": "declared_slot matches the canonical EIP-1967 \"beacon\" slot."
          },
          {
            "check": "storage_value_shape",
            "verdict": "INDETERMINATE",
            "detail": "storage_value is the zero word -- this slot is unset (a legitimate un-initialized or unused state); there is no address to extract."
          }
        ],
        "declared_slot": "0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50",
        "storage_value": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "matched_role": "beacon",
        "classification_summary": "EIP-1967 \"beacon\" slot, currently unset (zero word).",
        "embedded_address": null,
        "embedded_address_checksummed": null,
        "known_eip1967_slots": {
          "implementation": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc",
          "admin": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103",
          "beacon": "0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50",
          "rollback": "0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143"
        },
        "not_proven": [
          {
            "item": "Current on-chain storage",
            "detail": "declared_slot and storage_value are both caller-supplied, read by the caller from their own eth_getStorageAt call or a block explorer. This tool never fetches them and cannot confirm they are current."
          },
          {
            "item": "Upgrade safety",
            "detail": "A recognized slot with an address-shaped value says nothing about whether that implementation, admin, or beacon address is safe, audited, or behaves correctly."
          },
          {
            "item": "Proxy pattern correctness",
            "detail": "A non-standard (unrecognized) declared_slot does not prove the contract is not a proxy -- only that this particular slot is not one of the four canonical EIP-1967 slots. Some proxies use EIP-1967 for one role and a custom slot for another."
          }
        ],
        "scope_note": "Recomputes the four canonical EIP-1967 storage slots (bytes32(uint256(keccak256(label)) - 1)) fresh on every call, then classifies a caller-supplied (declared_slot, storage_value) pair: which role declared_slot matches, if any, and whether storage_value looks like the zero-padded 20-byte address EIP-1967 expects. Zero network calls -- this tool never reads live chain state. Address/slot-level fact only: it renders no upgrade-safety, admin-trustworthiness, or implementation-safety judgment."
      },
      "golden_hash": "ad6cc5141510fae7b94ed4c7e9094ca5bf3ce9250716b6c27681ab5558777c75"
    }
  ]
}
