ZKID Layer Technical Breakdown

System Overview

ZKID follows a modular, multi-layer architecture:

  1. Identity Layer

  2. Credential Layer

  3. ZK Verification Layer

  4. Application Layer


1. Identity Layer

Focused on:

  • DID creation

  • key management

  • document resolution

  • Bitcoin anchoring

  • decentralized reference points

Pseudocode for DID creation:

fn generate_did() -> DID {
    let keypair = secp256k1_generate();
    let did = format!("did:zkid:{}", hash(keypair.public));
    DID { did, keypair }
}

2. Credential Layer

Handles:

  • issuance

  • revocation

  • validation

  • metadata referencing

Credentials remain primarily off-chain to ensure scalability.

Smart contract reference example (Solana / Anchor style):

pub struct CredentialReference {
    pub did: Pubkey,
    pub storage_hash: [u8; 32],
    pub issuer: Pubkey,
    pub valid_until: i64,
}

3. ZK Verification Layer

This layer processes:

  • zkSNARK-based proofs

  • membership proofs

  • age proofs

  • custom ZK circuits

Example ZK circuit pseudocode:

// prove user is over 18 without revealing birthdate

def zk_age_proof(birth_year, current_year):
    assert(current_year - birth_year >= 18)

In real implementation, this becomes a constraint system (R1CS or Plonk).


4. Application Layer

Applications integrate:

  • credential requests

  • DID verification

  • ZK proofs

  • permissioned access

  • reputation scoring

  • session-based authentication

Example flow:

User -> DID
DID -> VC
VC -> ZKProof
ZKProof -> Access Granted

✅ Identity Anchoring Workflow (Expanded)

Step 1: User creates DID

Locally generated to ensure privacy.

Step 2: Hashing

The DID Document hash is computed.

Step 3: Bitcoin anchoring

Batch updates follow a structure like:

commitment_root = merkleRoot(DID_updates)
OP_RETURN(commitment_root)

Step 4: Solana reference

Solana contracts reference the anchored state:

pub struct AnchoredDIDState {
    pub did: Pubkey,
    pub btc_commitment: [u8; 32],
    pub last_update_slot: u64,
}

✅ Credential Flow (Expanded)

Issuance

Issuer signs VC:

signature = Sign(issuer_private_key, credential_data)

Storage

Credential stored on Arweave:

arweave://cred/0x123abc...

Verification

Apps query:

VerifySignature(issuer_public_key, credential, signature)

Optional: run ZK proof:

VerifyZKProof(credential, zk_proof) -> true/false

✅ Data Synchronization (Expanded)

Validators maintain:

  • DID update logs

  • revocation registries

  • proof validity

  • hash commitments

  • BTC anchoring intervals

  • time-based checkpoints

Reward logic sketch:

fn distribute_rewards(validators, epoch_rewards) {
    let total_stake: u64 = validators.iter().map(|v| v.stake).sum();
    for v in validators {
        v.reward += epoch_rewards * (v.stake / total_stake);
    }
}

Last updated