Inspiration
Inspired by Chainlink DECO, the innovative decentralized private oracle solution, which allows people to attest their off-chain data in a privacy-preserving manner by using MPC and ZKP techniques. We would like to create a dApp for an end-user to get his data privately with interactive zero-knowledge proofs (IZK) executed in the user's end device.
The private data will be shared as proofs/attestatiosn with the dApp, which will check the user's eligibility with his off-chain data and public off-chain data. In particular, the dApp will use Chainlink functions to get the public off-chain data with a pre-settled API key via a DON-hosted secret management service.
What it does
In our Demo example, we allow the end-user who holds more than 200 $X tokens, and the price of $X is more than $40000, will be eligible for a reward like community NFT/fee discount/incentive for whales.
How we built it

We create 4 parts of code.
- The browser extension: the user operates the extension to get the token balance from CEX, submit IZK proof to Sepolia testnet, and get the eligibility result from the server.
- The interactive ZK server: this is a cryptographic server to generate an IZK proof which shows the (in)correctness of the user's token amount is more than 200. The IZK server will sign on the proof. The signed proof will be sent to the EAS (Ethereum attestation service) at Sepolia.
- The backend server: This server will receive the eligibility-check request from the extension, and also deploy the API key and call Chainlink functions. The server will send the request to the dApp, and receive the response from the dApp.
- The dApp(smart contracts): this dApp contains three parts:
- attestation contracts: this module is the on-chain attestation management proxy, to access and analyse the attestations from EAS.
- Chainlink functions consumer: this is the core module that fetches the token price from CoinMarketCap with the encrypted API key from the server.
- Eligibility checker: this is the core logic to check the user's eligibility (amount * price >= Y), and to make sure the user's address is consistent.
Challenges we ran into
We met several challenges during the hackathon. In particular, we take a lot of time to write the IZK circuits from the emp-toolkit, which is super fast but we're not quite familiar with. In addition, the integration of all four parts of the code is another challenge, where we fix many bugs and adjust the code heavily.
Accomplishments that we're proud of
We create an innovative Demo and use state-of-the-art cryptography to demonstrate the power of off-chain data usage in Web3. And we will continue to explore the possibility of leveraging users' off-chain data with the attestation protocol and cryptography.
Built With
- api
- c
- javascript
- privacy
- solidity
- zk
Log in or sign up for Devpost to join the conversation.