An IOTA validator is a node operator that holds a seat in a delegated proof-of-stake network. Since the Rebased upgrade went live on 5 May 2025, stake delegated to validators decides which of them form the committee that runs Starfish consensus, and that committee is chosen again every 24-hour epoch. The validators in the committee order and finalize transactions, and they earn rewards that they share with the people who delegate to them.
This article explains the mechanics: what changed with Rebased, how consensus and epochs fit together, how the validator set and the committee differ, how delegation and penalties work and what a validator actually runs. It does not walk through a wallet; for that see the IOTA network page. Values marked as measured were read from IOTA’s public JSON-RPC endpoints on 24 October 2026, when mainnet was in epoch 537 on protocol version 38. The last section shows how to repeat the reads.
What changed with Rebased
Rebased replaced the Stardust UTXO ledger and the IOTA 2.0 plan with a Move object ledger and a stake-elected committee. IOTA’s documentation lists the pieces: an object-based ledger instead of the UTXO model, the Move virtual machine for smart contracts on layer 1 and a delegated proof-of-stake system with validators and stakers. IOTA’s own announcement says the team adapted the MoveVM and the ledger architecture of Sui (from Mysten Labs), and the framework source files carry a Mysten Labs copyright header with IOTA modifications.
The date and the handover:
- Token holders accepted the Rebased proposal in a vote in December 2024.
- The Stardust mainnet and the IOTA EVM were shut down at 9 am CEST on 5 May 2025, with snapshots of the Stardust ledger taken from Hornet nodes. The chain agrees: epoch 0 started at 07:39 UTC that day, which is 09:39 CEST.
- On the same day IOTA wrote that the Rebased mainnet was live.
- The token’s decimals changed from 6 to 9, which matters when you read raw stake values (2,000,000,000,000,000 is 2,000,000 IOTA).
One point of history is easy to get wrong. The Coordinator was not removed by Rebased: IOTA says it had already been replaced with a distributed validator committee in 2023 through the Stardust protocol upgrade. What Rebased bypassed was the IOTA 2.0 plan, which IOTA described as a slower path to a new mainnet than Rebased.
The network started with 13 genesis validators, the IOTA Foundation and 12 others. It has grown since: epoch 2 had 22 validators, epoch 5 had 37 and the active count has since moved up and down, with 73 at epochs 279 to 281 and 62 at epoch 537.
Consensus, checkpoints and epochs
Today IOTA runs Starfish on all its networks. IOTA’s documentation describes it as a BFT consensus protocol that uses an uncertified DAG structure, and as the successor of Mysticeti. Blocks reach finality in three rounds of communication, and the protocol tolerates up to one third of the validators, by stake, being offline, crashed or misbehaving.
For a user the visible unit is the checkpoint. IOTA’s documentation says that once a client collects a quorum of validator signatures on a transaction’s effects, the transaction is final and gets recorded in a checkpoint within a few seconds. We could not time a transaction end to end. What we measured is the checkpoint cadence: checkpoint 208069045 landed at 14:44:12 UTC on 24 October 2026 in epoch 537, and a sample of 1,000 checkpoints averaged 0.201 seconds each, about 5 per second. The protocol config agrees with a min_checkpoint_interval_ms of 200.
Checkpoints sit inside epochs. An epoch is a fixed period, and on IOTA mainnet it is 24 hours: epochDurationMs is 86400000. Real epochs run a fraction of a second longer, typically about 24.0001 hours, so the start time drifts later by about 0.4 seconds per epoch (epoch 537 started at 07:42:35 UTC on 24 October). The epoch boundary is where the network does its housekeeping:
- the final checkpoint of the epoch is produced and rewards are distributed;
- pending stake and unstake requests are processed;
- the validator set is updated, so new validators may be added and inactive ones removed;
- a protocol upgrade can take effect if enough validators agree.
Each validator also quotes a reference gas price for the next epoch. At the boundary the network takes the stake-weighted two-thirds percentile of the quotes and holds it constant for the epoch. At epoch 537 the reference gas price was 1000 and all 61 committee validators quoted 1000 for the next epoch.
Protocol versions matter for the numbers in the next sections. Mainnet and testnet ran version 38 on 24 October 2026 and devnet already ran 39. We asked mainnet for the version 39 config as a control and it answered Unsupported protocol version requested. Min supported: 1, max supported: 38, while the same call for 38 returned the config.
The validator set and the committee
Two sets are easy to confuse. The active validators are those registered and active in the staking system. The committee is the subset that takes part in consensus in a given epoch. IOTA’s documentation says the committee consists of validators selected based on delegated stake and fixed over the epoch. At the start of each epoch the delegated stake of each validator is added up and a new committee is formed. In the Move source, the selection takes the top eligible validators by stake.
The limits from the protocol config at version 38:
- up to 150 active validators, and a minimum of 4;
- up to 100 committee members.
At epoch 537 the full node reported 62 active validators and 61 committee members. One active validator has a voting power of 0 and sits outside the committee. Under protocol version 38 the committee is chosen only from active validators that support the next protocol version and have sent a correct capabilities notification; the chain does not show which condition that validator missed. The committee can be smaller than the active set at other times too: at epoch 437 it was 61 of 66.
Voting power
Total voting power on IOTA is always 10,000, regardless of how much is staked. Quorum is 6,667 and a single validator’s voting power is capped at 1,000, which is 10 percent. The read agrees: the 61 non-zero voting powers sum to 10,000 and the largest is exactly 1,000.
How a validator gets in and stays in
A candidate registers, collects stake and requests to join. The documented states are candidate, then pending, then active from the next epoch. The chain shows no validators pending and 8 candidates right now. The stake thresholds differ depending on where you look, so here are both:
- On chain at protocol version 38: 2,000,000 IOTA to join. Below 1,500,000 IOTA a validator gets a grace period of 7 epochs. Below 1,000,000 IOTA it is removed at the end of the epoch. The smallest active pool holds 5,088,805 IOTA, so none is near the floor.
- In IOTA’s documentation: 6 million IOTA to join, 5.5 million for the grace period and 5 million for removal. The operator guide repeats the 6 million.
The difference is the protocol version. The documented values match protocol version 39 in IOTA’s development source, which raises the thresholds to 6M, 5.5M and 5M. Devnet runs version 39 already and mainnet runs 38. Until mainnet upgrades, the chain values are the ones that apply. Treat any documented threshold as one protocol version ahead of mainnet until you have read the live config.
Delegation and staking pools
Each validator has its own staking pool, with a time series of exchange rates. When you stake, the system wraps your IOTA in a self-custodial StakedIota object. On chain the object’s fields are id, pool_id, stake_activation_epoch and principal, so it records the pool you chose and the epoch when it starts to count.
When a stake starts counting
Because staking influences who is in the committee, it is only processed at epoch transitions. We measured it: a stake requested in epoch 537 (transaction BRwvZiARPoVuhM463pE1w2x13c3RzRw43urPFfp8jxQB) produced a stake object with stake_activation_epoch 538. As a control, an object ID with its last digit changed returned notExists.
When you can take it out
Unstaking pays out in the transaction that asks for it. We measured an unstake at 13:39:48 UTC on 24 October 2026, in epoch 537 (transaction BZP4nqGBjs25SEt2Tdsjo8PDzfXv1LJYQENcu49mSLww). The staker’s balance change equalled the principal plus the rewards earned up to the previous epoch boundary, minus gas. You do not earn rewards for the epoch in which you withdraw.
IOTA’s own documentation pages disagree on this. One says staked IOTA is locked for the entire epoch and can be withdrawn when the epoch changes. Another says a withdrawal request is processed immediately. We report what the chain did, and the second page matches it. One further detail from the docs: a stake object cannot be partly withdrawn, so split a position over several objects if you want to leave in pieces.
Rewards and commission
Each epoch, newly minted tokens plus tips are split across the pools based on stake and performance. Inside a pool, stakers receive rewards through a rising exchange rate, so the rewards compound. The validator earns its commission as additional StakedIota objects. We do not quote rates here; use IOTA’s own staking apps and dashboards for live ones.
Commission works in two layers:
- A validator chooses its commission, up to 20 percent (the Move source has a maximum rate of 2,000 basis points). It can change it without prior notice.
- The commission actually applied in an epoch is the higher of the chosen commission and the validator’s voting power share. This is the minimum commission that rises with voting power.
On the chain we found 9 of the 62 validators with an effective commission above their chosen one, each equal to its voting power in basis points. One example had a chosen commission of 200 basis points, a voting power of 254 and an effective commission of 254. Chosen commissions on chain ran from 0 to 1000 basis points.
Penalties: the tallying rule
IOTA’s penalty is a cut to rewards, not to principal. Every validator can score the others, and the default score is 1 for everybody. A validator that sees another misbehave can file a report with report_validator. Reporting needs the validator itself or a holder of its Operation Cap.
A single report is not enough. In the Move source, the reported validator loses its rewards only when the reports come from validators holding at least a quorum of voting power, which is 6,667 of 10,000. The documentation page on staking rewards leaves the quorum out, so this part rests on reading the source (the same check is in release tag v1.34.1). The size of the cut is in the protocol config: reward_slashing_rate is 10000 basis points, so a reported validator loses all its rewards for that epoch. The score-based reward adjustment is switched off on mainnet at version 38, so on mainnet today only reports reduce rewards. The chain showed no report records, no validators at risk and no pending removals.
On principal: IOTA’s documentation says staked tokens remain secure and cannot be seized by validators or other participants. Our reading of the Move source found that every slashing path adjusts the reward amount only. That is a source reading and not a chain test, so we phrase it as “no principal slashing that we could find”. The word slashing in IOTA’s documentation refers to the reward cut.
The other way to lose a seat is the stake floor described above: below the thresholds a validator gets the grace period and then removal. That is separate from the tallying rule.
What a validator runs
A validator is the iota-node binary started with a validator.yaml. The documentation covers two ways to run it: a systemd unit that points at /opt/iota/config/validator.yaml and a Docker image, iotaledger/iota-node:mainnet.
Hardware for mainnet, per IOTA’s documentation:
- RAM: 128 GB
- CPU: 24 cores (48 vCPUs)
- Storage: 4 TB NVMe SSD
- Network: 1 Gbps uplink
The testnet figures are lower: 64 GB RAM, 8 cores (16 vCPUs) and 2 TB NVMe. We did not test whether these specifications are enough in practice; they are the documented figures.
Keys. Generating validator info creates four key pairs:
- the account key (Ed25519) owns the validator and receives its rewards. Keep it off the node. It can be a Ledger;
- the protocol key (Ed25519);
- the network key (Ed25519);
- the authority key (BLS12381).
The last three go on the node. To keep the account key offline day to day, a validator can delegate gas price and reporting to another address through an Operation Cap.
Ports. The documented ports are TCP 8080 inbound for the transaction interface, TCP 8081 for consensus, UDP 8084 for peer state sync, TCP 8443 outbound for metrics push and TCP 9184 on localhost for metrics. The docs note a known bug where validator.info lists 8081 as UDP although the node uses TCP.
Architecture. IOTA recommends at least one State Sync Full Node (SSFN) per validator, on a separate machine, as a security buffer between the validator and the public network. The setup is one chain: the staking system is a Move package on IOTA itself, whereas Polygon PoS keeps its staking contracts on Ethereum (see our Polygon PoS validator article).
Changes to a validator’s name, description, image URL and project URL take effect at once. Changes to network addresses and the three node keys take effect only after the next epoch, and you restart the node then. For the general picture of what a node does, see blockchain validator node.
How to read a validator’s record
Every validator exposes the same fields. These are the ones worth checking:
- Voting power share. The
votingPowerout of 10,000. This is the stake-weighted weight in consensus, capped at 1,000. - Commission. Both
commissionRateandeffectiveCommissionRate. If the second is higher, the minimum commission is active. - Activation epoch.
stakingPoolActivationEpochshows when the validator entered the active set. - Committee membership per epoch. Active does not mean in the committee. The epoch history, served by the indexer at
indexer.mainnet.iota.cafethroughiotax_getEpochs, lists committee members per epoch. The full node answersMethod not foundfor that call, and answers it fine foriota_getLatestCheckpointSequenceNumber, so the method sits on the indexer. - Reports.
validatorReportRecords,atRiskValidatorsandpendingRemovalsin the system state show who has been reported or is under the stake floor. - Gas price quote.
gasPriceandnextEpochGasPrice.
The IOTA explorer has validator pages by address; this one is ours.
Our IOTA validator
We run an IOTA validator. It became part of the active set at the start of epoch 2 on 7 May 2025, at 07:39:05 UTC, in the epoch-change transaction AGXxcEF5LDTai51NRXqyJr7m5BjgdXftVsCxZYkbdSgT in checkpoint 744641. It was not among the 13 genesis validators. The validator’s on-chain address is 0xf2724f3356c42fdc4da69327402b411ecf79d163ae3dcb29bd83e188da1b00d7, and the system state read below shows its voting power and activation epoch. At epoch 537 the chain showed it in the committee with 59 of 10,000 voting power and a commission of 10 percent.
Check it yourself
All reads use IOTA’s public full node and need only curl. The system state is a large response, about 117 KB at epoch 537, so pipe it to a file or a JSON tool. The values below are from 24 October 2026.
U=https://api.mainnet.iota.cafe
curl -s -X POST -H 'content-type: application/json' --data '{"jsonrpc":"2.0","id":1,"method":"iotax_getLatestIotaSystemState","params":[]}' $U
In the result look for epoch (537), protocolVersion (38), epochDurationMs (86400000), minValidatorCount (4), maxValidatorCount (150) and minValidatorJoiningStake (2000000000000000, which is 2,000,000 IOTA at 9 decimals). activeValidators holds 62 entries with the per-validator fields above and validatorReportRecords was empty. iotax_getCommitteeInfo returns the committee, 61 entries at epoch 537. iota_getProtocolConfig with the parameter ["38"] returns max_committee_members_count (100), reward_slashing_rate (10000) and the staking thresholds.
The numbers change every epoch, so expect different ones if you run it later. Pay attention to protocolVersion first, since the thresholds you read belong to that version.
Sources & References
Sources opened on 24 October 2026. Chain values are from IOTA’s public JSON-RPC endpoints.
- IOTA Docs, Delegated Proof of Stake
- IOTA Docs, Validators and Staking Pools
- IOTA Docs, Staking and Unstaking
- IOTA Docs, Consensus on IOTA
- IOTA Docs, Epochs and Reconfiguration
- IOTA Docs, Validator Committee
- IOTA Docs, Staking and Rewards
- IOTA Docs, Understand IOTA Security
- IOTA Docs, Validator Node Overview
- IOTA Docs, Validator Tokenomics
- IOTA Docs, Validator node with systemd
- IOTA Docs, Validator node with Docker
- IOTA Docs, State Sync Full Node (SSFN) Guide
- IOTA Docs, aggregated About IOTA text (FAQ, token decimals)
- IOTA Docs, aggregated Operator text (validator commands, keys, ports)
- IOTA blog, IOTA Rebased: Fast Forward
- IOTA blog, The IOTA Rebased Mainnet Upgrade
- IOTA blog, IOTA Rebased genesis validators
- IOTA blog, Builders Welcome. Rebase Complete
- IOTA ledger repository (
developbranch:validator_set.move,validator.move,voting_power.moveandiota-protocol-config/src/lib.rs) - IOTA full node RPC and IOTA indexer RPC
Work with Matrixed.Link
Matrixed.Link operates Chainlink oracle infrastructure, validator nodes and full-stack blockchain infrastructure for protocols and institutions that need institutional-grade reliability. Official Chainlink node operator running Data Feeds, CRE, SVR and Proof of Reserve. ISO/IEC 27001:2022 certified. AAA-rated provider on StakingRewards.
Contact Matrixed.Link to discuss validator and staking infrastructure for your protocol.