The fee-destination gate landed head-anchored: useFeeDestination() read
reading.status, which deriveStatus() computes against the HEAD block's
timestamp, and every per-block surface then rendered that one verdict.
Head status answers "is the split active NOW". A block page asks "was THIS
block's fee burned". They agree only while the split has never been active —
which is why this is invisible today: mainnet 96369 has no feeSplitTimestamp
at all (eth_getChainConfig answers, chainId 96369 present, and feeSplit
appears nowhere in it including upgrades/precompileUpgrades/stateUpgrades),
so every block correctly reads "Fees to coinbase".
The day feeSplitTimestamp is set and passes, all ~1.1M pre-activation blocks
would be relabelled "Burnt fees" with a burn ratio — the same false deflation
claim this module exists to remove, moved into history, and this time about
blocks whose fees demonstrably went to the coinbase 0x0100..0000 (3868.48 LUX
and climbing, measured at head 1098308).
So the destination is derived per block:
feeDestinationAt(reading, blockTime) pure; re-derives the gate against the
block's own time via deriveStatus
useFeeDestination(blockTime?) one-line wrapper over it
blockTimeSeconds(apiTimestamp) ISO -> seconds, undefined when absent
Passed at the four surfaces that name one block (block details, blocks table
row, blocks list row, tx details). BlocksTable keeps the head reading with a
comment saying why: a column header spans many blocks, so it cannot be a
per-block claim, and the per-row label and ratio are each gated individually.
A missing timestamp falls back to the head reading, so a loading row keeps
today's behaviour rather than flashing "destination unknown".
Decomplected on purpose: the decision is a pure function of (reading,
blockTime), so it is tested without a React tree. Reverting the body to
deriveFeeDestination(reading.status) fails "does NOT report a pre-activation
block as burned" — the regression is pinned, not asserted.
32/32 vitest green (5 new cases); tsc reports 0 errors in all 7 touched files
and eslint is clean on them (control: 232 pre-existing tsc errors, none in
these files).
Co-authored-by: Hanzo Dev <[email protected]>
explore.lux.network/block/1098234 renders "Burnt fees 0.000525 LUX" on the
same page that names the recipient: Miner
0x0100000000000000000000000000000000000000. Both cannot be true. The block
list repeats it per row, with a "Burnt fees / Txn fees * 100%" ratio that
reads 100%, and the tx details page says it again. To an investor that is a
deflation claim, and it is false.
Measured on mainnet 96369 via https://api.lux.network/v1/bc/C/rpc at block
1098244 (eth_getChainConfig ANSWERS — chainId 96369 is in the result — so the
absence below is a real absence, not a failed call):
feeSplitTimestamp unset -> IsFeeSplit(t) is false for every t
vault 0x0100..0002 0 LUX -> rewardShare has never been credited
coinbase 0x0100..0000 3867.79 LUX and climbing (3867.55 an hour earlier)
luxfi/evm core/fee_split.go only destroys wei while the split is active;
before activation creditTxFee credits the WHOLE fee to the coinbase, which is
an account, so total supply does not move. Every wei of every fee this chain
has ever charged is sitting at 0x0100..0000. Zero has been burned.
The label is now derived, in the ONE place fee-split policy already lives
(lib/api/cchain/useFeeSplit.ts, alongside deriveStatus and burnedWei), from
the same cached reading the fee panel uses — so a page of 50 block rows still
issues one batch:
active -> "Burnt fees", burn ratio shown
inactive/scheduled-> "Fees to coinbase", ratio suppressed
unknown -> "Fees (destination unknown)", ratio suppressed
'unknown' is a real third state: a node that will not answer
eth_getChainConfig has not told us the fee was burned, and it has not told us
it wasn't. Rendering either claim would be inventing one.
Surfaces: block details (label, hint, ratio, and the reward-breakdown
tooltip), blocks table header + rows, mobile blocks list, tx details.
5 new cases in useFeeSplit.spec.ts, 22/22 green; tsc clean on all seven
touched files.
Co-authored-by: Hanzo Dev <[email protected]>
styles/tokens.css was a 494-line FORK of @luxfi/ui/tokens.css, which is how it
drifted its own browns: --color-status-warn #B45309 / #FBBF7A and the whole
Chakra orange + yellow badge ramp (#FEEBCB #FFFAF0 #DD6B20 #FFFFF0 #D69E2E
#FEFCBF #B7791F #C05621 #7B341E #744210 #FAF089). It imports the umbrella now
and adds nothing of its own.
next.config.js hand-listed SEVEN of the engine's 55 packages in
transpilePackages and deduped none of them, which is how this app's store holds
seven physical copies of @hanzogui/popper (3.0.0, 3.0.1, 3.0.2 x3, 7.3.0 x2). A
context published at module scope is per-copy, so PopperAnchor read the empty
default and called refs.setReference on undefined once per tooltip trigger. It
uses withLuxUi now — the one place that wiring lives.
47 files reached for Tailwind's chromatic ramps directly (108 occurrences).
They resolve through tokens now, under short semantic names registered in the
@theme block: text-good / text-bad / text-warn, where warn is ACHROMATIC —
attention in Lux is the loudest neutral, not a hue. The Quasar certificate
tooltip stops naming colours it no longer paints ("BLS (green)", "Corona
(blue)", "ML-DSA (purple)") — copy that describes a palette has to change with
it.
Measured on the rendered pages: warm 0%, tinted-neutral 0.0003%, mean chroma
0.004 (/) and 0.003 (/txs) at 1440x900, 0.000 at 390x844, both modes; zero
uncaught setReference errors.
Two pre-existing defects surfaced because lint-staged now lints these files and
are fixed here rather than skipped: `Box` was used but never imported in
AddressEntity.pw.tsx, and eight lines already exceeded the 160-column limit.
Co-authored-by: Hanzo Dev <[email protected]>
* 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
* 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
* basic components and address page refactoring
* second part of refactoring
* third part of refactoring
* NativeCoinValue component
* more refactoring
* rename TruncatedValue into TruncatedText
* minor fixes
* refactor block details
* fix layout of value and fee in tx table
* update screenshots
* different units for tooltip and stats widget small value fix
* update screenshots
* update tx table screenshot
* fix copy button vertical alignment
* refactor widgets on home page
* coming soon placeholder component
* top accounts page
* contract data
* address ERC-20 tokens list
* chain filter for address ERC-20 tokens
* token select for address detailed view
* address details fields
* tokens table
* stats widgets on home page
* chain indicators graph on the home page
* quick search
* search results all tab
* tabs and chain select on search results page
* search results mobile view
* add contract info to search and address details
* add text filter for tokens and search improvements
* load all results inside tab on search results page
* token balance info
* add support for domains in the full search
* Multichain explorer
Resolves#2989
* add envs validator for multichain
* add some tests
* fix search bar on search results page on mobile
* home stats fixes
* fix ts
* optimize amount of queries on address page
* add more contract info on address page
* add enter key hint to search input
* fix tests
* fix test
* update bg.primary css-variable on color theme change
* sitemap for multichain
* txs page: render first tab if blob tab is not available on the chain
* filter out in active chains from chain select on address page and user ops page
* add chain icon to advanced filter table
* fix tooltip on entity with shield
* fix ts
* show contract implementations
* fixes
* add chain icon to all lists
* refactor zetachain chains config type
* use chain id as primary option instead of chain slug
* refactor chain config type for multichain and essential dapps
* refactor chain icon and chain select
* rename chain-slug in chain_slug
* change default radius of chain icon and update screenshots for multichain tests
* change conditions for "isContract" and "isVerified"
* test fixes
* make shield optional for external chain entities
* add chain icon to approvals lists
* add stats page for multichain
* add chain postfix to chart .png and .csv assets name
* fix tests
* sync verified contracts language filter and fix loading state in the search results page
* fix sol2uml diagram and csv export
* regcred from helmfile for review
* link fixes
* fix state for unknown address
* fix incorrect chain in the context during spa transition to the same route on different chain
* add links to stats widgets
* add mixpanel to L2 demo values
* show message of on-demand contract verification
* fix screenshots
---------
Co-authored-by: Nick Zenchik <[email protected]>
* Update border color for inputs, selector and dropdown buttons
Resolves#3021
* update screenshots
* update color threshold and update some screenshots
* more screenshots update
* add maxDiffPixels to mobile screenshots
* UI customizations: new features
Fixes#2905
* colors for graphs
* introduce env variable
* colors for topbar, stats, selected state and tabs
* fix build
* fix validator
* refactor link.primary.hover color token
* refactor selected colors
* update styles for switch and fix some color tokens
* change color for selectable controls
* icon color tokens refactoring
* UI customizations: new features
Fixes#2905
* test for common components
* tweaks
* migrate from color-mode-hex cookie to color-theme cookie
* clean up
* update screenshots
* more screenshot updates
* update default color of chart line
* update envs for mega eth
* update styles of tx details
* common color for text separator
* remove bold fontWeight from some details items
* address, block, token, pool, user ops details pages
* refactor chain-specific views
* unify grid column template for detailed views
* remove TODO
* update margins for text separator
* update screenshots
* update margin between icon and text for mobile
* rename prop
* update layout of decoded input data
* update screenshots
* fix tac operation and zilliqa quorum snippets
* context for storing subchain config and tx view for subchain
* address page and block page for subchain
* address aggregated page: local txs tab
* connect MultichainSelect to context
* home page placeholder
* refactor subchain select state
* envs for demo
* fix ts
* clear value for l2 review
* subchain widgets on home page
* csp policies
* sockets, duck and goose
* fix socket on subchain address page
* link builder for subchain views
* update home widget
* fix time increment
* enable tx interpretator and metadata service
* generate multichain config based on every chain app config
* Fix the multichain config to work in Docker
* multichain socket test
* rename subchain-id to subchain-slug path param
* refactoring
* update chain icons on entities
* home page: latest local txs
* latest cross-chain txs
* minor improvements
* renaming, pt. 1
* rename chain routes
* enable blockchain interaction
* add loading state to icon shield
* fix build
* fix tests
* update types package
* epochs page
* epoch rewards distribution
* epoch election rewards
* address epoch rewards
* block epoch tag
* add some tests
* adjust epoch details for L1 epochs
* support non-finalized epochs
* fixes after design review
* add truncation to block numbers on mobile
* update epochs table layout
* update timestamp hint
* fix bug with subheading of first epoch
* fixes of mobile view
* update screenshots
* first version of the pack
* single entry point
* add custom components to the package
* move form components to toolkit
* add more utils and hooks to the package
* minor fixes
* add CI workflow
* update readme and package.json
* fix ts
* fix build of env-validator
* fix docker build
* fix icons size
* test fixes
* more test fixes
* first part of migration
* second part of migration
* bump up es-toolkit version
* bump up `es-toolkit` version and remove `lodash` completely
* update screenshot