// UBP sub-page: Mining Nodes // Operator console — run validators / compute / storage nodes, earn UBR. // Treated as an "instrument console" — half paper, half dark monitoring strip. function MiningRail({ active }) { return ( <>
M
M. Harriot
UBID·0x7a91…3fc2
TIS 85.8 3 NODES UP
); } function MiningCrumb({ items }) { return (
{items.map((it, i) => ( {it} {i < items.length - 1 && } ))}
); } function MiningNodesDapp() { // Live-ish utilization sparkline values (10-min window) const utilA = [62, 68, 71, 74, 70, 76, 81, 78, 84, 88, 91, 87, 92, 89, 94, 91, 88, 92, 95, 93]; const utilB = [44, 46, 48, 52, 49, 51, 53, 55, 58, 56, 60, 58, 62, 64, 61, 63, 66, 64, 68, 67]; const utilC = [22, 21, 24, 23, 25, 22, 21, 19, 20, 22, 23, 21, 24, 22, 20, 21, 23, 24, 22, 20]; const nodes = [ { id: 'node-ucsf-glia-01', kind: 'COMPUTE', hw: '8 × H100 SXM · NVLink · 96 vCPU · 1.5 TB RAM', loc: 'Berkeley, US-W', uptime: '99.94%', jobs: 184, earn30d: 1842, epoch: '+12.4', status: 'WORKING', tone: 'ok', util: utilA, assigned: 'NB-219 · Astrocyte calcium MRC sweep', power: '4.2 kW', }, { id: 'node-storage-eu-04', kind: 'STORAGE', hw: '12 × 22 TB HDD · 4 × 4 TB NVMe cache · 25 Gbps', loc: 'Frankfurt, EU-C', uptime: '99.99%', jobs: 4218, earn30d: 612, epoch: '+4.1', status: 'WORKING', tone: 'ok', util: utilB, assigned: '482 GB pinned · 14 datasets', power: '0.41 kW', }, { id: 'node-val-pacific-02', kind: 'VALIDATOR', hw: 'Bare-metal · 32 vCPU · 256 GB · TPM-2.0', loc: 'Singapore, AP-SE', uptime: '100.00%', jobs: 8419, earn30d: 412, epoch: '+2.8', status: 'PROPOSING', tone: 'accent', util: utilC, assigned: 'Block 8,419,206 · slot 12 / 64', power: '0.18 kW', }, { id: 'node-attic-rtx-09', kind: 'COMPUTE', hw: '2 × RTX 4090 · 24 vCPU · 128 GB', loc: 'Home · UK-S', uptime: '94.21%', jobs: 22, earn30d: 84, epoch: '−0.4', status: 'IDLE', tone: 'warn', util: [12, 14, 18, 20, 16, 12, 8, 6, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], assigned: 'No job · awaiting bid', power: '0.0 kW', }, { id: 'node-arch-east-12', kind: 'STORAGE', hw: 'Cold archive · 96 TB tape', loc: 'Reston, US-E', uptime: '—', jobs: 0, earn30d: 0, epoch: '—', status: 'OFFLINE', tone: 'bad', util: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], assigned: 'Last seen 2d 14h ago · review logs', power: '—', }, ]; const recent = [ ['+184.20', 'Block reward · slot 8,419,206', '17:02', 'VALIDATOR', 'accent'], ['+22.40', 'Compute job · NB-219 / H100 ×8', '16:51', 'COMPUTE', 'ok'], ['+8.10', 'Pin reward · QmZ7…91fe', '16:48', 'STORAGE', 'ok'], ['+184.20', 'Block reward · slot 8,419,118', '16:34', 'VALIDATOR', 'accent'], ['−2.80', 'Slashing · stale-prop slot 8,419,002', '16:18', 'PENALTY', 'bad'], ['+44.00', 'Compute job · DRAFT·092 / RTX-A6000','16:02', 'COMPUTE', 'ok'], ['+184.20', 'Block reward · slot 8,419,054', '15:48', 'VALIDATOR', 'accent'], ['+8.10', 'Pin reward · QmA1…40bc', '15:44', 'STORAGE', 'ok'], ]; return ( }> } title="Mining nodes" sub="Lend compute, storage and validation to UB-Chain. The network pays you in UBR for blocks proposed, jobs run, and bytes pinned — pro-rated by uptime and verified work." actions={<> Help me start Browse open jobs Register new node } />
{/* OPERATOR CONSOLE — dark instrument strip */}
{/* hero */}
OPERATOR CONSOLE · LIVE
+18.2
UBR / hour · across 3 active nodes
EPOCH 14,294 NETWORK SHARE 0.41%
{[ ['Earnings · 30d', '2,338', 'UBR · ↑ 22%'], ['Earnings · all-time', '38,440', '14 mo as operator'], ['Avg uptime', '98.42%', '5 nodes · 90d window'], ['Pending payouts', '184.20', 'next block · ~9s'], ].map((s, i) => (
{s[0]}
{s[1]}
{s[2]}
))} {/* corner instrument frame */} UB-OPS · v0.4.2-rc1
{/* MIDDLE BAND: capacity meter + earning composition + payout schedule */}
0.41% NETWORK}>
{[ ['Compute', '1,847', 'GPU nodes', '1.4%'], ['Storage', '2.41', 'PB pinned', '0.02%'], ['Validators', '6,418', 'staking', '0.05%'], ].map(([k, v, u, sh], i) => (
{k}
{v}
{u}
your share · {sh}
))}
NETWORK UTILIZATION · 24H peak 96% · trough 71%
00:0006:0012:0018:00NOW
{[ ['Block proposals', 0.46, '1,076', UB.accent], ['Compute jobs', 0.31, '724', UB.ink], ['Storage pin rewards', 0.14, '328', '#7CC4F2'], ['Attestations', 0.07, '164', '#A8A7A0'], ['Slashing penalties', -0.02, '−46', UB.bad], ].map(([k, v, n, c], i, arr) => (
{k} {n} UBR
))} ~9s}>
184.20
UBR · block 8,419,207 · slot 13
BASE REWARD180.00
FEE TIPS4.20
OPERATOR FEE (POOL)−0.00
NET184.20
Auto-stake off Withdraw rule
{/* MY NODES — rich table */} FilterBulk update firmware
} pad={false}>
NodeHardware · AssignmentUtil · 10 minUptimeEarn 30dΔ epochStatusAction
{nodes.map((n, i) => (
{n.kind}
{n.id}
{n.loc}
{n.hw}
↳ {n.assigned} · {n.power}
peak {Math.max(...n.util)}%
{n.uptime} {n.earn30d.toLocaleString()} {n.epoch} {n.status}
Logs Manage
))} {/* BOTTOM ROW — recent rewards · how mining works · register flow */}
{/* Live reward feed */}
Δ UBRMemoWhenSource
{recent.map((r, i) => { const positive = r[0].startsWith('+'); return (
{r[0]} {r[1]} {r[2]} {r[3]}
); })}
{/* How mining works */}
Three roles, one ledger. Each pays out per epoch, weighted by verified contribution.
{[ { k: 'COMPUTE', t: 'Run research jobs', s: 'Containerized GPU/CPU jobs from Compute Marketplace. Paid per job + tip.', tone: 'info' }, { k: 'STORAGE', t: 'Pin & host artifacts', s: 'Replicate datasets & papers. Paid per GB-day with proof-of-replication.', tone: 'ok' }, { k: 'VALIDATOR', t: 'Order & seal blocks', s: 'PoS — stake UBR, propose blocks, attest peers. Misbehavior is slashed.', tone: 'accent' }, ].map((r, i) => (
{r.k}
{r.t}
{r.s}
))}
Block reward · 180 UBR · halves every 4y
Slash · 0.5% stake · per missed slot
Tip share · 100% to operator
{/* Register a node */} {[ ['1', 'Pick a role', 'Compute · Storage · Validator', 'done'], ['2', 'Provision hardware', 'Bare-metal · cloud · home rig', 'active'], ['3', 'Stake & sign', 'Min 1,000 UBR for validator', 'pending'], ['4', 'Healthcheck', 'UB-OPS verifies attestation key', 'pending'], ].map(([n, t, s, st], i) => (
{st === 'done' ? '✓' : n}
{t}
{s}
{st.toUpperCase()}
))}
Save & exit Continue · stake UBR
); } window.MiningNodesDapp = MiningNodesDapp;