Attestation Schemas
CapSign uses a privacy-first attestation framework built on the Ethereum Attestation Service (EAS) to provide comprehensive compliance verification while protecting user privacy. Our schemas follow a public/private hybrid model that minimizes on-chain data exposure.
Schema Architecture
Privacy-First Design Principles
Minimal Disclosure - Only essential compliance status on-chain
Selective Access - Detailed data for authorized parties only
User Control - Comprehensive data sharing permissions
Regulatory Compliance - GDPR/CCPA aligned from day one
Schema Categories
Our attestation framework uses three categories of schemas:
Public Schemas - Minimal compliance status (safe for public visibility)
Private Reference Schemas - On-chain pointers to encrypted off-chain data
Valuation Schemas - Asset valuation and pricing data with privacy controls
Public Schemas (Minimal Disclosure)
These schemas contain only essential compliance status without exposing sensitive personal or financial data.
Basic Compliance Status
Purpose: Minimal public compliance verification without sensitive data exposure
Fields:
{
isCompliant: boolean; // Overall compliance status
complianceLevel: number; // 0=basic, 1=enhanced, 2=institutional
jurisdictionCode: string; // Two-letter country code (US, EU, UK, etc.)
sanctionsStatus: boolean; // Sanctions screening passed
verificationHash: string; // Hash of underlying verification data
validUntil: number; // Expiration timestamp
}
Usage: Basic compliance checks for offering participation without revealing personal details.
Expiration: 1 year (31,536,000 seconds)
Basic Valuation Status
Purpose: Minimal public valuation status without sensitive pricing data
Fields:
{
isValid: boolean; // Valuation is current and valid
valuationType: number; // 0=409A, 1=Transaction, 2=Financial
validUntil: number; // Valuation expiration timestamp
commitmentHash: string; // Cryptographic commitment to valuation data
}
Usage: Public verification that valid asset valuation exists without exposing pricing details.
Expiration: 1 year
Basic Business Information
Purpose: Minimal public business data for industry sanctions and compliance checks
Fields:
{
naicsCode: number; // NAICS industry classification code
businessType: number; // 0=individual, 1=corporation, 2=partnership, 3=trust
incorporationCountry: string; // Two-letter country code of incorporation
validUntil: number; // Expiration timestamp
}
Usage: Industry and entity type verification for sanctions screening and business rules.
Expiration: 1 year
Private Reference Schemas (On-Chain Pointers)
These schemas point to encrypted off-chain data without exposing content, providing access controls and data integrity verification.
Private Compliance Reference
Purpose: Pointer to encrypted detailed compliance data with access controls
Fields:
{
dataCommitment: string; // Cryptographic commitment to private data
encryptedDataURI: string; // IPFS hash of encrypted detailed data
accessControlHash: string; // Hash of access control list
schemaVersion: number; // Private schema version for compatibility
}
Usage: References comprehensive KYC/AML data stored encrypted off-chain with selective access.
Jurisdiction-Specific Private References
We maintain separate private reference schemas for different regulatory jurisdictions:
US Private Compliance Reference
Jurisdiction: United States
Contains: US accreditation data, income verification, professional qualifications
Compliance: SEC regulations, state blue sky laws
EU Private Compliance Reference
Jurisdiction: European Union
Contains: MiFID II professional investor data, portfolio information
Compliance: GDPR, MiFID II, ESMA guidelines
UK Private Compliance Reference
Jurisdiction: United Kingdom
Contains: FCA sophisticated investor classification data
Compliance: UK FCA regulations, sophisticated investor rules
Private Valuation Reference
Purpose: Pointer to encrypted detailed valuation data with access controls
Fields:
{
priceCommitment: string; // Cryptographic commitment to valuation range
encryptedRangeURI: string; // IPFS hash of encrypted valuation details
accessControlHash: string; // Access control for detailed valuation
schemaVersion: number; // Valuation schema version
}
Usage: References detailed 409A valuations, transaction pricing, and financial analysis.
Encrypted Off-Chain Data Structures
Private Identity Details
Comprehensive identity verification data stored encrypted off-chain:
interface PrivateReferenceAttestation {
// Personal Identity Information (PII)
fullLegalName: string;
dateOfBirth: string;
placeOfBirth: string;
nationality: string;
// Address Information
residentialAddress: {
street: string;
city: string;
state: string;
postalCode: string;
country: string;
};
// Government Identity Documents
primaryIdentityDocument: {
type: string; // "passport", "national_id", "drivers_license"
number: string;
issuingAuthority: string;
issueDate: string;
expiryDate: string;
documentHash: string; // Hash of document image
};
// Secondary verification documents
addressVerificationDocument?: {
type: string; // "utility_bill", "bank_statement", "lease_agreement"
issueDate: string;
documentHash: string;
};
// Biometric verification (if performed)
biometricVerification?: {
faceMatch: boolean;
livenessCheck: boolean;
fingerprintMatch?: boolean;
verificationScore: number; // 0-100
};
// Verification process details
verificationProcess: {
verifierName: string;
verifierLicense: string;
verificationMethod: string; // "manual_review", "automated_kyc", "video_call"
verificationDate: string;
verificationLocation: string;
documentsVerified: string[];
additionalChecks: string[]; // "sanctions_screening", "pep_check", "adverse_media"
};
// Compliance screening results
complianceScreening: {
sanctionsListsChecked: string[];
pepStatus: boolean;
adverseMediaFound: boolean;
riskScore: number; // 0-100
screeningProvider: string;
screeningDate: string;
};
// Internal notes (sensitive)
internalNotes?: string;
complianceOfficerNotes?: string;
// Metadata
attestationId: string;
createdTimestamp: string;
expiryTimestamp?: string;
}
Jurisdiction-Specific Qualification Data
US Private Qualification Data
interface USPrivateQualificationData {
// Accreditation Details
accreditationStatus: number; // 0=non-accredited, 1=accredited, 2=QIB, 3=institutional
qualificationBasis: string[]; // How they qualify (income, net worth, professional)
professionalCertifications: string[];
entityType?: string;
investmentLimits?: number;
// Financial Thresholds (encrypted)
individualIncome?: number;
jointIncome?: number;
netWorth?: number;
liquidNetWorth?: number;
// Professional Status
isKnowledgeableEmployee?: boolean;
isFamilyClient?: boolean;
// QIB-Specific
qibStatus?: boolean;
assetsUnderManagement?: number;
}
EU Private Qualification Data
interface EUPrivateQualificationData {
// MiFID II Classification
clientCategory: number; // 0=retail, 1=professional, 2=eligible_counterparty
isProfessionalInvestor: boolean;
isEligibleCounterparty: boolean;
// Qualification Criteria
portfolioSize?: number;
transactionFrequency?: number;
professionalExperience?: number;
// Suitability Assessment
knowledgeExperience: number; // Score 0-10
financialSituation: string;
investmentObjectives: string[];
riskTolerance: number; // 0-10
appropriatenessAssessment: boolean;
suitabilityAssessment: boolean;
}
Private Valuation Details
interface PrivateValuationDetails {
// Core Valuation (encrypted)
valuationAmount: number;
pricePerShare: number;
sharesOutstanding: number;
currency: string;
// Methodology
valuationMethod: number; // 0=DCF, 1=Market Multiple, etc.
discountRate: number; // Basis points
revenueMultiple?: number;
ebitdaMultiple?: number;
// Adjustments
liquidityDiscount?: number;
controlPremium?: number;
marketabilityDiscount?: number;
// Professional Details
valuationFirm: string;
leadValuer: string;
valuerCredentials: string[];
independentReview: boolean;
boardApproval: boolean;
auditCommitteeReview: boolean;
// Quality Metrics
confidenceLevel: number; // 1-10
methodologyNotes: string;
supportingDocuments: string[];
}
Privacy Controls
User Data Management
Users have comprehensive control over their attestation data:
Authorize Viewers: Grant specific parties access to private data
Revoke Access: Remove access permissions at any time
Data Expiration: Set automatic expiration dates
Export Data: Download complete data export (GDPR compliance)
Delete Data: Remove private data while maintaining compliance history
Access Audit: View complete log of who accessed their data
GDPR/CCPA Compliance
Right to Access: Complete data export capability
Right to Rectification: Update attestation data
Right to Erasure: Delete private data (subject to legal obligations)
Data Portability: Export in machine-readable format
Consent Management: Granular consent for each data sharing scenario
Schema Integration
Creating Attestations
Data Separation: Split sensitive and non-sensitive data
Encryption: Encrypt private data with user-controlled keys
Off-Chain Storage: Store encrypted data on IPFS
Public Attestation: Create minimal disclosure on-chain attestation
Private Reference: Create on-chain pointer to encrypted data
Access Control: Distribute decryption keys to authorized parties
Verifying Compliance
Public Check: Verify basic compliance status (always accessible)
Authorization Check: Confirm viewer has access to detailed data
Data Retrieval: Fetch and decrypt private data if authorized
Compliance Evaluation: Assess detailed compliance requirements
Audit Logging: Record all data access for compliance monitoring
Schema Evolution
Schemas support versioning to enable:
Backward Compatibility: Old attestations remain valid
Regulatory Updates: New requirements without breaking existing data
Enhanced Privacy: Upgrade to zero-knowledge proofs when ready
Cross-Jurisdiction: Support new regulatory frameworks
Ready to implement attestations? See our Verification Process Guide for detailed document requirements and implementation steps.
Last updated
Was this helpful?