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 (
submitTicketonCiphernodeRegistry). - 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. |
E3RefundManager | Calculates 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.
OperatorNodeReleaseAcknowledgedSet 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.
| State | Condition | Next action |
|---|---|---|
| Not configured | bondOwnerOf(operator) returns the zero address. Calls that need the bond owner revert with NotBondOwner. | The operator key calls setBondOwner. |
| Bonded | The bond owner bonded FOLD, but the operator is not registered. | The bond owner calls registerOperatorFor. |
| Registered | The operator is in the registry, but one activation condition is not met (often, no tickets yet). | The bond owner calls addTicketBalanceFor. |
| Active | All activation conditions are met. isActive(operator) returns true. | The node takes part in sortition for new E3s. |
| Inactive | Registered, 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 progress | deregisterOperatorFor 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
| Requirement | Summary |
|---|---|
| FOLD bond | requiredCiphernodeBond for each operator. The mainnet deployment value is 32,000 FOLD. |
| Ticket collateral | At least minTicketBalance tickets. On mainnet, one ticket is 1,000 sUSDS shares and the minimum is one ticket. |
| ETH | Gas for the bond owner transactions, and for the operator key (ticket submissions and release acknowledgment). |
| Memory | On Linux, the node does not start below 17 GiB (4 GiB reserve plus one 13 GiB prover job). The guidance is 32 GB. |
| Network | One open inbound UDP port for QUIC. The default is 9091. At least 10 Mbit/s of upload. |
| RPC endpoints | A 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.
| Contract | Address | Deploy block |
|---|---|---|
| Interfold | 0x28cF63B459e6218C69EA97ea7D90541cf648c715 | 25786382 |
| CiphernodeRegistry | 0xC927A5B2d8F68697bC28C0670df05178c93df2d7 | 25786378 |
| BondingRegistry | 0x0ec90465095C21830BEcED07e032809A2Bd2915F | 25473398 |
| SlashingManager | 0x753109Ee36Dc65cC178875AddA30C6433e5bEEe4 | 25998899 |
| E3RefundManager | 0x1940eF168f4E0B3dA24BEca539856684793B0F6e | 25786384 |
| InterfoldTicketToken (tFOLD) | 0xC0B5b49a3949eC4B520eF21BaCFE16e3695F3B5D | 25786372 |
| USDS (fee token) | 0xdC035D45d973E3EC169d2276DDab16f1e407384F | 20663730 |
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:
- Check the hardware, network, and endpoint needs on Requirements.
- Install and start the node on Run a Ciphernode.
- Test your Ethereum endpoint on RPC Endpoints before the first sync.
- 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
Hardware, operating systems, ports, endpoints, and disk space for a ciphernode.
Set upRun a CiphernodeStart the node with DAppNode, the interfold CLI, or Docker.
Test that an Ethereum endpoint keeps the log history that the first sync needs.
Set upRegistration & BondingAuthorize a bond owner, bond FOLD, register the operator, and buy tickets.
Set up