Skip to content

fix: 28589 resolve the ledger monad swap issue. #29091

Open
dawnseeker8 wants to merge 18 commits into
mainfrom
fix/ledger-monad-swap-issue
Open

fix: 28589 resolve the ledger monad swap issue. #29091
dawnseeker8 wants to merge 18 commits into
mainfrom
fix/ledger-monad-swap-issue

Conversation

@dawnseeker8
Copy link
Copy Markdown
Contributor

@dawnseeker8 dawnseeker8 commented Apr 21, 2026

Description

Ledger hardware wallet users on Monad (and other chains / contracts without a matching Ledger plugin) were hitting a misleading "blind signing is not enabled" error when trying to complete gas-sponsored swaps, even though blind signing was enabled on the device.
this PR will resolve the issue #28589 to use new @metamask/eth-ledger-keyring-bridge`

Changelog

CHANGELOG entry: Fixed a misleading "blind signing is not enabled" error preventing Ledger hardware wallet users from completing gas-sponsored swaps on Monad and other chains without a matching Ledger plugin.

Related issues

Fixes: #28589

Manual testing steps

Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]

Screenshots/Recordings

Before

After

Pre-merge author checklist

Performance checks (if applicable)

  • I've tested on Android
    • Ideally on a mid-range device; emulator is acceptable
  • I've tested with a power user scenario
    • Use these power-user SRPs to import wallets with many accounts and tokens
  • I've instrumented key operations with Sentry traces for production performance metrics

For performance guidelines and tooling, see the Performance Guide.

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
Updates the Ledger bridge keyring and its transitive Ledger transport/keyring dependencies, which can impact hardware-wallet signing and swap flows. Risk is moderate because behavior changes come from upstream packages rather than local logic changes.

Overview
Updates @metamask/eth-ledger-bridge-keyring from ^12.0.2 to ^12.0.3 (with corresponding yarn.lock refresh).

This pulls in newer transitive Ledger/keyring deps (notably @ledgerhq/hw-transport and @metamask/keyring-sdk/@metamask/keyring-utils), intended to address Ledger swap/signing issues on chains without matching Ledger plugins (e.g., Monad).

Reviewed by Cursor Bugbot for commit 911abd7. Bugbot is set up for automated code reviews on this repo. Configure here.

…nd update dependencies

- Introduced a new preview build configuration for `@metamask/eth-ledger-bridge-keyring` with version `12.0.1-7275dbc`.
- Updated `yarn.lock` to include new versions for several dependencies, including `@ledgerhq/devices`, `@ledgerhq/errors`, and `@ledgerhq/hw-transport`, ensuring compatibility and improved functionality.
- Adjusted the versioning for `@metamask/keyring-api` and `@metamask/keyring-sdk` to their latest versions, enhancing the overall performance and stability of the application.
@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.

@metamaskbotv2 metamaskbotv2 Bot added the team-be-trade BE Trade team label Apr 21, 2026
@dawnseeker8
Copy link
Copy Markdown
Contributor Author

@copilot resolve the merge conflicts in this pull request

…-issue

# Conflicts:
#	yarn.lock

Co-authored-by: dawnseeker8 <7315988+dawnseeker8@users.noreply.github.com>
Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 28, 2026

@copilot resolve the merge conflicts in this pull request

Resolved. Merged origin/main into this branch and fixed the single yarn.lock conflict for @metamask/keyring-api entries — the 21.6.0 and 23.0.1 lock entries now correctly reflect all the range aliases from the resolutions in package.json. Merge commit: 8c0add83e0.

@dawnseeker8 dawnseeker8 marked this pull request as ready for review April 30, 2026 11:10
@dawnseeker8
Copy link
Copy Markdown
Contributor Author

@copilot resolve the merge conflicts in this pull request

…-issue

# Conflicts:
#	yarn.lock

Co-authored-by: dawnseeker8 <7315988+dawnseeker8@users.noreply.github.com>
Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 30, 2026

@copilot resolve the merge conflicts in this pull request

Resolved again. Merged the latest origin/main and fixed the yarn.lock conflict — added the new @metamask/hw-wallet-sdk@npm:^0.8.0 entry from main while preserving the @metamask/json-rpc-engine alias ^10.2.0 from this branch. Merge commit: d147bc01.

@dawnseeker8
Copy link
Copy Markdown
Contributor Author

@copilot resolve the merge conflicts in this pull request

…-issue

