Pools - Not quite NFTs

0. Preamble

Before I get into this post, I want to nip a few things in the bud. I’m aware that there have been a few projects so far that supposedly created “NFTs on Zcash,” and that they were clearly grifts. I will proceed to explain what I created, how, and why, and let you decide if i’m here to pull a rug or not. I’m not here to ask for a grant, or some sort of favor; just for you to consider what I’m working on, and maybe provide some constructive feedback.

I believe that time is the ultimate currency, so thanks in advance if you have some to spare for this. I hope that at the very least, the generative art I’ve created puts a smile on your face.

I already won the ZecHub hackathon this summer with ZEC-OS. Very humbling, and unexpected. I continue to develop ZEC-OS with the hope that other projects will integrate into it; it’s designed to host apps within its interface, as well as have standalone versions. Good examples of this are the Block Explorer, or Hindsight. I’ve also been talking with Zechariah who got 2nd place in the hackathon, and I’m stoked to be moving forward with integrating Zcash Names; my first collab for the OS, and I think a very crucial one for smoothing UX.

Before you read my word dump, you can actually try a demo of Pools yourself; it’s running on testnet which means going to “cut a ring” will only work for testnet data; there is no mainnet activation at this time. You can also just check out the art, and interact with it a bit (waterworks button, bottom right)

1. Why I’m posting this here

I’ve spent over five years working with NFTs on EVMs, and I don’t think the interesting Zcash version is “NFTs, except you can pay with ZEC.” What happens when the collectible itself is designed around privacy however, now that is very appealing to me.

Pools is my first attempt at exploring that, by creating a zk-generative that reflects my personal interests, including privacy tooling.

I’m especially interested in ideas on the registry → ZSA migration model, private ownership receipts, and whether there are better existing Zcash-native ways to prove provenance without leaking holder identity. I’m a solo dev and every second of my free time has been going to this stuff, so I am aware that I may be missing some alternative options along the way.

Separately, I’m not a marketing guy; I’m a creative dev that just likes to do stuff, and don’t know how else to reach more folks in the community. There aren’t any art-specific forum categories or Discord channels for Zcash, and it feels like I may be disrupting larger, more important discussions about the network and its ecosystem. But I think art is incredibly important, especially for attracting a different user class (for better or worse). Art needs an audience; I’m hoping that both the Zcash community, and some new folks coming over from the EVM can be a part of that.

2. Why I’m working on this project

Since 2021 I’ve contributed to, created, and helped bring to life a few successful NFT projects on Ethereum (Palette by CFW, GLHF to name a couple). I’ve also put out a huge amount of experiments that have flopped in entirety (too many to mention, but happy to share). Generally, my generative work has been the most successful. Pools is my attempt to do something that actually feels native to Zcash rather than copying the EVM NFT model and adding shielded payments as an afterthought.

The project also comes from a pretty personal place.

I spent some time back home in Turkey recently, mostly unplugged, swimming, diving, reading, remembering what a vacation is, etc. We’re pregnant, this was our last trip before baby pops out. My son’s name means “sea,” and I kept finding myself thinking about the nature of water, privacy, and the kind of digital world he’ll grow up in.. I hope he can learn to find the calm and inner depth the sea allows me when I am submerged in it, without living a life that restricts his freedoms.

Art is how I process a lot of that stuff, and it is also part of how I support myself. So I wanted this one to be something I actually care about making, not just another gimmicky token mechanic, or jpeg zoo addition.

3. The basic idea

Every Pool is generated from data that already exists on Zcash:

  • a block
  • a transaction
  • or an address

The output is deterministic. Same source, same Pool.

There is no image being inscribed into blockspace and no NFT metadata pointing to IPFS. The existing chain data is the source material and the renderer turns it into the artwork.

The edition is planned at 4,096, with each eligible source cut only once.

Visually, the project pulls from water, Monet, Impressionism, ASCII/ANSI/BBS art and the idea that an image can emerge from lots of tiny markers rather than being stored as one complete object. Glyph based art to be specific.

4. Why Zcash changes the model

On the technical side, the part I’m most interested in is private ownership.

On EVM chains, owning an NFT usually means publicly attaching that NFT to a wallet forever. That wallet can become a profile of somebody’s purchases, interests and wealth.

Pools is designed the other way around.

A purchase uses a ZIP-321 request with a random one-time code in the memo. The backend matches the payment from that code rather than from the sending wallet. After confirmation, the Pool enters the public registry and an ownership receipt is sent privately through an encrypted memo.

The Pool can be public. The owner does not have to be.

The system is also designed to minimize what it retains. Delivery addresses can be reduced to keyed hashes for limit enforcement and dropped after the receipt is sent. Accountless holders can use a one-time token, with only its hash stored server-side.

5. No whitelist

I’m intentionally avoiding a traditional WL/allowlist. This is very, very important to me.

Having people connect a Twitter account, Discord identity and wallet address to qualify for a privacy-oriented collectible feels like starting from the wrong premise. It also absolutely negates the core principles of privacy, unlinkability, and user sovereignty that Zcash is built around.

I’d rather build mechanisms that reward actual interest or useful behavior without making collectors identify themselves first. People can choose to use a transparent address or publicly associate themselves with a Pool; that is their prerogative and also an excellent feature of Zcash. I want the system to respect the agency of those interested in supporting this project.

6. Ownership before ZSAs

The main caveat is straightforward: Zcash does not currently have native assets, so Pools cannot pretend to be fully protocol-native NFTs today.

