Glacis

Documentation

Everything you need to integrate Glacis Protocol into your Starknet application.

Quick Start

Install the SDK and query verification status in under a minute.

1. Install

npm install @vauban/glacis-sdk

2. Initialize the client

import { GlacisClient } from '@vauban/glacis-sdk';

// For mainnet (after deployment)
const glacis = new GlacisClient({ network: 'starknet-mainnet' });

// For Sepolia testing
const glacis = new GlacisClient({ network: 'starknet-sepolia' });

3. Check if a wallet is verified

const isHuman = await glacis.isVerifiedHuman(walletAddress);

if (isHuman) {
  // User has a valid STARK-verified identity
  console.log('Verified human!');
} else {
  // Redirect to Glacis mobile app for verification
  console.log('Not verified yet');
}

4. Get full attestation info

const info = await glacis.getAttestationInfo(walletAddress);

console.log(info);
// {
//   verified: true,
//   expiry: Date('2031-02-15'),
//   revoked: false,
//   expired: false,
// }

5. Get scoped pseudonym

// Each app gets a unique pseudonym per user (privacy-preserving)
const pseudonym = await glacis.getScopedIdentity(
  walletAddress,
  'my_app_name'
);

API Reference

new GlacisClient(config)

Create a new client instance. Defaults to read-only mode.

interface GlacisConfig {
  network: 'starknet-mainnet' | 'starknet-sepolia';
  providerUrl?: string;              // Custom RPC endpoint
  contractAddress?: string;          // Custom verifier address
  attestationTokenAddress?: string;  // Custom attestation token address
}

isVerifiedHuman(wallet: string): Promise<boolean>

Check if a wallet has a valid (non-expired, non-revoked) human attestation. Free on-chain read — no gas cost.

getScopedIdentity(wallet, appDomain): Promise<string>

Get the scoped pseudonym for a wallet in your application domain. Each app gets a unique pseudonym per user, preventing cross-app tracking. Returns '0x0' if not verified.

getAttestationExpiry(wallet): Promise<Date | null>

Get the expiration date of a wallet's attestation. Returns null if no attestation exists. Default TTL is 5 years.

getAttestationInfo(wallet): Promise<AttestationInfo>

Get full attestation details in a single call: verified, expiry, revoked, expired.

submitProof(account, submission): Promise<TransactionResult>

Submit a STARK proof for on-chain verification. Requires a starknet.js Account instance. Typically called from the mobile app, not from web integrations.

Contract Addresses

Starknet Sepolia

ContractAddress
verifier0x051814c8a17ace1491a7203d9fac2525a32c0813fe44d78bb96ba8bd8737cf9c
nullifierRegistry0x042d1c440a3ed2f12c30b67384f5784e358d3c8e8f4c326536123750004c4ee0
attestationToken0x0082d381f17ac9490c0de35f95f86916bececebb2a472398f64514982a5bf54c
feeController0x03cbaea371a242dd87f40dc58c1e8d32cf85222fdd396ff953a1ae4dbc9b7447
caRegistry0x03425e2acdfdc36cfcc75a6cf7c4218d22b37875f6d5f823a7d1e529a7bb0015

Starknet Mainnet

Mainnet deployment pending. Addresses will be published here and in the SDK after deployment.

FAQ

What data is stored on-chain?

Only a deterministic nullifier (Poseidon hash) and scoped pseudonyms. No name, nationality, date of birth, or any personally identifiable information. The nullifier cannot be reversed to recover passport data.

How long does verification last?

The Soulbound Token has a 5-year TTL by default, aligned with passport validity. Users can renew by re-verifying with their current or renewed passport.

Can a user have multiple wallets?

No. The nullifier is deterministic — the same passport always produces the same nullifier. A user can migrate their attestation to a new wallet using the migration flow, but they cannot hold multiple active attestations simultaneously.

Is it quantum-resistant?

Yes. STARKs are based on hash functions (Poseidon), not elliptic curves. They are inherently resistant to quantum computing attacks, unlike SNARKs and most ECDSA-based systems.

What about biometrics?

Glacis does not use biometrics. No iris scanning, no face recognition. Identity is proven via the government-signed digital signature on the NFC chip in your passport.

How does this compare to Worldcoin?

Worldcoin requires iris scanning (biometrics) and uses SNARKs (not quantum-resistant). Glacis uses NFC passport reading (no biometrics) and STARKs (quantum-resistant). Both solve sybil resistance, but with fundamentally different trust assumptions.