Tip {{ stats ? '#' + formatNumber(stats.last_known_block_index) : '--' }} {{ stats ? formatNumber(stats.height) + ' total blocks' : '--' }}
Transactions {{ stats ? formatNumber(stats.transactions_count) : '--' }} Chain-wide confirmed count
Supply {{ stats ? formatCoins(stats.already_generated_coins) : '--' }} Already generated coins
Difficulty {{ stats ? formatDifficulty(stats.difficulty) : '--' }} Target interval {{ formatDuration(blockTargetInterval) }}
Hashrate {{ stats ? formatHashrate(stats.difficulty / blockTargetInterval) : '--' }} {{ averageAlgoHashrate ? 'Avg.' + ': ' + formatHashrate(averageAlgoHashrate) : 'Based on current network difficulty' }}
Next reward {{ stats ? formatCoins(stats.next_reward) : '--' }} Projected base block reward
Min fee {{ stats ? formatCoins(stats.min_fee) : '--' }} Network minimum fee
Account numbers {{ stats ? formatNumber(stats.registered_account_numbers_count) : '--' }} Registered on-chain aliases
Connected node {{ nodeLabel(api) }}
{{ statsStatusText }} {{ statsFreshnessText }}

Network difficulty

{{ difficultyChart ? 'Recent ' + difficultyChart.points.length + ' blocks' : 'Recent blocks' }}

Click any point to open that block and inspect its details.

{{ formatDifficulty(difficultyChart.latest) }} Latest difficulty
Avg difficulty {{ formatDifficulty(difficultyChart.average) }}
Avg interval {{ formatDuration(difficultyChart.averageLapse) }}
Avg size {{ formatBytes(difficultyChart.averageSize) }}
Avg tx / block {{ formatNumber(Math.round(difficultyChart.averageTxCount * 10) / 10) }}
Difficulty over time H {{ formatNumber(difficultyChart.firstHeight) }} H {{ formatNumber(difficultyChart.lastHeight) }}

Load recent blocks to draw the chart.

Transactions pool

Pending mempool

Loading mempool...

No pending transactions.

Received Amount Fee Size Hash
{{ formatDateTime(tx.receive_time) }} {{ formatRelativeTime(tx.receive_time) }}
{{ formatCoins(tx.amount_out, false) }} {{ formatCoins(tx.fee, false) }} {{ formatBytes(tx.size) }} {{ tx.hash }}

Recent transactions

Latest confirmed transactions

Loading recent transactions...

{{ home.recentTransactionsError }}

No confirmed transactions in the current block window.

Confirmed Amount Fee Size Block Hash
{{ formatDateTime(tx.timestamp) }} {{ formatRelativeTime(tx.timestamp) }}
{{ formatCoins(tx.totalOutputsAmount, false) }} {{ formatCoins(tx.fee, false) }} {{ formatBytes(tx.size) }} #{{ formatNumber(tx.blockIndex) }} {{ tx.hash }}

Recent blocks

Latest chain activity

Loading blocks...

{{ home.error }}

Height Time Interval Hash Size Difficulty Txs
#{{ formatNumber(block.height) }}
{{ formatDateTime(block.timestamp) }} {{ formatRelativeTime(block.timestamp) }}
{{ block.lapse ? formatDuration(block.lapse) : '--' }} {{ block.hash }} {{ formatBytes(block.cumulative_size) }} {{ formatDifficulty(block.difficulty) }} {{ formatNumber(block.transactions_count) }}

Historical charts

Network stats

{{ historicStatsChart.sourceLabel }} · {{ historicStatsChart.rangeLabel }} · {{ formatNumber(historicStatsChart.points.length) }} points

Block stats from the connected RPC node.

Latest {{ historicStatsChart.metric.label }} {{ historicStatsChart.latest.displayValue }} H {{ formatNumber(historicStatsChart.latest.height) }}
Average {{ formatHistoricStatsMetricValue(historicStatsChart.metric.key, null, historicStatsChart.average, true) }} {{ formatNumber(historicStatsChart.points.length) }} sampled points
Peak {{ historicStatsChart.maximumPoint.displayValue }} H {{ formatNumber(historicStatsChart.maximumPoint.height) }}
Step {{ historicStatsChart.sampleStep ? '~' + formatNumber(historicStatsChart.sampleStep) : '--' }} Blocks between samples

