# zkMe Smart Contracts

> Overview of the Smart Contracts (SC) developed by zkMe for the processing of the zkMe Network.

## Smart Contracts Overview

To facilitate decentralized verification, zkMe developed a suite of smart contracts, enabling the protocol and Verifiers to process verifications autonomously. zkMe Mint and Delegate smart contracts mint the original and delegate copies of the DID onto the Holder's wallets. zkMe Verify and Certify smart contracts allow Verifiers to interact with the zkMe network and request minting of a special SBT copy for legal data access requirements if necessary. All functionalities available through the zkMe SCs are also available on zkMe APIs for non-web3 native Verifiers.

### zkMe Mint

The objective for the zkMe Mint smart contract is to anchor the verified credentials (and their anonymized presentations) on-chain.

The following sequence diagram shows the process of registering an SSI wallet, completing KYC verification, and minting an SBT token. The three participants involved are Holder, zkMe App (SSI Wallet), and Polygon (MATIC). This SC for minting SBT is deployed on Polygon. The process starts with the Holder requesting to register an SSI wallet through the zkMe App. Once the wallet is created, the Holder presents their credentials to the zkMe App. The zkMe App generates the relevant ZKP and triggers the minting request to the zkMe Mint Polygon smart contract. The zkMe Mint SC receives the location pointers for the ZKP and mints an SBT asset directly to the Holder's SSI wallet. The zkMe SBT contains the Holder's DIDs, a key shard, and, most importantly, the pointer to the verified ZKP. This process ensures that the Holder is able to securely own their Identity on-chain.

<figure><img src="/files/l3HT8hHv2FIzRhs4Y03M" alt=""><figcaption></figcaption></figure>

zkMe Mint address (Polygon Mainnet): **0x5c2bfcf9c17CD53d55033769727196736CD188b3**

Please check:

{% embed url="<https://polygonscan.com/token/0x5c2bfcf9c17CD53d55033769727196736CD188b3>" %}

### zkMe Delegate

The goal of the zkMe Delegate Smart Contract is to make copies of the user’s on-chain identities available on the blockchain ecosystems in which the user is active.

The zkMe Delegate SC comes into play when a Holder wishes to perform verifications for dApps across chain ecosystems. Holders need to first connect their asset wallet to the zkMe App and sign a transaction requesting a delegate copy of SBT. The zkMe infrastructure and zkMe Delegate SC complete the cross-chain data transfer to the Holder's connected asset wallet and issue a delegate copy of SBT. Currently, zkMe Delegate supports the Chain Ecosystems listed below, support for additional EVM, SVM, MoveVM, Cosmos-compatible chains is achievable with minimal efforts.

<figure><img src="/files/XoRz14AlPO3124mCCoy6" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
If your required chain is "coming soon" or not yet supported, feel free to reach out to us at <mark style="color:blue;">**<contact@zk.me>**</mark> to submit your request.
{% endhint %}

