SI64.NET

SILICON INTELLIGENCE

ARM64 • SOLANA
market intelligence
SNAPPY / PARQUET
MEV ALPHA [PREMIUM] // MEMPOOL TELEMETRY [STANDARD]
// DATA DECAY PROTOCOL
Alpha decays. Live data is Gold; 24h-old is Silver; 30d-old is Copper.
Free tiers are timelocked (7-30d latency) to protect paid operators while enabling backtesting.
INCLUDED FORMATS: Parquet (ML), JSONL (Web), CSV (Excel) in every pack.
[FREE] LAGGED 7-30D [LIVE] REAL-TIME [MONDAY] SCENARIO ROTATION [EVENT] 24H POST-MORTEM
// MEV SYNTHETIC
PREBUILT STRATEGIES • BACKTESTING • INFINITE VARS
TEST PILOT
SAMPLE PACK
> SIZE: 5,000 Rows (Schema Check)
> Bot Txs // JSONL
FORMAT: PARQUET / JSONL / CSV
Includes: Timestamp (UTC), Slot #, Signature, Signer, Instruction Data, Log Messages
BEST FOR: SCHEMA VALIDATION
FREE
WAR GAMES
CHAOS BUNDLE
> SIZE: 1,000,000 Events (Load Test)
> Sandwich Attacks // PARQUET
FORMAT: .PARQUET (SNAPPY)
Includes: Timestamp, Slot, Bundle Hash, Attacker, Victim, Token Pair, Profit (SOL)
BEST FOR: ARB STRATEGY TRAINING
0.80 SOL
DEEP LEARNING
MATRIX CORE
> SIZE: 10,000,000+ Events (ML Ready)
> Complex Bundles // RAW
FORMAT: .RAW (LZ4)
Includes: Timestamp, Slot, Bundle UUID, Builder/Relay, Gas Bid, Execution Trace, P&L
BEST FOR: DEEP RL SIMS
2.50 SOL
// MEMPOOL SYNTHETIC
SIMULATED • LOAD TESTING • GENERATED
TEST PILOT
SAMPLE PACK
> 5k Gen. Txs (Load Test)
> Schema Validation
FORMAT: PARQUET / JSONL / CSV
Includes: P2P Arrival Time, Gossip Node ID, Propagation Latency (ms), TX Size (bytes), Signature
BEST FOR: CLIENT INTEGRATION TESTS
FREE
WAR GAMES
CHAOS BUNDLE
> 1M Spam Txs (Congestion)
> RPC Stress Testing Data
FORMAT: .PARQUET (SNAPPY)
Includes: Arrival Timestamp, Slot Hint, Payer, Fee Calc, Compute Units, Replaced Tx Sig, Latency
BEST FOR: LOAD/RESILIENCE MODELING
0.50 SOL
DEEP LEARNING
MATRIX CORE
> 10M+ Events (Infinite Var)
> Node Crash Simulation
FORMAT: .RAW (LZ4)
Includes: Timestamp, Gossip Path, Node ID, Retries, Drop Reason, Payload Bytes, Slot Forecast
BEST FOR: FAILURE-CASE MODELING
1.50 SOL
// MEV ORGANIC
SETTLED PROFIT • ARBITRAGE • LIQUIDATIONS
HIGH ROI SNAPSHOT
SCOUT INTEL
10,000 Settled Events (High ROI)
+ PREDATOR LIST (Top 50 Bots)
• Detected Arbitrage & Liquidations
FORMAT: CSV (Readable)
FORMAT: .CSV (UTF-8)
Includes: Timestamp, Slot, TX Sig, Strategy Tag, P&L (SOL), Token Pair, Venue, Counterparty
BEST FOR: BOT PROFILING
0.25 SOL
CRASH WEEK ARCHIVE
HUNTER ARCHIVE
500,000+ Confirmed Rows (High ROI)
• Failed Transactions & Gas Wars
• Full Supply Chain (Builder/Relay)
FORMAT: PARQUET (ML Ready)
FORMAT: .PARQUET (SNAPPY)
Includes: Timestamp, Slot, TX Sig, Builder, Relay, Gas Bid, MEV Type, Outcome, Profit (SOL)
BEST FOR: CRASH FORENSICS
1.20 SOL
COMPLETE HISTORY
TITAN VAULT
Genesis Block to Present (Day 0)
• Unfiltered Profit Analysis
Commercial Build License Included
FORMAT: RAW (Compressed)
FORMAT: .RAW (ZSTD)
Includes: Timestamp, Slot, TX Sig, Builder/Relay, Strategy Type, Profit & Gas, Token Legs, Replay Hash
BEST FOR: FULL-STACK BACKTESTING
5.00 SOL
// MEMPOOL ORGANIC
PENDING TXS • GOSSIP LAYER • PRE-BLOCK
DAILY SNAPSHOT
SCOUT FEED
10,000 Pending Txs (Pre-Block)
• Global Propagation Latency Logs
• Spam & Dust Filtering Included
FORMAT: CSV (Readable)
FORMAT: .CSV (UTF-8)
Includes: P2P Arrival Time, Slot Target, Signature, Fee, Priority Fee, First-Path Node, Latency (ms)
BEST FOR: LATENCY ANALYSIS
0.15 SOL
CONGESTION LOGS
HUNTER ARCHIVE
500,000 Raw Rows (Firehose)
• Dropped & Replaced Transactions
• Full "Gas Auction" Telemetry
FORMAT: PARQUET (ML Ready)
FORMAT: .PARQUET (SNAPPY)
Includes: Timestamp, Slot, Signature, Replace Count, Fee Delta, Tip %, Rejection Code, Gossip Path
BEST FOR: GAS AUCTION MODELING
0.80 SOL
FULL NODE FEED
TITAN VAULT
Full Historical Database (Day 0)
• Unfiltered Gossip Layer Access
Infrastructure License Included
FORMAT: RAW (Compressed)
FORMAT: .RAW (ZSTD)
Includes: Timestamp, Slot, Full TX Payload, P2P Metadata, Node ID, Path Trace, Replay Hashes
BEST FOR: INFRA GRADE REPLAY
3.50 SOL
PHASE 2 // ARM64 GRID
COMING SUMMER 2026 Hardware rentals are temporarily paused while the data store goes live.
NETWORK TELEMETRY
Active Nodes
--
TARGET: ARM64 / APPLE M-SERIES
Task Queue
--
PENDING INFERENCE JOBS
Protocol Volume
◎ -.----
ON-CHAIN SETTLEMENT (SOL)
Ledger feed is temporarily greyed out until the store goes live.
RECENT SETTLEMENTS
LIVE
Orin Total: ◎ 0.000000
JOB ID WORKER NODE BOUNTY (SOL) TIMESTAMP PROOF (TX)
ESTABLISHING SECURE UPLINK...
Showing 0 of 0
HARDWARE MARKETS PAUSED
STANDARD
Apple M2 Neural
Entry-level unified memory. Perfect for 7B-13B quantization and dev environments.
0.001 SOL/hour
📡 -- units online
POPULAR
Jetson Orin
275 TOPS of AI performance. Optimized for computer vision and Llama 3 (70B) inference.
0.004 SOL/hour
📡 -- units online
ENTERPRISE
M3 Ultra Cluster
128GB+ Unified Memory. Capable of running unquantized 70B+ models and RAG pipelines.
0.025 SOL/hour
📡 -- units online
ULTRA
Jetson Thor
1457 TFLOPS. Next-gen AI edge supercomputer for scaling inference and multi-GPU training.
0.035 SOL/hour
📡 -- units online
SUPERCHIP
NVIDIA GH200
ARM64 SUPERCHIP
96GB HBM3 • 72 ARM Neoverse cores. Unified memory architecture for trillion-parameter model inference.
0.085 SOL/hour
📡 ALLOCATING CAPACITY • REQUEST-ONLY ACCESS
VECTOR
FUJITSU A64FX
VECTOR SVE
512-bit SVE • ~1 TB/s bandwidth. Fugaku-class silicon for CFD, quant research, and crypto hashing.
0.015 SOL/hour
📡 -- units online • HPC VECTOR GRID
HEAVY SCOUT
Orange Pi 5 Plus
Rockchip RK3588 • 8-core ARM • Dual 2.5GbE • PCIe 3.0 NVMe • 6 TOPS NPU • up to 32GB RAM.
0.002 SOL/hour
📡 PROVISIONING • Q3 2026
SOVEREIGN
Ampere Altra Cluster
32–128 Neoverse N1 cores • 128 lanes PCIe Gen4 • ECC DDR4 • cloud-native ARM64 server fabric.
0.045 SOL/hour
📡 PROVISIONING • Q4 2026
DENSE CLUSTER
Turing Pi 2 Swarm
4× RK1 nodes (32 cores total) • 128GB unified RAM cluster • high availability micro-services topology.
0.008 SOL/hour
📡 PROVISIONING • Q3 2026
THE SWARM LOW POWER / HIGH AVAILABILITY
EDGE
Jetson Nano Swarm
EDGE VERIFIER
128 CUDA cores • 4GB RAM. The backbone of the swarm for heartbeat verification and routing.
0.0001 SOL/hour
📡 -- units online • NANO SWARM
SCOUT
Raspberry Pi Cluster
ARM64 SCOUT
Quad-core ARM • 4-8GB RAM. Low-power sentinels that maintain grid integrity and validate on-chain proofs.
0.0001 SOL/hour
📡 -- units online • RPI SCOUT GRID
NO NOISE. NO LATENCY. JUST RAW, CRYSTALLIZED INTENT
PHASE 3 // TBA LATE 2026
COMMUNITY CONNECT • SUPPORT • ANNOUNCE
ACCESS RESTRICTED
DATASET
STEP 1: FOLLOW @SI64net TO UNLOCK
Social Paywall engaged. Send the signal, then return to initiate the download. Lagged free tier (7-30d) remains protected; live keys stay secure.

