Suirify is a privacy-first sovereign identity protocol built on the Sui blockchain. We enable verify once, use everywhere with consent-first, on-chain attestation objects that let dApps gate features without storing personal data.
- Privacy-first: PII is processed in memory, then deleted; apps read only sanitized public claims.
- Reusable credentials: One verification issues an on-chain attestation users can present across dApps.
- Compliance-friendly: Auditable attestations enable compliant DeFi, KYC gating, and age checks.
- Designed for emerging markets: First focus: Nigeria (NIN), then scale globally.
- Clone the repository
git clone https://github.com/suirifyprotocol/suirify
cd suirify- Install dependencies (Node.js >= 18 recommended)
npm install- Run the demo app
cd DemoApp
npm install
npm run dev
# Open the URL printed by the Vite dev serverFull deployment and production instructions (keys, webhook security, CI) are in docs/README.md and the project Wiki.
- Verified-only applications, launchpads, and token pre-sales
- KYC-gated applications
- Sybil-resistant social platforms and governance
- Age-restricted content and on-chain identity primitives
- ...and much more!
- Overview
- Getting Started
- SDK Quickstart
- Demo (Verified Launchpad)
- Configuration & Environment
- Consent Handler Pattern
- API / SDK Reference
- Security & Privacy
- FAQ
- Contributing
- Contact
Suirify issues non-transferable attestation objects on Sui that represent a verified identity claim. The SDK provides a read-only, consent-first interface for dApps to:
- Discover whether a wallet owns a
Suirify_Attestationon-chain. - Ask a user for consent to read public claims.
- Read specific public claims (e.g.,
is_human_verified,is_over_18). - Gate UI or flows (allowlists, voting, token claim simulations) without handling PII.
This repo contains the SDK client code and an example Verified Launchpad demo showcasing common integration patterns.
See the Quickstart above, or follow these steps for local development:
- Clone the repository
git clone https://github.com/suirifyprotocol/suirify
cd suirify- Install dependencies
npm install- Start the demo app
cd DemoApp
npm install
npm run dev- Create a singleton
SuirifySdkclient with yourSUI_RPC_URLand optionalSUIRIFY_ATTESTATION_TYPE. - Register a
consentHandlerin your app that opens a modal asking the user to sign a consent message. - On wallet connect:
- Call
getAttestationForOwner(address) - If found, call
getPublicClaims(address, fields)after consent
- Call
- Cache claims in your app state and gate UI interactions.
- For high-value flows, always re-validate server-side.
See docs/API.md for the full API reference and method signatures.
The DemoApp showcases:
- Project listings (public teaser + hidden gated details)
- Wallet connect and attestation discovery
- Consent modal pattern (user signs to authorize claims reads)
- Allowlist join, comment/vote, and simulated token claim flows (client-side/mocked)
Live demo: https://demoapp-gg11.onrender.com
Create a .env (do not commit it) with these variables for local development:
SUI_RPC_URL=https://fullnode.testnet.sui.io:443
SUIRIFY_PACKAGE_ID=0x2a81ddb98779253bd431e4737caca7c29bcfa8ac8ed57eaddecaf6fc530226e2
SUIRIFY_ATTESTATION_TYPE=0x2a81ddb98779253bd431e4737caca7c29bcfa8ac8ed57eaddecaf6fc530226e2::protocol::Suirify_Attestation
VITE_SUI_RPC_URL=...
VITE_SUIRIFY_FORCE_MOCK=falseVITE_SUIRIFY_FORCE_MOCK makes UI development possible without live attestations.
The SDK is UI-agnostic. You must implement and register:
consentHandler(scopes: string[])It should:
- Render a human-readable modal showing requested scopes
- Explain why the app needs them
- Prompt the user to sign a short message containing address + timestamp
- Resolve
trueorfalse
The SDK will abort the RPC read if the user denies consent. This pattern gives users control and creates an auditable consent record.
See docs/API.md.
Core client class and methods:
SuirifySdk(opts)— constructorsetConsentHandler(handler)— register app modal handlergetAttestationForOwner(address)— discover attestationgetPublicClaims(address, fields)— read public claims (requires consent)isValid(attestation)— revocation / expiry checksclearCache(address?)— clear cached results
The client SDK is intentionally read-only. Production deployments must:
- Keep attester/issuer keys server-side (Vault / GCP KMS / AWS KMS)
- Use server-side verification for high-value flows
- Never commit
.envor private keys - Review
docs/security.mdfor full hardening
Q: Can the SDK issue attestations?
A: No. Issuance is performed by Suirify’s verification backend.
Q: Can I store claim data?
A: Only store minimal non-PII fields (attestation ID, wallet, expiry, verification level).
See docs/faq.md for more Q&A.
We welcome contributions! Open issues for feature requests and use pull requests for code changes.
See docs/contributing.md for guidelines and code of conduct.
- Website: https://devnet.suirify.com
- Demo: https://demoapp-gg11.onrender.com
- GitHub: https://github.com/suirifyprotocol/suirify
- Email: hello@suirify.com