# Conflicts:
#	.github/workflows/runway-ota-build-core.yml
#	app/component-library/components-temp/Contracts/ContractBox/ContractBox.test.tsx
#	app/component-library/components-temp/Contracts/ContractBoxBase/ContractBoxBase.test.tsx
#	app/components/Approvals/ApprovalModal/ApprovalModal.test.tsx
#	app/components/Base/AnimatedFox/index.test.tsx
#	app/components/Nav/Main/__snapshots__/index.test.tsx.snap
#	app/components/UI/AccountFromToInfoCard/__snapshots__/AccountFromToInfoCard.test.tsx.snap
#	app/components/UI/AccountNetworkIndicator/AccountNetworkIndicator.test.tsx
#	app/components/UI/ActionModal/__snapshots__/index.test.tsx.snap
#	app/components/UI/ActionModal/index.test.tsx
#	app/components/UI/ActionView/index.test.tsx
#	app/components/UI/AnimatedSpinner/index.test.tsx
#	app/components/UI/AnimatedTransactionModal/index.test.tsx
#	app/components/UI/AssetElement/__snapshots__/index.test.tsx.snap
#	app/components/UI/AssetIcon/index.test.tsx
#	app/components/UI/AssetList/index.test.tsx
#	app/components/UI/BasicFunctionality/BasicFunctionality.test.js
#	app/components/UI/BlockingActionModal/index.test.tsx
#	app/components/UI/Button/index.test.tsx
#	app/components/UI/Confetti/index.test.tsx
#	app/components/UI/CustomAlert/index.test.tsx
#	app/components/UI/FadeOutOverlay/index.test.tsx
#	app/components/UI/FadeView/index.test.tsx
#	app/components/UI/FoxScreen/index.test.tsx
#	app/components/UI/GenericButton/__snapshots__/index.test.tsx.snap
#	app/components/UI/GenericButton/index.test.tsx
#	app/components/UI/GlobalAlert/index.test.tsx
#	app/components/UI/HintModal/__snapshots__/index.test.tsx.snap
#	app/components/UI/HintModal/index.test.tsx
#	app/components/UI/ImageIcon/index.test.tsx
#	app/components/UI/LoginOptionsSwitch/LoginOptionsSwitch.test.tsx
#	app/components/UI/LoginOptionsSwitch/__snapshots__/LoginOptionsSwitch.test.tsx.snap
#	app/components/UI/ModalNavbarTitle/index.test.tsx
#	app/components/UI/NavbarBrowserTitle/index.test.tsx
#	app/components/UI/NavbarTitle/__snapshots__/index.test.js.snap
#	app/components/UI/NetworkMainAssetLogo/index.test.tsx
#	app/components/UI/OnboardingScreenWithBg/index.test.tsx
#	app/components/UI/SettingsNotification/__snapshots__/index.test.tsx.snap
#	app/components/UI/StyledButton/__snapshots__/index.test.tsx.snap
#	app/components/UI/Tabs/TabCountIcon/__snapshots__/index.test.tsx.snap
#	app/components/UI/TokenImage/__snapshots__/index.test.tsx.snap
#	app/components/UI/TokenImage/index.test.tsx
#	app/components/Views/AccountConnect/AccountConnectMultiSelector/__snapshots__/AccountConnectMultiSelector.test.tsx.snap
#	app/components/Views/AccountConnect/__snapshots__/AccountConnect.test.tsx.snap
#	app/components/Views/AccountPermissions/AccountPermissionsConfirmRevokeAll/__snapshots__/AccountPermissionsConfirmRevokeAll.test.tsx.snap
#	app/components/Views/AccountPermissions/ConnectionDetails/__snapshots__/ConnectionDetails.test.tsx.snap
#	app/components/Views/AccountPermissions/NetworkPermissionsConnected/__snapshots__/NetworkPermissionsConnected.test.tsx.snap
#	app/components/Views/AccountPermissions/PermittedNetworksInfoSheet/__snapshots__/PermittedNetworksInfoSheet.test.tsx.snap
#	app/components/Views/AccountPermissions/__snapshots__/AccountPermissions.test.tsx.snap
#	app/components/Views/AccountSelector/AccountSelector.styles.ts
#	app/components/Views/AccountStatus/__snapshots__/index.test.tsx.snap
#	app/components/Views/ActivityView/__snapshots__/index.test.tsx.snap
#	app/components/Views/AddAccountActions/__snapshots__/AddAccountActions.test.tsx.snap
#	app/components/Views/AddBookmark/__snapshots__/index.test.tsx.snap
#	app/components/Views/AddressSelector/__snapshots__/AddressSelector.test.tsx.snap
#	app/components/Views/AesCryptoTestForm/__snapshots__/AesCryptoTestForm.test.tsx.snap
#	app/components/Views/AesCryptoTestForm/__snapshots__/Clipboard.test.tsx.snap
#	app/components/Views/AesCryptoTestForm/__snapshots__/Form.test.tsx.snap
#	app/components/Views/Browser/__snapshots__/Browser.rendering.test.tsx.snap
#	app/components/Views/Browser/__snapshots__/Browser.tabs.test.tsx.snap
#	app/components/Views/Browser/__snapshots__/MaxBrowserTabsModal.test.tsx.snap
#	app/components/Views/BrowserTab/__snapshots__/index.test.tsx.snap
#	app/components/Views/BrowserTab/components/IpfsBanner/__snapshots__/index.test.tsx.snap
#	app/components/Views/BrowserTab/components/Options/__snapshots__/index.test.tsx.snap
#	app/components/Views/BrowserTab/components/PhishingModal/__snapshots__/index.test.tsx.snap
#	app/components/Views/ChangeInSimulationModal/__snapshots__/ChangeInSimulationModal.test.tsx.snap
#	app/components/Views/ConnectQRHardware/__snapshots__/index.test.tsx.snap
#	app/components/Views/DataCollectionModal/__snapshots__/index.test.tsx.snap
#	app/components/Views/DiscoveryTab/__snapshots__/DiscoveryTab.test.tsx.snap
#	app/components/Views/EnterPasswordSimple/__snapshots__/index.test.tsx.snap
#	app/components/Views/GasEducationCarousel/__snapshots__/index.test.tsx.snap
#	app/components/Views/ImportPrivateKey/__snapshots__/index.test.tsx.snap
#	app/components/Views/ImportPrivateKeySuccess/__snapshots__/index.test.tsx.snap
#	app/components/Views/InfoNetworkModal/__snapshots__/InfoNetworkModal.test.tsx.snap
#	app/components/Views/MultiRpcModal/__snapshots__/MultiRpcModal.test.tsx.snap
#	app/components/Views/NavigationUnitTest/__snapshots__/TestScreen1.test.js.snap
#	app/components/Views/NavigationUnitTest/__snapshots__/TestScreen2.test.js.snap
#	app/components/Views/NavigationUnitTest/__snapshots__/TestScreen3.test.js.snap
#	app/components/Views/OfflineMode/__snapshots__/index.test.tsx.snap
#	app/components/Views/OriginSpamModal/__snapshots__/OriginSpamModal.test.tsx.snap
#	app/components/Views/PickComponent/__snapshots__/index.test.tsx.snap
#	app/components/Views/ResetPassword/__snapshots__/index.test.tsx.snap
#	app/components/Views/Root/__snapshots__/index.test.tsx.snap
#	app/components/Views/ShowDisplayMediaNFTSheet/__snapshots__/ShowDisplayNFTMediaSheet.test.tsx.snap
#	app/components/Views/ShowIpfsGatewaySheet/__snapshots__/ShowIpfsGatewaySheet.test.tsx.snap
#	app/components/Views/ShowTokenIdSheet/__snapshots__/ShowTokenIdSheet.test.tsx.snap
#	app/components/Views/SimpleWebview/__snapshots__/index.test.tsx.snap
#	app/components/Views/SuccessErrorSheet/__snapshots__/index.test.tsx.snap
#	app/components/Views/TransactionsView/__snapshots__/index.test.tsx.snap
#	app/components/Views/TrendingView/components/ExploreSearchResults/ExploreSearchResults.test.tsx
#	app/components/Views/TrendingView/components/QuickActions/QuickActions.tsx
#	app/components/Views/TrendingView/components/SectionHeader/SectionHeader.test.tsx
#	app/components/Views/TrendingView/components/Sections/SectionTypes/PerpsExploreSection.tsx
#	app/components/Views/TrendingView/components/Sections/SectionTypes/SectionCard.tsx
#	app/components/Views/Wallet/__snapshots__/index.test.tsx.snap
#	app/components/Views/WalletRecovery/__snapshots__/index.test.tsx.snap

