Skip to content

v1.2.5-a#342

Merged
AugustoL merged 71 commits intomainfrom
dev
Mar 25, 2026
Merged

v1.2.5-a#342
AugustoL merged 71 commits intomainfrom
dev

Conversation

@AugustoL
Copy link
Collaborator

@AugustoL AugustoL commented Mar 21, 2026

Description

Release v1.2.5-alpha — merges all changes from dev into main for the next production deployment.

Type of Change

  • New feature
  • Bug fix
  • Refactoring
  • Performance improvement
  • Documentation update

Changes Made

New Features

Bug Fixes

CI/CD

  • E2E sharding — Split eth-mainnet into 2 parallel shards, EVM networks into 1 job per network (5 parallel), avoiding 15-minute timeout cancellations
  • E2E triggers — Run automatically on PRs to main, manually via workflow_dispatch on any branch
  • E2E all — New e2e-all.yml workflow to dispatch all suites in parallel

Refactoring

  • Shared detail-panel CSS classes for block and transaction analyser panels
  • AppChainId type for unified chain ID handling
  • Biome linting and formatting applied to worker code
  • Worker renamed from openscan-groq-ai-proxy to openscan-worker-proxy

Checklist

  • I have run npm run format:fix and npm run lint:fix
  • I have run npm run typecheck with no errors
  • I have run tests with npm run test:run
  • I have tested my changes locally
  • I have updated documentation if needed
  • My code follows the project's architecture patterns

Additional Notes

  • Worker proxy has been deployed to Cloudflare (openscan-worker-proxy)
  • EVM method allowlist restricts proxy to 58 read-only JSON-RPC methods
  • Worker proxy toggles default to enabled for backward compatibility

MiltonTulli and others added 30 commits March 3, 2026 23:12
Add support for Avalanche C-Chain, a standard EVM-compatible chain with high throughput. Implements network configuration, RPC client initialization (via direct EthereumClient instantiation since not in ClientFactory), and adapter routing. Closes #113.

- Add Avalanche C-Chain entry to networks.json with CAIP-2 identifier and metadata
- Update DataService to create EthereumClient for unsupported chains
- Update AdapterFactory and NetworkAdapter to handle chain 43114
- Route to EVMAdapter (standard EVM implementation)
Consolidate scattered union types (SupportedChainId | 11155111 | 97 | 31337 | 43114)
into a single AppChainId type, making it easier to add new networks.
…port

Update @openscan/network-connectors to v1.4.0 which includes native
AvalancheClient (43114). Remove the EthereumClient workaround for
unsupported chains and use ClientFactory directly. Simplify AppChainId
type since 43114 is now part of SupportedChainId.
Add a reusable helper tooltip infrastructure that provides contextual
explanations for blockchain data fields across all explorer pages.

Infrastructure:
- HelperTooltip component: hover/focus/tap with a11y support
- FieldLabel wrapper: knowledge-level-aware tooltip visibility
- Settings UI: enable/disable toggle + beginner/intermediate/advanced selector
- Navbar quick-switcher: cycle through levels with colored border indicator
- New `tooltips` i18n namespace with content in all 5 languages

Coverage:
- EVM transaction page: all fields including L2 (Arbitrum, OP Stack) and blob fields
- EVM block page: all fields including More Details (advanced-only) and Arbitrum fields
- Address/contract pages: verification, proxy, read/write, balance, nonce, ENS, EIP-7702
- Token/NFT pages: standard, decimals, supply, token ID, owner, approved, metadata URI
- Bitcoin transaction/block/address pages: all fields with BTC-specific content
- Settings page: knowledge-level selector tooltip
…twork

feat: add Avalanche C-Chain network support
Hardhat v3 does not support Geth's callTracer or prestateTracer options
for debug_traceTransaction. Add struct log conversion utilities that
reconstruct call trees and state diffs from opcode-level traces.
- Fix tooltip z-index clipping by rendering bubbles via React Portal
  to document.body, escaping all ancestor overflow containers
- Enrich tooltip descriptions with EIP-1559, EIP-4844, UTXO model,
  Merkle tree, and proxy pattern explanations across all 5 locales
- Fix Arbitrum difficulty tooltip and circular blob definition
- Add missing tooltips: tx history table headers, account type,
  analyser tabs, finalized badge, contract details, Bitcoin
  confirmations, inputs/outputs columns, network stats, state changes
- Reclassify knowledge levels: beginner=all tooltips,
  intermediate=hides basic fields, advanced=complex/chain-specific only