| zkMe Delegate              | Mainnet Address                                                        | Testnet Address                                                        |
| -------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| **Aptos**                  | **0xc1e0d1fb6178f444f763bc55bda9df32b4354859925191d634a74a97924397d9** | **0xaed725b099b49a53a56fccd9e0316052416ec78798491de2d7e651dfc57ce411** |
| **Arbitrum**               | **0x1E3D352CA8E843AC59FdE9AD605Ba1C57813Fa0b**                         | **0x270A49849E1400867a1343b4621c458d1F81190a**                         |
| **Avalanche**              | *<mark style="color:purple;">coming soon</mark>*                       | **0x270A49849E1400867a1343b4621c458d1F81190a**                         |
| **Base**                   | **0x5c2bfcf9c17CD53d55033769727196736CD188b3**                         | **0x270A49849E1400867a1343b4621c458d1F81190a**                         |
| **Berachain**              | *<mark style="color:purple;">coming soon</mark>*                       | **0x270A49849E1400867a1343b4621c458d1F81190a**                         |
| **BNB Chain**              | **0x5c2bfcf9c17CD53d55033769727196736CD188b3**                         | **0x270A49849E1400867a1343b4621c458d1F81190a**                         |
| **BounceBit**              | **0x5c2bfcf9c17CD53d55033769727196736CD188b3**                         | *<mark style="color:purple;">coming soon</mark>*                       |
| **Ethereum**               | **0x5c2bfcf9c17CD53d55033769727196736CD188b3**                         | **0xD923a27A8b7cf8C9f3dFA022851B503a55b095a9**                         |
| **Fantom**                 | *<mark style="color:purple;">coming soon</mark>*                       | **0x270A49849E1400867a1343b4621c458d1F81190a**                         |
| **Kaia**                   | **0x5c2bfcf9c17CD53d55033769727196736CD188b3**                         | *<mark style="color:purple;">coming soon</mark>*                       |
| **Linea**                  | *<mark style="color:purple;">coming soon</mark>*                       | **0xD923a27A8b7cf8C9f3dFA022851B503a55b095a9**                         |
| **Manta**                  | **0x5c2bfcf9c17CD53d55033769727196736CD188b3**                         | **0x270A49849E1400867a1343b4621c458d1F81190a**                         |
| **Mantle**                 | *<mark style="color:purple;">coming soon</mark>*                       | **0x270A49849E1400867a1343b4621c458d1F81190a**                         |
| **Midnight**               | *<mark style="color:purple;">coming soon</mark>*                       | **81ab4899c99c4f3667dff54e1de39c677a0369227e15837b9082c73f2399c9c6**   |
| **Neutron**                | **neutron19t7s6aa9289e563mu9qrx5nh80xtn4vr5afdu8yctej6f7w6k9usv87acp** | **neutron1g374hrmmn92vpurtppdwsnrrhrftz7ky2g55n5c4f22gfaeyrwpqq06cef** |
| **Lumoz**                  | *<mark style="color:purple;">coming soon</mark>*                       | *<mark style="color:purple;">coming soon</mark>*                       |
| **Optimism**               | *<mark style="color:purple;">coming soon</mark>*                       | **0x270A49849E1400867a1343b4621c458d1F81190a**                         |
| **Plume**                  | *<mark style="color:purple;">coming soon</mark>*                       | **0xD923a27A8b7cf8C9f3dFA022851B503a55b095a9**                         |
| **Polygon**                | **0x3b3364656BbB7A23133e3f26D7F6850acfaAc394**                         | *<mark style="color:purple;">coming soon</mark>*                       |
| **Ronin**                  | **0x5c2bfcf9c17CD53d55033769727196736CD188b3**                         | *<mark style="color:purple;">coming soon</mark>*                       |
| **Scroll**                 | *<mark style="color:purple;">coming soon</mark>*                       | **0x270A49849E1400867a1343b4621c458d1F81190a**                         |
| **Sei**                    | *<mark style="color:purple;">coming soon</mark>*                       | **sei1dmwr4e6k4n0dlwtkh598sxp2al3wvkvwew658r3cqx98648uqhcs7sd38d**     |
| **Solana**                 | **6tVnLV3qrA7HddTzRGmeZs1cy5rAcTFs9sQiaoLbENAM**                       | **6tVnLV3qrA7HddTzRGmeZs1cy5rAcTFs9sQiaoLbENAM**                       |
| **Sui**                    | *<mark style="color:purple;">coming soon</mark>*                       | *<mark style="color:purple;">coming soon</mark>*                       |
| **The Open Network (TON)** | **EQBLZJv\_DGlRJ-HqSY2yjmmGiRspStQ2G-akZVQWAcr7pUFt**                  | *<mark style="color:purple;">coming soon</mark>*                       |
| **X Layer**                | **0x1E3D352CA8E843AC59FdE9AD605Ba1C57813Fa0b**                         | *<mark style="color:purple;">coming soon</mark>*                       |
| **ZetaChain**              | **0x5c2bfcf9c17CD53d55033769727196736CD188b3**                         | **0xf8E1973814E66BF03002862C325305A5EeF98cc1**                         |
| **zkSync**                 | *<mark style="color:purple;">coming soon</mark>*                       | **0x4630e45Edb00298Eb7872FC5e237f6f0CE4995dF**                         |

### zkMe Verify & Certify

The zkMe Verify & Certify Smart Contract (***ZKMEVerifyUpgradeable***) is multi-functional, capable of verifying users' eligibility for services and fulfilling data recovery requirements for compliance with regulators' rules. The SC is triggered once a dApp recognizes an SBT asset within a Holder's wallet.

