Introducing Sealcaster — anonymous casting on Farcaster powered by ZK
Hi Farcasters! So you landed on sealcaster.xyz and decided to dive deeper into what's happening. I'm one of the leading developers of the SealCred ZK protocol that allows Ethereum users to detach their asset ownership from their main identity anonymously. Like you can create an anonymous ZK badge attesting to the fact that you own a Farcaster account!
Wait, what's that "badge" I'm talking about?
No math
Phew! I'm glad I don't have to explain prime fields and other things to you. Vitalik did it better anyway. So the badges are literally special soulbound zkNFTs derived from your original assets.
Wait, what's "soulbound"? What's "zkNFTs"? Are you actively trying to confuse me?
Not at all
Souldbound means that you can't transfer this NFT after you mint it. But Vitalik explained it better anyway. Now zkNFTs (in fact, the derivative zkNFTs we're using here) are just like your usual NFTs but derived from the original NFTs without any link to the original owner.
Sure, here's an example
Let's say you own a BAYC and want to get that sweet, sweet new drop that anon on the internet told you about. So you open the website, and woah, it asks you for the signature — I mean, it makes sense, the drop is exclusive for the BAYC owners for now, and you have to prove that you own one. To be safe, though, you're not going to tweet about it just yet. What if it's a rug pull? You hit "sure, go ahead, sign it."
Wait, where did all your apes go? But how could you prevent this from happening?
You could have used a derivative soulbound zkNFT. Seth probably couldn't — because we haven't launched back then yet — but you indeed can! And you can use Sealcaster to get a taste of this sweet, sweet zkNFT world today!
So what you can do with SealCred (and what Sealcaster does behind the scenes) is to create a Zero-Knowledge proof ("ZKP" for short) of the fact that you indeed own a BAYC — and then use this ZKP to mint a BAYC-d to another Ethereum wallet (-d
is the suffix we use for the derivatives to differentiate them from the original assets). Afterwards, you would sign a message with your separate account instead of using the main account.
Whoever does the airdrop can now safely drop you their scam coins to an Ethereum address that is in no way associated with your primary address (that owns a BAYC) but is still verified to belong to a BAYC owner! And the sweetest part of this deal? This other address can be a throwaway one that just owns this one soulbound zkNFT called BAYC-d
, which can't be transferred (stolen)!
🌈 The sorcery 🌈
First of all, I have to point out: all of our code is open source. And I mean it. Every. Single. Line. Of. It. It is also heavily scrutinized by the community — we feel like every step we take is happening under 🔎 with whitehat 🕵️ investigating. We are always aware of the drawback of our flexible, ever-changing approach, as evident from our previous articles on the topic:
- Applied ZK or how we built a ZK product and why it took us 18 repositories
- Applied ZK part 2 or how we improved the proof generation time from 46 hours to 10 seconds
Thus far, I'm confident that our privacy tech is sufficient to successfully hide you from anyone. The only visible drawback at the moment is the fact that we could potentially generate fake zkNFTs. Obviously, this would crash our reputation. However, we're addressing this in the new version of the protocol very soon — and we won't be able to even pose as Cryptopunk holders anymore 😭
Here's what's going on when you use Sealcaster:
- You click "Create Burner Wallet"
- We ask you to connect an Ethereum address you've connected to a Farcaster account
- Your browser asks the attestor to verify the fact that this Ethereum address is indeed connected to a Farcaster account
- We ask you for a signature of type
0xbf...08eE for Sealcaster
that can only be used for Sealcaster, nowhere else on the web - Your browser creates a burner wallet and stores it securely in the local encrypted storage where only the Sealcaster website has access to
- Your browser generates a ZKP for the fact that you own the Ethereum address connected to a Farcaster account; the public part of this ZKP visible to anyone only contains the fact that you own an Ethereum account connected to a Farcaster account; this ZKP does not contain the username or the Ethereum address!
- Your browser sends a
mint
call to our Farcaster zkNFT smart contract containing the ZKP from #6 — which is the key to using this method — from the burner wallet that got generated in #5 (you pay no gas fees because we subsidize them securely with OpenGSN) - 💥! You have a burner wallet with a
FARCASTER-d
zkNFT! Feel free to save the private key in case you need it in the future (and feel free to layer even more cool zkNFTs on this burner wallet at SealCred!) - You type in your anonymous cast, hit the "Cast" button
- Your browser sends a
savePost
call to ourSCPostStorage
smart contract from the burner wallet generated in #5 - 💥! Your post gets on the blockchain, and everyone can view it!
- Our special server holding the private key from the shared @sealcaster account on Farcaster listens to the smart contract for the new posts and casts one when it appears on the chain!
You might notice that most of the stuff above happened semi-automatically. No human is involved in the math, hehe. You literally press a button, connect an account, sign a message, type the cast, hit the "Cast" button — and that's it!
Not sure if it can get any simpler.
One more thing
But I haven't even told you the best part of zkNFTs yet. No one knows who created which zkNFT!
This means a lot of things beyond simply casting something anonymously to a shared account. This means that anybody can build anything on top of these zkNFTs! These zkNFTs are just ERC721 tokens, the vanilla ones that everybody knows how to work with!
Imagine the possibilities. Voting? Airdrops? Endorsements? FREAKING GLASSDOOR WITH VERIFIED WORK EMAILS???
If only someone could mint you a zkNFT for owning that @apple.com email for the last decade working for Apple. Oh, wait. WE CAN.
But I'm getting ahead of myself here. Stay tuned for the upcoming posts and products we're releasing really soon, which will blow you away. As for now?
Also, subscribe so that you don't miss the very next blog post on technical deep dive into how our ZK circuits and smart contracts work (with code examples!).