- Update knowledge level descriptions in all locale settings files
Move coinbase and witness to left column, RBF to right column
for better visual grouping of related fields.
Fetch block height from block header when displaying confirmed
transactions. Block number is shown as plain text before the
clickable block hash link.
Support all four directions (top, bottom, left, right) for tooltip
bubbles. Use left placement for confirmation and finalized badges
in the top-right corner. Add vertical viewport clamping.
Compute final pixel position for both axes before removing transform,
so vertical translation is preserved when only horizontal clamping
is needed and vice versa.
Render a CSS triangle arrow inside the tooltip bubble that points
toward the trigger. Arrow position is dynamically calculated after
viewport clamping to always aim at the trigger center.
Move raw opcode trace to a new tab in TX Analyser with paginated
view, expandable stack/storage per step, and opcode color coding.
Remove the old standalone debug trace section from TransactionDisplay.
Hide TX Analyser entirely when no tabs have content to show.
- workflow: add dual strategy (patch PRs to dev, release branches for minor/major)
- architecture: update to NetworkAdapter/AdapterFactory pattern, add Bitcoin and Hardhat
- patterns: fix paths, update "add network" steps to new adapter structure
- i18n: add 5 supported languages, tooltips namespace, update checklists
- code-style: reference all 5 locales in i18n verification
Add /etherscan/verify route to the Cloudflare Worker that proxies
contract verification requests to Etherscan V2 API using a shared
API key. Frontend now uses the worker proxy as default fallback when
no user key is configured, making verification free for all users.

Closes #322
Remove hasEtherscanKey gate from useContractVerification so that
Etherscan verification runs for all users via the worker proxy,
not just those with a configured API key.
Detect Vyper contracts from Etherscan's CompilerVersion (vyper: prefix)
and Sourcify's compilation.language field. Use correct .vy file extension
instead of hardcoded .sol. Add CodeBlock component with Prism.js for
syntax highlighting of Solidity (.sol) and Vyper (.vy) source files.

Test with CRV token (Vyper, verified on Sourcify):
0xd533a949740bb3306d119cc777fa900ba034cd52
feat(tooltips): add helper tooltip system with knowledge-level support
Add EIP-4844 blob data display by fetching from the Beacon Chain API.
Super user mode only. Includes BeaconService for blob sidecar fetching,
KZG commitment to versioned hash matching via Web Crypto SHA-256,
configurable Beacon API endpoints in Settings, and blob viewer with
hex/UTF-8 toggle. Block page shows all blobs in a collapsible section,
transaction page adds a Blob Data tab in the TX Analyser.

Default public Beacon API endpoints provided for Ethereum and Sepolia.
Blob pruning (~18 days) handled gracefully with clear user messaging.
i18n translations added for all 5 supported languages.

Closes #301
feat(worker): add Etherscan API proxy for free contract verification
…l CSS

Rename tx-analyser-* and analyser-* CSS classes to detail-panel-* for
reuse across pages. Create BlockAnalyser tabbed panel for block details
(More Details, Transactions, Withdrawals, Blob Data) mirroring the
TxAnalyser pattern. Simplify BlockDisplay by replacing collapsible
sections with the new BlockAnalyser component.
docs(claude): update rules to reflect current architecture and workflow
Merge openscan-explorer/dev into feat/beacon-blob-data, incorporating
helper tooltips, knowledge levels, raw trace tab, FieldLabel component,
Hardhat adapter, and Etherscan worker proxy alongside our beacon blob
and block analyser changes.
…-blob-data

# Conflicts:
#	.claude/rules/architecture.md
#	.claude/rules/patterns.md
#	src/components/pages/evm/block/BlockDisplay.tsx
#	src/components/pages/evm/tx/TxAnalyser.tsx
#	src/components/pages/evm/tx/analyser/types.ts
#	src/locales/en/settings.json
#	src/locales/es/settings.json
#	src/locales/ja/settings.json
#	src/locales/pt-BR/settings.json
#	src/locales/zh/settings.json
#	src/types/index.ts
@github-actions
Copy link

github-actions bot commented Mar 21, 2026

🚀 Preview: https://pr-342--openscan.netlify.app
📝 Commit: 5732dd90b78d9d7c22087fb418893a95b6340374

AugustoL and others added 9 commits March 23, 2026 08:25
…cilitators

Add FieldLabel tooltips to FacilitatorInfoCard for Name, Base URL,
Schemes, Assets, and Capabilities (visible for beginner/intermediate).
Show x402 facilitators as "Account (EOA)" with an "x402 Facilitator"
tag since they are primarily EOA accounts.
When expanding via the collapse button with no tab selected, auto-select
"moreDetails" so the panel shows content. Replace plain labels with
FieldLabel components for all 9 fields with tooltips visible for all
knowledge levels except nonce (beginner/intermediate only).