For now, ownership lives in a registry, but I wanted to avoid pure reliance on my own infrastructure. Every Pool is tied back to two independent pieces of on-chain evidence:

  1. The original Zcash source it was generated from, which proves what the Pool is, and allows the artwork to be indepdentendly re-derived.
  2. The payment & receipt trail that is associated with its acquisition, which provides an independent record of how that Pool entered its ownership history.

The full registry is then periodically anchored back to Zcash with a Merkle root - essentially a fingerprint of the registry at that point in time. If old records are later altered, removed, rewritten, etc that fingerprint will no longer match.

Together, the source proves what the Pool is, the payment/receipt trail proves how it entered the ownership record, and the Merkle anchor proves the registry hasn’t been quietly rewritten afterward. That means the provenance can be checked independently; the registry can be reconstructed without having to trust the live app or my database forever.

Lastly, each Pool can also have its future ZSA identifier calculated and published ahead of time, giving the project a defined migration path if and when native assets arrive.

(Beyond this point, I would begin considering putting my custom rendering engine on-chain as well, but that is a completely different challenge for a future me.)

7. Throughput / wallet behavior

The user-facing flow is separated from the shielded receipt queue.

Once a payment confirms, the Pool can be registered immediately. A wallet worker handles receipt transactions separately and can bundle multiple receipts into one shielded transaction. That keeps ZK proving out of the critical purchase path as much as possible.

The system also fails closed:

  • if the wallet is behind the chain, it stops calling payments confirmed
  • if the receipt queue backs up, new purchases can pause while open invoices keep being watched
  • refunds wait for extra confirmations
  • if two people pay for the same Pool within a tight enough window of time, the first confirmed payment gets it and the other is automatically refunded

On this point, my goal is absolutely not to pretend like Zcash has Ethereum-style block timing (though as a dev I’m looking forward to 25s with NU7 XD). My intention is to design around how Zcash actually behaves.

8. Art is cool

Doing stuff by the book has never been my thing. If I see a system architecture that does cool stuff, I like to see what else it’s capable of. I didn’t care much for Ordinals; not a fan of just jamming tiny amounts of data into blockspace and calling it art. However, I loved how subversive it was and how much it exposed that tech isn’t always used the way it was designed to be used.

I like making things do stuff they weren’t designed to do; this is one of my core tenets when it comes to my creative practice, whether it’s code driven art, or real world performance art. I don’t want to break things, I just want to show everybody that you can like, just do stuff. It’s awesome.

Here’s my post on social media about this project: orb on X: "zk-generative art on Zcash https://t.co/JmMV5YezSg" / X

If you got this far, holy crap, and thank you for giving it your time - that’s all I can truly ask for.

P.S. I know I didn’t touch on marketplace mechanics, but I plan on laying that out in a second twitter article, and can share more here if folks ask. I have, in fact, built a marketplace app for “Rings,” and it has multiple mechanisms in place to ensure anonymity between sellers and buyers. The beta app for this is also available on ZEC-OS.

3 Likes

So… you copy pasted Zcash Names’ architecture, a project you’re already working on/with?

Innovation, truly.

There’s definitely overlap because I’m using the same Zcash primitives that are available today. We have ZIP-321, shielded payments, memos, and an off-chain registry where native assets don’t yet exist.

I don’t think it’s strange for multiple Zcash projects to arrive at similar architecture when they’re solving similar problems with the same underlying tech.

I’m not claiming to have invented shielded memo receipts. I’m using the tools that exist in the way that makes the most sense for this project, and I haven’t copypasta’d anything.

I’m a proponent of sarcasm, so thanks for your invaluable input.

Dude, my main concern being that your statement that NFTs being attached to wallets being somehow detrimental is…

The entire point of NFTs is ownership linked to identity, isn’t it? Otherwise its just fungible money or an entry in a ledger.

Not to mention that your ledger system exposes the full and complete history of an NFT’s ownership…

How exactly does that work? Shielded Zcash has no primitives at all, since it uses a fixed circuit and the network cannot process anything not exactly delineated in that circuit.

Love this!

Now we are talking! Love the direction this is taking.

Love that you have a path for future ZSA’s, love love love.

Thumbs up from me, and good luck! :heart_suit: :shield: :zebra:

2 Likes

Not at all, it can be moar. If you already have a bias agasint NFT’s this convo wont go anywhere :grin:

Not at all, I am personally writing a paper on NFTs right now. But like, I always thought the entire point of an NFT is that it was owned by Elon Musk or something right? And it is provably only owned by you at a given moment?

Ownership doesn’t require public identity - respectfully,I think that’s a misconception on your end.

The registry can expose a Pool’s full provenance while keeping the holder private, because ownership is proven through the private receipt/token rather than by publishing a wallet address.

The HMAC and one-time holder token aren’t new Zcash primitives or anything the consensus circuit needs to understand. They’re application-layer controls; Zcash is only being used for the shielded payment, memo-based receipt, and on-chain registry anchoring.

ZIP-321 already supports shielded payment requests with memo data, to state the obvious here.

It probably is a misconception, sorry. Not too well versed in NFTs being a cryptographer primarily, sorry.

1 Like

Elon owns everything though :joy:, me waves to grok, but my point is its not always about ownership. Art for arts sake is a bit of madness.

2 Likes

Thank you for the kind words. Your insight and suggestions along the way have been very helpful!

1 Like