The SC's Verify function is used for eligibility checks. It provides yes/no answers to a list of predetermined eligibility questions for each credential verified. These questions are outlined in zkMe documentation on the zkMe website.

<figure><img src="/files/RcRdxvGl9xxc9z5Ta2cW" alt=""><figcaption></figcaption></figure>

Following the verification, the SC's Certify function can be optionally triggered. It requires the explicit approval of the Holder (through transaction signature) and creates a verifier-specific copy of the Holder's SBT in a designated asset wallet. This copy includes the Holder's private key shard, enabling the Verifier to identify the Holder when a regulator initiates bad-actor proceedings, even without the Holder's approval.

<figure><img src="/files/fM78nSci9aZkBzU2kqyh" alt=""><figcaption></figcaption></figure>

Currently, zkMe SC is compatible with the following chain ecosystems:

{% hint style="success" %}
If your required chain is "coming soon" or not yet supported, feel free to reach out to us at <mark style="color:blue;">**<contact@zk.me>**</mark> to submit your request.
{% endhint %}

| zkMe Verify                | Mainnet Address                                                        | Testnet Address                                                        |
| -------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| **Aptos**                  | **0xc1e0d1fb6178f444f763bc55bda9df32b4354859925191d634a74a97924397d9** | **0x3e642b9d2845aa4efa3cdeb18acf6c7cd93112e4836a53e78f4b541e42a244b8** |
| **Arbitrum**               | **0x399488687fc3618FFaf1f5d0f61397c8E0360c02**                         | **0xF58De9599C57bBAD68Fea0F39b73913daFcf0976**                         |
| **Avalanche**              | *<mark style="color:purple;">coming soon</mark>*                       | **0xf8E1973814E66BF03002862C325305A5EeF98cc1**                         |
| **Base**                   | **0x8c81bbc5cC9B6cdbb5c0e5DD8b9D5bfaF3575710**                         | **0xF58De9599C57bBAD68Fea0F39b73913daFcf0976**                         |
| **Berachain**              | *<mark style="color:purple;">coming soon</mark>*                       | **0xF58De9599C57bBAD68Fea0F39b73913daFcf0976**                         |
| **BNB Chain**              | **0x3919BdCe285E82CDC6585979cfd71636b33A5582**                         | **0xf8E1973814E66BF03002862C325305A5EeF98cc1**                         |
| **BounceBit**              | **0x399488687fc3618FFaf1f5d0f61397c8E0360c02**                         | *<mark style="color:purple;">coming soon</mark>*                       |
| **Ethereum**               | **0x399488687fc3618FFaf1f5d0f61397c8E0360c02**                         | **0xF58De9599C57bBAD68Fea0F39b73913daFcf0976**                         |
| **Fantom**                 | *<mark style="color:purple;">coming soon</mark>*                       | **0xf8E1973814E66BF03002862C325305A5EeF98cc1**                         |
| **Linea**                  | *<mark style="color:purple;">coming soon</mark>*                       | **0xA018F0593C1C3F62A68c3fc3B9D593961B207d96**                         |
| **Manta**                  | **0x3919BdCe285E82CDC6585979cfd71636b33A5582**                         | **0xf8E1973814E66BF03002862C325305A5EeF98cc1**                         |
| **Mantle**                 | *<mark style="color:purple;">coming soon</mark>*                       | **0xF58De9599C57bBAD68Fea0F39b73913daFcf0976**                         |
| **Midnight**               | *<mark style="color:purple;">coming soon</mark>*                       | **39a45a695034a8b108c3315997882d40931a158ddaebb99f6711d10c68b8891c**   |
| **Neutron**                | **neutron19t7s6aa9289e563mu9qrx5nh80xtn4vr5afdu8yctej6f7w6k9usv87acp** | **neutron1g374hrmmn92vpurtppdwsnrrhrftz7ky2g55n5c4f22gfaeyrwpqq06cef** |
| **Kaia**                   | **0x3919BdCe285E82CDC6585979cfd71636b33A5582**                         | *<mark style="color:purple;">coming soon</mark>*                       |
| **Lumoz**                  | *<mark style="color:purple;">coming soon</mark>*                       | **0xf8E1973814E66BF03002862C325305A5EeF98cc1**                         |
| **Optimism**               | *<mark style="color:purple;">coming soon</mark>*                       | **0xF58De9599C57bBAD68Fea0F39b73913daFcf0976**                         |
| **Plume**                  | *<mark style="color:purple;">coming soon</mark>*                       | **0xA018F0593C1C3F62A68c3fc3B9D593961B207d96**                         |
| **Polygon**                | **0x78D247ff4543Ef08488A1127034c2cE54B12A926**                         | *<mark style="color:purple;">coming soon</mark>*                       |
| **Ronin**                  | **0x3919BdCe285E82CDC6585979cfd71636b33A5582**                         | *<mark style="color:purple;">coming soon</mark>*                       |
| **Scroll**                 | *<mark style="color:purple;">coming soon</mark>*                       | **0xf8E1973814E66BF03002862C325305A5EeF98cc1**                         |
| **Sei**                    | *<mark style="color:purple;">coming soon</mark>*                       | **sei1dmwr4e6k4n0dlwtkh598sxp2al3wvkvwew658r3cqx98648uqhcs7sd38d**     |
| **Solana**                 | **6tVnLV3qrA7HddTzRGmeZs1cy5rAcTFs9sQiaoLbENAM**                       | **6tVnLV3qrA7HddTzRGmeZs1cy5rAcTFs9sQiaoLbENAM**                       |
| **Sui**                    | *<mark style="color:purple;">coming soon</mark>*                       | *<mark style="color:purple;">coming soon</mark>*                       |
| **The Open Network (TON)** | **EQBLZJv\_DGlRJ-HqSY2yjmmGiRspStQ2G-akZVQWAcr7pUFt**                  | *<mark style="color:purple;">coming soon</mark>*                       |
| **X Layer**                | **0x399488687fc3618FFaf1f5d0f61397c8E0360c02**                         | *<mark style="color:purple;">coming soon</mark>*                       |
| **ZetaChain**              | **0x3919BdCe285E82CDC6585979cfd71636b33A5582**                         | **0xA018F0593C1C3F62A68c3fc3B9D593961B207d96**                         |
| **zkSync**                 | *<mark style="color:purple;">coming soon</mark>*                       | **0xdbd9E736562584DB3fA1C5F39A47C2071DE0D5cb**                         |

