Zemo: Shielded Messaging🛡️💬

Description of Problem or Opportunity

Zcash’s strong privacy values make it the ideal blockchain to power encrypted messaging applications of the future. However, no mobile applications exist for private messaging within the Zcash ecosystem.

Although NightHawk Wallet, ZECwallet and Unstoppable can be used to send/receive messages, these apps weren’t designed with messaging in mind.

Permissionless private messaging is a disruptive idea that could increase shielded adoption and expand the utility of Zcash. We’ve teased the idea on Twitter and many people have expressed interest.

Proposed Solution

Zemo is a messaging app powered by the Zcash blockchain. It’s the first Zcash mobile app created specifically for private messaging. It’s permissionless, open-source, decentralized, end-to-end encrypted, and fully portable – your keys, your messages.

There are two primary use-cases for Zemo:

Shielded Messaging: Leading messaging platforms own and store user messages in centralized servers. Zemo users own their messages and store them on the Zcash blockchain.

Monetizable Inbox: Those with large audiences can share their z-addr or Zemo handle publicly and earn Zcash via inbound messages.

Solution Format

We’ll release an Android and iOS app that include: threaded conversations, user profiles, new message indicators, payments, fast syncing, and intuitive UI. We’ll also create a landing page at zemo.app

Technical approach

We’ll be expanding the librustzcash server to include messaging capabilities. Our Rust server will pull in tx data from litewalletd and store it client-side in a SQLite database. Our React Native application will connect to the SQLite database via websockets to display messages in real-time.

We’ll use code from zecwallet-lite and other repos for the server/app where needed. We may use blazesync to provide fast syncing. We’re also exploring ZIP304.

The UI/UX design of Zemo will happen in-house. We’ll share early Figma prototypes with the community for feedback.

To ensure there is interoperability between Zcash messaging apps, we’ll coordinate with the community and ECC to ensure our approach is suitable for other messaging applications to build upon.

How big of a problem would it be to not solve this problem?

Messaging is an important area to explore to increase shielded adoption. It takes advantage of the unique properties of the Zcash blockchain while offering more utility to the community.

Execution risks

We may need to make UX sacrifices in the initial release. For example: push notifications. Getting the mobile app to rescan the blockchain while the app is inactive is challenging, especially on iOS.

Unintended Consequences

If messaging turns out to be a popular use-case for Zcash, we run the risk of flooding the blockchain with micropayments. If layer 1 does not scale well enough, micropayment transactions on Zcash may be priced out due to rising fees.

Evaluation plan

Upon completion, a user can send/receive private messages, view threaded conversations, send payments, and use Zemo as their monetizable inbox.

Schedule and Milestones

Our team is available to start working on Zemo on Sept 1st. We estimate v1 of the project will take 6 months to complete. Please see milestones for more details.

Budget

We’ve estimated Zemo will take 6 months to design, develop, test and deploy. The cost to build v1 of Zemo is $294,000. The funds will primarily be used to pay the salaries of our 4 senior team members. We’ve structured our milestones as monthly payouts to ensure each team member can cover their living expenses.

Monthly cost

  • Staff: $48,000 x 6 months = $288,000
  • Misc: $1,000 x 6 months = $6,000 (services, domains, unforeseen expenses, etc.)

Each team member will be working full-time (est. 160hrs per month * 4 team member = 640hrs per month). $48,000 / 640hrs = $75 hr.

Applicant background

Our senior team has 20 years experience shipping Bitcoin, Zcash, and other crypto applications. All 4 of us have worked professionally on blockchain projects funded by world-class investors. We specialize in creating decentralized mobile applications that are intuitive and easy to use.

8 Likes

Hi, the project sounds interesting. Will it be open-source? Being able to integrate Zemo into other Zcash apps could be really cool. I’m interested in the idea of linking up ZECpages and Zemo, provided that an API/SDK/code are available. An open-source building block ecosystem of apps would be really cool and would help attract developers to Zcash.

Also, I have quite a bit of experience with React Native and building cross-platform React apps: I‘ve developed an open-source cross-platform React.js UI framework in the lines of Material UI, built with Airbnb’s react-primitives: GitHub - elemental-design/elemental-react: Build UI components once, render to any platform: web, React Native and Sketch. which could be helpful for implementing desktop support with react-native-macos/windows or Electron (or web with wasm). If it sounds interesting, I‘d be happy to help with integrating it and sharing UI components.

2 Likes

Yes, 100% open-source.

I like where your head is at. Bringing multiple messaging/socials apps into a single UI would be very interesting.

Desktop support won’t be included in the initial release. Although it would be super helpful to have a desktop app at some point.

2 Likes

I’m for free-speech and privacy but I really don’t want to have messages on the blockchain. It’s one thing to be able to have any conversation, it’s another to force everyone to get your words.
In my opinion, it doesn’t benefit zcash and in the long run even hurt it by bloating the blockchain forever.

In my opinion, it doesn’t benefit zcash and in the long run even hurt it by bloating the blockchain forever.

This is a fair concern. We mentioned it as the biggest long-term risk in our proposal. If Zcash can’t scale and keep fees low, then private messaging on-chain is doomed.

With that said, the ECC seems to think Zcash has a shot to scale well with zkps. Zooko has stated that scaling is one of their top priorities.

I believe there will be technical breakthroughs discovered which will allow the blockchain to be broken up into smaller provable clusters. Meaning blockchain bloating would be a non-issue because each node would not be required to store the entire chain.

