Skip to content

fix: display oracle router activity events - #774

Merged
Seranged merged 13 commits into
developmentfrom
feat/activity-oracle-router-events
Aug 7, 2026
Merged

Seranged merged 13 commits into
developmentfrom
feat/activity-oracle-router-events

Conversation

@Seranged

@Seranged Seranged commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Display EulerRouter governance events in EVK vault Activity feeds.
  • Present oracle routes as readable token pairs while retaining linked contract details.

Changes

  • Add oracle configuration, fallback oracle, resolved vault, and oracle governor events to the EVK display allowlist.
  • Use semantic event labels such as Oracle route updated and Oracle governor updated.
  • Resolve asset0 and asset1 symbols into one compact Asset pair summary, with both explorer-linked addresses available when expanded.
  • Resolve configured vaults to internal vault links while keeping oracle, governor, and router addresses linked to the explorer.
  • Lead Resolved vault updated entries with the resolved vault link and decode the asset address into its token symbol with an icon.
  • Label vaults the registry cannot resolve (e.g. non-Euler ERC-4626 resolved vaults) with their on-chain token symbol and an explorer link instead of a dead internal vault page.
  • Gate activity vault resolution on factory membership via the SDK vault resolver: addresses it does not recognize as Euler vaults skip the registry fetch and render as their raw token symbol (address fallback).
  • Bump the Euler SDK to 1.2.5, which publishes the corresponding normalized Activity event types.

Test plan

  • Run focused Activity display tests (36 passing).
  • Run Nuxt typecheck and focused ESLint.
  • Build the production Nuxt application against the local SDK build.
  • Verify the Monad vault governance feed displays oracle configuration, oracle governor, and resolved vault events.
  • Verify the older route renders as AUSD / PT-AUSD-8OCT2026 on the target Monad vault.

Summary by CodeRabbit

  • New Features
    • Added readable activity entries for EVK oracle configuration and vault changes.
    • Added asset-pair summaries, token symbols, vault links, explorer links, and address avatars.
    • Improved collapsed and expanded address details with clearer layouts and metadata.
  • Bug Fixes
    • Improved vault registry lookup accuracy and token-label fallback handling.
  • Tests
    • Expanded coverage for oracle events, asset pairs, links, token symbols, and address-only details.

@railway-app

railway-app Bot commented Jul 31, 2026

Copy link
Copy Markdown

🚅 Deployed to the euler-lite-pr-774 environment in euler-lite(dev,PR previews)

Service Status Web Updated (UTC)
dev-build ✅ Success (View Logs) Web Aug 7, 2026 at 11:44 am

@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-774 July 31, 2026 08:51 Destroyed
Resolve oracle route assets into a compact pair summary while preserving linked addresses in expanded details. Use semantic labels for oracle router governance events.
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-774 July 31, 2026 09:05 Destroyed
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-774 July 31, 2026 09:31 Destroyed
@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: euler-xyz/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: eeacd87e-6f8a-42fb-b860-2aa534a63e38

📥 Commits

Reviewing files that changed from the base of the PR and between 5ef6d45 and 9ef5887.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (4)
  • components/entities/activity/ActivityEventRow.vue
  • package.json
  • tests/utils/activity-display.test.ts
  • utils/activity-display.ts

📝 Walkthrough

Walkthrough

Activity formatting now supports EVK oracle events, asset pairs, token symbols, resolved vaults, and address fallbacks. Activity rows render summaries and avatars for collapsed and expanded address details. The Euler SDK dependency is updated to 1.2.5.

Changes

Activity display enhancements

Layer / File(s) Summary
Oracle-aware activity formatting and validation
utils/activity-display.ts, tests/utils/activity-display.test.ts, package.json
Adds oracle event types, labels, field ordering, token-aware address resolution, asset-pair summaries, vault metadata, explorer fallbacks, and related test coverage. Updates @eulerxyz/euler-v2-sdk to 1.2.5.
Activity row metadata and rendering
components/entities/activity/ActivityEventRow.vue
Conditionally fetches vault registry data, resolves token symbols, preserves summaries, and renders address and asset details with avatars and responsive layouts.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: displaying oracle router activity events.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/activity-oracle-router-events

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint install timed out. The project may have too many dependencies for the sandbox.


Comment @coderabbitai help to get the list of available commands.

@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-774 July 31, 2026 10:03 Destroyed
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-774 July 31, 2026 10:09 Destroyed
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-774 July 31, 2026 10:13 Destroyed
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-774 July 31, 2026 10:40 Destroyed
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-774 July 31, 2026 10:57 Destroyed
Lead 'Resolved vault updated' events with the resolved vault link so the
collapsed row shows the named vault instead of a raw asset address, and
resolve the asset field into its token symbol with an asset icon,
matching the oracle route display.
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-774 August 7, 2026 10:12 Destroyed
Vault-typed change fields the registry cannot resolve — e.g. a non-Euler
ERC-4626 configured as a router resolved vault — previously rendered as a
shortened address linking to a dead internal vault page. Fall back to the
token symbol (lazily read on-chain) with an explorer link instead.
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-774 August 7, 2026 10:19 Destroyed
Vault-typed activity change fields previously ran every address through
the registry's on-chain fetch fallback, which probes unknown contracts as
securitize/EVK vaults. Check the SDK vault resolver (factory-membership
backed) first: addresses it does not recognize as Euler vaults skip the
registry fetch and deterministically render as their raw token symbol,
falling back to the shortened address.
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-774 August 7, 2026 11:03 Destroyed
Brings the normalized oracle-router activity event types the Activity
display references, fixing typecheck against the published SDK.
@railway-app
railway-app Bot temporarily deployed to euler-lite(dev,PR previews) / euler-lite-pr-774 August 7, 2026 11:43 Destroyed
@Seranged
Seranged marked this pull request as ready for review August 7, 2026 11:48

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review summary

