Skip to content

exo404/3did

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

3did

Project starting

Init using yarn

mkdir 3did && cd 3did
yarn init -y

Add config file package.json:

"type": "module"

Install dev dependencies:

yarn add typescript ts-node --dev

Install Veramo's core and plugins:

yarn add @veramo/core @veramo/data-store ethr-did-resolver @veramo/did-manager @veramo/did-provider-ethr @veramo/key-manager @veramo/kms-local @veramo/did-resolver @veramo/did-comm @veramo/did-jwt @veramo/message-handler @veramo/url-handler @veramo/selective-disclosure @veramo/credential-w3c @veramo/remote-server @veramo/remote-client

Install sqlite and typeorm:

yarn add sqlite3 typeorm reflect-metadata

Install utilities:

yarn add express uuid dotenv cors @types/cors

Create and save the secret key:

npx @veramo/cli config create-secret-key

Start a service

node --loader ts-node/esm ./src/YOUR_TEST.ts

Network capture & latency

Capture mediator (port 3000) and Infura (port 443) traffic:

chmod +x capture.sh
./scripts/capture.sh any captures/sepolia/2025-11-21/21 testSdr21 2025-11-21 1

Analyze the recorded PCAP to extract latency statistics (requires tshark):

python3 scripts/analyze_latency.py captures/sepolia/2025-11-21/21/testSdr21_2025-11-21_run1.pcap --details --rpc-port 443 
python3 scripts/analyze_latency.py captures/sepolia/2025-11-21/21/testSdr21_2025-11-21_run2.pcap --details --rpc-port 443
python3 scripts/analyze_latency.py captures/sepolia/2025-11-21/21/testSdr21_2025-11-21_run3.pcap --details --rpc-port 443  
python3 scripts/summarize_runs.py --day 2025-11-21 --test-name testSdr21

The script prints per-port summary metrics (min, max, media, percentili) and, with --details, the latency for every request.

Local testnet deploy

Install Anvil

curl -L https://foundry.paradigm.xyz | bash
foundryup

Fork Sepolia

anvil \
  --fork-url https://sepolia.infura.io/v3/$INFURA_PROJECT_ID \
  --chain-id 11155111 \
  --host 0.0.0.0 \
  --port 8545 \
  --block-time 1

Give 10ETH to a DID wallet

cast rpc anvil_setBalance 0xADDRESS 0x21E19E0C9BAB2400000

Sequence Diagram for the Triangle of Trust flow

sequenceDiagram
    participant Issuer as "Issuer Agent"
    participant Mediator as "Mediator Agent"
    participant Holder as "Holder Agent"
    participant Verifier as "Verifier Agent"s
        Issuer->>Issuer: Create Credential Payload
        Issuer->>Issuer: keyManagerSign()
        Issuer->>Issuer: createVerifiableCredential()
        Issuer->>Mediator: sendDIDCommMessage(VC, holderDID)
        Holder->>Mediator: receiveDIDCommMessage(holderDID)
        Holder->>Holder: dataStoreSaveVerifiableCredential()
        Verifier->>Verifier: createSelectiveDisclosureRequest()
        Verifier->>Mediator: sendDIDCommMessage(SDR, holderDID)
        Holder->>Mediator: receiveDIDCommMessage(holderDID)
        Holder->>Holder: getVerifiableCredentialsForSdr()
        Holder->>Holder: createVerifiablePresentation()
        Holder->>Mediator: sendDIDCommMessage(VP, verifierDID)
        Verifier->>Mediator: receiveDIDCommMessage(verifierDID)
        Verifier->>Verifier: verifyPresentation()
        Verifier->>Verifier: validatePresentationAgainstSdr()
        Verifier->>Verifier: Process verification result
Loading

About

Implementing Self Sovereign Identity using Veramo after exploring different frameworks

Topics

Resources

Stars

Watchers

Forks