zkLoans

zkLoans

Confidential credit scores and loan disbursal, powered by zkSNARKs and NEAR Protocol

zkLoans

zkLoans

Confidential credit scores and loan disbursal, powered by zkSNARKs and NEAR Protocol

The problem zkLoans solves

zkLoans brings confidential Credit Scores. It proves to a counterparty if you meet threshold requirements for a credit score without revealing the precise value. This is made possible using ZK-SNARKS, and could be used for several kinds of applications including unsecured on-chain loans.

It works by generating an off-chain ZK-SNARK proof, and submitting it to the Near VM for verification, using keys generating during a trusted key ceremony. A Near contract is used to keep track of whether the user is elligible for a loan, without ANY knowledge of the user's credit score or private details.

zkLoans could be extended very easily to other applications. Imagine proving someone you have sufficient bank balance to clear a (digital) cheque, without revealing your actual bank balance/statements.

Challenges I ran into

  • ZK-SNARK verification on Near VM is unchartered territory. There's no documentation on how to make it work for Near, or even if it's possible to achieve (spoiler - it is!).
  • Near NVM does not have primitives to verify ZK-SNARK proofs on-chain. Using Aurora for my PoC didn't seem like an interesting enough challenge. I ended up deploying a Groth16 ZK-SNARK verifier to Near VM, which makes this project very unique.
  • The circom circuit for my use case was not very obvious to understand and crack.
  • Verification of the groth16 proof took a boat load of gas, which I couldn't initially figure out.
  • The ZK ceremony was complex since I was not using Plonk proofs.
  • I was unfamiliar with Near's programming model, so I needed to learn everything I needed to know during the hackathon.

Discussion