Closes #336
Closes #337
Reverse the merge order in getEffectiveRpcUrls() so builtin worker
proxy URLs take priority over metadata RPC endpoints. Also fix the
Bitcoin testnet network ID mismatch: align rpcStorage.ts and the
worker OnFinality route to use the Testnet4 CAIP-2 ID
(bip122:00000000da84f2bafbbc53dee25a72ae) matching networks.json.

Closes #343
… RPC

Add a Worker Proxy section in Settings > Network with two independent
toggles: AI Analysis Proxy (hides/shows AIAnalysisPanel across all
pages) and RPC Proxy (filters worker proxy URLs from effective RPC
list). Both default to enabled. Settings persist in localStorage.

Closes #340
…oding

Remove x402-specific conditional from AddressHeader and pass
"x402 Facilitator" via the existing tokenSymbol prop from
X402FacilitatorDisplay. Keeps AddressHeader generic.
Shard eth-mainnet into 2 parallel jobs (3 tests each). Split EVM
networks into 1 job per network (5 parallel jobs) instead of 2 shards.
Change e2e workflow triggers from pull_request on dev to main, so they
run automatically for release PRs (dev→main). Keep workflow_dispatch
so they can be triggered manually on any branch/PR against dev.
Add e2e-all.yml that dispatches eth-mainnet, evm-networks, and bitcoin
workflows concurrently via workflow_call. Add workflow_call trigger to
each child workflow to support reusable composition.
Return empty array from getRPCUrls instead of throwing when a network
has no configured endpoints. Keep networks with zero URLs in the
filtered map so they remain visible but gracefully show error states
instead of crashing the app.
Add REACT_APP_OPENSCAN_WORKER_URL to Vite define map so it is properly
replaced at build time. Switch workerConfig.ts to dot notation for
Vite compatibility. Guard isWorkerProxyUrl against empty string
matching all URLs.
Add REACT_APP_OPENSCAN_WORKER_URL to Vite define map and switch
workerConfig.ts to dot notation for proper build-time replacement.
Guard isWorkerProxyUrl against empty string matching all URLs.
Fix toggle knob alignment by adding flex-shrink: 0 and min-width
to settings-toggle class.
…cing

Concatenate metadata and builtin worker URLs per-network with
deduplication instead of using object spread which replaced entire
arrays. Worker proxy endpoints now supplement metadata RPCs as intended.
Stored user overrides were replacing default URLs entirely, causing
worker proxy URLs to disappear after page reload. Now stored URLs
are merged with defaults so builtin worker endpoints persist across
sessions and are only removed by the excludeWorkerProxy filter.
Point the openscan-groq AI provider at OPENSCAN_WORKER_URL instead of
the legacy openscan-groq-ai-proxy URL. This ensures AI requests go
through the same worker proxy that already has the Netlify preview
origin in its CORS allowlist. Remove unused REACT_APP_OPENSCAN_GROQ_AI_URL
from Vite define map.
Always show the Analyze with AI button. When the AI proxy is disabled
and no personal API keys are configured, show a warning message
guiding the user to either enable the proxy or add their own keys.
Users with their own API keys can still use AI analysis regardless
of the proxy toggle.
When workerProxyAi is false, skip the openscan-groq provider in
resolveProvider so it falls through to the user's configured API
keys. Previously it always used the free proxy first regardless
of the toggle setting.
fix: pre-1.2.5-a fixes (block details, BTC RPC priority, worker proxy toggles)
Copy link
Collaborator

@josealoha666 josealoha666 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Release PR for v1.2.5-alpha — I've reviewed the individual PRs that compose this release (#326, #328, #331, #332, #333, #335, #338, #346) and the changes look good overall.

CI note: 4 E2E jobs are failing:

  • arbitrum, optimism, polygon — strict mode violation: .tx-label filter for 'Gas Price:' resolves to 2 elements (likely the new tooltip/FieldLabel refactor introduced a duplicate label). Needs .first() or a more specific selector.
  • eth-mainnet shard-atoBeVisible fails with 'element(s) not found' on the transaction-with-input-data test (selector may need updating for the new TX Analyser UI).

Build, deploy, lint, audit, bitcoin E2E, and shard-b all pass ✅

These look like test selector issues rather than runtime bugs — the FieldLabel/tooltip changes likely duplicated visible label text. Worth fixing before merge.

chore: bump version to 1.2.5-alpha
@AugustoL AugustoL merged commit b07f3d7 into main Mar 25, 2026
10 of 14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants