Hanzo ID
Decentralized identity for Web3
Extend your IAM to support Web3 identities. DIDs, Verifiable Credentials, and on-chain attestations—with single sign-on across all Hanzo services and your own applications.
Decentralized Identifiers (DIDs)
Self-sovereign identity using W3C DID standards. Users own their identity.
Verifiable Credentials
Issue and verify credentials that users can share across applications.
On-Chain Attestations
Permanent, verifiable attestations stored on-chain for compliance and reputation.
Single Sign-On
One identity across all Hanzo services and integrated applications.
Get Your API Key
Start building in under 5 minutes
No credit card required. Free tier includes 300M compute units/month.
Trusted by developers building:
Key Capabilities
Everything you need, nothing you don't.
Decentralized Identifiers (DIDs)
Self-sovereign identity using W3C DID standards. Users own their identity.
Verifiable Credentials
Issue and verify credentials that users can share across applications.
On-Chain Attestations
Permanent, verifiable attestations stored on-chain for compliance and reputation.
Single Sign-On
One identity across all Hanzo services and integrated applications.
KYC Integration
Connect to KYC providers and issue verified identity credentials.
Privacy-Preserving
Zero-knowledge proofs for selective disclosure. Prove attributes without revealing data.
Credential Types
Built-in schemas for identity, age verification, accreditation, and more.
Wallet Integration
Store credentials in Hanzo Wallet. Users control their identity.
Simple to Integrate
Get started with just a few lines of code. SDKs for every language.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import "@hanzo/identity/IEAS.sol";
import "@hanzo/identity/ISchemaRegistry.sol";
/// @title IdentityAttestation - On-chain identity and verifiable credentials
/// @notice DID-linked attestations using Ethereum Attestation Service (EAS)
contract IdentityAttestation {
IEAS public eas;
ISchemaRegistry public schemaRegistry;
// Schema UIDs for different credential types
bytes32 public constant KYC_SCHEMA = keccak256("bool verified,uint64 expiry,string provider");
bytes32 public constant AGE_SCHEMA = keccak256("bool ageOver18,bool ageOver21,uint64 verifiedAt");
bytes32 public constant ACCREDITATION_SCHEMA = keccak256("string accreditationType,string jurisdiction,uint64 validUntil");
// DID to attestation mapping
mapping(bytes32 => bytes32[]) public didAttestations;
event AttestationCreated(
bytes32 indexed did,
bytes32 indexed attestationId,
bytes32 indexed schemaId
);
event CredentialRevoked(
bytes32 indexed did,
bytes32 indexed attestationId
);
constructor(address _eas, address _schemaRegistry) {
eas = IEAS(_eas);
schemaRegistry = ISchemaRegistry(_schemaRegistry);
}
// Create KYC attestation for a DID
function attestKYC(
bytes32 did,
address recipient,
bool verified,
uint64 expiry,
string calldata provider
) external returns (bytes32 attestationId) {
bytes memory data = abi.encode(verified, expiry, provider);
AttestationRequest memory request = AttestationRequest({
schema: KYC_SCHEMA,
data: AttestationRequestData({
recipient: recipient,
expirationTime: expiry,
revocable: true,
refUID: bytes32(0),
data: data,
value: 0
})
});
attestationId = eas.attest(request);
didAttestations[did].push(attestationId);
emit AttestationCreated(did, attestationId, KYC_SCHEMA);
}
// Create age verification attestation
function attestAge(
bytes32 did,
address recipient,
bool ageOver18,
bool ageOver21
) external returns (bytes32 attestationId) {
bytes memory data = abi.encode(ageOver18, ageOver21, block.timestamp);
AttestationRequest memory request = AttestationRequest({
schema: AGE_SCHEMA,
data: AttestationRequestData({
recipient: recipient,
expirationTime: 0, // No expiry
revocable: true,
refUID: bytes32(0),
data: data,
value: 0
})
});
attestationId = eas.attest(request);
didAttestations[did].push(attestationId);
emit AttestationCreated(did, attestationId, AGE_SCHEMA);
}
// Verify an attestation is valid
function verifyAttestation(bytes32 attestationId) external view returns (
bool valid,
address recipient,
uint64 expirationTime,
bool revoked
) {
Attestation memory attestation = eas.getAttestation(attestationId);
valid = attestation.uid != bytes32(0);
recipient = attestation.recipient;
expirationTime = attestation.expirationTime;
revoked = attestation.revocationTime > 0;
}
// Revoke a credential
function revokeCredential(bytes32 did, bytes32 attestationId) external {
eas.revoke(RevocationRequest({
schema: KYC_SCHEMA,
data: RevocationRequestData({
uid: attestationId,
value: 0
})
}));
emit CredentialRevoked(did, attestationId);
}
// Get all attestations for a DID
function getAttestations(bytes32 did) external view returns (bytes32[] memory) {
return didAttestations[did];
}
}Built For
Compliant DeFi
Enable permissioned DeFi with verified identity credentials. Meet regulatory requirements while preserving privacy.
Token Gating
Gate access to content, communities, or features based on verifiable credentials.
Reputation Systems
Build on-chain reputation from verified credentials and past interactions.
Cross-App Identity
Users carry their verified identity and reputation across multiple applications.
Start Building with Hanzo ID
Get your free API key and ship your first request in under 5 minutes. No credit card required.