UNPKG

blockchain-api

Version:

API utilities for interacting with the Exatechl2 blockchain

121 lines (120 loc) 3.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.formatBlockForJsonExport = formatBlockForJsonExport; exports.getBlockCsvHeaders = getBlockCsvHeaders; exports.formatBlockForCsvExport = formatBlockForCsvExport; exports.formatBlockDataForExport = formatBlockDataForExport; const formatters_1 = require("../../utils/formatters"); /** * * @param {FormattedBlock} block * @returns {Object} */ function formatBlockForJsonExport(block) { return { blockNumber: block.number, blockHash: block.hash || '', timestamp: (0, formatters_1.parseBlockchainTimestamp)(block.timestamp).toISOString(), status: block.status, transactions: block.txCount, size: block.size, gasUsed: block.gasUsed, gasLimit: block.gasLimit, validator: block.validator || '', parentHash: block.parentHash || '', rootHash: block.rootHash || '', extraData: block.extraData || '', baseFeePerGas: block.baseFee || '', l1BlockNumber: block.l1BlockNumber || null, logsBloom: block.logsBloom || '', difficulty: block.difficulty || '', mixHash: block.mixHash || '', nonce: block.nonce || '', sha3Uncles: block.sha3Uncles || '', totalDifficulty: block.totalDifficulty || '', sendCount: block.sendCount || '', sendRoot: block.sendRoot || '', stateRoot: block.stateRoot || '', receiptsRoot: block.receiptsRoot || '' }; } /** * * @returns {string} */ function getBlockCsvHeaders() { return 'Block Number,Timestamp,Status,Transactions,Size,Gas Used,Gas Limit,Validator,Parent Hash,Root Hash,L1 Block Number,Logs Bloom,Difficulty,Mix Hash,Nonce,Sha3 Uncles,Total Difficulty,Send Count,Send Root,State Root,Receipts Root'; } /** * * @param {FormattedBlock} block * @returns {string} */ function formatBlockForCsvExport(block) { const row = [ block.numberDecimal, (0, formatters_1.parseBlockchainTimestamp)(block.timestamp).toISOString(), block.status, block.txCount, block.size, block.gasUsed, block.gasLimit, block.validator || '', block.parentHash || '', block.rootHash || '', block.l1BlockNumber || '', block.logsBloom || '', block.difficulty || '', block.mixHash || '', block.nonce || '', block.sha3Uncles || '', block.totalDifficulty || '', block.sendCount || '', block.sendRoot || '', block.stateRoot || '', block.receiptsRoot || '' ]; return row.map(field => { if (field === null || field === undefined) return ''; const str = String(field); return str.includes(',') ? `"${str}"` : str; }).join(','); } /** * * @param {FormattedBlock} block * @param {string} format * @returns {ExportResult} */ function formatBlockDataForExport(block, format) { if (format === 'json') { const jsonData = formatBlockForJsonExport(block); if (block.transactions && Array.isArray(block.transactions)) { jsonData.transactionsPreview = block.transactions.slice(0, 5).map(tx => ({ hash: tx.hash, from: tx.from, to: tx.to, value: tx.value, status: tx.status })); } return { content: JSON.stringify(jsonData, null, 2), filename: `block-${block.numberDecimal}.json`, dataType: 'application/json' }; } else if (format === 'csv') { const headers = getBlockCsvHeaders(); const row = formatBlockForCsvExport(block); return { content: `${headers}\n${row}`, filename: `block-${block.numberDecimal}.csv`, dataType: 'text/csv' }; } else { throw new Error('Unsupported export format'); } }