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 two main attestation schemas on the Base blockchain through the Ethereum Attestation Service (EAS). These schemas provide different levels of verification and privacy protection for users.
Schema Types
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
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
}
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 verification is not yet available. Manual verification using the ProofPack specification is required.
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
// Example of future SDK: Verify Merkle proof (manual implementation required)
const proof = await verifyMerkleProof(leafData, proofPath, rootHash);
const isValid = proof && rootHash === attestedRootHash;
Note: ProofPack SDK verification is not yet available. Manual verification using the ProofPack specification is required.
Related Resources
Schema UIDs
Zipwire uses the following EAS schema UIDs for its attestations:
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
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