Zuma uses Fully Homomorphic Encryption (FHE) on-chain to manage events with privacy, trust, and verifiable attendance. It ensures data stays encrypted while still enabling event creation, registration, and proof of participation securely.
Zuma is already deployed on the Sepolia testnet at address 0xa439BbabCb49EA18072262ce8bd79a1455361d48.
It uses Zama's FHEVM contracts for FHE encryption at solidity code level and also uses @zama-fhe/relayer-sdk
The FHEVM React Template is an ultra-minimal React project for building and running an FHEVM-enabled dApp.
It works alongside the fhevm-hardhat-template
and provides a simple development frontend for interacting with the Zuma.sol contract.
This template also illustrates how to run your FHEVM-dApp on both Sepolia as well as a local Hardhat Node (much faster).
- @zama-fhe/relayer-sdk: Fully Homomorphic Encryption for Ethereum Virtual Machine
- React: Modern UI framework for building interactive interfaces
- Next.js: Next-generation frontend build tool
- Tailwind: Utility-first CSS framework for rapid UI development
- You need to have Metamask browser extension installed on your browser.
Follow the step-by-step guide in the Hardhat + MetaMask documentation to set up your local devnet using Hardhat and MetaMask.
- Name: Hardhat
- RPC URL: http://127.0.0.1:8545
- Chain ID: 31337
- Currency symbol: ETH
- Clone this repository.
- From the repo root, run:
# - git clone "https://github.com/zama-ai/fhevm-hardhat-template.git" into <root>/packages
# - npm install
# - auto-depoy on hardhat node
node ./scripts/install.mjs- Clone this repository.
- From the repo root, execute the following:
cd ./packages
git clone "https://github.com/zama-ai/fhevm-hardhat-template.git"
cd ..
npm install- Setup your hardhat environment variables:
Follow the detailed instructions in the FHEVM documentation to setup MNEMONIC + INFURA_API_KEY Hardhat environment variables
- Start a local Hardhat node (new terminal):
cd packages/fhevm-hardhat-template
npx hardhat node --verbose
# Default RPC: http://127.0.0.1:8545 | chainId: 31337- Deploy
Zumato the local node:
# still in packages/fhevm-hardhat-template
npx hardhat deploy --network localhost- Deploy to Sepolia:
Follows instructions in the FHEVM documentation to setup your Hardhat project for Sepolia
# still in packages/fhevm-hardhat-template
npx hardhat deploy --network sepolia- Start a local Hardhat node (new terminal):
npx hardhat node --verbose- From the
<root>/packages/siterun
npm run dev:mock-
In your browser open
http://localhost:3000 -
Open Metamask connect to local Hardhat node i. Select Add network. ii. Select Add a network manually. iii. Enter your Hardhat Network RPC URL, http://127.0.0.1:8545/ (or http://localhost:8545). iv. Enter your Hardhat Network chain ID, 31337 (or 0x539 in hexadecimal format).
When using MetaMask as a wallet provider with a development node like Hardhat, you may encounter two common types of errors:
MetaMask tracks wallet nonces (the number of transactions sent from a wallet). However, if you restart your Hardhat node, the nonce is reset on the dev node, but MetaMask does not update its internal nonce tracking. This discrepancy causes a nonce mismatch error.
MetaMask caches the results of view function calls. If you restart your Hardhat node, MetaMask may return outdated cached data corresponding to a previous instance of the node, leading to incorrect results.
To fix the nonce mismatch error, simply clear the MetaMask cache:
- Open the MetaMask browser extension.
- Select the Hardhat network.
- Go to Settings > Advanced.
- Click the "Clear Activity Tab" red button to reset the nonce tracking.
The correct way to do this is also explained here.
To fix the view function result mismatch:
- Restart the entire browser. MetaMask stores its cache in the extension's memory, which cannot be cleared by simply clearing the browser cache or using MetaMask's built-in cache cleaning options.
By following these steps, you can ensure that MetaMask syncs correctly with your Hardhat node and avoid potential issues related to nonces and cached view function results.
-
<root>/packages/site/fhevm: This folder contains the essential hooks needed to interact with FHEVM-enabled smart contracts. It is meant to be easily copied and integrated into any FHEVM + React project. -
<root>/packages/site/hooks/useZumaEvents.tsx: A simple React custom hook that demonstrates how to use theuseZumaEventshook in a basic use case, serving as an example of integration.
<root>/packages/site/hooks/metamask: This folder includes hooks designed to manage the MetaMask Wallet provider. These hooks can be easily adapted or replaced to support other wallet providers, following the EIP-6963 standard,- Additionally, the project is designed to be flexible, allowing developers to easily replace
ethers.jswith a more React-friendly library of their choice, such asWagmi.
- Hardhat + MetaMask: Set up your local devnet step by step using Hardhat and MetaMask.
- FHEVM Documentation
- FHEVM Hardhat
- @zama-fhe/relayer-sdk Documentation
- Setting up MNEMONIC and INFURA_API_KEY
- React Documentation
- FHEVM Discord Community
- GitHub Issues
This project is licensed under the BSD-3-Clause-Clear License - see the LICENSE file for details.