Skip to content

feat: enhance MultichainBridgeTransactionListItem to support destination perspective#27536

Merged
PatrykLucka merged 2 commits into
mainfrom
fix/bridge-tx-not-displayed-on-destination-chain
Mar 20, 2026
Merged

feat: enhance MultichainBridgeTransactionListItem to support destination perspective#27536
PatrykLucka merged 2 commits into
mainfrom
fix/bridge-tx-not-displayed-on-destination-chain

Conversation

@PatrykLucka

@PatrykLucka PatrykLucka commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

Description

When bridging from a non-EVM chain to an EVM chain (e.g. Solana → Optimism), the completed bridge transaction was only visible on the source chain's activity list. Switching to the destination chain's activity view showed an empty list, even though funds were correctly received. The transaction would only appear after performing another unrelated transaction on the destination chain.

Root cause: UnifiedTransactionsView filtered non-EVM transactions exclusively by source chain. When viewing Optimism-only activity, the Solana source transaction was filtered out, and no EVM-side entry existed for the bridge destination.

Fix (3 parts):

  1. Activity list filtering (UnifiedTransactionsView.tsx): Non-EVM bridge source transactions are now also included when their destination EVM chain is enabled, by cross-referencing bridge history items.

  2. Destination perspective rendering (MultichainBridgeTransactionListItem.tsx): When a bridge transaction is shown from the destination chain's perspective, the component now displays the destination chain icon, received token amount (e.g. +0.1 ETH), and destination token symbol instead of the source chain details.

  3. Balance/data refresh on bridge completion (Engine.ts): When BridgeStatusController:destinationTransactionCompleted fires for an EVM destination, the handler now also triggers AccountTrackerController.refresh and TransactionController.updateIncomingTransactions to update native balances and fetch incoming transactions.

Changelog

CHANGELOG entry: Fixed cross-chain bridge transactions not appearing on the destination chain's activity list

Related issues

Fixes: #23424

Manual testing steps

Feature: Cross-chain bridge activity visibility

  Scenario: Bridge from Solana to Optimism shows on Optimism activity
    Given user has Solana and Optimism networks enabled
    And user has SOL balance on Solana

    When user initiates a bridge from SOL on Solana to ETH on Optimism
    And the bridge completes successfully
    And user switches network filter to show only Optimism activity
    Then the bridge transaction is visible in the Optimism activity list
    And the transaction shows the Optimism network icon
    And the transaction displays the received ETH amount with a "+" prefix

  Scenario: Bridge from Solana to Optimism shows on Solana activity
    Given user has Solana and Optimism networks enabled
    And user has completed a bridge from SOL to ETH

    When user switches network filter to show only Solana activity
    Then the bridge transaction is visible in the Solana activity list
    And the transaction shows the Solana network icon
    And the transaction displays the sent SOL amount

  Scenario: Bridge visible on All Networks view
    Given user has Solana and Optimism networks enabled
    And user has completed a bridge from SOL to ETH

    When user views All Networks activity
    Then the bridge transaction is visible
    And the transaction shows from the source (Solana) perspective

  Scenario: Non-bridge Solana transactions do not leak into EVM-only activity
    Given user has only Optimism network enabled (Solana disabled)
    And user has regular (non-bridge) Solana transactions

    When user views the activity list
    Then the regular Solana transactions are not shown

Screenshots/Recordings

Before

ScreenRecording_11-28-2025.16-01-13_1.MP4

After

bridge-activity-fix.mov

Pre-merge author checklist

Pre-merge reviewer checklist

  • I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed).
  • I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots.

Note

Medium Risk
Touches transaction list filtering/rendering and engine-side refresh triggers on bridge completion, which can affect activity visibility and balance refresh behavior across networks. Changes are scoped and covered by new unit tests but still impact core wallet UX.

Overview
Fixes cross-chain bridge activity visibility by including non-EVM bridge source transactions when their destination EVM chain is the currently enabled filter in UnifiedTransactionsView.

Adds a destination-view rendering mode to MultichainBridgeTransactionListItem (destination network badge + +-prefixed received amount/symbol using destination decimals), and wires it up based on whether the non-EVM source chain is enabled.

On BridgeStatusController:destinationTransactionCompleted for EVM assets, Engine now also refreshes the account tracker (best-effort) and triggers TransactionController.updateIncomingTransactions; unit tests were added/updated to cover these behaviors.

Written by Cursor Bugbot for commit e18b71a. This will update automatically on new commits. Configure here.

@PatrykLucka PatrykLucka self-assigned this Mar 17, 2026
@github-actions

Copy link
Copy Markdown
Contributor

CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes.