Stats RPC

{{ historicStatsChart ? historicStatsChart.metric.label : 'Historical series' }}

{{ historicStatsChart.latest.displayValue }} Latest sample

Loading historical stats...

{{ historicStats.error }}

Loading block...

{{ blockView.error }}

Loading transaction...

{{ txView.error }}

Payment ID

{{ route.params.hash }}

Transactions found for this payment identifier.

Loading transactions...

{{ paymentView.error }}

No transactions found for this payment ID.

Hash Fee Total amount Size
{{ transaction.hash }} {{ formatCoins(transaction.fee, false) }} {{ formatCoins(transaction.amount_out || transaction.totalOutputsAmount, false) }} {{ formatBytes(transaction.size) }}

Address

{{ route.params.address }}

Bech32m decoding, post-quantum key inspection, and registered account-number lookup.

Validating address...

{{ addressView.error }}

Validation

Address status

{{ addressView.result && addressView.result.isValid ? 'Address is valid' : 'Address is invalid' }}

Bech32m checksum verified — {{ addressView.result.network }} address{{ addressView.result.nodeConfirmed === false ? ' (the connected node runs the other network)' : '' }}.

Network{{ addressView.result.network }} ({{ addressView.result.hrp }})
View public key
ML-KEM-768 ({{ formatNumber(addressView.result.viewPublicKey.length / 2) }} bytes)

{{ addressView.result.viewPublicKey }}

Spend public key
ML-DSA-65 ({{ formatNumber(addressView.result.spendPublicKey.length / 2) }} bytes)

{{ addressView.result.spendPublicKey }}

Privacy note

Why balances stay hidden

This explorer cannot show a Discrete address balance or its full history. Every payment is delivered to a one-time stealth output: the sender encapsulates a secret to the recipient's ML-KEM-768 view key, so only the recipient can recognize which outputs are theirs. Observers cannot map funds back to a public address the way they can on transparent chains.

Account number

{{ route.params.accountNumber }}

Resolve a registered account number to its on-chain post-quantum identity keys.

Resolving account number...

{{ accountNumberView.error }}

Node monitor

Public network nodes

Live node health and common chain data from the published HTTPS list.

Loading nodes...

{{ nodesView.error }}

Alternative blocks

Competing chain tips

Alternative blocks currently visible from the connected node.

Alt blocks {{ formatNumber(altView.items.length) }}

Loading alt blocks...

{{ altView.error }}

No alternative blocks reported by this node.

Height Time Hash Size Difficulty Txs
{{ formatNumber(block.height) }}
{{ formatDateTime(block.timestamp) }} {{ formatRelativeTime(block.timestamp) }}
{{ block.hash }} {{ formatBytes(block.cumulative_size) }} {{ formatDifficulty(block.difficulty) }} {{ formatNumber(block.transactions_count) }}

Tools

Explorer utilities

A collection of useful tools for interacting with the Discrete blockchain.

{{ tool.label }}

{{ tool.description }}

Tools

Broadcast transaction

Paste raw transaction hex and submit it to the connected node.

{{ broadcastTool.error }}
{{ broadcastTool.success }}

Tools

Validate address

Check whether an address is valid and inspect its public keys.

{{ validateTool.error }}
{{ validateTool.result.isValid ? 'Valid ' + validateTool.result.form : 'Not a valid address or account number' }}

Tools

Verify signed message

Verify whether a post-quantum message signature matches the supplied address.

{{ verifyMessageTool.error }}
{{ verifyMessageTool.result.sigValid ? 'Signature is valid' : 'Signature is invalid' }}

Tools

Amount converter

Convert between atomic units and human-readable XDS values.

Tools

Payment ID tools

Generate a payment ID, decode one to text, or encode a short ASCII memo into one.

Settings

Appearance and other preferences

Choose a theme, switch your RPC endpoint, etc.

Appearance

Theme

Node endpoint

Preferred RPC

Routing

Explorer links

Block/block/<hash-or-height>
Transaction/transaction/<hash>
Payment ID/payment-id/<hash>
Address/address/<address>
Account number/account/<number>
Loading...
{{ toast.message }}