Created on 22nd June 2025
•
Problem:
All digital payments require the recipient to provide some form of recipient wallet, address or bank account which adds friction to the payment process.
Onboarding users requires them to first install a wallet, before being able to use any dapp, with 90% of users fall-off a this point.
Solution:
Zface.cash solves this by allowing you to pay just by scanning the face of the recipient, all while preserving privacy. No wallets, addresses or identifiers needed - just a face scan.
Fastest way to onboard users - we allow users to receive funds first, before needing to install a wallet.
How we solve this:
Zface.cash allows the sender to scan the face of the recipient, which will deposit funds into a one-time-use address.
Only the recipient will be able to withdraw funds from the address by verifying that it is them by scanning the face.
Under the hood:
The sender takes a video of the recipient's face which creates a set of unique vector embeddings of the recipient. A one-time-use address is created with the funds being deposited there. The sender sends a link to the recipient, which the recipient can use to do a scan of their face. This scan will provide a set of facial embeddings which will be compared inside a zk-curcuit to the initial set of facial embeddings generated during the sending process. If the similarities in both sets are within a certain threshold, the recipient will be able to withdraw the funds. After withdrawing the funds the one-time-address is destroyed.
Noir
Lack of dev-friendliness
zkVerify
Making a sample proof and verifying them using the Relayer through the API call was relatively easy.
We ran into issues, related to the vkey generation and some of the configurations, especially in relation to the smart contract and polling it, due to some gaps in the documentation.
Steve and Milica from Horizen generously assisted us by helping with this step.
Tracks Applied (4)
Horizen
Arbitrum
Arbitrum
Technologies used