From 2481ec0864062b9a8f9eaf037eb350446617a6fe Mon Sep 17 00:00:00 2001 From: triangles-bot Date: Tue, 16 Jun 2026 15:11:31 -0700 Subject: [PATCH] explorer: add Rich List page (top holders from scanner API) --- src/lib/api.ts | 4 +++ src/routes/+layout.svelte | 1 + src/routes/richlist/+page.server.ts | 11 ++++++++ src/routes/richlist/+page.svelte | 42 +++++++++++++++++++++++++++++ 4 files changed, 58 insertions(+) create mode 100644 src/routes/richlist/+page.server.ts create mode 100644 src/routes/richlist/+page.svelte diff --git a/src/lib/api.ts b/src/lib/api.ts index 3cb5d1d..7f71814 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -137,3 +137,7 @@ export async function getLatestBlocks(count: number): Promise { .filter((r): r is PromiseFulfilledResult => r.status === 'fulfilled') .map(r => r.value); } + +export interface RichListEntry { address: string; balance: number; } +export interface RichListResponse { status: string; total: number; addresses: RichListEntry[]; } +export const getRichList = (limit = 100) => getCached(`richlist?limit=${limit}`); diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index a0af0ea..4b7f289 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -11,6 +11,7 @@ { href: '/staking', label: 'Staking' }, { href: '/network', label: 'Network' }, { href: '/nodes', label: 'Nodes' }, + { href: '/richlist', label: 'Rich List' }, { href: '/mempool', label: 'Mempool' }, { href: '/api', label: 'API' } ]; diff --git a/src/routes/richlist/+page.server.ts b/src/routes/richlist/+page.server.ts new file mode 100644 index 0000000..ce9fff5 --- /dev/null +++ b/src/routes/richlist/+page.server.ts @@ -0,0 +1,11 @@ +import { getRichList } from '$lib/api'; +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async () => { + try { + const data = await getRichList(100); + return { richlist: data.addresses || [], total: data.total || 0 }; + } catch (e) { + return { richlist: [], total: 0, error: String(e) }; + } +}; diff --git a/src/routes/richlist/+page.svelte b/src/routes/richlist/+page.svelte new file mode 100644 index 0000000..962fcad --- /dev/null +++ b/src/routes/richlist/+page.svelte @@ -0,0 +1,42 @@ + + +Rich List - Triangles Block Explorer + +
+

+ Rich List + (top {data.richlist.length} of {data.total} addresses) +

+ + {#if data.error} +

Rich list is being generated, please check back shortly.

+ {:else} +
+ + + + + + + + + + + {#each data.richlist as e, i} + + + + + + + {/each} + +
#AddressBalance (TRI)% of supply
{i + 1} + {e.address} + {e.balance.toLocaleString(undefined, { maximumFractionDigits: 2 })}{(e.balance / SUPPLY * 100).toFixed(3)}%
+
+ {/if} +