docs/solidity-guides/getting-started/overview.md
This document provides an overview of key features of the FHEVM smart contract library.
Smart contracts using FHEVM require proper configuration and initialization:
For more information see Configuration.
FHEVM introduces encrypted data types compatible with Solidity:
ebooleuint8, euint16, euint32, euint64, euint128, euint256eaddressexternalEbool, externalEaddress, externalEuintXX for handling encrypted input dataEncrypted data is represented as ciphertext handles, ensuring secure computation and interaction.
For more information see use of encrypted types.
fhevm provides functions to cast between encrypted types:
FHE.asEbool converts encrypted integers to encrypted booleansFHE.asEuintX converts plaintext values to encrypted typesFHE.asEaddress converts plaintext addresses to encrypted addressesFor more information see use of encrypted types.
fhevm enables symbolic execution of encrypted operations, supporting:
FHE.add, FHE.sub, FHE.mul, FHE.min, FHE.max, FHE.neg, FHE.div, FHE.rem
div and rem operations are supported only with plaintext divisorsFHE.and, FHE.or, FHE.xor, FHE.not, FHE.shl, FHE.shr, FHE.rotl, FHE.rotrFHE.eq, FHE.ne, FHE.lt, FHE.le, FHE.gt, FHE.geFHE.select for branching on encrypted conditions, FHE.randEuintX for on-chain randomness.For more information on operations, see Operations on encrypted types.
For more information on conditional branching, see Conditional logic in FHE.
For more information on random number generation, see Generate Random Encrypted Numbers.
fhevm enforces access control with a blockchain-based Access Control List (ACL):
FHE.allow, FHE.allowThis grants permanent permissions for ciphertexts.FHE.allowTransient provides temporary access for specific transactions.FHE.isSenderAllowed ensures that only authorized entities can interact with ciphertexts.FHE.makePubliclyDecryptable, FHE.isPubliclyDecryptable makes a given ciphertext permanently publicly decryptable.For more information see ACL.