Attestation Schemas
Technical details of the attestation schemas used by Zipwire Attest, including IsAHuman and Private Data schemas on the Base blockchain.
Overview
Zipwire Attest uses eight attestation schemas on the Base blockchain through the Ethereum Attestation Service (EAS). These schemas provide different levels of verification and privacy protection for users, including basic proof of personhood, age verification, compliance verification, and selective data disclosure.
Schema Types
Core Schemas
IsAHuman Schema
The "IsAHuman" schema provides basic Proof of Personhood verification.
Schema Details
Schema Name: IsAHuman
Schema Type: Boolean
Data Structure: Simple true/false value
Privacy Level: Basic - no personal data included
Transferability: Not transferable
Revocability: Revocable by Zipwire
Use Cases
Bot prevention in any wallet-connectable application
Access to gated communities
Basic trust verification
DAO participation requirements
Limitations
No identity linkage to specific person
No selective disclosure capabilities
Can only be claimed against wallets connected before ID check
Revocable if verification is compromised
Private Data Schema
The "Private Data" schema provides cryptographic attestations of documents using Merkle root hashes.
Schema Details
Schema Name: Private Data
Schema Type: Merkle Root Hash
Data Structure: Cryptographic hash of document data
Privacy Level: High - enables selective disclosure
Merkle Tree Structure
Each Private Data attestation contains a Merkle root hash that represents:
Passport data - All fields from verified passport document
AML report data - All fields from background check report (if completed)
Leaf Structure
Each leaf in the Merkle tree includes:
data: Hex-encoded content of the field
salt: Random bytes to prevent preimage attacks
hash: Hash of data + salt
contentType: MIME type of the data
Selective Disclosure
Users can selectively reveal any field from their documents by generating Merkle proofs:
Age verification: Reveal only date of birth
Nationality verification: Reveal only nationality
AML status: Reveal only specific compliance fields
Any document field: Reveal any individual field as needed
Age-Based Schemas
Zipwire provides five age-based attestation schemas for different age verification requirements. All age attestations follow the same pattern but with different age thresholds.
IsThirteen Schema
Purpose: Confirms user is at least 13 years old
Use Cases: COPPA compliance, social media platforms, educational services
Privacy: Only confirms age threshold, not exact age
IsFourteen Schema
Purpose: Confirms user is at least 14 years old
Use Cases: Platform age requirements, content filtering, service eligibility
Privacy: Only confirms age threshold, not exact age
IsSixteen Schema
Purpose: Confirms user is at least 16 years old
Use Cases: Employment verification, driving services, financial services
Privacy: Only confirms age threshold, not exact age
IsEighteen Schema
Purpose: Confirms user is at least 18 years old
Use Cases: Adult services, legal contracts, financial services, employment verification
Privacy: Only confirms age threshold, not exact age
IsTwentyOne Schema
Purpose: Confirms user is at least 21 years old
Use Cases: Alcohol sales, gambling platforms, adult content, financial services
Privacy: Only confirms age threshold, not exact age
Age Schema Common Features
Verification Process: All use Yoti ID check to verify date of birth
Age Calculation: Zipwire calculates age from verified date of birth
Transferability: Attestations transfer with wallet ownership
Permanence: Once issued, attestations are permanent on blockchain
Privacy: Only reveal minimum age threshold, not exact age or date of birth
Compliance Schemas
Zipwire provides compliance attestation schemas for regulatory and financial verification requirements.
HasClearAML Schema
Purpose: Confirms user has clear Anti-Money Laundering (AML) status
Use Cases: Financial services, high-value transactions, regulatory compliance, DeFi protocols
Privacy: Only confirms clear AML status, not specific compliance details
Compliance Schema Common Features
Verification Process: All use specialized compliance verification processes
Regulatory Focus: Designed to meet specific regulatory requirements
Transferability: Attestations transfer with wallet ownership
Permanence: Once issued, attestations are permanent on blockchain
Privacy: Only reveal compliance status, not detailed verification information
Technical Implementation
Blockchain Integration
Network: Base blockchain
Service: Ethereum Attestation Service (EAS)
Attester: Zipwire's master attester address
Verification: On-chain attestation records
Attestation Process
Wallet Connection: User connects their Ethereum wallet (must be done before ID check)
ID Verification: User completes self-check on phone/PC camera + passport photo
Document Processing: Zipwire automatically processes and verifies documents
Merkle Tree Creation: Zipwire automatically creates Merkle tree from document data
Root Hash Generation: Zipwire automatically generates cryptographic hash of the entire dataset
User Claim: User claims attestation to their connected wallet
Blockchain Attestation: Zipwire automatically attests root hash on Base via EAS
Proof Generation
When users need to prove specific information (coming soon):
Select Fields: Choose which data fields to reveal via UI
Generate Proof: Create Merkle proof for selected fields
Create ProofPack: Package proof in ProofPack format
Share: Send ProofPack to recipient
Note: OAuth integration allowing other sites/apps to view proofs is on the longer-term roadmap.
Schema Specifications
IsAHuman Schema
{
"uid": "attestation_uid",
"schema": "schema_uid",
"attester": "0x2651e...",
"recipient": "user_wallet_address",
"data": "0x0000000000000000000000000000000000000000000000000000000000000001", // ABI encoded boolean true
"timestamp": "2024-01-01T00:00:00Z",
"revoked": false
}
Private Data Schema
{
"uid": "attestation_uid",
"schema": "schema_uid",
"attester": "0x2651e...",
"recipient": "user_wallet_address",
"data": "0x1316fc0f...", // ABI encoded bytes (Merkle root hash)
"timestamp": "2024-01-01T00:00:00Z",
"revoked": false
}
Age-Based Schemas
All age-based schemas follow the same JSON structure with boolean true values:
IsThirteen Schema
{
"uid": "attestation_uid",
"schema": "schema_uid",
"attester": "0x2651e...",
"recipient": "user_wallet_address",
"data": "0x0000000000000000000000000000000000000000000000000000000000000001", // ABI encoded boolean true
"timestamp": "2024-01-01T00:00:00Z",
"revoked": false
}
IsFourteen Schema
{
"uid": "attestation_uid",
"schema": "schema_uid",
"attester": "0x2651e...",
"recipient": "user_wallet_address",
"data": "0x0000000000000000000000000000000000000000000000000000000000000001", // ABI encoded boolean true
"timestamp": "2024-01-01T00:00:00Z",
"revoked": false
}
IsSixteen Schema
{
"uid": "attestation_uid",
"schema": "schema_uid",
"attester": "0x2651e...",
"recipient": "user_wallet_address",
"data": "0x0000000000000000000000000000000000000000000000000000000000000001", // ABI encoded boolean true
"timestamp": "2024-01-01T00:00:00Z",
"revoked": false
}
IsEighteen Schema
{
"uid": "attestation_uid",
"schema": "schema_uid",
"attester": "0x2651e...",
"recipient": "user_wallet_address",
"data": "0x0000000000000000000000000000000000000000000000000000000000000001", // ABI encoded boolean true
"timestamp": "2024-01-01T00:00:00Z",
"revoked": false
}
IsTwentyOne Schema
{
"uid": "attestation_uid",
"schema": "schema_uid",
"attester": "0x2651e...",
"recipient": "user_wallet_address",
"data": "0x0000000000000000000000000000000000000000000000000000000000000001", // ABI encoded boolean true
"timestamp": "2024-01-01T00:00:00Z",
"revoked": false
}
HasClearAML Schema
{
"uid": "attestation_uid",
"schema": "schema_uid",
"attester": "0x2651e...",
"recipient": "user_wallet_address",
"data": "0x0000000000000000000000000000000000000000000000000000000000000001", // ABI encoded boolean true
"timestamp": "2024-01-01T00:00:00Z",
"revoked": false
}
Verification Process
On-Chain Verification
EAS Scan: Check attestation on Base blockchain
Attester Verification: Confirm attestation from Zipwire's address
Schema Validation: Verify correct schema type
Revocation Check: Ensure attestation is not revoked
Timestamp Check: Ensure attestation is current
Proof Verification
Merkle Proof: Verify leaf hashes against root
Data Integrity: Confirm revealed data matches proof
Salt Validation: Check salt prevents preimage attacks
Content Type: Validate MIME types
Note: ProofPack SDK is now available on NPM for easy verification.
Security Considerations
Privacy Protection
No Personal Data: Only cryptographic hashes stored on-chain
Selective Disclosure: Users control exactly what to reveal
Salt Protection: Prevents preimage attacks on hashes
Self-Sovereign: Users own and control their proofs
Localized Storage: Original data stored in double-encrypted localized storage
Technical Redaction: Advanced users can download full reveal proofs, delete
data
andsalt
, and create custom redacted proofs (unsigned but chain-validatable)
Integrity Assurance
Cryptographic Proofs: Merkle trees ensure data integrity
Blockchain Verification: On-chain attestations prevent tampering
Signature Validation: JWS envelopes provide tamper-proofing
Timestamp Protection: Prevents replay attacks
Developer Integration
EAS Integration
// Example: Verify attestation on Base
const attestation = await eas.getAttestation(attestationUid);
const isValid = attestation.attester === "0x2651e..."; // check official Zipwire attester address
const isNotRevoked = !attestation.revoked;
See our official Zipwire attester address on our GitHub.com
ProofPack Verification
// Using the ProofPack SDK (recommended)
import { AttestedMerkleExchangeReader } from '@zipwire/proofpack';
import { EasAttestationVerifierFactory, ES256KVerifier } from '@zipwire/proofpack-ethereum';
// Configure networks and create verifier
const networks = {
'base': {
rpcUrl: `https://api.developer.coinbase.com/rpc/v1/base/${apiKey}`,
easContractAddress: '0x4200000000000000000000000000000000000021'
}
};
const attestationVerifierFactory = EasAttestationVerifierFactory.fromConfig(networks);
const reader = new AttestedMerkleExchangeReader();
// Verify complete document with attestation
const result = await reader.readAsync(jwsEnvelopeJson, verificationContext);
if (result.isValid) {
console.log("Verified data:", result.document);
console.log("Merkle Root:", result.document.merkleTree.root);
console.log("Attestation Network:", result.document.attestation.eas.network);
}
Note: ProofPack SDK is now available on NPM for easy verification. See GitHub repository for documentation and examples.
Related Resources
Core Attestations
Age-Based Attestations
Compliance Attestations
External Resources
Schema UIDs
Zipwire uses the following EAS schema UIDs for its attestations:
Core Schemas
IsAHuman Schema
Schema UID:
0x8af15e65888f2e3b487e536a4922e277dcfe85b4b18187b0cf9afdb802ba6bb6
Purpose: Proof of personhood verification
Type: Simple boolean attestation
Use Cases: Bot prevention in any wallet-connectable application
Private Data Schema
Schema UID:
0x20351f973fdec1478924c89dfa533d8f872defa108d9c3c6512267d7e7e5dbc2
Purpose: Selective disclosure of document information
Type: Merkle root attestation with selective disclosure
Use Cases: Age verification, nationality verification, credential verification
Age-Based Schemas
The following age-based schemas are available:
IsThirteen Schema
Schema UID:
0x8a236ef2aa0b65165326fc1d6f8fa29dfd139e391432c59ab6ea7605ed578425
Purpose: Confirms user is at least 13 years old
Type: Simple boolean attestation
Use Cases: COPPA compliance, social media platforms, educational services
IsFourteen Schema
Schema UID:
0x175f46f002f3c955b85654294bb7ba489a20170b92affc31384e4c99ffa891e7
Purpose: Confirms user is at least 14 years old
Type: Simple boolean attestation
Use Cases: Platform age requirements, content filtering, service eligibility
IsSixteen Schema
Schema UID:
0xbf0313ff4991a4f628ba7e0ead6a5bcd633e2049ea78ca906fe65e126942530b
Purpose: Confirms user is at least 16 years old
Type: Simple boolean attestation
Use Cases: Employment verification, driving services, financial services
IsEighteen Schema
Schema UID:
0xba73ff8acaee0bf6c4a8d294dcdc27b1a60489f5338a13058d129fc7e640212f
Purpose: Confirms user is at least 18 years old
Type: Simple boolean attestation
Use Cases: Adult services, legal contracts, financial services, employment verification
IsTwentyOne Schema
Schema UID:
0x1681ac077844d5f53b9a59a1495bde1bd62af45e646de7feda722f68164a1465
Purpose: Confirms user is at least 21 years old
Type: Simple boolean attestation
Use Cases: Alcohol sales, gambling platforms, adult content, financial services
HasClearAML Schema
Schema UID:
0xdc1cb4d85858a3c6fe90fcce9779c3ffad0376d5dd3583cf684056fd98359f9c
Purpose: Confirms user has clear Anti-Money Laundering (AML) status
Type: Simple boolean attestation
Use Cases: Financial services, high-value transactions, regulatory compliance, DeFi protocols
Attester Information
All Zipwire attestations are issued by our master attester wallet. For verification purposes, you can find the official public key and Ethereum wallet address at:
This is the authoritative source for verifying that attestations were issued by Zipwire.
Last updated