Frontend: canonical address display (blockie + label + mega.etherscan.io link) site-wide #98

Closed
opened 2026-04-30 04:50:18 +00:00 by PlasticDigits · 11 comments
PlasticDigits commented 2026-04-30 04:50:18 +00:00 (Migrated from gitlab.com)

Summary

Establish a single canonical UI component for displaying 20-byte Ethereum addresses (0x + 40 hex, EOAs and contracts) across the dapp: identicon (blockie) + human-readable label + link to the address on the block explorer, defaulting to MegaETH Etherscan (same base URL convention as transaction links).

Today we already ship AddressInline (frontend/src/components/AddressInline.tsx) using ethereum-blockies via WalletBlockie, plus optional WalletFormatShort labels. It does not yet open explorer address pages. explorer.ts only exposes explorerTxUrl (/tx/{hash}); we need a sibling explorerAddressUrl (/address/{address}) with the same VITE_EXPLORER_BASE_URL default (https://mega.etherscan.io).


Goals (acceptance criteria)

  1. Every user-visible 20-byte address (EOA or contract) that is meant to be read as an “account/contract identity” uses the shared component—not ad-hoc <span className="mono">, raw <code>, or truncated hex alone.
  2. Blockie is always paired with that address (unless the value is invalid or 0x000…000—show a clear fallback like —).
  3. Explorer affordance: the component wraps the label (and/or the row) in an external link to
    {normalized_explorer_base}/address/{address}
    using the same env contract as explorerTxUrl (frontend/src/lib/explorer.ts). Default base: https://mega.etherscan.io. Respect trailing-slash trimming; validate with viem isAddress before emitting a URL.
  4. Accessibility: target="_blank" + rel="noreferrer noopener" on explorer links; decorative blockie remains aria-hidden; screen readers get a non-misleading name (e.g. visually hidden “View address on Etherscan” or include full address in accessible name where the visible label is truncated).
  5. Documentation: update frontend/.env.example (if needed), docs/frontend/wallet-connection.md or explorer notes, and any QA checklist that mentions address display.

Scope note: “EOA” vs contract

Block explorers use the same /address/0x… page for EOAs and contracts. Unless product explicitly hides blockies for contracts, treat all 20-byte addresses the same in the shared component (FeeRouter sink destinations, token contracts, etc.). Do not use this pattern for 32-byte tx hashes (keep TxHash / explorerTxUrl).


Current baseline — where AddressInline is already used

Verify after adding explorer links (grep from repo root):

rg 'AddressInline' frontend/src -g '*.tsx'
Path Role
frontend/src/components/AddressInline.tsx Shared component (extend here first).
frontend/src/pages/TimeCurveSimplePage.tsx Simple view: recent buys / extension chip.
frontend/src/pages/timeCurveArena/TimeCurveArenaView.tsx Arena: WarBow momentum strip.
frontend/src/pages/timeCurveArena/useTimeCurveArenaModel.tsx Podium spotlight “leader” cell.
frontend/src/pages/timeCurveArena/TimeCurveArenaWalletMono.tsx Arena tables / ladder mono column.
frontend/src/pages/timecurve/TimeCurveSections.tsx TimeCurve page: WarBow copy, podiums, indexer lists, revenge row.
frontend/src/pages/TimeCurveProtocolPage.tsx Protocol renderAddress + fee sink destinations.
frontend/src/components/FeeTransparency.tsx Footer fee sinks + indexer history rows.
frontend/src/pages/referrals/ReferralConnectedWalletSection.tsx Connected wallet address.
frontend/src/pages/referrals/ReferralLeaderboardSection.tsx Referrer column.

Likely gaps — systematic search (run from repo root)

1) Standalone blockie (bypasses shared chrome / explorer)

rg 'WalletBlockie' frontend/src -g '*.tsx'

Primary hit: frontend/src/pages/timecurve/LiveBuyRow.tsx — custom layout with its own WalletBlockie + mono name. Refactor to the shared component or compose WalletBlockie + explorerAddressUrl only inside AddressInline so there is one implementation.

2) formatWallet / shortAddress / truncation outside the component

rg 'formatWallet\(' frontend/src -g '*.tsx'
rg 'shortAddress\(' frontend/src
rg 'truncateHexAddress' frontend/src

Pay special attention to string-only uses (no React node):

rg 'formatWallet\(' frontend/src/pages/timeCurveArena/useTimeCurveArenaModel.tsx

