Skip to content

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

Merged
dawnseeker8 merged 28 commits into
mainfrom
fix/ledger-monad-swap-issue
May 28, 2026
Merged

fix: 28589 resolve the ledger monad swap issue. cp-7.79.0#29091
dawnseeker8 merged 28 commits into
mainfrom
fix/ledger-monad-swap-issue

Conversation

@dawnseeker8

@dawnseeker8 dawnseeker8 commented Apr 21, 2026

Copy link
Copy Markdown
Contributor

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
Changes only the Ledger hardware-wallet signing dependency path used for transactions/swaps; no local code review surface beyond the version bump.

Overview
Bumps @metamask/eth-ledger-bridge-keyring from ^12.0.2 to ^12.1.0 (and refreshes yarn.lock) so Ledger signing uses the updated bridge stack—@metamask/keyring-sdk ^2.1.1, explicit @ledgerhq/hw-transport, and newer @ledgerhq/* transport/device/error packages.

There are no app source changes; behavior comes from the upgraded package. The intent is to stop a false “blind signing is not enabled” failure when Ledger users complete gas-sponsored swaps on Monad (and similar chains without a matching Ledger plugin), as in #28589.

Reviewed by Cursor Bugbot for commit b7d5043. 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>

Copilot AI commented Apr 28, 2026

Copy link
Copy Markdown
Contributor

@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>

Copilot AI commented Apr 30, 2026

Copy link
Copy Markdown
Contributor

@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>

Copilot AI commented May 7, 2026

Copy link
Copy Markdown
Contributor

@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

socket-security Bot commented May 7, 2026

Copy link
Copy Markdown

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

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatednpm/​@​metamask/​eth-ledger-bridge-keyring@​12.0.2 ⏵ 12.1.099 +110089 +196 +3100

View full report

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

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
dawnseeker8 and others added 2 commits May 19, 2026 11:13
Updated the dependency version of @metamask/eth-ledger-bridge-keyring in package.json and yarn.lock to ensure compatibility and access to the latest features and fixes.
dawnseeker8 and others added 2 commits May 20, 2026 16:12
This commit introduces a fallback non-null reject code in the SafePromise class of the react-native-ble-plx library. The change ensures that if a null code is passed to the promise rejection methods, a stable default code ("BleError") is used instead. This prevents potential NullPointerExceptions that could crash the host app when interacting with native modules. The reject methods have been updated to utilize this new safeCode method for handling reject codes.
@dawnseeker8 dawnseeker8 requested a review from a team as a code owner May 20, 2026 14:58
@github-actions github-actions Bot added size-S and removed size-XS labels May 20, 2026
@sonarqubecloud

Copy link
Copy Markdown

@github-actions github-actions Bot added size-XS and removed size-S labels May 27, 2026
@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: 82%
click to see 🤖 AI reasoning details

E2E Test Selection:
The only code change is a minor version bump of @metamask/eth-ledger-bridge-keyring from ^12.0.2 to ^12.1.0 (plus the corresponding yarn.lock update). This package provides Ledger hardware wallet keyring functionality (LedgerKeyring, LedgerMobileBridge) used in app/core/Ledger/Ledger.ts and app/core/Engine/controllers/keyring-controller/keyring-controller-init.ts. A minor version bump (semver) should be backward-compatible, introducing new features or bug fixes without breaking changes. The SmokeAccounts tag is selected because it covers hardware wallet account flows (adding QR-based hardware wallet accounts, account management). No other tags are warranted since this is a narrow, low-risk dependency update that only affects the Ledger hardware wallet integration path.

Performance Test Selection:
A minor version bump of the eth-ledger-bridge-keyring package does not affect UI rendering, data loading, app startup, or any performance-sensitive code paths. No performance tests are needed.

View GitHub Actions results

@sonarqubecloud

Copy link
Copy Markdown

@dawnseeker8 dawnseeker8 changed the title fix: 28589 resolve the ledger monad swap issue. fix: 28589 resolve the ledger monad swap issue. cp-7.79.0 May 27, 2026
@nikolastoimenovski-consensys

Copy link
Copy Markdown

Tested on the latest build, the fix works as expected for Mon network. For Sei network, the 2 approval swap is successful, but "something went wrong" error is shown - created a separate ticket for this #30730 . Adding "qa passed" label.

@nikolastoimenovski-consensys nikolastoimenovski-consensys added the QA Passed QA testing has been completed and passed label May 28, 2026
@dawnseeker8 dawnseeker8 added this pull request to the merge queue May 28, 2026
Merged via the queue into main with commit 6fa3aa4 May 28, 2026
197 of 199 checks passed
@dawnseeker8 dawnseeker8 deleted the fix/ledger-monad-swap-issue branch May 28, 2026 15:39
@github-actions github-actions Bot locked and limited conversation to collaborators May 28, 2026
@metamaskbotv2 metamaskbotv2 Bot added the release-7.80.0 Issue or pull request that will be included in release 7.80.0 label May 28, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

QA Passed QA testing has been completed and passed release-7.80.0 Issue or pull request that will be included in release 7.80.0 size-XS team-be-trade BE Trade team

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