General
What is Fully Homomorphic Encryption (FHE)?
What is Fully Homomorphic Encryption (FHE)?
Enc(5) and Enc(3), you can compute Enc(5) + Enc(3) = Enc(8) without ever knowing that the numbers are 5 and 3.What is fhEVM?
What is fhEVM?
Who should take this bootcamp?
Who should take this bootcamp?
- Solidity developers who want to build confidential smart contracts
- Blockchain engineers interested in privacy-preserving computation
- Smart contract auditors who need to understand FHE security patterns
- Researchers exploring on-chain privacy solutions
How long does the bootcamp take?
How long does the bootcamp take?
- Intensive: 7 days at ~9 hours/day
- Part-Time: 6 weeks at ~11 hours/week
- Self-Paced: 8-14 weeks at your own pace
Do I get a certificate?
Do I get a certificate?
Technical
What's the difference between the old TFHE library and the new FHE library?
What's the difference between the old TFHE library and the new FHE library?
| Old API | New API |
|---|---|
TFHE library | FHE library |
einput | externalEuintXX |
TFHE.asEuint32(einput, proof) | FHE.fromExternal(externalEuint32, proof) |
TFHE.randomEuint32() | FHE.randEuint32() |
| No base config | Inherit ZamaEthereumConfig |
Why can't I use if/else on encrypted values?
Why can't I use if/else on encrypted values?
if (encryptedBalance > 100) would require decrypting the value to evaluate the condition, which defeats the purpose of encryption.Solution: Use FHE.select(condition, valueIfTrue, valueIfFalse) instead.Why do I need to call FHE.allowThis() after every operation?
Why do I need to call FHE.allowThis() after every operation?
FHE.allowThis(), the contract will not have permission to read its own storage in subsequent transactions.Example:FHE.allowThis() is the #1 bug in FHE contracts.What happens on overflow?
What happens on overflow?
How do I decrypt encrypted values?
How do I decrypt encrypted values?
Can I use FHE for all my contract logic?
Can I use FHE for all my contract logic?
- Encrypt only the data that requires confidentiality (balances, votes, bids)
- Keep metadata plaintext (timestamps, addresses, counts)
- Use plaintext operands where possible:
FHE.add(encrypted, plaintext)is cheaper thanFHE.add(encrypted, encrypted)
How do I test FHE contracts?
How do I test FHE contracts?
Bootcamp
What programming languages do I need to know?
What programming languages do I need to know?
- Solidity (intermediate level) — required
- TypeScript/JavaScript (for tests and frontend) — recommended
- React (for Module 10: Frontend Integration) — helpful but not required
What tools do I need installed?
What tools do I need installed?
- Node.js 20+
- npm 10+ or pnpm 9+
- Git 2.40+
- A code editor (VS Code recommended)
- MetaMask or another Web3 wallet (for frontend modules)
Can I take the bootcamp at my own pace?
Can I take the bootcamp at my own pace?
Are there live sessions or is it self-study?
Are there live sessions or is it self-study?
- Instructor-led sessions
- Weekly Q&A and code reviews
- Peer collaboration
- Fixed schedule (4-week or 1.5-week intensive)
- All materials available online
- Self-paced progression
- Community support via Zama forums
- No live sessions
How are assignments graded?
How are assignments graded?
- Contract compiles
- All required features work
- Tests pass
- Edge cases handled
- Clean imports
- Naming conventions
- NatSpec comments
- Code organization
- ACL management
- No information leakage
- Input validation
What is the capstone project?
What is the capstone project?
- Encrypted governance token (euint64 balances)
- Encrypted voting (yesVotes, noVotes)
- Private treasury management
- Proposal creation and execution
- Complete test suite (20+ tests)
- Documentation (README, security model)
Can I get help if I'm stuck?
Can I get help if I'm stuck?
- Weekly office hours with instructors
- Code review on all submissions
- 1-on-1 tutoring for struggling students
- Zama community forums (community.zama.ai)
- GitHub discussions for curriculum questions
- Detailed solution files for all exercises
Advanced
What's the difference between FHE and Zero-Knowledge Proofs?
What's the difference between FHE and Zero-Knowledge Proofs?
- Computes on encrypted data without decrypting it
- Result is also encrypted
- Use case: Confidential computation (encrypted balances, votes, bids)
- Proves a statement is true without revealing why
- Does not perform computation on encrypted data
- Use case: Verification without revelation (prove you have funds without showing balance)
What's the difference between FHE and Trusted Execution Environments (TEEs)?
What's the difference between FHE and Trusted Execution Environments (TEEs)?
- Mathematical privacy guarantees
- No hardware trust assumptions
- Works on public blockchains
- Higher computational cost
- Believed to be quantum-resistant
- Hardware-based privacy
- Requires trusting the hardware manufacturer
- Lower computational cost
- Vulnerable to side-channel attacks
- Not quantum-resistant
Can FHE contracts interact with standard ERC-20 tokens?
Can FHE contracts interact with standard ERC-20 tokens?
How does fhEVM compare to other privacy solutions like Aztec or Mina?
How does fhEVM compare to other privacy solutions like Aztec or Mina?
| Feature | fhEVM | Aztec | Mina |
|---|---|---|---|
| Technology | FHE (TFHE) | ZK Proofs | ZK Proofs (recursive SNARKs) |
| Computation | On encrypted data | On plaintext, prove result | On plaintext, prove result |
| EVM Compatible | Yes | No (custom VM) | No (custom VM) |
| Use Case | Confidential smart contracts | Private DeFi | Succinct blockchain |
| Gas Cost | High | Medium | Low |
| Developer Experience | Solidity | Noir | TypeScript |
- You want to build on Ethereum
- You need encrypted state throughout computation
- You want to use Solidity
What are the gas costs for FHE operations?
What are the gas costs for FHE operations?
| Operation | euint8 | euint32 | euint64 | Plaintext |
|---|---|---|---|---|
| add | ~50k | ~150k | ~250k | ~5k |
| mul | ~100k | ~300k | ~500k | ~5k |
| gt | ~70k | ~200k | ~350k | ~3k |
- Use the smallest type that fits your data
- Use plaintext operands:
FHE.add(enc, 5)is cheaper thanFHE.add(enc, FHE.asEuint32(5)) - Batch operations
- Hybrid contracts (encrypt only what’s necessary)
Troubleshooting
Why am I getting 'Unauthorized access to ciphertext' errors?
Why am I getting 'Unauthorized access to ciphertext' errors?
Why is my contract reverting without an error message?
Why is my contract reverting without an error message?
- You used
require()on an encrypted value - You forgot
FHE.allowThis() - You have a bug in non-encrypted logic (plaintext require)
- Check all
require()statements - Verify ACL permissions
- Use the “silent fail” pattern (FHE.select) for encrypted conditions
My tests are failing with 'Cannot read properties of undefined'
My tests are failing with 'Cannot read properties of undefined'