Decryption Request Flow
The process of requesting decryption through Smart Contracts starts the same as every other FHE Operation Request 📌steps 1-4 Here we’ll continue from FheOS server handling such request as follows:Flow Diagram
The following diagram illustrates the complete flow of an FHE Decryption request in the CoFHE ecosystem:Step-by-Step Flow
Steps 1-4 - FHE Operation Request
The decryption request follows the same initial steps as a standard FHE operation request:1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣Refer to FHE Operation Request Flow for details on steps 1-4, which include:
- Integration with Cofhejs
- Requesting an FHE Operation
- Task Manager Processing
- Slim Listener Processing
FheOS server - Decryption Execution
The FheOS server handles decryption requests:
- Create execution thread on the fheOS server
-
FheOS server calls the threshold network with:
- The ciphertext to be decrypted
- Transaction hash from the host chain
- Original operation handle
Threshold network security protocol
The Threshold Network performs secure decryption:
- Verify the host chain requested the desired decryption
- Retrieve the actual ciphertext hash from private storage
- Validate ciphertext hash integrity
- Perform secure decryption
Result Delivery (Two Paths)
After decryption is complete, the result can reach the chain via two paths: 7️⃣Path A — Result Processor (default):
- FheOS calls the Result Processor with the decrypt result
- The Result Processor publishes the result to the TaskManager on the host chain
- The Dispatcher returns the decrypt result along with an ECDSA signature to the client (via cofhejs HTTP)
- The client (or any relayer) calls
FHE.publishDecryptResult(ctHash, result, signature)on-chain - The TaskManager verifies the signature against the registered
decryptResultSignerbefore storing the result
Path B enables permissionless result delivery — anyone holding a valid signature can publish. This is useful for client-driven settlement or relayer patterns.
TaskManager emit event with decryption result
The TaskManager finalizes the decryption process: 8️⃣
- Provide decrypted result by emitting an event
DecryptionResult - The event consists of
ciphertext handle,result,requestor(of that decrypt operation) - In Path B,
requestorismsg.sender(the publisher), not the original decrypt requester