The project allows any EVM address to send a completely decentralized message to any other EVM address. The messages are end-to-end encrypted, even the encryption keys are private. Only the public key and metadata of messages are shown to users. Given that now anyone can send a message to any other address, the stack introduces anti-spam mechanisms defacto. A message from a non-whitelisted address goes to spam directly. They can add credits (1 credit = 1USDC) to their messages, in which case the message ends up in the "Collect" Label where the receiver can collect the credits and whitelist the address to the inbox to still mark it as spam.

HighFy Me showcase

How it's made

The project relies on an experimental feature of metamask to retrieve the public key and decrypt using private key to make it end-to-end encrypted. On account creation, a new set of PGP keys are created for the wallet address. These keys are encrypted with the public key of the wallet. Now the encrypted PGP keys and an unencrypted version of the PGP public key is stored on IPFS. The last part of account creation emits an event from polygon chain with the wallet address and IPFS CID of the encrypted keys and unencrypted public key. Only the wallet owner can decrypt their PGP keys using the metamask decrypt function. But anyone can encrypt using the PGP public key exposed. The reason to use PGP keys and not metamask directly is to improve user experience (not signing message every time), make it cross-wallet, and allow easy change in address while maintaining all your emails in the future. Now, let's come to sending the message. When a user wants to send a message, the public key of the receiver is fetched from IPFS, and two copies of the message are encrypted, one with the receiver's PGP public key and one with the sender's PGP public key and uploaded to IPFS. At the end, a sendmail event is triggered with from, to and mailCID parameters. If credits were sent to by pass spam filter, then that is also captured. The state for all the entities (mails sent or received, the label for each mail as well as the whitlist/subsctiption relationships and the credits for each user) are available as a snapshot using the graph indexer.