// Section 8.6 · Token
Reward formula
The reward formula.
// 8.6 · per-second streaming · weight = stake x tier · earned() grows every block
Rewards stream per-second to online nodes, not as a per-task payout and not as a daily settlement. OperatorStakeRewardsV2 pays a fixed rewardRate at any instant, and each online node takes a share proportional to its weight. More total online stake-weight compresses every node's share of the same stream.
weight_i = stake_i × tier_mult_i share_i = weight_i / Σ weight_j (online nodes only) earned_i grows at: rewardRate × share_i (per second, while online)
Two factors, plus online status
// stake · hardware tier · online gate · no complexity or reputation multiplier
The node's locked stake
At least 50,000 $PRLX, variable above the floor. More stake means more weight, linearly. Each node carries its own fixed stake; stakes do not pool and the principal is never touched by the reward path.
By declared tier
Verified by the Node CLI's probe. A node that cannot serve at its declared tier earns nothing.
Online or not, right now
There is no uptime fraction in the on-chain weight. A node is either online and heartbeating, in which case its full weight counts and it accrues every block, or it is offline, in which case it leaves the denominator and accrues nothing. Online earns, offline does not, second by second.
There is no complexity multiplier and no reputation multiplier in the live model. Weight is exactly stake x tier; the stream redistributes to whoever is online.
The reward stream
// ~34,200 $PRLX/day committed · per-second emission · fixed and competitive
The day's slice of the 25M Operator Rewards bucket, streamed from Sablier over 24 months. The keeper deposits it into the rewards contract, which streams it per-second to online nodes. The bucket exhausts at month 24.
A share of ParalleliX AI usage payments funds the pool once usage volume is sufficient. The split is 85% to operators, 10% treasury, 5% infra, settled in $PRLX.
Worked reward example
// tier 3 · online · figures illustrative
node profile:
stake 100,000 PRLX
hardware tier 3 (multiplier 2.5)
status online (heartbeating)
assume:
stream ~34,200 PRLX/day (≈ 0.396 PRLX/second)
Σ weight_j 9,000,000 (all online nodes)
accrual calculation:
weight_node = 100,000 × 2.5 = 250,000
share_node = 250,000 / 9,000,000 = 2.78 %
accrual_node = 0.396 PRLX/s × 0.0278 ≈ 0.011 PRLX/s
≈ 950 PRLX over a full day onlineIllustrative. The actual figure depends on the total online stake-weight at each instant: as more stake comes online, each node's share of the same stream shrinks; as nodes go offline, the remaining online nodes earn more.
How rewards reach operators
// per-second on-chain stream · keeper-funded · claim anytime
Accrual is a live on-chain stream, not a weekly merkle drop and not a daily settle. There is no merkle root and no claim against a posted root. earned(nodeId) grows every block while the node is online; the operator pulls it whenever they want.
Keeper funds the 24h stream
A keeper pulls the day's vested $PRLX from the Operator Rewards Sablier stream (~34,200/day) into OperatorStakeRewardsV2 and calls notifyReward, which spreads it over the next 24 hours as a fixed rewardRate.
Online nodes accrue per-second
While a node is online and heartbeating, the contract counts its weight (stake x tier) in the live denominator. Its earned(nodeId) balance grows every block at rewardRate x its weight share.
Offline nodes drop out instantly
The instant a node goes offline its weight leaves the denominator. It stops accruing second by second, and the stream redistributes to the nodes that stayed online. There is no daily settlement step.
Operator claims anytime
The operator calls claim(nodeId) whenever they want. It transfers the accrued balance to the staking wallet to wei precision, without interrupting accrual. No daily cycle, no merkle root, no proof.
Where the 25M actually sits. The 25M Operator Rewards bucket lives in a Sablier stream and releases linearly over 24 months. At any moment the contract holds only what the keeper has pulled and not yet had claimed, on the order of a day or two of rewards, not 25M. Anyone checking the contract balance on Etherscan is seeing recent payroll, not the full bucket.
Why a stream. A per-second on-chain stream lets operators call claim(nodeId) at any instant to wei precision, and keeps the reward path independent of the staked principal: stake lives in NodeRegistryLocker and rewards in OperatorStakeRewardsV2, two separate contracts, so the reward path can never draw down collateral.