Many assumptions here. However, if we believe Zcash has a good chance to reliably scale and power encrypted messaging apps into the future, then I believe we should start working on the messaging apps now. User adoption will take time.

7 Likes

Right, but I don’t think you are willing to wait until this is ready, are you? If you start now with a solution that bloats the blockchain, there is no going back - no delete.

Why wait? It will take us 6 months to build the app. Meaningful user adoption will take even longer. I don’t see blockchain bloating really being a thing anytime soon. The blocks are still mostly empty.

3 Likes

The time estimate and resources required to build the app is another issue I have with. In my opinion, ~300k usd is absolutely too much for an app that has not demonstrated its value yet.

Putting it aside, I don’t think that having empty space now is a good reason for filling it with “anything” because future users will have to download and store it.

Same thing happened with bitcoin. Early blocks contained misc messages. Bible verses, images, etc. Now everyone has to get that.

3 Likes

I am in general positive towards the idea of Zemo but not for this grant. I think the amount can only be justified if there is a proof of concept released first and the community really likes it. I would also worry with grants that justify their application with potentials rather than what problems that it can solve today that other projects cannot.

In relation to private messaging, what can Zemo do that status.im cannot?

4 Likes

It could be worth looking into Signal Protocol or a Matrix.org implementation (i.e. bridge), as a sort of fallback measure incase of spike usage, and to facilitate sending free messages. Allowing Matrix.org users to top up a Zcash wallet in Zemo, then use a Matrix client to send messages could be an interesting application.

2 Likes
  • They can skip it if they don’t want it, checkpoints or optimistic fast sync etc
  • It’s not enough that its really stopping folks from downloading it in Bitcoins case
  • bloat is a forcing function to deploy scaling. I don’t think there’s been a blockchain that’s failed to scale because of user demand unless developers really oppose it, like even Bitcoin has increased capacity despite devs opposing bloat. Zcash will have it easier given the preparedness to embrace snarks and tackle scaling that devs have already been working on
2 Likes

Fun fact: the idea for Nighthawk Wallet initially started as a Private Memo app like Secret 'Secret' App is Silicon Valley's Latest Obsession | Time named Zecret :smiley: we still have a private repo for it. The team realized that the fast syncing was just not there in early 2020, so we decided to start as a native wallet app to get the building blocks right and then branch out in to more features. It’s wild that we have multiple wallets now VS a couple years back where there was just no way to get Zcash to work on mobile except ZecWallet Android tunnel.

I am in full support of Ziga and team to launch their vision of a social media app for Zcash. My only ask would be for the Zcash wallet developers to lean in to collaborate:

  1. with the Zemo messaging protocol, so Zcash wallets Nighthawk/ZecWallet/etc can format the UI and allow easy reply/tips/likes from within their wallets.
  2. at the librustzcash SDK level to build optimal syncing/confirmations/notifications standard, so all the wallets in Zcash ecosystem benefit from each of the funded project’s contributions.

This brings up an important point, Zcash still has a small developer community, and we cannot afford to work in silos and compete within the small user base. We need to collaborate to improve the overall technical capabilities & quality of our projects and branch out at the user base level to attract new audience to Zcash.

5 Likes

Could you clarify how one can skip downloading the entire blockchain if they are running a full node? It seems to me that these notes will be indistinguishable from others and therefore will have to be tracked.

It’s a matter of opinion for sure. In the case of Bitcoin, the debate around block size was pretty intense with some sides eventually creating forks. And on Ethereum, the success of Defi pushed the fees quite high. I hope that zcash will be indeed better prepared.

What would be a realistic time frame for the scaling improvements you mentioned to be production ready?

You can download a state snapshot at some checkpoint. The Z side of zcash this is more straightforward today with the commitment tree committed in each block, something extra would be needed for the UTXO set on the T side to support this. Then you can fully validate any transactions coming after that. Concurrently you could download and validate the history if you wanted to so even the checkpoint you’d validate yourself. Basically it would be a partial full node that gradually becomes a full full node. These are all syncing modes Ethereum supports and Zcash could too. And Snark rollup kinda future things are entirely separate but would make it even easier… and those would come about faster as demand increases to spur them

3 Likes

Status is great. However, it’s primarily intended for the Ethereum community. If we want to grow and expand the Zcash community, we need tools of our own that have similar or better capabilities.

2 Likes

Interesting. I did not know this. Very cool.

Great points. Our team would love to collaborate with the ecosystem. I’m not super familiar with the process of getting code merged into librustzcash. What’s the process like for that currently?

1 Like

Makes sense. I don’t think developers in the Zcash ecosystem should hesitate to deploy apps that may spike network usage. The increased adoption will drive more attention towards scaling.

4 Likes

Zcash project maintains the repository with open issues and PRs GitHub - zcash/librustzcash: Rust-language assets for Zcash
You can also ping the Light Client Working Group in Discord and even join the LCWG bi-weekly calls to discuss ideas & contributions. The current batch of attendees are primarily native app developers but we are open to Rust/SDK contributors who qualify to join us. GitHub - zcash/lcwg: Light Client Working Group project management repository

2 Likes

Awesome, thanks!

2 Likes

I understand but this will introduce protocol changes. I thought you meant without.

In the case of ethereum, the state has a defined form (Patricia merkle tree) and its root is part of the block header.
Currently, there is no reason to trust a snapshot in zcash. Am I right?