Select Hardware Unit

Accessing global availability registry...

LOADING GRID DATA...

DEPLOYMENT CONTRACT

Initialize compute allocation on Solana Mainnet

TARGET UNIT
-
ALLOCATION TIME
1 HR
RATE
-
ESTIMATED COST
-
NET FEE -
VALIDATOR TIP -
TOTAL -
si64.net transmission out.
const API_ENDPOINT = '/api/stats'; const RATES = { 'M2': 0.001, 'ORIN': 0.004, 'M3_ULTRA': 0.025, 'THOR': 0.035 }; const HARDWARE_NAMES = { 'M2': 'Apple M1/M2 Neural', 'ORIN': 'NVIDIA Jetson Orin', 'M3_ULTRA': 'Apple M3 Ultra Cluster', 'THOR': 'NVIDIA Jetson Thor' }; // Device inventory loaded dynamically from API let DEVICE_INVENTORY = { 'M2': [], 'ORIN': [], 'M3_ULTRA': [], 'THOR': [] }; let selectedDevice = null; // --- WALLET MANAGEMENT --- function toggleWalletMenu() { const menu = document.getElementById('wallet-menu'); if (!menu) return; menu.classList.toggle('active'); if (menu.classList.contains('active') && !walletConnected) { connectWallet(); } } async function connectWallet() { try { // Try to fetch TITAN bank wallet first (server-side) const response = await fetch('/api/wallet'); const walletData = await response.json(); if (walletData.connected) { currentWallet = walletData.address; walletBalance = walletData.balance; walletConnected = true; // Update UI (guard DOM since navbar wallet was removed) const btn = document.getElementById('wallet-btn'); const shortAddr = currentWallet.slice(0, 6) + "..." + currentWallet.slice(-4); const textEl = document.getElementById('wallet-text'); if (textEl) textEl.innerText = shortAddr; const addrEl = document.getElementById('wallet-addr'); if (addrEl) addrEl.innerText = shortAddr; const statusEl = document.getElementById('wallet-status'); if (statusEl) statusEl.innerText = "Connected ✓"; const balEl = document.getElementById('wallet-balance'); if (balEl) balEl.innerText = walletBalance.toFixed(4) + " SOL"; if (btn) { btn.style.borderColor = "var(--titan-glow)"; btn.style.color = "#fff"; btn.style.background = "var(--titan-dim)"; } console.log("TITAN wallet connected:", currentWallet); } else { // Fallback: Try Phantom wallet if (!('solana' in window)) { console.warn("No TITAN wallet and no Phantom wallet found"); alert("No wallet connected. Install Phantom wallet or ensure TITAN bank is configured."); return; } const resp = await window.solana.connect(); currentWallet = resp.publicKey.toString(); walletConnected = true; // Update UI (guard DOM since navbar wallet was removed) const btn = document.getElementById('wallet-btn'); const shortAddr = currentWallet.slice(0, 6) + "..." + currentWallet.slice(-4); const textEl2 = document.getElementById('wallet-text'); if (textEl2) textEl2.innerText = shortAddr; const addrEl2 = document.getElementById('wallet-addr'); if (addrEl2) addrEl2.innerText = shortAddr; const statusEl2 = document.getElementById('wallet-status'); if (statusEl2) statusEl2.innerText = "Connected ✓"; if (btn) { btn.style.borderColor = "var(--titan-glow)"; btn.style.color = "#fff"; btn.style.background = "var(--titan-dim)"; } // Fetch wallet balance from Solana await fetchWalletBalance(currentWallet); console.log("Phantom wallet connected:", currentWallet); } } catch (err) { console.error("Wallet connection failed:", err); alert("Failed to connect wallet: " + err.message); } } async function fetchWalletBalance(wallet) { try { const response = await fetch('https://api.mainnet-beta.solana.com', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'getBalance', params: [wallet] }) }); const data = await response.json(); walletBalance = (data.result.value || 0) / 1_000_000_000; const balEl2 = document.getElementById('wallet-balance'); if (balEl2) balEl2.innerText = walletBalance.toFixed(4) + " SOL"; } catch (e) { console.log("Could not fetch balance:", e); } } function disconnectWallet() { walletConnected = false; currentWallet = null; walletBalance = 0; const textEl = document.getElementById('wallet-text'); if (textEl) textEl.innerText = "CONNECT WALLET"; const addrEl = document.getElementById('wallet-addr'); if (addrEl) addrEl.innerText = "Not Connected"; const statusEl = document.getElementById('wallet-status'); if (statusEl) statusEl.innerText = "Disconnected"; const balEl = document.getElementById('wallet-balance'); if (balEl) balEl.innerText = "--"; const menuEl = document.getElementById('wallet-menu'); if (menuEl) menuEl.classList.remove('active'); const pointsEl = document.getElementById('user-points'); if (pointsEl) pointsEl.innerText = "CONNECT"; const btn = document.getElementById('wallet-btn'); if (btn) { btn.style.borderColor = ""; btn.style.color = ""; btn.style.background = ""; } } // --- DEVICE SELECTION --- async function openDeviceModal(tier) { selectedDevice = null; window.currentRentalTier = tier; const deviceList = document.getElementById('device-list'); // Show modal immediately with loading state const modal = document.getElementById('device-modal'); if (modal) modal.style.display = 'flex'; // Show loading message if (deviceList) { deviceList.innerHTML = `
LOADING AVAILABLE DEVICES...
`; } // Try to fetch real-time device data from API try { const response = await fetch(`/api/devices/${tier}`); if (response.ok) { const devices = await response.json(); renderDeviceList(devices); } else { renderDeviceList(DEVICE_INVENTORY[tier] || []); } } catch (e) { console.log("Using local inventory for tier:", tier); renderDeviceList(DEVICE_INVENTORY[tier] || []); } } function renderDeviceList(devices) { const deviceList = document.getElementById('device-list'); if (!deviceList) return; if (!devices || devices.length === 0) { deviceList.innerHTML = `
NO DEVICES ONLINE FOR THIS TIER
`; return; } deviceList.innerHTML = devices.map(device => `
${device.name} • ${device.region} ${device.ram}
`).join(''); } function selectDevice(deviceId, element) { selectedDevice = deviceId; document.querySelectorAll('#device-list .device-row').forEach(el => { el.style.background = ''; }); if (element) { element.style.background = 'rgba(10, 255, 240, 0.15)'; } } function closeDeviceModal() { const modal = document.getElementById('device-modal'); if (modal) modal.style.display = 'none'; selectedDevice = null; } function confirmDeviceSelection() { if (!selectedDevice) { alert("Please select a device."); return; } closeDeviceModal(); proceedToRentalModal(); } // --- RENTAL FLOW --- async function rentHardware(tier) { if (!walletConnected) { alert("Please connect your wallet first."); toggleWalletMenu(); return; } openDeviceModal(tier); } // Minimal proceed-to-rental flow restored: populate modal and open it. function proceedToRentalModal() { try { const tier = window.currentRentalTier || selectedDevice || 'M2'; const rate = RATES[tier] || 0; const fee = rate * 0.001; const tip = 0.00005; const total = rate + fee + tip; const hwEl = document.getElementById('rental-hardware'); const rateEl = document.getElementById('rental-rate'); const totalEl = document.getElementById('rental-total'); const durEl = document.getElementById('rental-duration'); if (hwEl) hwEl.innerText = HARDWARE_NAMES[tier] || tier; if (rateEl) rateEl.innerText = '◎ ' + rate.toFixed(6) + ' SOL'; if (totalEl) totalEl.innerText = '◎ ' + total.toFixed(6) + ' SOL'; if (durEl) durEl.innerText = '1 HR'; const modal = document.getElementById('rental-modal'); if (modal) modal.classList.add('active'); } catch (e) { console.error('Failed to open rental modal', e); alert('Unable to prepare rental modal.'); } } function closeRentalModal() { document.getElementById('rental-modal').classList.remove('active'); } async function signRentalContract(evt) { if (!window.currentRentalTier) return; const tier = window.currentRentalTier; const hardwareCost = RATES[tier] || 0; const fee = hardwareCost * 0.001; const tip = 0.00005; const total = hardwareCost + fee + tip; if (walletBalance < total) { alert(`Insufficient balance. Need ${total.toFixed(6)} SOL, have ${walletBalance.toFixed(6)} SOL`); return; } try { const btn = (evt && evt.target) ? evt.target : document.querySelector('#rental-modal .btn-tac.btn-primary') || { innerText: '', disabled: false }; if (btn) { btn.innerText = "SIGNING..."; btn.disabled = true; } // Create pseudo transaction signature for demo const fakeSig = "5s" + Math.random().toString(36).substring(2, 15) + "SI64Rental"; // Call backend to record rental const res = await fetch("/api/rent", { method: "POST", headers: { "Content-Type": "application/json", "x-genesis-key": "TITAN_GENESIS_KEY_V1_SECURE" }, body: JSON.stringify({ wallet: currentWallet, tier: tier, duration_hours: 1, tx_signature: fakeSig, amount: total }) }); const data = await res.json(); if (data.contract_id) { alert(`✓ Contract Deployed!\n\nContract ID: ${data.contract_id}\nStatus: ACTIVE\nCompute allocation in progress...`); closeRentalModal(); updateDashboard(); } else { alert("Deployment failed: " + (data.detail || "Unknown error")); } } catch (e) { alert("Transaction failed: " + e.message); } finally { if (btn) { btn.innerText = "SIGN & DEPLOY"; btn.disabled = false; } } } // --- MODAL LOGIC --- function openDeployModal() { if (!walletConnected) { alert("Please connect your wallet first to provide compute."); toggleWalletMenu(); return; } document.getElementById('deploy-modal').style.display = 'flex'; } function closeDeployModal() { document.getElementById('deploy-modal').style.display = 'none'; } // --- TELEMETRY --- async function updateDashboard() { try { const response = await fetch(API_ENDPOINT); if (!response.ok) throw new Error('API Offline'); const data = await response.json(); const fleet = data.fleet_size || data.fleet || 0; const queue = (data.queue_depth || data.queue || 0).toLocaleString(); const revenue = parseFloat(data.total_revenue || data.paid || 0).toFixed(4); // Fetch real-time device data for all tiers const tiers = ['M2', 'ORIN', 'M3_ULTRA', 'THOR']; for (const tier of tiers) { try { const deviceResponse = await fetch(`/api/devices/${tier}`); if (deviceResponse.ok) { const devices = await deviceResponse.json(); DEVICE_INVENTORY[tier] = Array.isArray(devices) ? devices : []; } } catch (e) { DEVICE_INVENTORY[tier] = []; } } // Debug: Log device counts for each tier console.log('[TITAN DEBUG] DEVICE_INVENTORY counts:', { M2: (DEVICE_INVENTORY['M2'] || []).length, ORIN: (DEVICE_INVENTORY['ORIN'] || []).length, M3_ULTRA: (DEVICE_INVENTORY['M3_ULTRA'] || []).length, THOR: (DEVICE_INVENTORY['THOR'] || []).length }); const availM2 = document.getElementById('avail-M2'); const availORIN = document.getElementById('avail-ORIN'); const availM3 = document.getElementById('avail-M3_ULTRA'); const availTHOR = document.getElementById('avail-THOR'); if (availM2) availM2.innerText = (DEVICE_INVENTORY['M2'] || []).length; if (availORIN) availORIN.innerText = (DEVICE_INVENTORY['ORIN'] || []).length; if (availM3) availM3.innerText = (DEVICE_INVENTORY['M3_ULTRA'] || []).length; if (availTHOR) availTHOR.innerText = (DEVICE_INVENTORY['THOR'] || []).length; const fleetEl = document.getElementById('fleet-size'); const queueEl = document.getElementById('queue-depth'); const revEl = document.getElementById('revenue'); if (fleetEl) fleetEl.innerText = fleet; if (queueEl) queueEl.innerText = queue; if (revEl) revEl.innerText = '◎ ' + revenue; const tbody = document.getElementById('ledger-body'); if (tbody) { if (data.transactions && data.transactions.length > 0) { tbody.innerHTML = data.transactions.map(tx => { const workerFull = (tx.worker || tx.entity || "").toString(); const workerShort = workerFull ? (workerFull.length > 12 ? workerFull.slice(0, 6) + "..." + workerFull.slice(-4) : workerFull) : "—"; const kind = tx.type === 'RENTAL' ? 'RENTAL' : 'JOB'; const timeLabel = (tx.time || '').toString(); const timeShort = timeLabel.includes(' ') ? timeLabel.split(' ')[1] : timeLabel; const amountVal = parseFloat(tx.amount || tx.val || 0).toFixed(4); let proofCell = ''; if (tx.tx && tx.tx !== 'None' && tx.tx !== 'null' && tx.tx.length > 10) { proofCell = `${tx.tx.slice(0,8)}…`; } else { proofCell = ''; } return ` ${(tx.job_id || '').toString().slice(0,8)} ${workerShort} [${kind}] ◎ ${amountVal} ${timeShort} ${proofCell} `; }).join(''); } else { if (!tbody.innerHTML.includes('tr')) { tbody.innerHTML = `WAITING FOR NEXT BLOCK...`; } } } } catch (e) { console.error('Telemetry Link Lost', e); } } document.addEventListener('click', (e) => { const dropdown = document.querySelector('.wallet-dropdown'); if (dropdown && !dropdown.contains(e.target)) { const menu = document.getElementById('wallet-menu'); if (menu) menu.classList.remove('active'); } }); // --- Ledger client integration --- const ORIN_WALLET = '3ykXYQWyoRsAhJ8GDQforFsK37emQgeri5DkDTUQfShz'; let ledgerLimit = 50; let ledgerOffset = 0; const ledgerCacheTTL = 10; // seconds const ledgerMinRefresh = 5; // seconds (throttle) let ledgerLastFetch = 0; function _cacheKey(worker, limit, offset) { const w = worker || 'ALL'; return `ledger_cache:${w}:${limit}:${offset}`; } async function loadLedger(useCache=true) { const workerInput = document.getElementById('ledger-filter-worker'); const orinToggle = document.getElementById('ledger-toggle-orin'); const tbody = document.getElementById('ledger-body'); const countEl = document.getElementById('ledger-count'); const totalEl = document.getElementById('ledger-total'); // If the Orin toggle is checked, force the worker filter if (orinToggle && orinToggle.checked) { if (workerInput) { workerInput.value = ORIN_WALLET; workerInput.disabled = true; } } else { if (workerInput) workerInput.disabled = false; } const worker = (workerInput && workerInput.value) ? workerInput.value.trim() : ''; const qs = new URLSearchParams({ limit: ledgerLimit.toString(), offset: ledgerOffset.toString() }); if (worker) qs.set('worker', worker); const now = Math.floor(Date.now()/1000); // Throttle rapid calls if (now - ledgerLastFetch < ledgerMinRefresh) { // serve from cache if available if (useCache) { const ck = _cacheKey(worker, ledgerLimit, ledgerOffset); try { const raw = localStorage.getItem(ck); if (raw) { const obj = JSON.parse(raw); if (now - obj.ts < ledgerCacheTTL) { renderLedgerFromCache(obj.data); return; } } } catch (e) { /* ignore cache errors */ } } // otherwise wait and schedule a refresh setTimeout(() => loadLedger(), (ledgerMinRefresh - (now - ledgerLastFetch)) * 1000 + 50); return; } const cacheKey = _cacheKey(worker, ledgerLimit, ledgerOffset); // Attempt to use recent cache first if (useCache) { try { const raw = localStorage.getItem(cacheKey); if (raw) { const obj = JSON.parse(raw); if (now - obj.ts < ledgerCacheTTL) { renderLedgerFromCache(obj.data); return; } } } catch (e) { /* ignore cache errors */ } } try { ledgerLastFetch = now; tbody.innerHTML = `LOADING...`; const res = await fetch(`/api/billing/transactions?${qs.toString()}`); if (!res.ok) throw new Error(`HTTP ${res.status}`); const data = await res.json(); // Cache response try { localStorage.setItem(cacheKey, JSON.stringify({ ts: now, data })); } catch (e) { /* ignore */ } renderLedgerFromCache(data); // Update aggregate total for the selected worker (if any) if (worker) fetchTotalForWorker(worker); } catch (err) { console.error('Ledger load failed', err); tbody.innerHTML = `ERROR LOADING LEDGER`; } } function renderLedgerFromCache(data) { const tbody = document.getElementById('ledger-body'); const countEl = document.getElementById('ledger-count'); const totalEl = document.getElementById('ledger-total'); const txs = (data && data.transactions) ? data.transactions : []; countEl.textContent = (data && data.count) || txs.length || 0; totalEl.textContent = (data && data.total) || 0; if (txs.length === 0) { tbody.innerHTML = `NO TRANSACTIONS`; return; } tbody.innerHTML = txs.map(tx => { const jid = (tx.job_id || '').toString(); const worker = (tx.worker_wallet || '—').toString(); const workerShort = worker.length>12 ? (worker.slice(0,6)+'…'+worker.slice(-6)) : worker; const amount = (parseFloat(tx.amount_sol || 0) || 0).toFixed(6); const ts = (tx.timestamp || '').toString(); const txsig = tx.tx_signature || tx.tx || ''; const proof = (txsig && txsig.length>8) ? `${txsig.slice(0,8)}…` : ''; return ` ${jid} ${workerShort} ◎ ${amount} ${ts} ${proof} `; }).join(''); } // --- Compute total SOL for a worker via backend aggregate endpoint --- async function fetchTotalForWorker(worker) { const outEl = document.getElementById('orin-total-sol'); if (!outEl) return; if (!worker) { outEl.innerText = '0.000000'; return; } try { const res = await fetch(`/api/billing/total?worker=${encodeURIComponent(worker)}`); if (!res.ok) throw new Error('Failed to fetch total'); const data = await res.json(); const total = parseFloat(data.total_sol || 0) || 0; outEl.innerText = total.toFixed(6); } catch (e) { console.error('Failed to fetch worker total', e); outEl.innerText = '0.000000'; } } function prevPage() { if (ledgerOffset - ledgerLimit >= 0) { ledgerOffset -= ledgerLimit; loadLedger(); } } function nextPage() { ledgerOffset += ledgerLimit; loadLedger(); } function clearFilter() { const workerInput = document.getElementById('ledger-filter-worker'); if (workerInput) workerInput.value = ''; ledgerOffset = 0; loadLedger(); } // Trigger load on Enter in the filter input document.addEventListener('keydown', (e) => { if (e.key === 'Enter') { const active = document.activeElement || {}; if (active && active.id === 'ledger-filter-worker') { ledgerOffset = 0; loadLedger(); } } }); // Dashboard/Telemetry disabled by default to prevent noisy 404s during testing const ENABLE_DASHBOARD = false; // set to true only when backend telemetry endpoints exist if (ENABLE_DASHBOARD) { // Initial load and periodic refresh window.addEventListener('load', async () => { await updateDashboard(); await loadLedger(); }); setInterval(updateDashboard, 2000); // Ledger auto-refresh throttled and cached (every 10s) setInterval(() => loadLedger(), 10000); } // Wire Orin toggle behavior const orinToggleEl = document.getElementById('ledger-toggle-orin'); if (orinToggleEl) { orinToggleEl.addEventListener('change', () => { if (orinToggleEl.checked) { const w = document.getElementById('ledger-filter-worker'); if (w) { w.value = ORIN_WALLET; w.disabled = true; } } else { const w = document.getElementById('ledger-filter-worker'); if (w) { w.disabled = false; } } ledgerOffset = 0; loadLedger(); });