Commit Graph
1272 Commits
Author SHA1 Message Date
hanzo-dev da0fa433fe feat: multi-brand build matrix + white-label support
Build the same source four ways from one repo:

- ghcr.io/luxfi/explore         (lux brand, default)
- ghcr.io/luxfi/explore-hanzo   (hanzo brand)
- ghcr.io/luxfi/explore-zoo     (zoo brand)
- ghcr.io/luxfi/explore-pars    (pars brand)

Each is built for linux/amd64 + linux/arm64 in parallel on hanzo ARC
runners (no QEMU), then merged into a multi-arch manifest.

Brand selection at build time via NEXT_PUBLIC_BRAND, with all
brand-specific assets (logo, favicon, theme, IAM URL) loaded from
NEXT_PUBLIC_* env vars — no hardcoded brand strings in source.

External operators set NEXT_PUBLIC_BRAND=other and supply their own
NEXT_PUBLIC_* env vars (see .env.example.external). The repo carries
no third-party trademarks.

Files:
- lib/white-label.ts                             brand detection + helpers
- .env.example.{lux,hanzo,zoo,pars,external}     deploy templates
- .github/workflows/build-lux.yml                4-brand × 2-arch matrix
- Dockerfile                                     accept NEXT_PUBLIC_BRAND
- configs/app/chainRegistry.ts                   add SPC + Pars devnet,
                                                 chainId fields, white-label
                                                 chain builder
