Overview
Attesters are trusted entities that can create and verify attestations in the ZKScore Trust Layer V1. This comprehensive guide covers the complete journey from application to becoming a successful attester, including the whitelisting process, technical integration, and best practices.
Attesters are the backbone of the ZKScore ecosystem. They verify and certify information about users, creating the foundation for trust-based decisions across Web3 applications.
What are Attesters?
Attesters are organizations, individuals, or automated systems that can create cryptographically signed attestations about users’ identities, skills, behaviors, or achievements.
Types of Attesters
- Identity Verifiers: KYC providers, government agencies
- Skill Assessors: Educational institutions, certification bodies
- Protocol Operators: DeFi protocols, NFT marketplaces
- Community Moderators: DAO administrators, social platform moderators
- Automated Systems: Smart contracts, oracles
The Attester Whitelisting Process
ZKScore Trust Layer V1 uses a whitelist model to ensure quality and prevent spam. All attesters must go through a comprehensive approval process.
Why Whitelisting?
The whitelist model provides several benefits:
- Quality Control: Ensures only reputable organizations become attesters
- Spam Prevention: Prevents low-quality or fraudulent attestations
- Trust Building: Users can trust that attestations come from verified sources
- Ecosystem Health: Maintains the integrity of the trust layer
- Regulatory Compliance: Helps meet compliance requirements
Attester Tiers
ZKScore offers different attester tiers with varying requirements and capabilities:
| Tier | Requirements | Staking | Capabilities | Approval Time |
|---|
| Team | ZKScore internal team | None | Full access, all features | Immediate |
| Partner | Strategic partners | 10,000 SCORE | High limits, priority support | 1-2 weeks |
| Verified | Established organizations | 1,000 SCORE | Standard limits | 2-4 weeks |
| Community | Community attesters | 100 SCORE | Basic limits | 4-6 weeks |
Application Requirements
1. Organization Identity
- Legal Entity: Must be a registered legal entity
- Business License: Valid business license or registration
- Website: Professional website with clear information
- Contact Information: Verifiable contact details
2. Technical Capability
- API Integration: Ability to integrate with ZKScore APIs
- Technical Team: Dedicated technical team or expertise
- Infrastructure: Reliable infrastructure for attestation services
- Security: Basic security practices and procedures
3. Trustworthiness
- Reputation: Established reputation in relevant field
- References: Professional references from industry peers
- Track Record: History of reliable service delivery
- Compliance: Adherence to relevant regulations
4. Use Case
- Clear Purpose: Well-defined use case for issuing attestations
- Business Model: Sustainable business model
- Target Users: Clear understanding of target user base
- Value Proposition: Clear value proposition for users
5. Staking Requirements
- SCORE Tokens: Required amount of SCORE tokens for staking
- Lock Period: Minimum staking period (varies by tier)
- Slashing Risk: Understanding of slashing conditions
- Financial Capacity: Ability to maintain stake
Step-by-Step Application Process
Step 1: Initial Application
Submit your initial application through the ZKScore attester portal:
// Submit initial application
const application = await client.submitAttesterApplication({
// Organization details
organization: {
name: 'Blockchain Academy',
legal_name: 'Blockchain Academy LLC',
registration_number: 'LLC-2024-001',
jurisdiction: 'Delaware, USA',
website: 'https://blockchain-academy.com',
founded_date: '2020-01-15',
employees: 25
},
// Contact information
contact: {
email: 'contact@blockchain-academy.com',
phone: '+1-555-0123',
address: '123 Blockchain St, San Francisco, CA 94105',
primary_contact: 'John Smith',
technical_contact: 'Jane Doe'
},
// Business information
business: {
type: 'skill_assessor',
description: 'Certified blockchain education and certification provider',
target_market: 'blockchain_developers',
estimated_monthly_attestations: 1000,
business_model: 'subscription_certification'
},
// Technical information
technical: {
team_size: 5,
api_integration_experience: true,
security_practices: ['encryption', 'audit_logging', 'access_controls'],
infrastructure: 'aws_cloud',
backup_procedures: true
},
// Compliance information
compliance: {
data_protection_compliant: true,
privacy_policy_url: 'https://blockchain-academy.com/privacy',
terms_of_service_url: 'https://blockchain-academy.com/terms',
regulatory_compliance: ['GDPR', 'CCPA'],
audit_reports: ['audit_2024.pdf']
}
});
console.log('Application submitted:', application.application_id);
Step 2: Technical Review
The ZKScore team will conduct a technical review:
Technical Requirements Checklist:
Technical Interview:
- Architecture discussion
- Security practices review
- Integration timeline assessment
- Performance requirements discussion
- Support and maintenance plans
Step 3: Business Review
Business Model Assessment:
Use Case Validation:
Step 4: Compliance Review
Legal and Compliance Assessment:
Step 5: Staking and Approval
Once approved, you’ll need to stake the required SCORE tokens:
// Stake SCORE tokens for attester status
const stakingResult = await client.stakeForAttester({
amount: ethers.utils.parseEther('1000'), // 1000 SCORE tokens
lockPeriod: 365 * 24 * 60 * 60, // 1 year lock
tier: 'verified'
});
console.log('Staking transaction:', stakingResult.transactionHash);
// Wait for confirmation and get attester credentials
const credentials = await client.getAttesterCredentials();
console.log('Attester API Key:', credentials.apiKey);
console.log('Organization ID:', credentials.organizationId);
Application Timeline
| Phase | Duration | Activities |
|---|
| Initial Application | 1-2 days | Submit application, upload documents |
| Technical Review | 1-2 weeks | Technical assessment, interviews |
| Business Review | 1-2 weeks | Business model validation |
| Compliance Review | 1 week | Legal and compliance verification |
| Staking & Approval | 2-3 days | Token staking, credential generation |
| Total | 4-6 weeks | Complete approval process |
Application Tips
1. Prepare Thoroughly
- Documentation: Prepare all required documents in advance
- References: Line up professional references
- Demo: Prepare a demonstration of your technical capabilities
- Business Plan: Have a clear business plan and use case
2. Technical Readiness
- API Knowledge: Familiarize yourself with ZKScore APIs
- Security: Implement basic security practices
- Infrastructure: Ensure reliable infrastructure
- Testing: Test your integration thoroughly
3. Business Clarity
- Value Proposition: Clearly articulate your value proposition
- Target Market: Define your target market clearly
- Attestation Types: Specify what types of attestations you’ll issue
- Quality Standards: Define your quality standards
4. Compliance Preparation
- Legal Structure: Ensure proper legal structure
- Regulatory Compliance: Understand relevant regulations
- Data Protection: Implement data protection measures
- Insurance: Consider appropriate insurance coverage
Common Rejection Reasons
Understanding common rejection reasons can help you prepare a stronger application:
Technical Issues
- Insufficient Technical Capability: Unable to integrate with APIs
- Poor Security Practices: Inadequate security measures
- Unreliable Infrastructure: Infrastructure not suitable for production
- Lack of Technical Team: No dedicated technical resources
Business Issues
- Unclear Use Case: Vague or poorly defined use case
- Unsustainable Model: Business model not viable
- No Target Market: Unclear target market
- Poor Value Proposition: No clear value for users
Compliance Issues
- Legal Issues: Problems with legal entity or registration
- Regulatory Non-compliance: Failure to meet regulatory requirements
- Data Protection Issues: Inadequate data protection measures
- Insurance Coverage: Insufficient insurance coverage
Post-Approval Onboarding
Once approved, you’ll go through an onboarding process:
1. Credential Setup
// Initialize your attester client
const attesterClient = new ZKScoreAttester({
apiKey: 'att_...',
organizationId: 'org_123',
environment: 'mainnet'
});
// Verify your credentials
const verification = await attesterClient.verifyCredentials();
console.log('Credentials verified:', verification.valid);
2. Schema Creation
// Create your attestation schemas
const schemas = await Promise.all([
attesterClient.createSchema({
name: 'blockchain_certification_v1',
description: 'Blockchain development certification',
fields: [
{ name: 'certificate_id', type: 'string', required: true },
{ name: 'skill_level', type: 'number', required: true },
{ name: 'exam_score', type: 'number', required: true },
{ name: 'valid_until', type: 'timestamp', required: true }
]
}),
attesterClient.createSchema({
name: 'project_completion_v1',
description: 'Blockchain project completion verification',
fields: [
{ name: 'project_name', type: 'string', required: true },
{ name: 'completion_date', type: 'timestamp', required: true },
{ name: 'github_url', type: 'string', required: false },
{ name: 'assessment_score', type: 'number', required: true }
]
})
]);
console.log('Schemas created:', schemas.map(s => s.id));
3. Testing Phase
// Test your integration
const testAttestation = await attesterClient.createAttestation({
schemaId: 'blockchain_certification_v1',
recipient: 'test_user_address',
data: {
certificate_id: 'TEST-001',
skill_level: 8,
exam_score: 95,
valid_until: new Date('2025-12-31')
},
testMode: true
});
console.log('Test attestation created:', testAttestation.id);
4. Production Launch
// Launch in production
await attesterClient.enableProductionMode();
// Create your first production attestation
const productionAttestation = await attesterClient.createAttestation({
schemaId: 'blockchain_certification_v1',
recipient: 'alice.zks',
data: {
certificate_id: 'BCA-2024-001',
skill_level: 8,
exam_score: 95,
valid_until: new Date('2025-12-31')
}
});
console.log('First production attestation:', productionAttestation.id);
Creating Attestations
Basic Attestation Creation
// Create skill verification attestation
const attestation = await client.createAttestation({
recipient: 'alice.zks',
schema: 'skill_verification',
data: {
skill: 'Solidity Development',
level: 8,
verifiedBy: 'Blockchain Academy',
certificateId: 'BCA-2024-001',
expirationDate: '2025-12-31'
},
expiration: Math.floor(Date.now() / 1000) + (365 * 24 * 60 * 60), // 1 year
revocable: true
});
console.log('Attestation created:', attestation.transactionHash);
Batch Attestation Creation
// Create multiple attestations
const attestations = [
{
recipient: 'alice.zks',
schema: 'skill_verification',
data: { skill: 'Solidity', level: 8 }
},
{
recipient: 'bob.zks',
schema: 'skill_verification',
data: { skill: 'React', level: 6 }
}
];
const results = await client.createBatchAttestations(attestations);
console.log('Batch attestations created:', results);
Attestation Schemas
Skill Verification Schema
{
"name": "Skill Verification",
"description": "Verifies a user has specific skills",
"fields": [
{ "name": "skill", "type": "string", "required": true },
{ "name": "level", "type": "uint256", "required": true },
{ "name": "verifiedBy", "type": "string", "required": true },
{ "name": "certificateId", "type": "string", "required": false },
{ "name": "expirationDate", "type": "string", "required": false }
]
}
Education Certificate Schema
{
"name": "Education Certificate",
"description": "Verifies educational achievements",
"fields": [
{ "name": "institution", "type": "string", "required": true },
{ "name": "degree", "type": "string", "required": true },
{ "name": "field", "type": "string", "required": true },
{ "name": "graduationDate", "type": "string", "required": true },
{ "name": "gpa", "type": "uint256", "required": false }
]
}
Work Experience Schema
{
"name": "Work Experience",
"description": "Verifies professional work experience",
"fields": [
{ "name": "company", "type": "string", "required": true },
{ "name": "position", "type": "string", "required": true },
{ "name": "startDate", "type": "string", "required": true },
{ "name": "endDate", "type": "string", "required": false },
{ "name": "description", "type": "string", "required": false }
]
}
Attester Dashboard
Managing Attestations
class AttesterDashboard {
constructor(client) {
this.client = client;
}
async getAttesterStats() {
const stats = await this.client.getAttesterStats();
return {
totalAttestations: stats.totalAttestations,
activeAttestations: stats.activeAttestations,
revokedAttestations: stats.revokedAttestations,
reputation: stats.reputation
};
}
async getAttestationHistory(limit = 50) {
const history = await this.client.getAttestationHistory({ limit });
return history.map(attestation => ({
id: attestation.id,
recipient: attestation.recipient,
schema: attestation.schema,
createdAt: new Date(attestation.createdAt),
status: attestation.revoked ? 'revoked' : 'active'
}));
}
async revokeAttestation(attestationId, reason) {
const result = await this.client.revokeAttestation(attestationId, reason);
return result;
}
}
Trust Modules
Custom Trust Logic
// Create custom trust module
const trustModule = {
name: 'Skill Trust Module',
description: 'Evaluates trust based on skill attestations',
logic: `
function evaluateTrust(address user) public view returns (uint256) {
uint256 skillScore = getSkillScore(user);
uint256 experienceScore = getExperienceScore(user);
uint256 certificationScore = getCertificationScore(user);
return (skillScore + experienceScore + certificationScore) / 3;
}
`
};
// Register trust module
const result = await client.registerTrustModule(trustModule);
console.log('Trust module registered:', result.transactionHash);
Best Practices
Attestation Quality
- Accurate Data: Only attest to verified information
- Clear Schemas: Use well-defined, consistent schemas
- Appropriate Expiration: Set reasonable expiration times
- Regular Review: Periodically review and update attestations
- Revocation Process: Have clear revocation procedures
Attester Reputation
- High Standards: Maintain high verification standards
- Transparent Process: Be transparent about verification process
- Responsive: Respond to disputes and inquiries
- Consistent: Apply standards consistently across all attestations
- Continuous Improvement: Regularly improve verification processes
Compliance and Legal
Data Privacy
- GDPR Compliance: Ensure compliance with data protection regulations
- Data Minimization: Only collect necessary data
- User Consent: Obtain proper consent for data processing
- Data Retention: Implement appropriate data retention policies
Legal Considerations
- Jurisdiction: Understand applicable laws and regulations
- Liability: Consider liability for false attestations
- Dispute Resolution: Have clear dispute resolution procedures
- Terms of Service: Maintain clear terms of service