mkdir 3did && cd 3did
yarn init -y"type": "module"yarn add typescript ts-node --devyarn 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
yarn add sqlite3 typeorm reflect-metadatayarn add express uuid dotenv cors @types/corsnpx @veramo/cli config create-secret-keynode --loader ts-node/esm ./src/YOUR_TEST.tsCapture 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 1Analyze 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 testSdr21The script prints per-port summary metrics (min, max, media, percentili) and, with --details, the latency for every request.
curl -L https://foundry.paradigm.xyz | bash
foundryupanvil \
--fork-url https://sepolia.infura.io/v3/$INFURA_PROJECT_ID \
--chain-id 11155111 \
--host 0.0.0.0 \
--port 8545 \
--block-time 1cast rpc anvil_setBalance 0xADDRESS 0x21E19E0C9BAB2400000sequenceDiagram
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