Skip to content
Gorka Hernandez Villalon, iOS developer and AI automation specialistGorka Hernandez
Back to projects
FeaturedOpen SourceBlockchain

FadeChain

Winner of a UPF blockchain hackathon: private voting with zero-knowledge proofs.

FadeChain was my team's project in a blockchain hackathon held at Universitat Pompeu Fabra's Poblenou campus, inside the Cryptography and Security course. The challenge was to create an innovative proposal on the Ethereum Sepolia testnet. We built a voting system that preserves privacy with zero-knowledge proofs: voters prove eligibility without revealing identity, the smart contract prevents double voting with nullifier hashes, and results remain auditable on-chain. The architecture combines a Solidity contract, an incremental Merkle tree, a reference Circom circuit, a demo frontend and a Node.js relayer to avoid linking wallet and vote. The proposal also includes linear time weighting, giving more weight to early votes to reduce bandwagon behavior.

Problem, stack and result

Problem solved

On-chain voting system on Ethereum Sepolia with Groth16 zk-SNARKs, Merkle trees, a privacy relayer and time-weighted voting. Winning project at the UPF blockchain hackathon.

Technologies used

Core stack: Solidity, Ethereum Sepolia, Circom. Project technologies: Solidity, Ethereum Sepolia, Circom, zk-SNARKs, Groth16, Merkle Trees, Relayer, Smart Contracts, Zero-Knowledge.

What I did

My role was FadeChain team · Blockchain & ZK. I worked on the technical implementation, product approach and enough documentation for the result to be explained and evolved.

Result or learning

Winning project at a UPF blockchain hackathon. Private on-chain voting with Groth16 zero-knowledge proofs.

Highlights

  • Winning project at a UPF blockchain hackathon.
  • Private on-chain voting with Groth16 zero-knowledge proofs.
  • Voter registry based on an incremental Merkle tree.
  • Double-vote prevention with nullifier hashes.
  • Node.js relayer to separate wallet address and vote in the private flow.
  • Linear time-weighted voting designed to encourage early participation.