Skip to main content

Wallet Profile

The Wallet Profile panel (WalletProfilePanel) is WalletWall’s compact, single-wallet overview. It self-fetches on-chain context for one Ethereum address and presents it as a scannable read-only summary, then hands off to the heavier Whale Watcher workspace for full signal analysis. The panel is a read-only intelligence surface: it never holds custody, never signs, and never writes to a wallet.

Panel layout

The panel renders vertically:
  1. Identicon header — ENS or shortened address, chain badge, copy-address, and Etherscan link
  2. Hero balance + supporting metric cards
  3. Holdings strip with composition donut
  4. Transaction-cadence heatmap
  5. Transfer flow ledger (inflow / outflow)
  6. Behavior labels and confidence caveats
  7. Ranked lists — top tokens by transfer volume, top counterparties, related pools/contracts, last 20 transfers
  8. Contextual onward paths

Identicon header

Each wallet gets a deterministic 5×5 mirrored identicon derived from its address, so the same wallet always renders the same mark. The header shows the wallet name (ENS when available, otherwise the shortened address), an Ethereum chain badge, a copy-to-clipboard control, and an Etherscan link.
Outbound address links are only constructed for well-formed 0x… hex addresses (etherscanAddress()). Non-address values (ENS, protocol names) and any unsafe scheme such as javascript: are never turned into links — this prevents DOM-based link injection (CodeQL js/xss-through-dom).

Hero balance and metrics

A hero card shows the wallet’s native ETH balance with an estimated USD value beneath it, alongside three supporting metric cards:
MetricSource
Native balanceethBalance (ETH) with totalValueUSD hint
TransactionstxCount — labelled “Recent sample” when the dataset is sampled
CounterpartiesuniqueCounterparties from the baseline
Last activeRelative time (e.g. “2 days ago”) with the absolute date as a hint

Holdings strip and composition donut

The embedded WalletHoldingsStrip shows priced ERC-20 holdings — or 90-day trading exposure — from /api/wallet-portfolio. When composition is shown, a hand-rolled SVG donut (HoldingsDonut) renders the top 5 priced holdings plus an aggregated “Other” slice, so portfolio concentration is visible at a glance.
Holdings are sourced from the configured Dune portfolio dataset. Wallets not present in the dataset show no holdings rather than a fabricated value, and only positions above $100 are charted.

Transaction-cadence heatmap

A daily transaction-count timeline (buildActivityTimeline) drives an activity heatmap. Transaction counts are reliable even where per-transfer USD is missing, so the cadence stays meaningful regardless of pricing gaps. The panel labels this explicitly as cadence from the sampled transfers — not full wallet history.

Transfer flow ledger

The transfer flow ledger (TransferFlowLedger) is a two-column inflow/outflow view of the wallet’s largest counterparties. It replaced an earlier SVG sankey diagram, which distorted badly because preserveAspectRatio="none" stretched its strokes into wedges. The ledger can display either USD-denominated flow or raw transfer counts.

Holdings value vs. transfer throughput

The panel deliberately separates two things that are easy to conflate:
  • Holdings (the donut and holdings strip) — what the wallet currently holds, priced.
  • Transfer volume / throughput (the “Top tokens by transfer volume” list) — the cumulative notional that has moved through the wallet across the sampled transfers.
The token volume list is tagged “Flow, not holdings” and footnoted as throughput, not current value, with a pointer to the Holdings card for priced positions. This avoids implying that a high-throughput wallet is necessarily a high-value one.

Behavior labels

Structural and activity descriptors (behaviorLabels) render as status badges, with elevated-risk signals separated into a “Confidence caveats” list. Labels are observational descriptors, not findings of wrongdoing. A DataSourceBadge reports the provider, fetch time, and a confidence level that drops to low when fallback data is in use.

Contextual onward paths

When an onNavigate handler is supplied, the panel renders a signal-gated “Explore with other tools” section:
PathWhen shownDestination
Review Quantum ExposureWhenever the panel has valid wallet contextQuantum route, prefilled with the wallet (qw)
Check Vault ReadinessOnly when vault-relevant signals are presentStablecoin Vault route, prefilled with wallet and source=wallet-profile
Vault Readiness is gated by isVaultRelevant(): it requires a valid EVM address plus secondary signals such as stablecoin flow before the CTA appears, so the vault path is only offered to wallets where read-only rehearsal is actually worth evaluating. The CTA copy states plainly that it is a read-only evaluation with no custody and no wallet writes. This carries a source=wallet-profile context into the Stablecoin Vault readiness flow so the destination can acknowledge where the wallet came from. See Stablecoin Vault for the readiness journey and custody boundaries.

Deep Dive handoff

The “Deep Dive →” actions invoke onDeepDive with the profile node, transitioning from the compact profile into the full Whale Watcher workspace (adversarial signals, narrative engine, protocol affinity, and the Quantum Exposure section).