@metamaskbot metamaskbot added the team-mobile-ux Mobile UX team label Mar 17, 2026
@PatrykLucka PatrykLucka marked this pull request as ready for review March 17, 2026 13:43
@PatrykLucka PatrykLucka requested review from a team as code owners March 17, 2026 13:43
@github-actions github-actions Bot added size-M risk-high Extensive testing required · High bug introduction risk labels Mar 17, 2026
@github-actions github-actions Bot added risk-high Extensive testing required · High bug introduction risk and removed risk-high Extensive testing required · High bug introduction risk labels Mar 17, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🔍 Smart E2E Test Selection

  • Selected E2E tags: SmokeAccounts, SmokeConfirmations, SmokeIdentity, SmokeNetworkAbstractions, SmokeNetworkExpansion, SmokeMultiChainAPI, SmokeTrade, SmokeWalletPlatform
  • Selected Performance tags: @PerformanceLaunch, @PerformanceLogin, @PerformanceAssetLoading
  • Risk Level: high
  • AI Confidence: 82%
click to see 🤖 AI reasoning details

E2E Test Selection:
This PR modifies app/core/Engine/Engine.ts (CRITICAL) and its test, as well as UnifiedTransactionsView and MultichainBridgeTransactionListItem components.

  1. Engine.ts (CRITICAL CORE FILE)
    Engine is the central orchestrator that initializes controllers, providers, and manages global state. Any change here can cascade into:
  • Controller initialization and state wiring
  • TransactionController behavior
  • Network/provider events (accountsChanged, chainChanged)
  • Activity and transaction state propagation to UI

Because Engine underpins accounts, transactions, network selection, and multi-chain support, this is classified as HIGH risk. Even if the change is scoped, regressions could surface across confirmations, activity history, account management, and multi-chain flows.

  1. UnifiedTransactionsView & MultichainBridgeTransactionListItem
    These directly impact:
  • Transaction history / activity list rendering
  • Multichain bridge transaction display
  • Cross-chain activity visibility

This maps directly to SmokeWalletPlatform (transaction history display) and SmokeTrade (bridge flows). Since bridge/swap flows require confirmations, SmokeConfirmations must also be included.

Tag Justification:

  • SmokeWalletPlatform: Explicitly covers transaction history and activity display. Directly impacted by UnifiedTransactionsView and bridge transaction list item.
  • SmokeTrade: Bridge flows are part of this suite; activity display changes could break post-bridge verification.
  • SmokeConfirmations: Required because SmokeTrade includes on-chain flows; also Engine changes can affect confirmation pipeline.
  • SmokeAccounts: Engine changes may affect account state, switching, and multi-account flows.
  • SmokeIdentity: Engine/controller wiring can affect multi-SRP and sync-related state.
  • SmokeNetworkAbstractions: Engine changes can impact network selection and provider behavior.
  • SmokeNetworkExpansion: Multichain and bridge transaction UI implies cross-chain handling; Engine changes may affect multi-chain providers.
  • SmokeMultiChainAPI: Engine-level changes may impact session scope handling and chain permission propagation.

Excluded:

  • SmokeCard, SmokeRamps, SmokePredictions, SmokePerps, FlaskBuildTests — no direct evidence of changes in those feature areas, and no snap-specific or card/ramp-specific code touched.

Given the Engine modification, a conservative but still scoped selection is warranted without selecting every possible feature suite.

Performance Impact:
Engine changes can affect startup time, unlock flow, and initial state hydration. Transaction view changes can affect asset/activity rendering performance.

Selected performance tags:

  • @PerformanceLaunch: Engine initialization can affect cold/warm start time.
  • @PerformanceLogin: Unlock/session restoration depends on Engine readiness.
  • @PerformanceAssetLoading: UnifiedTransactionsView and transaction list rendering may impact activity/balance rendering performance.

Not selecting swaps/predict/perps-specific performance tests because no swap engine, prediction, or perps logic was directly modified.

Performance Test Selection:
Engine changes can impact app startup and unlock performance. UnifiedTransactionsView changes may affect transaction/activity list rendering and balance loading performance.

View GitHub Actions results

@cursor cursor Bot 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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

@sonarqubecloud

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown
Contributor

E2E Fixture Validation — Schema is up to date
16 value mismatches detected (expected — fixture represents an existing user).
View details

@Cal-L Cal-L 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.

Left a xcomment

Comment thread app/core/Engine/Engine.ts

const { AccountTrackerController, NetworkController } =
this.context;
try {

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.

Is it intentional to silently catch this error or should we allow it to just fall to the outside catch block?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

It is intentional. findNetworkClientIdByChainId or AccountTrackerController.refresh can throw when destination EVM chain is not in the user’s wallet and that's fine, we still want to run updateIncomingTransactions

@Cal-L Cal-L 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.

Lgtm

@PatrykLucka PatrykLucka added this pull request to the merge queue Mar 20, 2026
Merged via the queue into main with commit 200bb34 Mar 20, 2026
195 of 196 checks passed
@PatrykLucka PatrykLucka deleted the fix/bridge-tx-not-displayed-on-destination-chain branch March 20, 2026 12:12
@github-actions github-actions Bot locked and limited conversation to collaborators Mar 20, 2026
@metamaskbot metamaskbot added the release-7.72.0 Issue or pull request that will be included in release 7.72.0 label Mar 20, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

release-7.72.0 Issue or pull request that will be included in release 7.72.0 risk-high Extensive testing required · High bug introduction risk size-M team-mobile-ux Mobile UX team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Solana-EVM tx not displayed on optimism account.

4 participants