/** * Data — Logs, transfers, receipts, portfolio, chain health, allowances. * * Run: npx tsx examples/14-data.ts */ import { Spectrum } from '@spectrumnodes/sdk'; const spectrum = new Spectrum({ api: process.env.SPECTRUM_API! }); const USDC = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'; const VITALIK = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'; const UNISWAP_ROUTER = '0xE592427A0AEce92De3Edee1F18E0157C05861564'; async function main() { // --- getLogs --- const logs = await spectrum.data.getLogs('ethereum', { address: USDC, fromBlock: 19000000, toBlock: 19000100, }); console.log(`Logs for USDC (blocks 19M-19M+100): ${logs.count}`); for (const log of logs.logs.slice(0, 3)) { console.log(` Block ${log.blockNumber}: ${log.topics[0]?.slice(0, 10)}...`); } // --- getTransfers --- const transfers = await spectrum.data.getTransfers('ethereum', VITALIK, { fromBlock: 19000000, toBlock: 19001000, }); console.log(`\nTransfers for Vitalik: ${transfers.count}`); for (const t of transfers.transfers.slice(0, 3)) { console.log(` ${t.from.slice(0, 10)}... -> ${t.to.slice(0, 10)}...: ${t.value}`); } // --- getReceipt --- // Use a known transaction hash const txHash = '0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060'; // first ETH tx try { const receipt = await spectrum.data.getReceipt('ethereum', txHash); console.log(`\nReceipt for ${txHash.slice(0, 20)}...:`); console.log(` Status: ${receipt.status}`); console.log(` Gas used: ${receipt.gasUsed}`); console.log(` Block: ${receipt.blockNumber}`); } catch { console.log(`\nReceipt not available for this tx`); } // --- getPortfolio --- const portfolio = await spectrum.data.getPortfolio('ethereum', VITALIK); console.log(`\nPortfolio for Vitalik:`); console.log(` ${JSON.stringify(portfolio).slice(0, 300)}...`); // --- getChainHealth --- const health = await spectrum.data.getChainHealth('ethereum'); console.log(`\nEthereum health:`); console.log(` Block: ${health.blockHeight}`); console.log(` Status: ${health.status}`); // --- getNetworkCalendar --- const calendar = await spectrum.networkCalendar.getNetworkCalendar({ month: '2026-08', chain: 'ethereum' }); console.log(`\nNetwork calendar (2026-08, ethereum): ${calendar.entries.length} entries`); for (const entry of calendar.entries.slice(0, 3)) { console.log(` ${entry.date}: ${entry.description} (${entry.eventType})`); } // --- getAllowance (on tokens namespace, not data) --- const allowance = await spectrum.tokens.getAllowance('ethereum', USDC, { owner: VITALIK, spender: UNISWAP_ROUTER, }); console.log(`\nUSDC allowance (Vitalik -> Uniswap): ${allowance.allowance}`); // --- traceTransaction --- try { const trace = await spectrum.data.traceTransaction('ethereum', txHash); console.log(`\nTransaction trace (${trace.tracer}):`); console.log(` ${JSON.stringify(trace.trace).slice(0, 200)}...`); } catch { console.log(`\nTrace not available for this tx`); } } main().catch(console.error);