Examples: buyProjectedEffects template strings, label: formatWallet(...) for chart/history payloads, buildBuyFeedNarrative / buildWarbowFeedNarrative in frontend/src/lib/timeCurveUx.ts (pure strings). Decide per surface:

  • Option A: Keep narrative text-only (no blockie in sentence strings).
  • Option B: Change call sites to structured { address, label }[] or React fragments where the UI should show blockies (larger refactor).

Document the decision in the MR.

3) mono + address-like content

rg 'className="mono"' frontend/src -g '*.tsx'

Manually filter rows that are amounts / bps / ISO times (out of scope) vs hex identities.

4) title={ with wallet-ish props

rg 'title=\{[^}]*(buyer|wallet|owner|referrer|addr)' frontend/src -g '*.tsx'

5) Other app surfaces

rg '0x0000000000000000000000000000000000000000|zeroAddress' frontend/src -g '*.tsx'
ls frontend/src/pages/*.tsx frontend/src/pages/*/*.tsx

Audit Home, Collection, Rabbit Treasury, Kumbaya, Sir, Presale vesting, UnderConstruction, LaunchCountdown, WalletConnectButton / RainbowKit custom children—any truncated connected account display.

6) Indexer / API field names (discovery aid)

rg '\b(buyer|referrer|winner|actor|from|to)\b' frontend/src/lib/indexerApi.ts

Cross-check each field surfaced in UI.


Implementation sketch

  1. frontend/src/lib/explorer.ts
    • Add explorerAddressUrl(address: string): string | undefined (same base as explorerTxUrl; path /address/; validate isAddress).
  2. frontend/src/lib/explorer.test.ts
    • Default: https://mega.etherscan.io/address/0x…
    • Override VITE_EXPLORER_BASE_URL; reject invalid / non-0x40hex.
  3. AddressInline (or renamed LinkedAddress / AccountAddress)
    • Optional prop explorer?: boolean (default true for “identity” rows; allow false for dense tables if design requires—justify in MR).
    • Render <a href={explorerAddressUrl(raw)}> around label (or icon+label cluster) with external-link cursor class per existing patterns (TxHash.tsx).
  4. Sweep inventories above; replace stragglers; align LiveBuyRow with shared behavior.

Verification checklist (before merge)

  • cd frontend && npm run typecheck
  • cd frontend && npm test (includes explorer unit tests)
  • Manual: click several address links → correct MegaETH Etherscan address page (or custom VITE_EXPLORER_BASE_URL in .env.local)
  • Re-run rg passes from “Likely gaps” and attach before/after counts or a short comment in the MR proving coverage
  • Update Playwright if any selector depended on plain mono text-only nodes

