The world's first private seedless smart account, powered by Zero-Knowledge cryptography, SAFE, and biometrics ( Face ID )
This project is a deep-dive on account abstraction. The Safe's interface for ERC7579 and Noir's secp256r1 signature verification allow for some very interesting combination that has the potential to dramatically improve user experience, privacy, and security.
Multisigs are a problem. Not only people are doxxed in voting situations, but they can also be in physical danger or be subject to theft that can endanger a whole DAO or even an L2. This is not unprecedented: the biggest theft in HISTORY was caused by a 5-out-of-9 multisig breach.
DRY leverages the Secure Enclave to sign messages with FaceID or similar biometrics, and Noir provides with three key proofs: preimage, signature verification, and merkle tree membership. This makes the user completely private: no one sees the actual owners of the Safe. DRY is fully compatible with SAFE and will support all major features such as social recovery or arbitrary transaction signing.
There are three major components to the whole project: Noir, React Native, and Safe.
Noir is a Zero-Knowledge domain specific language that provides an easy Rust-like abstraction layer, interfaces natively with Aztec's Barretenberg backend, and provides a handy Solidity contract for proof verification. The Noir standard library contains a secp256r1 signature verification method, which happens to be a supported curve for a lot of elliptic curve cryptography around us. With it, we could not only make a succint proof that a provided public key can be recovered from a signature, but also keep all that information completely private!
This means that a Safe can essentially be owned by the hash of a public key. To make it even more interesting, we made the contract store only the root of a merkle tree: all data is stored off-chain (ex. via DA layer integrations).
React Native is a bit of a pain to work with, but contrary to web pages, it can run code natively.
On webpages, the WASM workers eat memory like crazy and the scheduler frequently closes them. With React Native, we are able to use the full power of Barretenberg, generating these proofs in just a few seconds. We also experimented with the new Honk prover, but the absence of a solidity verifier made us go back to UltraPlonk.
Safe is one of the biggest projects in crypto. It provides a great smart account interface, a lot of integrations, and a ERC7579 that allowed for all of this to be possible. We hacked a bit on an Executor module, and made it store a merkle tree root and our Noir Solidity verifier contract address.
We also built a relayer, so the user doesn't doxx himself with the msg.sender. Since msg.sender is not an identity anymore, anyone can submit a proof of ownership of the contract. These interact with the existing Safe and allow the execution once a threshold is hit.