Anrk Verify development details
AnkrVerify is a Web3 proof-verification service. It allows any Web3 participant (DeFi protocol, developer, ordinary user) to request proof to comply a specific policy (e.g., age => 18).
Architecture
Ankr Verify is implemented in a modular manner:
- Synaps node
- AnkrVerify backend
- AnkrVerify frontend
- AnkrVerify smart contract
Actors
- User — anybody who wants to prove they comply with the required policies of a blockchain, DeFi platform, or a dApp.
- Synaps — the KYC provider. Synaps requests, processes, and stores real user data.
- AnkrVerify Wallet Service (backend + frontend) — a service for generating proofs (claims) for policies.
- AnkrVerify smart contract — a contract deployed on a specific chain; stores links to the IPFS proofs (claims).
- Chain — a blockchain where a Ankr Verify smart contract is deployed.
- DeFi platform, dApp, developer — any third-party that wants the user to comply with a specific policy.
Workflow
- The user undergoes KYC.
- The issuer:
- Checks the provided KYC data.
- Creates Identity Attributes (claims) for the user based on the provided data. Types of the attributes are predefined by Ankr (curr., age. residence, name, surname).
- Updates the GIST tree with the claims. The tree stores all the claims of all the users.
- The issuer sends the claims encrypted by the PK of the user's wallet to Ankr Verify.
- The user connects their wallet to their Ankr Verify Wallet Service. Ankr Verify sends user their encrypted claims, and the user decrypts them via the decrypt-encrypt MetaMask function.
- Ankr Verify sends the user the policies available for verification.
- If the user's claim matches the policy requirements, the user generates a proof, signs it, chooses chains to upload the proof to, and sends the proof to Ankr Verify.
- Ankr Verify validates the received proof, stores it on the IPFS, and also stores the link to the IPFS in the smart contract on the chains selected by the user.
- A third-party (DeFi platform, developer) check if the required policy is met via
isPolicyValidated(address user, policyId)
.