// Chapter 13 · Operate
Console
The Console is the operator's on-chain surface.
Every click maps to a NodeRegistryLocker call.
// 13.0 · UI as canonical specification · nothing decorative
// Operator surface
The on-chain half of being an operator. Five surfaces. The node as the atom. There is no submitter view and no role switcher.
The Console is live at app.parallelix.io. The wallet signs stake, claim, and unstake; it does not run compute. Attaching a machine is the Node CLI's job. The two are halves of one role, not either / or. The UI may evolve; the behaviour described in §13 does not change without a corresponding update here.
Five surfaces
// 13.2 · top-level information architecture · numbered in new-operator encounter order
// Surface register · 5 entries
- // 01Dashboard
Aggregate view across every node this wallet has registered.
- // 02Register a node
The staking flow. Hardware tier, stake amount, sign registerNode.
- // 03My nodes
Live per-node view: state, uptime, reward weight, accrued.
- // 04Rewards
Accrued and claimed rewards per node. The claim action.
- // 05Account
Wallet, node-key references, notification settings.
Rewards accrue from the 25% Operator Rewards bucket, weighted stake x tier x uptime. Idle nodes (no compute online) earn nothing.
The dashboard aggregates every node this wallet has registered. Each row links into the per-node My Nodes view.
The atom is the node
// 13.1 · vocabulary discipline · denominates every metric
// Vocabulary
No task submission. No dispatch view. No sub-task fan-out.
The unit of interaction is the node, and every metric is denominated per node: stake, verified uptime, reward weight, accrued $PRLX. Task and sub-task vocabulary lives in the network internals, not in the operator's view.
Register a node
// 13.4 · three steps · URL changes per step · refresh-safe
// Register flow · 3 stages
- // 01Hardware tier
Declare the tier the machine runs. Tier 1 to 4, 1.0x to 3.0x.
- // 02Stake amount
Minimum 50,000 $PRLX, variable above the floor. One stake, one node.
- // 03Sign registerNode
Single registerNode call. Console assigns the nodeId, pivots to My Nodes.
- 01
Hardware tier
Declare CPU or GPU tier. The CLI verifies it.
- 02
Stake amount
Lock >= 50,000 $PRLX. Higher stake, higher weight.
- 03
Sign registerNode
registerNode(stake, tier, nodeKeyHash) -> nodeId
The three register steps share one URL-routed page so reloads are safe and links to a specific step work.
Reward weight breakdown
// 13.5 · weight computation surfaced inline · no hidden multipliers
┌──────────────────────────────────────────────────────────────┐
│ REWARD WEIGHT · node 4217 │
├──────────────────────────────────────────────────────────────┤
│ stake 100,000 PRLX │
│ tier_mult tier 3 = ×2.5 │
│ status online = accruing │
│ ────────────────────────────────────────────────────────── │
│ reward_weight stake × tier = 250,000 │
│ │
│ share of stream: weight / total online weight │
│ earned (live): 612.4 PRLX ▲ ticking │
└──────────────────────────────────────────────────────────────┘My nodes
// 13.5 · the live per-node view · the page every other surface references
The per-node detail surface. One card per nodeId, each reading both on-chain state (stake, accrued, claimed) and live coordinator telemetry (liveness, intraday uptime). The card carries the claim control and the request-unstake control. There is no slashing: requesting unstake starts a 7-day cooldown, then returns the full principal.
// Node states · 4 entries
- Offline// no heartbeat
- Draining// cooldown
- Online// heartbeat live
- Accruing// earning
Reading the network without the UI
// 13.9 · the Console is a thin client over two sources
Everything the Console shows comes from on-chain reads of NodeRegistryLocker and OperatorStakeRewardsV2, plus the coordinator's per-node liveness. Anyone can read the same data directly over any Ethereum RPC. There is no public submitter API at launch: the coordinator's intake is internal to ParalleliX AI, and a documented, permissionless submitter API is part of the planned open marketplace, not a current surface.
// Read surface · 5 sourceson-chain + coordinator
- CALLNodeRegistryLocker.nodes(id)
Owner, stake, tier, nodeKeyHash, lifecycle flags
- CALLNodeRegistryLocker.weightInputs(id)
Owner, stake, tier, staked, inCooldown
- CALLOperatorStakeRewardsV2.earned(id)
Live accrued reward balance (grows per block)
- CALLOperatorStakeRewardsV2.claim(id)
Pull the accrued balance (wallet tx)
- GETcoordinator liveness
Whether a node is currently online + heartbeat history
Behaviour across surfaces
// 13.8 · cross-cutting invariants
// Invariants · 4 entries
- // 01
On-chain truth. Stake, accrued, and claimed balances always read from NodeRegistryLocker. The Console never invents a number the chain cannot confirm.
- // 02
Node vocabulary. No surface refers to tasks or sub-tasks. The atom is the node and its uptime.
- // 03
No slashing anywhere. No surface shows slash exposure, at-risk principal, or penalties against stake, because there are none. Misbehaviour shows only as lost uptime and reduced reward weight.
- // 04
Never projected. Uptime and reward figures are the actual on-chain values, never forecasts or estimates. Nothing on screen is a projection of what a node might earn.
// Where to go next · reading path