No high-severity DeFi, security, or stack defects found. This PR is display-only: it allowlists EulerRouter governance events in the EVK Activity feed, formats oracle asset pairs / resolved vaults, and gates registry fetches on SDK factory membership so non-Euler ERC-4626 resolved vaults do not get dead internal vault links.

Reviewed: utils/activity-display.ts, components/entities/activity/ActivityEventRow.vue, tests/utils/activity-display.test.ts, SDK bump @eulerxyz/euler-v2-sdk 1.2.4 → 1.2.5 · Traced beyond the diff: fetchVaultCategory / useVaultRegistry.getOrFetch / resolveUnknown, useTokenSymbolResolver, ActivityAddress.vue linkKind routing, useActivityFeed display allowlist path · Protocol skills consulted: euler-irm-oracles

Not flagged

  • Factory-membership gating before getOrFetch intentionally skips resolveUnknown’s securitize/EVault fallback for unclassified addresses; that prevents bogus registry entries and dead /lend/... links for external resolved vaults, at the cost of explorer-only labeling when SDK metadata is temporarily Unknown.
  • No fund-moving flows, approvals, geo/screening/terms gates, secrets, or v-html sinks were introduced; token symbols render via text interpolation / avatar labels.
  • Preferring upstream event.label over local normalized labels is the pre-existing formatActivityEventLabel contract and was not newly weakened here.
Open in Web View Automation 

Sent by Cursor Automation: Lite PR Reviewer

@LeonardEulerXYZ LeonardEulerXYZ left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed exact head 9ef588753195df5bfbda99b070feb182138d0fef.

No blocking findings.

Validation performed:

  • reviewed the complete five-file diff and the affected activity feed, address-label, token-symbol, vault-registry, and SDK query paths
  • compared installed SDK 1.2.4 → 1.2.5: only the package version and four activity event constants/types changed; no new runtime code, scripts, or dependencies
  • focused activity-display suite: 33/33 passed
  • full local suite under Node 24/npm 11: 169 files passed, 1 skipped; 1,612 tests passed, 1 skipped
  • local lint: 0 errors (6 unrelated pre-existing warnings); typecheck and production build passed
  • headed Railway preview smoke on desktop and mobile against Monad eAUSD-20: governance-only filtering, USD / PT-AUSD-8OCT2026 labeling, oracle/router expansion, cursor pagination, and resolved-vault labeling all rendered correctly
  • GitHub CI, CodeRabbit, Cursor review, and Railway preview checks are green

The only failed browser request was optional WalletConnect telemetry (pulse.walletconnect.org, 403); app/API/RPC requests and page runtime were clean.

@Seranged
Seranged merged commit 60cc27b into development Aug 7, 2026
6 checks passed
@Seranged
Seranged deleted the feat/activity-oracle-router-events branch August 7, 2026 12:25
@LeonardEulerXYZ

Copy link
Copy Markdown
Contributor

Post-merge follow-up from delayed independent review:

Medium — token-symbol cache is not safely scoped across network changes

components/entities/activity/ActivityEventRow.vue newly routes oracle-pair and resolved-vault fields through useTokenSymbolResolver(). In composables/useTokenSymbolResolver.ts, resolveSymbol() reads resolvedSymbols before ensureClient() checks whether rpcUrl changed. A symbol cached for an address on chain A can therefore be returned unchanged for the same address on chain B. Separately, an in-flight chain-A lookup can complete after a chain-B invalidation and write its old result into the new cache because completions have no RPC/generation guard.

Impact is display correctness rather than transaction execution, but these rows describe oracle governance state, so cross-chain mislabeling is material enough to fix.

Suggested fresh remediation PR:

  1. invalidate/check RPC generation before every cache read;
  2. capture the resolver generation for each async lookup and discard stale completions;
  3. add a regression test covering a same-address network switch plus an old in-flight completion;
  4. add component coverage for the new asynchronous ActivityEventRow resolution path (initial shortened label → resolved label, external vault skip, and stale completion handling).

A second async path at ActivityEventRow.vue:77-83 should also use watcher cleanup/generation scoping so a row unmounted during a chain switch cannot launch later registry work. The delayed category result does not automatically write chain-A metadata into chain B—the registry re-resolves against current state—but it can trigger stale cross-chain work and compound the registry’s own multi-await chain-switch race.

This arrived after merge, so it could not supersede the approval in time.

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.

3 participants