Programmable Privacy for the EVM

Use Zama's fhEVM to enable confidential smart contracts in your blockchain, unlocking new use cases in DeFi, gaming, and more!

Read the fhEVM white paper
Read the fhEVM white paper
Read the fhEVM white paper
Read the fhEVM white paper
Read the fhEVM white paper

Onchain data is public by design, making it hard to build dapps that require confidentiality

Zama's fhEVM Enables Confidential Smart Contracts using Fully Homomorphic Encryption (FHE)

E2E encryption for inputs
and state

Full composability on
private state

Work with existing
chains

It Unlocks a Myriad of New Use Cases for Consumers, Businesses, and Regulated Industries

Tokenization

Swap tokens and RWAs onchain without others seeing the amounts.

Blind Auctions

Bid on items without revealing the amount or the winner.

Onchain Games

Keep moves, selections, cards, or items hidden until ready to reveal.

Confidential Voting

Prevents bribery and blackmailing by keeping votes private.

Encrypted DIDs

Store identities onchain and generate attestations without ZK.

Private Transfers

Keep balances and amounts private, without using mixers.

Build Confidential Dapps Just as You Would Regular Ones

Developers can write confidential smart contracts without learning cryptography.

Solidity Integration
FhEVM contracts are simple solidity contracts that are built using traditional solidity toolchains.

Simple DevX
Developers can use the euint data types to mark which part of their contracts should be private.

Programmable Privacy
‍All the logic for access control of encrypted states is defined by developers in their smart contracts.

contract EncryptedERC20 {
// A mapping from address to an encrypted balance.
mapping(address => euint32) internal balances;

// Transfers an encrypted amount.
function _transfer(address from, address to, euint32 amount) internal {
	// Make sure the sender has enough tokens.
  TFHE.req(TFHE.le(amount, balances[from]));

  // Add to the balance of `to` and subract from the balance of `from`.
  balances[to] = TFHE.add(balances[to], amount);
  balances[from] = TFHE.sub(balances[from], amount);
}

// Returns the balance of the caller encrypted under the provided public key.
function balanceOf(
	bytes32 publicKey,
	bytes calldata signature
) public view onlySignedPublicKey(publicKey, signature) returns (bytes memory) {
	return TFHE.reencrypt(balances[msg.sender], publicKey, 0);
}

Operational Versatility by Design

Consensus:
Proof of Stake (permissionless)
Proof of Authority (permissioned)

Deployment:
L1, L2 or L3 public or enterprise chain
App chain
ZK-fraud-proof rollup (coming 2024)

Decryption:
PoS or PoA threshold decryption
KMS or HSM based centralized decryption

Zama's fhEVM Combines State of the Art Cryptography to Achieve Unprecedented Levels of Privacy and Security

FHE

Fully homomorphic encryption is used to compute on private state, directly on-chain.

+

MPC

Multi-party computation is used for threshold decryption of FHE ciphertexts.

+

ZK

Zero-knowledge proofs are used to ensure encryption and decryption integrity.


Read more in our paper: Practical and Efficient FHE-based MPCPractical and Efficient FHE-based MPC

The Most Comprehensive Confidential Smart Contract Solution

Zama's fhEVM

Other FHE

ZK

Mixers

Operations
supported

Everything
Only additions & multiplications
Everything
None

Privacy model

Hides the data
Hides the data
Hides the data
Hides the identity

Encrypted state composability

Yes
Limited
No
No

Developer experience

Easy
Medium
Hard
Hard

Compliance

At the application
level
At the application
level
At the user
level
At the user
level

Security

Highest
High
High
Medium

More Resources

Read the latest fhEVM blog posts and learn more with our developer tutorials and presentations.

Talk to the Zama team to explore FHE.

Do you want to know more about Zama's confidental smart contracts solution? We're happy to discuss your use cases and explore together what is possible.

Contact us

Or see the code on Github.