Contract reference

Two contracts matter for integration: a per-service IdentityRegistry(who is verified, and the service's policy) and the RegistryFactory (deploys/indexes registries). Below is the read surface — copy the interface straight into your project.

IIdentityRegistry

solidity
interface IIdentityRegistry {
    // --- gating ---
    function isVerified(address wallet) external view returns (bool);
    function verifiedUntil(address wallet) external view returns (uint64);

    // --- policy / metadata ---
    function owner() external view returns (address);
    function paused() external view returns (bool);
    function MAX_WALLETS_PER_CERT() external view returns (uint32);
    function MIN_DISCLOSURE_MASK() external view returns (uint8);
    function maxProofAge() external view returns (uint256);

    // --- trust anchors ---
    function caMerkleRoot() external view returns (bytes32);
    function crlMerkleRoot() external view returns (bytes32);
    function getCaCount() external view returns (uint256);

    // --- required cert fields (bytes32(0) = unconstrained) ---
    function requiredCountry() external view returns (bytes32);
    function requiredOrg() external view returns (bytes32);
    function requiredOrgUnit() external view returns (bytes32);
    function requiredCommonName() external view returns (bytes32);

    event UserRegistered(
        address indexed user, bytes32 nullifier,
        bytes32 country, bytes32 org, bytes32 orgUnit, bytes32 commonName
    );
}

View functions

isVerified(address) → bool

True if the wallet holds a current (non-expired) verification. The one call you need for gating.

verifiedUntil(address) → uint64

Verification expiry (unix seconds); 0 if never verified.

paused() → bool

When true the registry rejects new registrations.

MAX_WALLETS_PER_CERT() → uint32

How many wallets one certificate may bind.

MIN_DISCLOSURE_MASK() → uint8

Bitmask of certificate fields a proof must disclose.

maxProofAge() → uint256

Max age (seconds) of the signed timestamp inside a proof.

caMerkleRoot() / getCaCount()

Trust anchor: the set of accepted certificate authorities.

required{Country,Org,OrgUnit,CommonName}() → bytes32

Field constraints; bytes32(0) means unconstrained.

IRegistryFactory

solidity
interface IRegistryFactory {
    function getRegistries() external view returns (address[] memory);
    function registryInfo(address registry) external view returns (
        address creator, string memory name,
        uint32 maxWallets, uint8 minDisclosureMask,
        uint256 maxProofAge, uint256 createdAt, uint256 vKeyVersion
    );
    function isRegistry(address) external view returns (bool);

    event RegistryCreated(
        address indexed registry, address indexed owner, string name,
        uint32 maxWallets, uint8 minDisclosureMask, uint256 vKeyVersion
    );
}

ABIs

Human-readable ABIs are exported from zk-x509-sdk as IDENTITY_REGISTRY_ABI and REGISTRY_FACTORY_ABI, ready to drop into new ethers.Contract(addr, ABI, provider).