diff --git a/server.py b/server.py index 13250df..a8a4b17 100644 --- a/server.py +++ b/server.py @@ -85,6 +85,12 @@ def block_route(block_id): return render_template("index.html", datetime=current_datetime) +@app.route("/header/") +def header_route(block_id): + current_datetime = datetime.now().strftime("%d %b %Y %I:%M %p") + return render_template("index.html", datetime=current_datetime) + + @app.route("/address/") def address_route(address): current_datetime = datetime.now().strftime("%d %b %Y %I:%M %p") diff --git a/templates/index.html b/templates/index.html index 9263124..7f07d75 100644 --- a/templates/index.html +++ b/templates/index.html @@ -148,6 +148,11 @@ document.querySelector('[data-tab="block"]').click(); searchBlock(); break; + case 'header': + document.getElementById('block-input').value = value; + document.querySelector('[data-tab="block"]').click(); + searchHeader(); + break; case 'tx': document.getElementById('tx-input').value = value; document.querySelector('[data-tab="tx"]').click(); @@ -301,6 +306,46 @@ return html; } + // Format block header data nicely + function formatHeaderData(header) { + if (!header || header.error) { + return `
Error: ${header.error || 'Invalid header data'}
`; + } + + const formatTime = (timestamp) => new Date(timestamp * 1000).toLocaleString(); + + let html = ` +
+
+

Block Header Info

+
+
Hash: ${header.hash}
+
Height: ${header.height.toLocaleString()}
+
Version: ${header.version}
+
Time: ${formatTime(header.time)}
+
Bits: ${header.bits}
+
Nonce: ${header.nonce.toLocaleString()}
+
Previous Block: ${header.prevBlock}
+
Merkle Root: ${header.merkleRoot}
+
Witness Root: ${header.witnessRoot}
+
Tree Root: ${header.treeRoot}
+
Reserved Root: ${header.reservedRoot}
+
Extra Nonce: ${header.extraNonce}
+
Mask: ${header.mask}
+
Chainwork: ${header.chainwork}
+
+
+ +
+ +
${JSON.stringify(header, null, 2)}
+
+
+ `; + + return html; + } + // Format transaction data nicely function formatTransactionData(tx) { if (!tx || tx.error) { @@ -456,8 +501,16 @@ alert('Please enter a block height or hash'); return; } + updateURL('header', blockId); const data = await apiCall(`header/${blockId}`); - displayResult('block-result', data); + + // Use formatted display instead of raw JSON + const resultElement = document.getElementById('block-result'); + if (data.error) { + resultElement.innerHTML = `
Error: ${data.error}
`; + } else { + resultElement.innerHTML = formatHeaderData(data); + } } async function searchTx() {