// SPDX-License-Identifier: CC0-1.0 pragma solidity ^0.8.28; /// @title IERC8262Verifier -- Standard interface for ZK compliance proof verification /// @notice Verifies zero-knowledge proofs attesting to AML/sanctions compliance /// @dev Implementations route to per-proof-type UltraHonk verifiers generated by Noir/Barretenberg interface IERC8262Verifier { /// @notice Verify a zero-knowledge compliance proof /// @param proofType The type of proof (0x01-0x09) /// @param proof The encoded UltraHonk proof data /// @param publicInputs The public inputs to the verification circuit (packed bytes32 values) /// @return valid Whether the proof is valid function verifyProof(uint8 proofType, bytes calldata proof, bytes calldata publicInputs) external view returns (bool valid); /// @notice Verify a batch of proofs atomically /// @param proofTypes Array of proof types /// @param proofs Array of encoded proofs /// @param publicInputs Array of public input sets /// @return valid Whether ALL proofs are valid function verifyProofBatch(uint8[] calldata proofTypes, bytes[] calldata proofs, bytes[] calldata publicInputs) external view returns (bool valid); /// @notice Get the address of the UltraHonk verifier for a proof type /// @param proofType The proof type (0x01-0x09) /// @return verifier The verifier contract address (address(0) if not set) function getVerifier(uint8 proofType) external view returns (address verifier); /// @notice Verify a proof using a specific historical verifier version /// @param proofType The proof type (0x01-0x09) /// @param version The verifier version (1-indexed) /// @param proof The encoded proof data /// @param publicInputs The public inputs /// @return valid Whether the proof is valid function verifyProofAtVersion(uint8 proofType, uint256 version, bytes calldata proof, bytes calldata publicInputs) external view returns (bool valid); /// @notice Get the verifier address for a specific historical version /// @param proofType The proof type (0x01-0x09) /// @param version The verifier version (1-indexed) /// @return verifier The verifier contract address function getVerifierAtVersion(uint8 proofType, uint256 version) external view returns (address verifier); /// @notice Get the current verifier version for a proof type /// @param proofType The proof type (0x01-0x09) /// @return version The current version (0 if no verifier set) function getVerifierVersion(uint8 proofType) external view returns (uint256 version); }