CPSC 3640 / CPSC 5400

Decentralized Payments, Contracts, and Finance for Humans and AI

Hands-On Component: Playing with Privacy Pools

Lecture 10 · Monday, October 5, 2026

A privacy pool lets you deposit assets and later withdraw them to another address without revealing which deposit you are spending. Privacy Pools also uses an association set: a set of approved deposits from which withdrawals can be proven to originate.

For this exercise, we host our own Privacy Pools system on Sepolia, with our own association set provider (ASP) that approves all students’ deposits. We also run our own relayer, which submits withdrawal transactions on your behalf so that you do not need to submit them from your deposit address.

To demonstrate that ERC-20 tokens can be mixed too, we created a new ERC-20 token called BULLDOGS. You can get BULLDOGS from our faucet below. Your task is to mix 5,000 BULLDOGS.

Use your course MetaMask wallet on Sepolia. You need a little Sepolia ETH to approve and deposit BULLDOGS. Our relayer pays the gas fee for withdrawals.

1. Get BULLDOGS

Open the BULLDOGS token app, connect MetaMask, and claim your tokens. Each address can claim 10,000 BULLDOGS once. If you need Sepolia ETH, follow the faucet instructions from Lecture 7.

2. Mix 5,000 BULLDOGS

Open the course Privacy Pools app and follow its prompts to set up your pool account. Choose BULLDOGS, deposit 5,000 BULLDOGS, and withdraw them to another address. Save any recovery information the app provides and keep it private.

Inspect the deposit and withdrawal transactions in the explorer.

3. Submit on Canvas

Submit the following on Canvas:

  • The transaction ID of your 5,000 BULLDOGS deposit.
  • The transaction ID of your withdrawal to another address.
  • Nobody can verify the link between the withdrawal and deposit from the public transactions alone (which is exactly the point). What information can you share with the grader so they can check that this withdrawal indeed spends this deposit? Refer to the variables defined on slide 29.

4. Optional: How are variable denominations supported?

If you are interested, read Section IV.A, “Supporting arbitrary denominations,” of Blockchain Privacy and Regulatory Compliance: Towards a Practical Equilibrium by Buterin et al. (2023). How can a user withdraw only part of a deposit while keeping the deposit–withdrawal link private?

The basic idea is to attach hidden amounts to coins.