> For the complete documentation index, see [llms.txt](https://suiverify.gitbook.io/suiverify/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://suiverify.gitbook.io/suiverify/audit-and-compliance/core-data-structure.md).

# Core Data Structure

The system uses several key data structures to store verification and document information on-chain.

#### `UserDID`

This structure represents a user's specific verification request and its status. It is created when a user begins the verification process.

Code snippet

```
public struct UserDID has key, store {
    id: UID,
    owner: address,                  // User's Sui address
    did_type: u8,                    // 1=AGE_VERIFY, 2=CITIZENSHIP_VERIFY
    verification_status: u8,         // 0=PENDING, 1=VERIFIED, 2=REJECTED
    verification_timestamp: u64,     // When verification completed
    expiry_epoch: u64,               // When DID expires
    blob_id: String,                 // Walrus blob ID (stored in NFT metadata)
    encryption_id: vector<u8>,       // Seal encryption ID (stored in NFT metadata)
    claimed: bool,                   // Whether NFT has been claimed
}
```

#### `DIDSoulBoundNFT`

Once verification is complete, the user can claim a Soul-Bound (non-transferable) NFT. This NFT acts as their on-chain proof of verification. It intentionally omits the `store` ability to prevent it from being transferred.

Code snippet

```
public struct DIDSoulBoundNFT has key { // No store ability = non-transferable
    id: UID,
    owner: address,                  // NFT owner
    did_type: u8,                    // DID type
    name: String,                    // "18+ Age Verification"
    description: String,             // DID description
    image_url: Url,                  // NFT image URL
    blob_id: String,                 // Walrus blob ID reference
    nautilus_signature: vector<u8>,  // Nautilus TEE signature for attestation
    expiry_epoch: u64,               // When DID expires
    minted_at: u64,                  // When NFT was minted
}
```

#### `DocumentInfo`

This structure is stored within the `Government Whitelist` contract and links a user's encrypted document to their DID type.

Code snippet

```
public struct DocumentInfo has store {
    blob_id: String,                 // Walrus blob ID
    encryption_id: vector<u8>,       // Seal encryption ID
    did_type: u8,                    // DID type this document is for
    uploaded_at: u64,                // Timestamp when uploaded
}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://suiverify.gitbook.io/suiverify/audit-and-compliance/core-data-structure.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