Co-authored-by: dawnseeker8 <7315988+dawnseeker8@users.noreply.github.com>
Copy link
Copy Markdown
Contributor

Copilot AI commented May 7, 2026

@copilot resolve the merge conflicts in this pull request

Resolved. Merged the latest origin/main and fixed all conflicts:

  • yarn.lock: accepted main's version (no branch-specific lockfile entries were lost)
  • 96 test/snapshot files: accepted main's deletions — these were removed in main as part of a snapshot cleanup (#29441)

Merge commit: 2c1e5818.

Comment thread yarn.lock
@dawnseeker8 dawnseeker8 marked this pull request as draft May 7, 2026 08:08
dawnseeker8 and others added 2 commits May 7, 2026 18:09
- Updated `@metamask/bridge-status-controller` to version `^71.1.0` in `package.json` and removed the patch reference.
- Updated `@metamask/eth-ledger-bridge-keyring` to version `^12.0.3`.
- Updated `@metamask/keyring-sdk` to version `^2.1.1` and `@metamask/keyring-utils` to version `^3.3.1`.
- Cleaned up `yarn.lock` by removing outdated references and consolidating dependency versions.
@dawnseeker8 dawnseeker8 marked this pull request as ready for review May 7, 2026 10:10
@socket-security
Copy link
Copy Markdown

