written by Althea, Rachel, Vivek

Overview

In the final 2 weeks of Zuzalu, a PSE and 0xPARC collaborative effort consisting of Althea/Rachel/Vivek launched a set of stamps to store in the Zuzalu Passport that all Zuzalu residents and visitors were able to set up.

In short, these stamps served as private Zuzalu mementos, akin to POAPs**.** They primarily proved participation in different experiences at Zuzalu — attending town halls, hacking in a hackathon, cooking for the community dinner, etc. But unlike POAPs, these mementos were never on-chain and never left a user’s passport. Setting them up didn’t require a wallet or sending a transaction. And they were kept under the user’s control and no one (not even the passport server) could determine what set of stamps a user collected.

The stamps were generated by NFC chips that generated a unique signature on every tap, from a hardware locked private/public key pair. Each chip produced a different stamp, which was displayed on the user’s passport by extracting the chip’s public key from the signature. The stamp photo to display for each public key was maintained in a permissioned Airtable for deploying & operational convenience, but could easily be moved to a smart contract.

Then, if a Zuzalu participant wanted to use these stamps to do something else — claim an NFT, gain attendance to another event, or just standard bragging rights — they could generate a ZK proof of ownership of a valid signature from a chip, without revealing the plaintext signature.

Friends of Zuzu was 1 of 34 collectible stamps which residents could collect if they met Zuzu, who was rescued during Zuzalu and adopted by a Zuzaluan!

Friends of Zuzu was 1 of 34 collectible stamps which residents could collect if they met Zuzu, who was rescued during Zuzalu and adopted by a Zuzaluan!

Goals

The initial motivation and goals for this project were brainstormed by Rachel and Vivek in a FigJam brainstorm documented here. We determined that the project should help Zuzalu participants in the final two weeks of Zuzalu:

  1. Add meaningful stamps to personal passports
  2. Prove attendance or participation
  3. Own stamps and control when to share them

Notably, it was out of scope to generate ZK proofs over the stamps. Although it would’ve been possible with existing tools like spartan-ecdsa, we focused on the stamp collecting experience itself. In addition, we didn’t yet have applications or protocols that were ingesting these stamps to build other experiences.

The stamp for attending the 5/16 town hall, where we launched the stamps project.

The stamp for attending the 5/16 town hall, where we launched the stamps project.

The stamp in the Zuzalu passport, Zupass, where all residents and visitors stored their ticket and stamps.

The stamp in the Zuzalu passport, Zupass, where all residents and visitors stored their ticket and stamps.

Metrics

In the end, we allocated 34 different chips which were stored in plastic white cards the size of a credit card. Each card corresponded to a different memento, and had a (nail-polish) painted design on the front and a custom designed stamp when Zuzalu participants added a stamp to their phone. A read-only list of all the cards, their designs, and their owners can be found here.

By looking at the sizes of people’s encrypted stores, we can estimate the number of people that collected stamps and the number of total stamps collected. This is because the size of the encrypted data matches the size of the decrypted data (with 16 bytes of extra data for an authentication tag) with the algorithm we used, XChaCha20-Poly1305.

A big thank you to Ivan Chub from 0xPARC for helping with collecting these metrics. He is the lead developer of Zupass and helped direct us to a number of relevant code sections.

There are some edge cases when converting size of encrypted store into number of stamps, so we opted for a more conservative computation of metrics. Thus these are likely underestimates, but still give a good sense of how people interacted with the project: