blockchain-api
Version:
API utilities for interacting with the Exatechl2 blockchain
121 lines (120 loc) • 3.96 kB
JavaScript
;
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');
}
}