socket-security Bot commented May 7, 2026

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatednpm/​@​metamask/​keyring-sdk@​2.0.2 ⏵ 2.1.175 +110085 +195 +1100
Updatednpm/​@​metamask/​eth-ledger-bridge-keyring@​12.0.2 ⏵ 12.0.399 +110089 +196 +3100

View full report

Copy link
Copy Markdown
Contributor

@cursor cursor Bot left a comment

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.

Reviewed by Cursor Bugbot for commit ab003dd. Configure here.

Comment thread package.json Outdated
…patch reference

- Changed the dependency for `@metamask/bridge-status-controller` in `package.json` to a patch reference.
- Updated `yarn.lock` to reflect the new patch reference and its dependencies.
- Added a new entry for the patch in `yarn.lock` to ensure proper resolution during installs.
@dawnseeker8 dawnseeker8 changed the title fix: 28589 resolve the ledger monad swap issue. fix: 28589 resolve the ledger monad swap issue. cp-7.76.0 May 7, 2026
@dawnseeker8 dawnseeker8 changed the title fix: 28589 resolve the ledger monad swap issue. cp-7.76.0 fix: 28589 resolve the ledger monad swap issue. May 7, 2026
Akaryatrh
Akaryatrh previously approved these changes May 8, 2026
Copy link
Copy Markdown
Contributor

@Akaryatrh Akaryatrh left a comment

Choose a reason for hiding this comment

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

LGTM

@Akaryatrh Akaryatrh added this pull request to the merge queue May 8, 2026
@dawnseeker8 dawnseeker8 removed this pull request from the merge queue due to a manual request May 8, 2026
@nikolastoimenovski-consensys
Copy link
Copy Markdown

Tested on Android with Ledger, the swap with 1 and 2 approvals works as expected on Monad network.
But on Sei network, on a swap with 2 approvals, even though the swap is successful, the "Something went wrong" modal is presented after signing the 2nd transaction. Video attached.

Screen_Recording_20260511_130512_MetaMask.mp4

@dawnseeker8
Copy link
Copy Markdown
Contributor Author

@copilot resolve the merge conflicts in this pull request

…-issue

# Conflicts:
#	yarn.lock

Co-authored-by: dawnseeker8 <7315988+dawnseeker8@users.noreply.github.com>
Copy link
Copy Markdown
Contributor

Copilot AI commented May 11, 2026

@copilot resolve the merge conflicts in this pull request

Resolved. Merged the latest origin/main and fixed the single yarn.lock conflict — merged the @metamask/keyring-utils range alias ^3.2.1 (from main) with ^3.3.1 (from this branch) into a single combined entry. Merge commit: 89f0e03a.

@github-actions
Copy link
Copy Markdown
Contributor

🔍 Smart E2E Test Selection

  • Selected E2E tags: SmokeAccounts
  • Selected Performance tags: None (no tests recommended)
  • Risk Level: low
  • AI Confidence: 85%
click to see 🤖 AI reasoning details

E2E Test Selection:
The PR makes a single patch version bump of @metamask/eth-ledger-bridge-keyring from ^12.0.2 to ^12.0.3, along with transitive Ledger HQ dependency updates (@ledgerhq/devices 8.10.0→8.14.0, @ledgerhq/errors 6.29.0→6.33.0, @ledgerhq/hw-transport 6.32.0→6.35.0, @ledgerhq/logs 6.14.0→6.17.0). This is a patch-level update to the Ledger hardware wallet bridge keyring, which handles Ledger device communication and account management. The SmokeAccounts tag explicitly covers hardware wallet account flows including adding QR-based hardware wallet accounts and account management. No other core systems are affected - this is isolated to the Ledger keyring bridge. No performance impact is expected from a dependency patch bump.

Performance Test Selection:
A patch version bump of the Ledger bridge keyring and its transitive dependencies has no expected performance impact. These are hardware wallet communication libraries that are only active during Ledger device interactions, not during normal app rendering, startup, or data loading flows.

View GitHub Actions results

@sonarqubecloud
Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: [Ledger] Gas sponsorship - The swap fails when 2 transaction confirmations are needed on Mon network

5 participants