Enclave is now The Interfold.
Run a Ciphernode
Overview

Ciphernode Operators

This page is the starting point for operators who want to run a ciphernode on the Interfold. It explains what a ciphernode does, which contracts control an operator position, and the order of the setup steps. At the end, you know which page to open for each step and which contract addresses to use.

The Interfold dashboard has a guided operator setup at Run a ciphernode (opens in a new tab). It reads the live BondingRegistry and sends each on-chain step from your browser wallet: connect a wallet, authorize the bond owner, bond FOLD, register the ciphernode, and buy tickets. You must still run the node software yourself.

What a ciphernode does

A ciphernode is a node that holds one share of a committee secret key. The protocol selects a committee of ciphernodes for each E3. No single ciphernode can decrypt the output. Decryption needs T + 1 decryption shares. For each committee that selects it, a ciphernode does this work:

  • It submits sortition tickets for the E3 (submitTicket on CiphernodeRegistry).
  • It takes part in distributed key generation (DKG) and keeps its key share.
  • It helps the committee publish one public key for the E3.
  • It makes a decryption share of the E3 output after the compute provider publishes the ciphertext.
  • It generates zero-knowledge proofs for its DKG and decryption work.

The node also acknowledges its software release on-chain when it starts (acknowledgeNodeRelease on NodeReleaseRegistry). An operator is active only when its acknowledged release meets the required protocol version and node generation. See Upgrades for the release rules.

A committee member that fails its duties, or breaks a protocol rule, can lose part of its bond and tickets. SlashingManager handles these penalties. See Exits, Rewards & Slashing.

Contracts for operators

Each operator position uses two keys. The operator key is the hot key that the node loads. The bond owner is the wallet or Safe that funds the position and receives exit payouts and rewards. The contracts below store the position and its state.

Contract (source file)What it does for an operator
BondingRegistry (registry/BondingRegistry.sol)Stores the bond owner, the FOLD bond, and the ticket balance. It registers operators, decides active status, and queues exits.
CiphernodeRegistry (CiphernodeRegistryOwnable.sol)Keeps the set of registered ciphernodes. It accepts sortition tickets and finalizes each committee.
Interfold (Interfold.sol)Records each E3 and its stage. Requesters call it to request an E3.
SlashingManager (slashing/SlashingManager.sol)Processes slash proposals, appeals, and bans.
NodeReleaseRegistry (registry/NodeReleaseRegistry.sol)Stores the required node release and the release that each operator acknowledged.
E3RefundManagerCalculates and pays refunds when an E3 fails.
InterfoldToken (FOLD)The bond token. The bond owner bonds FOLD for each operator.
InterfoldTicketToken (tFOLD)A non-transferable token that wraps the ticket collateral. The registry mints it to the operator key.

On both networks, operators bond FOLD (InterfoldToken). The ticket collateral is an ERC-20 token that InterfoldTicketToken wraps. Mainnet uses sUSDS shares, and Sepolia uses MockUSDC. The fee token is separate: requesters pay E3 fees with it. Mainnet uses USDS as the fee token, and Sepolia uses MockUSDC.

Operator lifecycle

An operator position moves through the stages below. The stepper plays automatically. Select a stage to read it. The table after the stepper lists the same states.

Operator lifecycle
OperatorOperatorNodeReleaseAcknowledged

Set up

Install the node software, write its configuration, and store the operator key. When the node starts, it syncs the contract history and acknowledges its release on-chain.

StateConditionNext action
Not configuredbondOwnerOf(operator) returns the zero address. Calls that need the bond owner revert with NotBondOwner.The operator key calls setBondOwner.
BondedThe bond owner bonded FOLD, but the operator is not registered.The bond owner calls registerOperatorFor.
RegisteredThe operator is in the registry, but one activation condition is not met (often, no tickets yet).The bond owner calls addTicketBalanceFor.
ActiveAll activation conditions are met. isActive(operator) returns true.The node takes part in sortition for new E3s.
InactiveRegistered, but the bond, the tickets, the release, or a ban no longer meets the rules.Add collateral, upgrade the node, or refresh status.
Exit in progressderegisterOperatorFor queued all collateral. hasExitInProgress(operator) is true until exitDelay ends.After the delay, claim the exit. To return, bond and register again.

Registration & Bonding gives the commands, the activation rules, and the economic parameters. Tickets & Sortition explains committee selection.

Requirements summary

RequirementSummary
FOLD bondrequiredCiphernodeBond for each operator. The mainnet deployment value is 32,000 FOLD.
Ticket collateralAt least minTicketBalance tickets. On mainnet, one ticket is 1,000 sUSDS shares and the minimum is one ticket.
ETHGas for the bond owner transactions, and for the operator key (ticket submissions and release acknowledgment).
MemoryOn Linux, the node does not start below 17 GiB (4 GiB reserve plus one 13 GiB prover job). The guidance is 32 GB.
NetworkOne open inbound UDP port for QUIC. The default is 9091. At least 10 Mbit/s of upload.
RPC endpointsA WebSocket Ethereum endpoint with log history from the contract deploy blocks, and an Avail HTTP endpoint.

The full list is on Ciphernode Requirements. Read the live economic values on-chain before you deposit (see Registration & Bonding).

Contract addresses

These addresses come from deployments/manifest.json, the deployment manifest that interfold config check also reads. Contract Reference lists every deployed contract.

ContractAddressDeploy block
Interfold0x28cF63B459e6218C69EA97ea7D90541cf648c71525786382
CiphernodeRegistry0xC927A5B2d8F68697bC28C0670df05178c93df2d725786378
BondingRegistry0x0ec90465095C21830BEcED07e032809A2Bd2915F25473398
SlashingManager0x753109Ee36Dc65cC178875AddA30C6433e5bEEe425998899
E3RefundManager0x1940eF168f4E0B3dA24BEca539856684793B0F6e25786384
InterfoldTicketToken (tFOLD)0xC0B5b49a3949eC4B520eF21BaCFE16e3695F3B5D25786372
USDS (fee token)0xdC035D45d973E3EC169d2276DDab16f1e407384F20663730

On mainnet, operators bond FOLD (InterfoldToken), and sUSDS shares back the tickets. The deployment manifest does not publish these two token addresses. Contract Reference lists them. You can also read them from the BondingRegistry, as shown in Registration & Bonding.

The first mainnet deployment registered MockE3Program and set a mock ciphertext verifier. The contract owner later unregistered MockE3Program and replaced the mock verifier with a RISC Zero verifier. The manifest marks mainnet with mocks: false. Contracts & Addresses shows the verifiers in use.

The Interfold contract starts with E3 requests paused. The owner changes this with setRequestsPaused. Operators can bond, register, and add tickets while requests are paused. Read the current value with requestsPaused() on the Interfold contract.

interfold config check compares your configuration with the manifest of the latest release. For each network that the manifest marks with mocks: true, it prints a note that proofs are accepted without verification. The deployment manifest marks Sepolia with mocks: true, because the Sepolia deployment records MockE3Program. It does not mark mainnet. See Verifiers in use on mainnet.

Set up a ciphernode

Do the setup pages in this order:

  1. Check the hardware, network, and endpoint needs on Requirements.
  2. Install and start the node on Run a Ciphernode.
  3. Test your Ethereum endpoint on RPC Endpoints before the first sync.
  4. Authorize the bond owner, bond, register, and buy tickets on Registration & Bonding.

For help with setup, join the Interfold technical chat (opens in a new tab).

Next steps