fhEVM
WebsiteLibrariesProduct & ServicesDevelopersSupport
0.1
0.1
  • What is Zama's fhEVM?
  • Getting started
    • Connect wallet
      • Metamask
    • Faucet
      • Zama Devnet
      • Local node
  • Writing contract
    • Getting started
      • Hardhat
      • Remix
      • Docker
    • TFHE Library
    • Function specifications
    • Decryption and control structures
    • Examples
  • Client
    • Getting started
      • Node
      • Browser
      • Template
      • CLI
    • Setup an instance
    • Inputs
    • Reencryption
    • Examples
      • Transfer tokens (node)
      • Get balance (node)
  • Resources
    • Tutorials
    • Repositories
    • Whitepaper
Powered by GitBook

Libraries

  • TFHE-rs
  • Concrete
  • Concrete ML
  • fhEVM

Developers

  • Blog
  • Documentation
  • Github
  • FHE resources

Company

  • About
  • Introduction to FHE
  • Media
  • Careers
On this page
  • Decryptions
  • Examples
  • Booleans
  • Optimistic encrypted require statements

Was this helpful?

Export as PDF
  1. Writing contract

Decryption and control structures

PreviousFunction specificationsNextExamples

Last updated 1 year ago

Was this helpful?

Decryptions

We allow explicit decryption requests for any encrypted type. The values are decrypted through the distributed decryption protocol and are stored on-chain.

Examples

function decryptAmount(euint8 amount) public view returns (uint8) {
    return TFHE.decrypt(amount);
}

function revertIfConditionIsFalse(ebool condition) public {
    bool plaintextCondition = TFHE.decrypt(condition);
    require(plaintextCondition, "Condition was not met");
    // ... continue execution if `condition` is true
}

Booleans

The result of is of type ebool. Typical boolean operations are not currently supported for this type.

The purpose of the ebool type is two-fold:

  1. control bit for the operator;

  2. input for optimistic encrypted require (optReq) statements.

Optimistic encrypted require statements

The decryption statements described above may lead to important delays during the transaction execution as several of them may need to be processed in a single transaction. Given that those decryptions might be used for control flow by using the Solidity require function, we introduce optimistic require statements (optReq). These require statements take as input a value to type ebool and are accumulated throughout the execution of the transaction. The accumulated boolean value is decrypted via the threshold decryption protocol either when an explicit decryption is executed, or at the very end of a transaction execution. If the decryption returns false, the transaction is reverted. Otherwise, state changes are persisted as usual. Optimistic requires may be more efficient, but this efficiency comes at the price of paying the full transaction gas cost if one of the boolean predicates is false.

comparison operations
cmux