## zkMe Credential Schema

The credential schema on zkMe network is designed to be flexible and extensible, allowing issuers to customize the schema to meet their specific needs while maintaining compatibility with the W3C VC and VP data models; enabling Issuers to issue a wide range of credentials, from educational degrees to professional certifications, while ensuring that these credentials are interoperable and ease to use across different networks and applications.

zkMe specifies the following set of properties that its ZKPs (as VPs) must include as:

* **Issuer**: The entity that issued the credential.
* **Subject:** The DID to whom the credential pertains.
* **Type:** The type of credential being issued (e.g. Proof-of-Citizenship, Proof-of-Residence).
* **Issuance Date:** The date on which the credential was issued.
* **Expiration Date:** The date on which the credential expires.
* **Claims:** The specific eligibility the VP is attesting to (e.g. Adulthood - Is the holder over 18 years old?).
* **Proof:** A cryptographic proof that the credential was issued by the specified issuer and has not been tampered with since issuance.

In addition to these standard properties, VCs and VPs on zkMe may also include other properties or custom extensions, depending on the needs of the Issuer or the network's requirements as a whole. It's important to note that the content of VCs and VPs issued on zkMe is determined by the Issuer, and may vary depending on the type of credential being verified and the specific claims being attested.

In the zkMe zkKYC solution, the following information elements and descriptions are included:

**Issuer DIDs:** The public decentralized identifiers (DIDs) of the issuer are published in the Verifiable Data Registry. This information enables the holder to verify the authenticity and trustworthiness of the issuer.

**Holder DIDs:** The private DIDs of the Holder towards a particular Issuer are known only to the Holder and the Issuer. These DIDs enable the Holder to authenticate themselves to the Issuer and provide proof of their Identity.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.zk.me/hub/how-built/id-infra/smart-contracts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
