# Overview & Architecture

#### 2-Contract Architecture

The system's logic is split between two distinct contracts, each with a clear responsibility:

**Contract 1: Simple DID Registry (`did_registry.move`)**

* Purpose: This is the primary contract that manages the user-facing verification process. It defines the types of verification available and tracks the status of each user's attempt.
* DID Types: The system uses simple enums to represent different verification types:
  * `DID_AGE_VERIFY` (1): Verifies the user is 18 years or older.
  * `DID_CITIZENSHIP_VERIFY` (2): Verifies the user is an Indian citizen.

**Contract 2: Government Whitelist (`government_whitelist.move`)**

* Purpose: This contract acts as a secure access control layer for sensitive, encrypted user documents (like KYC data).
* Access Control: Only two parties are permitted to decrypt a user's documents:
  1. The document owner (the user themselves).
  2. Pre-approved government addresses for auditing and compliance purposes.
