blockchain-api
Version:
API utilities for interacting with the Exatechl2 blockchain
88 lines (75 loc) ⢠2.9 kB
text/typescript
import {
getLatestTransactionsFromExplorer,
formatNumber,
formatAddress,
parseHexToDecimal,
formatTableTime
} from '../src';
/**
* Display transactions in a formatted table
*/
async function displayTransactions() {
try {
console.log('\nš Fetching latest transactions from Exatechl2 blockchain...');
// Pagination parameters
const page = 1;
const perPage = 10;
// Get paginated transactions from the blockchain explorer
const { transactions, totalCount, totalPages } = await getLatestTransactionsFromExplorer(page, perPage);
// Format and display transaction data in a table
console.log(`\nš Latest Transactions (Page ${page}/${totalPages}, Total: ${formatNumber(totalCount)})`);
console.log('ā'.repeat(150));
console.log(
'Hash'.padEnd(20) +
'Method'.padEnd(15) +
'Block'.padEnd(10) +
'Age'.padEnd(35) +
'From'.padEnd(20) +
'To'.padEnd(20) +
'Value'.padEnd(15) +
'Txn Fee'.padEnd(15) +
'Status'.padEnd(10)
);
console.log('ā'.repeat(150));
transactions.forEach((tx: any) => {
// Handle block number display (convert hex to decimal if needed)
let blockDisplay = tx.blockNumber || 'Pending';
if (typeof blockDisplay === 'string' && blockDisplay.startsWith('0x')) {
blockDisplay = parseHexToDecimal(blockDisplay);
}
// Directly use value and txFee strings if they're already formatted
let valueDisplay = tx.value || '0';
let feeDisplay = tx.txFee || '0';
// Use the proper table-optimized time formatter (a shorter version of formatRelativeTime)
let ageDisplay = 'Unknown';
if (tx.timestamp) {
ageDisplay = formatTableTime(tx.timestamp);
}
console.log(
formatAddress(tx.hash).padEnd(20) +
(tx.methodDisplayName || (tx.method && tx.method.split('(')[0]) || 'Transfer').padEnd(15) +
String(blockDisplay).padEnd(10) +
ageDisplay.padEnd(35) +
formatAddress(tx.from).padEnd(20) +
formatAddress(tx.to || 'Contract Creation').padEnd(20) +
valueDisplay.padEnd(15) +
feeDisplay.padEnd(15) +
(tx.status === 'success' ? 'ā
Success' : (tx.status === 'failed' ? 'ā Failed' : 'ā³ Pending')).padEnd(10)
);
});
console.log('ā'.repeat(150));
console.log(`Showing ${transactions.length} of ${formatNumber(totalCount)} transactions\n`);
} catch (error) {
console.error('ā Error fetching transactions:', error instanceof Error ? error.message : error);
}
}
// Main function to run example
async function main() {
console.log('='.repeat(150));
console.log('š BLOCKCHAIN-API EXAMPLE: LIST TRANSACTIONS');
console.log('='.repeat(150));
await displayTransactions();
console.log('\nā
Example complete');
}
// Run the example
main().catch(console.error);