References

  • Existing tx explorer helper: frontend/src/lib/explorer.ts (explorerTxUrl, default https://mega.etherscan.io)
  • Blockie implementation: frontend/src/components/WalletBlockie.tsx, package ethereum-blockies
  • Label helpers: frontend/src/lib/addressFormat.ts, frontend/src/pages/referrals/referralAddressDisplay.ts

Out of scope (explicit)

  • Transaction hashes and TxHash component (different explorer path).
  • Numeric display (AmountDisplay, bps, WAD decimals) in mono.
  • Multi-chain explorer matrix unless explicitly specified (document single-chain assumption or follow-up issue).
## Summary Establish a **single canonical UI component** for displaying **20-byte Ethereum addresses** (`0x` + 40 hex, EOAs and contracts) across the dapp: **identicon (blockie)** + **human-readable label** + **link to the address on the block explorer**, defaulting to **[MegaETH Etherscan](https://mega.etherscan.io)** (same base URL convention as transaction links). Today we already ship **`AddressInline`** (`frontend/src/components/AddressInline.tsx`) using **`ethereum-blockies`** via **`WalletBlockie`**, plus optional **`WalletFormatShort`** labels. It does **not** yet open explorer address pages. **`explorer.ts`** only exposes **`explorerTxUrl`** (`/tx/{hash}`); we need a sibling **`explorerAddressUrl`** (`/address/{address}`) with the same **`VITE_EXPLORER_BASE_URL`** default (`https://mega.etherscan.io`). --- ## Goals (acceptance criteria) 1. **Every user-visible 20-byte address** (EOA or contract) that is meant to be read as an “account/contract identity” uses the shared component—not ad-hoc `<span className="mono">`, raw `<code>`, or truncated hex alone. 2. **Blockie** is always paired with that address (unless the value is **invalid** or **`0x000…000`**—show a clear fallback like `—`). 3. **Explorer affordance:** the component wraps the label (and/or the row) in an **external link** to `{normalized_explorer_base}/address/{address}` using the same env contract as **`explorerTxUrl`** (`frontend/src/lib/explorer.ts`). Default base: **`https://mega.etherscan.io`**. Respect trailing-slash trimming; validate with **`viem`** **`isAddress`** before emitting a URL. 4. **Accessibility:** `target="_blank"` + `rel="noreferrer noopener"` on explorer links; decorative blockie remains **`aria-hidden`**; screen readers get a non-misleading name (e.g. **visually hidden** “View address on Etherscan” or include full address in **accessible name** where the visible label is truncated). 5. **Documentation:** update **`frontend/.env.example`** (if needed), **`docs/frontend/wallet-connection.md`** or explorer notes, and any **QA checklist** that mentions address display. --- ## Scope note: “EOA” vs contract Block explorers use the same **`/address/0x…`** page for **EOAs and contracts**. Unless product explicitly hides blockies for contracts, **treat all 20-byte addresses the same** in the shared component (FeeRouter sink destinations, token contracts, etc.). **Do not** use this pattern for **32-byte tx hashes** (keep **`TxHash`** / **`explorerTxUrl`**). --- ## Current baseline — where `AddressInline` is already used Verify after adding explorer links (grep from repo root): ```bash rg 'AddressInline' frontend/src -g '*.tsx' ``` | Path | Role | |------|------| | `frontend/src/components/AddressInline.tsx` | Shared component (extend here first). | | `frontend/src/pages/TimeCurveSimplePage.tsx` | Simple view: recent buys / extension chip. | | `frontend/src/pages/timeCurveArena/TimeCurveArenaView.tsx` | Arena: WarBow momentum strip. | | `frontend/src/pages/timeCurveArena/useTimeCurveArenaModel.tsx` | Podium spotlight “leader” cell. | | `frontend/src/pages/timeCurveArena/TimeCurveArenaWalletMono.tsx` | Arena tables / ladder mono column. | | `frontend/src/pages/timecurve/TimeCurveSections.tsx` | TimeCurve page: WarBow copy, podiums, indexer lists, revenge row. | | `frontend/src/pages/TimeCurveProtocolPage.tsx` | Protocol `renderAddress` + fee sink destinations. | | `frontend/src/components/FeeTransparency.tsx` | Footer fee sinks + indexer history rows. | | `frontend/src/pages/referrals/ReferralConnectedWalletSection.tsx` | Connected wallet address. | | `frontend/src/pages/referrals/ReferralLeaderboardSection.tsx` | Referrer column. | --- ## Likely gaps — systematic search (run from repo root) ### 1) Standalone blockie (bypasses shared chrome / explorer) ```bash rg 'WalletBlockie' frontend/src -g '*.tsx' ``` **Primary hit:** `frontend/src/pages/timecurve/LiveBuyRow.tsx` — custom layout with its own **`WalletBlockie`** + mono name. **Refactor** to the shared component **or** compose **`WalletBlockie` + `explorerAddressUrl`** only inside **`AddressInline`** so there is one implementation. ### 2) `formatWallet` / `shortAddress` / truncation outside the component ```bash rg 'formatWallet\(' frontend/src -g '*.tsx' rg 'shortAddress\(' frontend/src rg 'truncateHexAddress' frontend/src ``` Pay special attention to **string-only** uses (no React node): ```bash rg 'formatWallet\(' frontend/src/pages/timeCurveArena/useTimeCurveArenaModel.tsx ``` Examples: **`buyProjectedEffects`** template strings, **`label: formatWallet(...)`** for chart/history payloads, **`buildBuyFeedNarrative` / `buildWarbowFeedNarrative`** in **`frontend/src/lib/timeCurveUx.ts`** (pure strings). Decide per surface: - **Option A:** Keep narrative **text-only** (no blockie in sentence strings). - **Option B:** Change call sites to **structured** `{ address, label }[]` or **React fragments** where the UI should show blockies (larger refactor). Document the decision in the MR. ### 3) `mono` + address-like content ```bash rg 'className="mono"' frontend/src -g '*.tsx' ``` Manually filter rows that are **amounts / bps / ISO times** (out of scope) vs **hex identities**. ### 4) `title={` with wallet-ish props ```bash rg 'title=\{[^}]*(buyer|wallet|owner|referrer|addr)' frontend/src -g '*.tsx' ``` ### 5) Other app surfaces ```bash rg '0x0000000000000000000000000000000000000000|zeroAddress' frontend/src -g '*.tsx' ls frontend/src/pages/*.tsx frontend/src/pages/*/*.tsx ``` Audit **Home**, **Collection**, **Rabbit Treasury**, **Kumbaya**, **Sir**, **Presale vesting**, **UnderConstruction**, **LaunchCountdown**, **WalletConnectButton** / RainbowKit custom children—any truncated **connected account** display. ### 6) Indexer / API field names (discovery aid) ```bash rg '\b(buyer|referrer|winner|actor|from|to)\b' frontend/src/lib/indexerApi.ts ``` Cross-check each field surfaced in UI. --- ## Implementation sketch 1. **`frontend/src/lib/explorer.ts`** - Add **`explorerAddressUrl(address: string): string | undefined`** (same base as **`explorerTxUrl`**; path **`/address/`**; validate **`isAddress`**). 2. **`frontend/src/lib/explorer.test.ts`** - Default: `https://mega.etherscan.io/address/0x…` - Override **`VITE_EXPLORER_BASE_URL`**; reject invalid / non-`0x40hex`. 3. **`AddressInline`** (or renamed **`LinkedAddress`** / **`AccountAddress`**) - Optional prop **`explorer?: boolean`** (default **true** for “identity” rows; allow **false** for dense tables if design requires—justify in MR). - Render **`<a href={explorerAddressUrl(raw)}>`** around label (or icon+label cluster) with **external-link** cursor class per existing patterns (`TxHash.tsx`). 4. **Sweep** inventories above; replace stragglers; align **`LiveBuyRow`** with shared behavior. --- ## Verification checklist (before merge) - [ ] `cd frontend && npm run typecheck` - [ ] `cd frontend && npm test` (includes **`explorer`** unit tests) - [ ] Manual: click several address links → correct **MegaETH Etherscan** address page (or custom **`VITE_EXPLORER_BASE_URL`** in `.env.local`) - [ ] Re-run **rg** passes from “Likely gaps” and attach **before/after** counts or a short comment in the MR proving coverage - [ ] Update **Playwright** if any selector depended on plain `mono` text-only nodes --- ## References - Existing tx explorer helper: `frontend/src/lib/explorer.ts` (`explorerTxUrl`, default `https://mega.etherscan.io`) - Blockie implementation: `frontend/src/components/WalletBlockie.tsx`, package **`ethereum-blockies`** - Label helpers: `frontend/src/lib/addressFormat.ts`, `frontend/src/pages/referrals/referralAddressDisplay.ts` --- ## Out of scope (explicit) - **Transaction hashes** and **`TxHash`** component (different explorer path). - **Numeric** display (`AmountDisplay`, bps, WAD decimals) in **`mono`**. - **Multi-chain explorer matrix** unless explicitly specified (document single-chain assumption or follow-up issue).
PlasticDigits commented 2026-04-30 05:36:05 +00:00 (Migrated from gitlab.com)

mentioned in commit c18fd7ba62

mentioned in commit c18fd7ba62abfc44aaca45c130777a1e8d526756
PlasticDigits commented 2026-04-30 05:36:05 +00:00 (Migrated from gitlab.com)

mentioned in commit 72c5716461

mentioned in commit 72c571646175a5aec37e69ae6d0f4eedf920cfbd
PlasticDigits commented 2026-04-30 05:36:23 +00:00 (Migrated from gitlab.com)

Implemented on main (c18fd7b)

Merged GitLab #98: canonical 20-byte address UX — blockie + label + explorer link sharing VITE_EXPLORER_BASE_URL with tx URLs (explorerAddressUrl / explorerTxUrl), AddressInline updates, LiveBuyRow refactor (role="group" hit target + buyer link), MegaScannerAddressLink aligned, docs + skills/verify-yo-canonical-address-explorer/SKILL.md.

@brouie — please verify when you have a moment.

Checklist for verification

  • cd frontend && npm run typecheck && npm test -- --run
  • npm run test:e2e:timecurve-ui (Arena live-buys + modals; dev server clears VITE_LAUNCH_TIMESTAMP)
  • Manual: click AddressInline / fee-sink / live-buy buyer links → correct /address/0x… on MegaETH Etherscan (or custom VITE_EXPLORER_BASE_URL)
  • Interactive live-buy row: click buyer → explorer; click ticks / meter → buy detail; Enter on focused row opens detail; Tab reaches buyer link separately
  • Arena with no VITE_TIMECURVE_ADDRESS + indexer URL: live buys strip + More + detail modal still work (indexer-mocked E2E path)

Issue left open per request.

## Implemented on `main` (c18fd7b) Merged **GitLab #98**: canonical **20-byte address** UX — **blockie** + label + **explorer** link sharing `VITE_EXPLORER_BASE_URL` with tx URLs (`explorerAddressUrl` / `explorerTxUrl`), `AddressInline` updates, `LiveBuyRow` refactor (`role="group"` hit target + buyer link), `MegaScannerAddressLink` aligned, docs + **`skills/verify-yo-canonical-address-explorer/SKILL.md`**. **@brouie** — please verify when you have a moment. ### Checklist for verification - [ ] `cd frontend && npm run typecheck && npm test -- --run` - [ ] `npm run test:e2e:timecurve-ui` (Arena live-buys + modals; dev server clears `VITE_LAUNCH_TIMESTAMP`) - [ ] Manual: click `AddressInline` / fee-sink / live-buy buyer links → correct `/address/0x…` on MegaETH Etherscan (or custom `VITE_EXPLORER_BASE_URL`) - [ ] Interactive live-buy row: click **buyer** → explorer; click **ticks / meter** → buy detail; **Enter** on focused row opens detail; **Tab** reaches buyer link separately - [ ] Arena with **no** `VITE_TIMECURVE_ADDRESS` + indexer URL: live buys strip + **More** + detail modal still work (indexer-mocked E2E path) Issue left **open** per request.
PlasticDigits commented 2026-04-30 06:06:56 +00:00 (Migrated from gitlab.com)

mentioned in commit ca2aaffdd6

mentioned in commit ca2aaffdd6e6c953d8d1e03569db684505e0f65e
PlasticDigits commented 2026-04-30 06:07:19 +00:00 (Migrated from gitlab.com)

mentioned in issue #100

mentioned in issue #100
Brouie commented 2026-04-30 07:21:01 +00:00 (Migrated from gitlab.com)

Verified c18fd7b on dd1c59a HEAD today. All 5 checklist items PASS. Closing.

Stack state

  • Frontend: dd1c59a HEAD on main, Vite restarted
  • Indexer: /v1/status schema_version=1.8.0, max_indexed_block=12, database_connected=true
  • Live buy populated: deployer 0xf39fd6...2266, 5 CHARM, 5.092 CL8Y, +120s, 250 BP, block 12, tx 0xbeb98a9c...

Item 1 — typecheck + vitest: PASS

npm run typecheck clean, npm test -- --run 40 files / 238 tests / all green / 4.94s.

Item 2 — e2e:timecurve-ui: PASS

npm run test:e2e:timecurve-ui 2 chromium specs pass in 6.7s ("live buys strip + More + detail modal stack" and "side strip opens buy detail without list").

Tested across Simple, Arena, Protocol:

  • Simple Recent buys buyer label → mega.etherscan.io/address/0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 (full 40-char, /address/ path)
  • Protocol Wired contracts (5 addresses) + FeeRouter sinks (5) + Canonical fee sinks (5) all link with /address/0x... including zero address routing to /address/0x000...000
  • Protocol recent-fee-distribution tx hash routes to /tx/0xbeb98a9c... (correctly distinguished from /address/ path)
  • Arena Live buys row buyer label → same canonical /address/ pattern with blockie + label

explorerAddressUrl and explorerTxUrl helpers consistently respect VITE_EXPLORER_BASE_URL.

Item 4 — Interactive live-buy row: PASS

On /timecurve/arena Live buys panel:

  • Click buyer label → opens explorer /address/0x... (Item 3 path)
  • Click ticks/meter (WARBOW 250 BP / +CLOCK +120s badges) → opens in-app Buy details modal with full breakdown (MOMENTUM SHIFT, WarBow ladder, View transaction on explorer, NEW DEADLINE local+UTC, BLOCK TIME, SPEND/CHARM/PRICE/TOTAL RAISED tiles, BATTLE POINTS, INDEXER FIELDS)
  • Tab focus reaches row + buyer link as separate stops, Enter on focused row opens buy detail modal
  • "More" CTA opens "All indexed buys · showing: 1/1" list modal with row blockie/label/badges + VIEW TX button

role="group" + buyer-link refactor preserves both interaction modes correctly.

Item 5 — Arena with no VITE_TIMECURVE_ADDRESS (indexer-mocked path): PASS

Covered by Item 2 e2e — playwright.timecurve-ui.config.ts dev server clears VITE_LAUNCH_TIMESTAMP and exercises live buys strip, More list modal, detail modal from list, and detail modal direct from side strip. All 2 specs green.

Closure

Canonical 20-byte address UX wired across AddressInline, MegaScannerAddressLink, LiveBuyRow refactor (role="group" separates Tab stops). /address/0x... and /tx/0x... correctly differentiated. Indexer-mocked fallback works end-to-end.

Closing #98.

cc @PlasticDigits

Verified `c18fd7b` on `dd1c59a` HEAD today. All 5 checklist items PASS. Closing. ## Stack state - Frontend: `dd1c59a` HEAD on main, Vite restarted - Indexer: `/v1/status` schema_version=1.8.0, max_indexed_block=12, database_connected=true - Live buy populated: deployer 0xf39fd6...2266, 5 CHARM, 5.092 CL8Y, +120s, 250 BP, block 12, tx 0xbeb98a9c... ## Item 1 — typecheck + vitest: PASS `npm run typecheck` clean, `npm test -- --run` 40 files / 238 tests / all green / 4.94s. ## Item 2 — e2e:timecurve-ui: PASS `npm run test:e2e:timecurve-ui` 2 chromium specs pass in 6.7s ("live buys strip + More + detail modal stack" and "side strip opens buy detail without list"). ## Item 3 — Manual address links: PASS Tested across Simple, Arena, Protocol: - Simple Recent buys buyer label → mega.etherscan.io/address/0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 (full 40-char, /address/ path) - Protocol Wired contracts (5 addresses) + FeeRouter sinks (5) + Canonical fee sinks (5) all link with /address/0x... including zero address routing to /address/0x000...000 - Protocol recent-fee-distribution tx hash routes to /tx/0xbeb98a9c... (correctly distinguished from /address/ path) - Arena Live buys row buyer label → same canonical /address/ pattern with blockie + label explorerAddressUrl and explorerTxUrl helpers consistently respect VITE_EXPLORER_BASE_URL. ## Item 4 — Interactive live-buy row: PASS On /timecurve/arena Live buys panel: - Click buyer label → opens explorer /address/0x... (Item 3 path) - Click ticks/meter (WARBOW 250 BP / +CLOCK +120s badges) → opens in-app Buy details modal with full breakdown (MOMENTUM SHIFT, WarBow ladder, View transaction on explorer, NEW DEADLINE local+UTC, BLOCK TIME, SPEND/CHARM/PRICE/TOTAL RAISED tiles, BATTLE POINTS, INDEXER FIELDS) - Tab focus reaches row + buyer link as separate stops, Enter on focused row opens buy detail modal - "More" CTA opens "All indexed buys · showing: 1/1" list modal with row blockie/label/badges + VIEW TX button role="group" + buyer-link refactor preserves both interaction modes correctly. ## Item 5 — Arena with no VITE_TIMECURVE_ADDRESS (indexer-mocked path): PASS Covered by Item 2 e2e — playwright.timecurve-ui.config.ts dev server clears VITE_LAUNCH_TIMESTAMP and exercises live buys strip, More list modal, detail modal from list, and detail modal direct from side strip. All 2 specs green. ## Closure Canonical 20-byte address UX wired across AddressInline, MegaScannerAddressLink, LiveBuyRow refactor (role="group" separates Tab stops). /address/0x... and /tx/0x... correctly differentiated. Indexer-mocked fallback works end-to-end. Closing #98. cc @PlasticDigits
Brouie (Migrated from gitlab.com) closed this issue 2026-04-30 07:21:03 +00:00
PlasticDigits commented 2026-05-20 05:15:46 +00:00 (Migrated from gitlab.com)

mentioned in issue #226

mentioned in issue #226
PlasticDigits commented 2026-05-20 05:15:47 +00:00 (Migrated from gitlab.com)

marked as related to #226

marked as related to #226
PlasticDigits commented 2026-05-21 04:48:16 +00:00 (Migrated from gitlab.com)

mentioned in issue #230

mentioned in issue #230
PlasticDigits commented 2026-05-21 05:42:47 +00:00 (Migrated from gitlab.com)

mentioned in issue #231

mentioned in issue #231
PlasticDigits commented 2026-05-21 13:21:02 +00:00 (Migrated from gitlab.com)

mentioned in issue #234

mentioned in issue #234
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
code/yieldomega#98
No description provided.