Venmo style app that allows private transactions and group chats to manage expenses
Zenmo is a social peer-to-peer finance app that uses zk technology to privatize transactions. We know, lots of buzzwords. Let's break it down.
Inspiration struck when one of the team members recalled going to Canada to celebrate a (crypto) friend's birthday. Not only did she discover the best alternative to Topo Chicos (it's called Cottage Springs Vodka Water), but she was with a group of people that did many activities together and therefore had lots of expenses. The group resorted to a "loose accounting method" to estimate the total and settle up. When settling, she sent crypto (with fees) and had to KYC each time (even though she was already KYC'd), resulting in a very frustrating experience. When thinking about what to build for EthBogota, it was easy to say "I wish there was a Venmo for crypto." Given the developments in zk to allow for cheap transactions, we wanted to push the boundaries of what that meant by layering a social component to peer to peer payments. When logging in with a wallet option (Metamask, Coinbase, WalletConnect), Zenmo creates an abstracted account for you using Aztec. Think incognito mode for your wallet and profile. Or you can just use your regular wallet without going incognito.
Then, you can create a group with friends dedicated towards an event that has expenses. You enter into a chat to talk about what the expenses are. From what we could tell, this is the first time a hardware wallet such as Metamask is used in a chat focused app. When you're ready to pay for an expense, simply use the app to submit a payment to another private account.
Using event focused chats - such as a trip to Canada or Bogota - helps you organize the many different expenses and activities that you do with the many different people in your life. Adding the ability to submit payments lowers the cost and friction of the usual web3 frustrations (you know what those are). To add, having a private account keeps your personal expenses..... personal. All the while, you can still be a web3 maxi and resent the UX a little less.
Zenmo is a Nextjs/React app that allows wallet logins using Web3Auth which allows WalletConnect, Metamask, and Torus. The user can verify they're a person using WorldCoin. When the user is logged in, an Aztec wallet is generated and an alias is generated with web3.storage using the Aztec public address. ENS is used for non-private mode. w3name is used to create a database to hold all the user data using a key-value pair system. Keys for a user are Groups (for chats) and Expenses. Then the user pays using Aztec (zk.money) or their own wallet. They can get notifications through Push Protocol; the contract is deployed using Swarm. A subgraph was created using The Graph and IPFS to keep track of the notifications.
However, there were many challenges to getting this to work.
-Aztec SDK required manual adjustments to the file folder structure which was troubleshooted IRL
-Therefore, the payment functionality was unable to be completed
-We didn't use Lens b/c the RPC would've had to be switched back and forth by the user which is not a good UX, as well as every interaction using a hardware wallet needed to be signed. We could've done an app-scoped Polygon wallet but it was too much work for the time left.
-We wanted to use Lens but it's only on Polygon and we couldn't find a good way to connect it to Aztec (which is only on Ethereum)
Video demo and presentation: https://youtu.be/U51ivn1B9cU
In an ideal world, this is what it would look like: https://bit.ly/3rISIEg
Presentation found here: https://bit.ly/3ecPmq1
Deployed app: https://zenmo-core.vercel.app/