2026-05-05 20:50:55 -07:00
Hanzo AI 684dca3451 feat: explorer FE — stateless SSR, chain selector, localnet, registry cleanup 2026-03-01 18:00:00 -08:00
Hanzo Dev 0f3828c86d feat: OIDC login via lux.id, full-width layout, P-chain stats fix
- Add Sign in button to TopBar with OIDC flow to lux.id
- Merge settings (color theme, identicon, address format) into user menu popover
- Remove duplicate user profile from HeroBanner
- Full-width stacked blocks/transactions layout on homepage
- Fix P-chain stats: CSP connect-src allows base origin for SDK calls
- Fix connected count: infer from uptime when field missing
- Fix dark mode popover background
- Enable OIDC in .env.production (lux.id, client: explore)
2026-03-01 20:34:00 -08:00
zeekay 1b9851321a feat: rename @blockscout to @luxfi, monochrome theme, horizontal blocks
- Rename all @blockscout/* npm packages to @luxfi/* aliases (150+ files)
- Override blue accent colors to gray for monochrome theme
- Fix dropdown/menu/popover fonts to use Geist Sans
- Change Latest Blocks to horizontal scrolling layout
- Show dashes instead of zeros for validator stats on error
- Fix GHA deploy step to use correct deployment name
2026-03-02 12:28:15 -08:00
zeekay 8969e45c68 fix: remove all user-visible Blockscout references
- Issue URL → github.com/luxfi/explore
- API docs links → docs.lux.network
- Contract verification → local route instead of vera.blockscout.com
- Discord link → discord.gg/luxnetwork
- JSON-LD script ID → lux-explorer-product-schema
- RPC API description → Lux Network branding
- Rollbar instance → .lux.network domain support
2026-03-02 10:43:36 -08:00
zeekay a5bedb673b feat: horizontal blocks layout, stats grid, network overview fallback chains
- LatestBlocks: full-width layout instead of fixed 280px sidebar
- Stats: 4-column grid on desktop, 2-column on mobile
- NetworkOverview: fallback known L1 chains when P-chain API unreachable
- NetworkOverview: expose isError from useCurrentValidators
- P-chain hooks: add retry:2 for resilience
- UserProfile: use address_hash instead of id for display
- Replace middleware.ts with proxy.ts (unused in production Docker)
- Add toolkit/chakra/separator re-export
- tsconfig: jsx react-jsx, formatting cleanup
- dev.sh: disable turbopack (stability)
2026-03-02 10:36:17 -08:00
Hanzo Dev bfaf813b91 unify all sql images to :latest (PG18)
Single version policy: ghcr.io/hanzoai/sql:latest everywhere.
No version pinning, no backwards compat, always latest stable.
2026-03-01 21:09:09 -08:00
Hanzo Dev 1d8eb764e2 fix(validators): use weight field and correct uptime format for P-chain validators
- P-chain API returns weight not stakeAmount; fallback to weight when stakeAmount absent
- uptime from API is already 0-100 percentage, not 0-1 fraction; remove double-multiply
- mark connected and stakeAmount as optional to match actual API response shape
2026-03-01 12:45:34 -08:00
Hanzo Dev bfa29f4ec9 brand: remove all Blockscout branding, replace with Lux Explorer
- Gas tracker FAQ: Blockscout → Lux Explorer
- Chain config web3/chains.ts: explorer name → Lux Explorer
- Auth screens: Blockscout account → Lux account
- Contract verification: Blockscout supports → Lux Explorer supports
- API docs: Blockscout core API → Lux Explorer Core API
- Rewards/merits: Blockscout Merits → Lux Explorer Rewards
- Marketplace disclaimer and integration icons
- Address verification: [email protected] → [email protected]
- Chart export filenames: Blockscout chart/stats → Lux Explorer
- OTEL service name: blockscout_frontend → lux_explorer_frontend
- Dev container: blockscout dev → lux explorer dev
2026-02-27 22:17:37 -08:00
Hanzo Dev afe0194e58 fix: use real brand logos from each project's logo repo
- Lux: triangle from ~/work/lux/logo/
- Zoo: three overlapping circles from ~/work/zoo/logo/
- Hanzo: geometric H from ~/work/hanzo/logo/
- SPC: unicorn emoji per user request
- Pars: 8-pointed star from ~/work/pars/logo/
- Changed branding to multi-path SVGs (logoViewBox + logoContent)
2026-02-27 13:13:13 -08:00
Hanzo Dev e5c71542ab feat: per-chain branding — logo, favicon, brand name customizable
- Add ChainBranding interface with logoSvg, faviconSvg, brandName per chain
- Each chain (Lux, Zoo, Hanzo, SPC, Pars) gets distinct icon + brand name
- TopBar renders chain-specific logo and brand name from registry
- ChainSwitcher shows per-chain icons in dropdown items
- Dynamic favicon via useChainFavicon hook (swaps SVG favicon on mount)
- Page title uses chain branding via getNetworkTitle()
2026-02-27 13:04:06 -08:00
Hanzo Dev 826920d891 feat: add all chain VM accessors and wire DEX/Bridge to luxnet SDK
- Add centralized chain accessor module (lib/api/luxnet/chains.ts) exposing
  all 14 chain VMs (C/X/P/A/B/D/G/I/K/O/Q/R/T/Z) plus utility APIs
- Refactor pchain/client.ts to re-export from centralized module
- Wire DEX page to use DexVMAPI (getStats, getPools, getMarkets) with
  demo data fallback when D-Chain RPC is unavailable
- Add B-Chain bridge API module (lib/api/bchain/) using BridgeVMAPI
  (getSignerSetInfo, getWaitlist) for signer set stats
- Update Bridge page to show live bridge signer count from B-Chain
- Fix stale E2E tests: use >= minimum thresholds instead of exact
  counts (block/tx counts grow over time), use describe blocks
2026-02-27 12:05:23 -08:00
Hanzo Dev 2212d85eb4 feat: integrate luxnet SDK for P-chain API calls
Replace hand-rolled JSON-RPC fetch client with [email protected].0 SDK.
P-chain hooks now use PlatformVMAPI methods directly.
2026-02-27 10:55:58 -08:00
Hanzo Dev 1f41b7b38e feat: multichain explorer pages, chain switcher, indexer integration
- Network Overview homepage with P-chain stats and chain cards
- Chain detail page with validator info and indexer stats
- Chain switcher dropdown in top bar
- A-chain AI client with indexer API integration
- D-chain DEX data hook with live indexer fallback
- E2E tests for all 5 live explorer instances
- Test transaction sender script
- Remove verbose comments, section dividers, and console.log scaffolding
2026-02-27 10:46:56 -08:00
Hanzo Dev 36e2c7f7e0 feat: add AI compute dashboard and DEX orderbook pages
- A-Chain (AI): dashboard with models, providers, attestations tabs
- D-Chain (DEX): markets, orderbook, trades, pools tabs
- API hooks with mock data (ready for indexer integration)
- Navigation items and route registration for /ai and /dex
2026-02-26 14:05:43 -08:00
Hanzo Dev 6fc98496d4 feat: redesign homepage, add chain switcher and chain detail page
- Redesign NetworkOverview homepage with Blockscout Stats, LatestBlocks,
  and LatestTxs alongside P-chain network stats and chain cards
- Add ChainSwitcher dropdown to TopBar for switching between C-Chain,
  Zoo, Hanzo, SPC, and Pars explorer instances
- Create /chains/[slug] chain detail page with chain info, validators,
  subnet chains, and stats (modeled after Avalanche L1 Details)
- Make ChainsPage rows clickable with links to chain detail pages
- Register /chains/[slug] route in all metadata/analytics files
2026-02-26 09:57:59 -08:00
Hanzo Dev 7c71e7f89e feat: add Bridge page and Network Stats to Stats page
- Add /bridge page with cross-chain transfer route tracker
- Show bridge routes between Primary Network chains and L1 subnets
- Add Network Stats section (validators, chains, stake, uptime) to Stats page
- Add Bridge to navigation menu
- Register /bridge route in nextjs-routes, metadata, and mixpanel
2026-02-26 00:47:24 -08:00
Hanzo Dev 207d687872 feat: unified multi-chain explorer with Network Overview, Chains, and Validators pages
- Replace single-chain homepage with Network Overview showing P-chain stats,
  primary chains (C/P/X/A/B/Q/T/Z/K), and L1 subnet chains
- Add Chains directory page with Primary Network / L1-L2-L3 tabs
- Add Validators page with Dashboard, Validators list, and Delegators tabs
- Add P-chain API hooks (useCurrentValidators, useBlockchains, useSubnets)
- Apply monochrome theme: replace all blue/purple/cyan/teal with gray
- Add Geist Mono font support
- Add Chains and Validators to navigation sidebar
- Update route types, metadata, analytics, and cspell for new pages
2026-02-25 22:53:10 -08:00
Hanzo Dev f638ba621c fix: remove hardcoded branding, use config-driven chain name everywhere
- Fix TS error in safeFormats plugin (use any for dayjsClass parameter)
- Replace hardcoded "Blockscout" with config.chain.name in DeFiDropdown
- Replace hardcoded "LUX" SVG text with config.chain.name in LogoFallback
- Use config.chain.name in NetworkIcon fallback aria-label
- Delete unused lux-logo.tsx (dead code with hardcoded branding)
2026-02-25 11:01:28 -08:00
Hanzo Dev 03860624aa fix: prevent dayjs crash when @reown/appkit-common changes global locale
@reown/appkit-common's DateUtil sets the global dayjs locale to
'en-web3-modal' which lacks a formats property. The localizedFormat
plugin crashes with "Cannot read properties of undefined (reading
'replace')" when lowercase format tokens (lll, llll) are used on
a locale without formats. Add a safety plugin that ensures formats
are always present on whichever locale the dayjs instance uses.
2026-02-25 10:49:18 -08:00
Hanzo Dev e8c9945a66 Fix dayjs locale crash and modernize branding
- Preserve default dayjs locale formats (L, LL, LT, LTS, etc.) in
  updateLocale to prevent TypeError on format() calls
- Switch default font from Inter/Poppins to Geist Sans throughout
- Remove gas tracker stats and Add Network button from top bar
- Replace placeholder logo/icon fallbacks with Lux triangle branding
2026-02-25 07:47:30 -08:00
Hanzo Dev f1392dab44 Add /auth/callback to all route type dictionaries 2026-02-24 01:50:55 -08:00
Hanzo Dev c0eafe6743 Add /auth/callback to OG type dict for type safety 2026-02-24 01:37:40 -08:00
tom goriunovandHanzo Dev 3f76c07f4c Name service: use protocol list instead of chain ID (#3283)
* Name service: use protocol list instead of chain ID

Resolves #3281

* fix envs for demo
2026-02-24 01:12:57 -08:00
Zoo Queen 6677247998 feat(auth): add IAM login via hanzo.id for user accounts
Add OIDC authentication support using hanzo.id as the identity
provider for Lux Explorer user accounts.

- Add 'oidc' auth provider type alongside existing auth0/dynamic
- AuthGuardOidc: redirect-based OIDC login flow with CSRF state
- pages/auth/callback: authorization code exchange, token storage
- useApiFetch: pass Bearer token for OIDC-authenticated API calls
- account feature config: support NEXT_PUBLIC_OIDC_SERVER_URL and
  NEXT_PUBLIC_OIDC_CLIENT_ID environment variables
- .env.production: configure hanzo.id as default OIDC provider
2026-02-22 15:15:24 -08:00
zeekay 2c91ae9c89 Merge upstream blockscout/frontend (29 commits)
Sync with upstream blockscout frontend, keeping Lux Network branding
in footer and documentation links. Added llms.txt link from upstream.
2026-02-22 00:59:24 -08:00
tom goriunovandGitHub 9d65805030 Add cross-chain transaction tracking and visualization (#3227)
* envs and feature setup

* home page layout

* cross-chain txs page

* cross-chain transfers page

* cross-chain transfers on tx page

* cross-chain messages on tx page

* cross-chain tx page

* cross-chain tx details token transfers

* stats and counters for lists

* migrate to new API version

* add swagger

* mobile lists

* placeholder views on address page

* tests

* fix adaptive tabs initial state when there is only one tab in the list

* tweaks

* bug fixes

* fix tests

* update screenshots

* migrate to new api version

* add chain label tooltip, copy button to txs in lists and same address highlight

* list views on address page

* fix tests

* fix links to current address in the list views

* update tooltips

* update tables layout

* review fixes

* fix spelling

* update screenshots

* update screenshot
2026-02-19 15:14:32 +01:00
tom goriunovandGitHub d23faf8f0e Smart wallet auth (#3220)
* basic login button implementation

* refactoring and add dynamic auth button to the other pages

* connect wallet without authenticating an user

* login and logout user in blockscout account

* refactoring and RPC overrides

* authenticate user with connected wallet

* add ENS to profile button

* override evm chains and fix contract write with waas wallet

* disconnect wallet and fix docker build

* add dynamic imports to components that use web3 wallet packages

* refactor user profile directory

* clean up

* tweaks

* update pw ci script

* fix "connect wallet" button behavior

* handle linking email to profile with dynamic provider

* fix test

* async loading web3 hooks and remove dynamic loading from components that use them

* fix pw tests

* add account navigation in horizontal layout when auth provider is dynamic

* fix address verification modal

* review fixes

* spelling fixes
2026-02-18 19:42:44 +01:00
tom goriunovandGitHub aa4d8bd2f1 Integrate cspell (#3279)
* add cspell config

* remove eslint plugin

* adjust pre-commit hook and add check to CI

* fixes
2026-02-13 07:48:43 +01:00
tom goriunovandGitHub 539a17f5f8 Migrage to 24-hour time format (#3273)
* Migrate to 24h time format

Resolves #3240

* update screenshot
2026-02-10 12:01:26 +01:00
wnhleeandGitHub 8990c633f0 fix: correct missing base path in url (#3267)
* fix: correct missing base path in url

* test: add pw test for baseUrl fix

* chore: simplify tests

* chore: update snapshots
2026-02-09 18:48:25 +01:00
tom 5f3a8a8470 adjust rollbar config 2026-02-05 11:26:37 +01:00
8a7ce1ac38 Release v2.6.1 (#3247)
* essential dapps config: switch to concurrent request and and add worker termination

* fix rollbar error logging and enable it for server errors

* fix for tokens request on address page

* update generator script for multichain config

* fix hot contracts interval select

* update screenshot

* update screenshots

* pass chainId to trackTransaction for essential dapps

* fix vertical alignment in hot contracts table

* bump next.js to v15.5.10

---------

Co-authored-by: isstuev <[email protected]>
Co-authored-by: Max Alekseenko <[email protected]>
2026-02-03 18:05:00 +01:00
tom goriunovandGitHub 348ee73dc5 Mobile. A/B test: txs/token transfers table view (address details page) (#3241)
* Mobile. A/B test: txs/token transfers table view (address details page)

Resolves #3230

* fixes and test

* [skip ci] change mixpanel event
2026-01-29 12:52:49 +01:00
Hanzo Dev 78dc56478a Merge upstream blockscout frontend v2.6.x 2026-01-23 15:30:16 -08:00
tom goriunovandGitHub 40db5e8ce9 Set the auth header for the merits API inside useApiFetch (#3239)
* Set the auth header for the merits API inside `useApiFetch`

Resolves #2978

* fixes

* [skip ci] fix comment position
2026-01-19 18:12:26 +01:00
c0a43ba805 Fixes for release v2.6.0 (#3214)
* Search: redirect to a ENS domain page in case of no address is resolved for this domain

* pass csrf-token to contracts info service

* batch details for eigenda blobs

* fix protocol tag in txs table

* additional token type fix

---------

Co-authored-by: isstuev <[email protected]>
2026-01-15 15:01:19 +01:00
Igor StuevandGitHub 2d42dbf1b9 Zilliqa chain type: support for ZRC-2 (#3202)
* Zilliqa chain type: support for ZRC-2

* add zrc-2 address

* add socket support and token select info

* add token types to watchlist notification settings

* add token tag

* add is fungible helper

* aboba

* review fixes
2026-01-05 17:18:37 +01:00
Igor StuevandGitHub 6c3544fd72 add variable for exit-only consensus (#3207) 2026-01-05 15:53:29 +01:00
Igor StuevandGitHub e793871d45 Private mode (#3138)
* Private mode

* review fixes
2026-01-05 13:32:05 +01:00
tom goriunovandGitHub 0cb27edd39 Add possibility to change timestamp format (#3201)
* add global setting to change between local and utc time

* add control to change time format on detailed views

* tweaks

* adapt uptime graphs to work with utc time from settings

* fix tests

* add maxDiffPixels for SearchResults test

* fix test
2026-01-05 13:19:47 +01:00
tom goriunovandGitHub 7776b124ae Smart contracts: get supported languages for filter from the API instead of ENV (#3200)
* Smart contracts: get supported languages for filter from the API instead of ENV

Resolves #3158

* fix ts and test

* add test.slow() to Block test
2026-01-05 13:19:28 +01:00
zandGitHub eec6709670 Merge branch 'blockscout:main' into main 2025-12-24 14:35:11 -08:00
tom goriunovandGitHub 7ccd0e886c Pass the x-csrf-token to the call to the admin API (#3194)
* pass the `x-csrf-token` to the call to the admin API

* fix tokens test
2025-12-22 11:23:39 +01:00
tom goriunovandGitHub ee384a52e3 Refactor navigation icon (#3191)
* move nav icons to separate directory

* remove unnecessary "slim" suffix from some icon names

* fix screenshots
2025-12-19 10:29:29 +01:00
tom goriunovandGitHub 9b8bf2b696 Refactor token media-type API to be token-scoped and safer (#3190)
* refactor media-type next.js API resource to mitigate request forgery attack

* fix typescript
2025-12-18 18:05:36 +01:00
tom goriunovandGitHub 618c21b2ba Hot contracts table (#3165)
* page layout

* add interval filter

* fix navigation

* value formatting and test

* fix: correct empty state message from 'pools' to 'hot contracts'

* update screenshots

* add disabled state to tag select and fix some bugs

* fix screenshot

* update select texts
2025-12-18 16:02:53 +01:00
Igor StuevandGitHub 76e5b6ad0d fix product schema and add fields (#3177) 2025-12-12 22:40:20 +07:00
zeekay 30d8dce076 Merge upstream blockscout/frontend v2.5.1
- Merge latest Blockscout frontend changes
- Preserve LUX Network customizations:
  - TxType null safety fix for undefined types array
  - Network branding assets
- Use upstream theme system (customizable via config)
2025-12-11 18:45:28 +00:00
tom goriunovandGitHub 31e50c4614 Migrate from Jest to Vitest (#3173)
* first part of transition

* second part of transition

* remove jest

* bump up node version and playwright version

* update all screenshots because of the new playwright version

* fix tests

* one more screenshot update
2025-12-10 19:21:07 +01:00