ZKID Layer Technical Breakdown
System Overview
ZKID follows a modular, multi-layer architecture:
Identity Layer
Credential Layer
ZK Verification Layer
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