4.20.0
Minor Changes
-
#21371
56bf73cThanks @vpenskyi-ledger! - Fix NoFundsStake modal passing raw currency object to Swap live-app instead of expected{ toCurrencyId }format, causing the Receive field to not be pre-filled when navigating from Earn zero-balance account flow -
#21042
d5e1c7dThanks @ooke-ledger! - Tell the two Hyperliquid account-picker states apart.The perps receiving step used one description for both states, so users who already had a Hyperliquid account were told to add one. It now reads "Select an account you want to deposit funds into to place your trades" when accounts exist, and keeps "To fund your perps, you need a Hyperliquid account.
-
#21515
7f4723cThanks @sarneijim! - Bump Segment analytics SDKs for retry, rate-limit and security fixes (LIVE-35839) -
#21433
8f8f1a4Thanks @mcayuelas-ledger! - Add a webContactAddressPickerdialog skeleton to the Pay contact flow and open it from the desktop Pay tab when a contact is pressed. The address list UI and the account/send handoff on address selection land in follow-ups. -
#21355
fc74af8Thanks @semeano! - Offer the Zcash memo only to shielded recipients. A memo travels in a shielded output, so a transparent recipient could never receive one, yet the send flow showed the input for every Zcash address and made the user fill or skip it. Send descriptors can now distinguish static memo support from recipient-specific visibility, and a memo left over from an earlier shielded recipient is dropped when the recipient turns transparent, so it can no longer reach the transaction builder. -
#21434
b7f83a1Thanks @tonykhaov! - Add persisted Pay Request verify-hint state in@features/flow-pay-request. -
#21408
c270975Thanks @tonykhaov! - Add a first-time Popover on desktop Pay Request Verify. -
#21367
d182d46Thanks @claudiiafg! - Fix the Ledger Sync entry point from Contacts: align the introduction copy and artwork with the production design, only show it when the user actually tries to add a contact or an address, start the flow on "Choose your sync method", and return to Contacts instead of the Portfolio once the flow is done on Mobile. -
#21470
5b79eb3Thanks @claudiiafg! - Fix the Contacts add address flow stalling on Continue by only offering networks the device can register an address on: EVM networks running their own coin app, such as Ethereum Classic, Sonic and Sei, are no longer selectable -
#21453
3b0dbaeThanks @mcayuelas-ledger! - Add the webContactAddressPickerdialog to the Pay contact flow and open it from the desktop Pay tab when a contact is pressed. The picker lists the contact's addresses segmented by network with asset-aware icons, resolved through the view model, and exposes an optional add-address action that routes to the contact's add-address flow. Address grouping, icon resolution and truncation are shared from@features/flow-contacts. The account/send handoff on address selection lands in a follow-up. -
#21587
46b51ddThanks @claudiiafg! - Fix the Contacts feature introduction so closing it counts as seen and keeps you on the Contacts list, instead of navigating back and reopening the introduction on the next visit. -
#21601
96661b4Thanks @mateuszpalosz-ext! - part 1 for Aleo bond flow -
#21746
c2e2276Thanks @amaslakov! - Add the error message shown when the protocol refuses a Tezos stake amount as too small -
#21401
8c40cc1Thanks @claudiiafg! - Skip the extra confirmation modal when editing a contact or address name. Apply changes now starts the device action directly when needed, and the Apply CTA shows the Ledger logo in that case. -
#21440
0089a4bThanks @claudiiafg! - Drive Contacts add-address confirmation through the Device Intent Executor instead of mocked Continue screens, including prefill and Send entry points. -
#21374
d6e689fThanks @tonykhaov! - Update the desktop Pay feature tour layout and copy to match mockups (LIVE-36499). -
#21418
60ee73cThanks @liviuciulinaru! - RenameCARD_API_URLtoCARD_BAANX_API_URL, keep the production defaults, and drop the Env vars section from the Card / Pay DevTool. -
#21548
55bd216Thanks @mcayuelas-ledger! - Add a getCardOnboardingStatus RTK Query endpoint and a schema-validated mock fixture. -
#21550
6ed1820Thanks @mcayuelas-ledger! - Mount and persist the card onboarding widget in Ledger Wallet Desktop. -
#21546
85474dbThanks @semeano! - Change show private balance label. -
#21248
9672658Thanks @OlivierFreyssinet! - Edit an external address on the device from Contacts. The device intent now calls@ledgerhq/device-contacts-kit'sContactsManager.editExternalAddressIdentifier()andContactsManager.editExternalAddressScope(), each returning the rotated address proof to persist while the group's name proof passes through untouched, and both apps render the confirmation step and oneInfoStateper failure.The device serves address and label edits as two separate commands, so an edit changing both asks the user to confirm twice, showing the same waiting screen for each step rather than numbering them. Nothing partial is ever stored: an abandoned or rejected edit leaves the record untouched, and a retry restarts the whole chain.
-
#21247
a55d4caThanks @OlivierFreyssinet! - Rename a contact on the device from Contacts. The device intent now calls@ledgerhq/device-contacts-kit'sContactsManager.renameContact(), which returns the rotated name proof to persist, and both apps render the confirmation step and oneInfoStateper failure. A rejection keeps the job open so the user can retry on the same device.Rename is a blockchain-agnostic dashboard operation, so it initializes on the dashboard (
BOLOS) rather than a coin app: a contact with no address is renameable, and an outdated device surfaces as an OS-update screen instead of an app-update one. -
#21269
8c83fe6Thanks @aussedatlo! - Show the emulated device's screen at the foot of the desktop sidebar while the mock server transport is driving it, and let its buttons and touchscreen be pressed. -
#21269
9c67330Thanks @aussedatlo! - Let a launchMOCK_SERVER_TRANSPORT=1turn the mock server transport on, instead of the developer toggle's stored value always winning. -
#21269
8f8d63eThanks @aussedatlo! - Add a "Mock server transport" toggle in the desktop developer settings, so the Device Management Kit connects to a device mock server instead of a physical device. Configured byMOCK_SERVER_TRANSPORT,MOCK_SERVER_TRANSPORT_URL,MOCK_SERVER_SESSIONandMOCK_SERVER_SEED, with a top bar indicator showing whether the server is reachable. -
#21390
8c98d3bThanks @gre-ledger! - Remove Storybook from the desktop app: drop the.storybookconfig, thersbuild.storybook.config.jsbuilder, every*.stories.*file and the Storybook-only dependencies (storybook,@storybook/*,storybook-react-rsbuild,@rsbuild/*,@vitest/mocker,events). TheSTORYBOOK_ENVbranches aroundelectronaccess are gone, soclipboardandshellare now imported directly, and the shared Jestelectronmock exposesclipboard. The now-dead*.stories.tsxexclusions in the repo Sonar and@ledgerhq/react-uibuild configs are removed too. -
#21477
9175a6dThanks @semeano! - Change Zcash private sync button label -
#21223
e92cf97Thanks @vtaranushenko-ext-ledger! - Route Casper through the generic coin-framework bridge (LIVE-35912/35914/35915).coin-casper:createApi()now returns aCoinModuleImpl(dropping the throwing stubs for unsupported capabilities;withDefaultsfills them).craftTransactionDatadelegates to the framework helper.getTransferIdFromMemobridges the legacyStringMemo<"transferId">shape and the new{type:"transferId"}framework shape until LIVE-35735 unifies them.live-common: Casper added togenericCoinFrameworkFamilies.json; LiveConfig keyconfig_casper_generic_bridge(defaulttrue) provides a runtime kill-switch to fall back to the legacy bridge without a deploy.- Desktop/Mobile:
useTransferIdChangehook extracted and shared betweenMemoField/TransferIdField/MemoTagInput/ScreenEditTransferId; now writes bothtransferId(legacy bridge) andmemoType/memoValue(generic path) so both bridges read the same user input correctly.
-
#21513
9dd7db0Thanks @mcayuelas-ledger! - Add a Pay success screen to the Send flow. When the flow is launched from the Pay tab and the transaction succeeds, it now routes to a dedicatedPAY_SUCCESSstep that shows the recipient, amount, source account (with network icon) and a link to the transaction details, instead of the standard confirmation step. Exposes a presentationalPaySuccesscomponent from@features/flow-pay-contactand wires it in ledger-live-desktop via an MVVMPaySuccessScreen+usePaySuccessViewModel. -
#21372
961792bThanks @mcayuelas-ledger! - Gate the Pay tab contacts section behind the contacts feature flag (lwdContacts on desktop, lwmContacts on mobile) -
#21302
1e883b3Thanks @mdomanski-ext-ledger! - feat: read Hedera staking validators through an on-demand query on desktop, with loading and fetch-error states -
#21305
7aca4c8Thanks @mdomanski-ext-ledger! - refactor: drop the Hedera preload layer now that no consumer reads it, and fold useHederaEnrichedDelegationV2 back into useHederaEnrichedDelegation -
#21358
6561cf0Thanks @mdomanski-ext-ledger! - refactor: serve the Hedera validators list from an RTK Query api instead of React Query -
#21378
b864c2cThanks @mcayuelas-ledger! - Fix MarketBanner/Market list navigation so clicking Arbitrum opens the ARB asset detail instead of the Ethereum one, by passing the market ledger ids in the navigation state and preventing a bare market id from colliding with a same-named chain id -
#21616
5e971b5Thanks @gre-ledger! - MigrateBIG_NUMBER_DECIMAL_PLACESoff@ledgerhq/live-env: every call site now inlines the constant and the definition is removed.@ledgerhq/live-currency-formatdrops its@ledgerhq/live-envdependency altogether. -
#21269
63002c4Thanks @aussedatlo! - Open the mock server's configuration UI by right-clicking the top bar indicator, on the session Ledger Live is already using. A left click still copies the session token. -
#21269
2a39225Thanks @aussedatlo! - ResetBASE_SOCKET_URLwhen the mock server transport is turned off, so the legacy scriptrunner flows stop pointing at the mock server. -
#21269
778076cThanks @aussedatlo! - Keep the mock server session token reactive in the top bar indicator, so a token published after the first render can still be copied. -
#21474
54351c2Thanks @claudiiafg! - Group unavailable assets and networks under a "Not available yet" section in the asset and network selection lists -
#21458
40ba77bThanks @semeano! - Fix Zcash private balance sync staying at 0% when started from the UFVK export modal -
#21283
761cf3eThanks @lpaquet-ledger! - add earn banner to success transation modal -
#21359
36ea18dThanks @tonykhaov! - Route the Noah webview to signup or signin when noahAuth is set (LIVE-35383). -
#21299
ac0311eThanks @tonykhaov! - Present the Pay cash-to-stable intro as a desktop dialog before the Noah handoff (LIVE-35383). -
#21428
c3de11cThanks @liviuciulinaru! - Show a Card login intro sheet on the first press of the card's action (LIVE-36793). The sheet has two
buttons. "Log in to Baanx" runs the OAuth2 hosted login. "Create an account" opens the provider's
own signup page,/onboarding/signupon the newCARD_BAANX_HOSTED_UIhost, in the same browser. The
intro shows once: a new persistedpayCardLoginIntroflag goes up when a login the card holder just
started reachesready, and it survives an app restart inside the sharedpayCardblob. A hydrated
session raises nothing. A tester resets the flag from the Pay Card devtool, and the intro shows again
on the next press.The same flag now picks what the login block says, from the app's new
payTab.cardLogin.*keys. It
sells the card while the flag is down — "Get 1% cashback every time you spend" under aGet card
button that opens the intro — and offers a login once the flag is up: "Log in to access your card"
under aLoginbutton that starts one. Its title isCrypto Card, and on mobile it is a Lumen
Subheaderunder the card face, so the Pay Card flow no longer draws a section title above it there.
Desktop keeps its host-provided title.The virtual card row names one wallet only: Apple Pay on iOS, Google Pay on Android. Desktop cannot
see the phone the card will be added to, so it keeps naming both. Each row wraps its title and its
description over as many lines as the copy needs, instead of cutting both off at the first.Hosts inject
onTrackEvent. Get card, Login, the intro buttons and close firebutton_clicked;
opening the intro also firesPage card login intro.CARD_BAANX_HOSTED_UIdefaults tohttps://ledger-ew1uat.baanxapi.com. Both apps read it with
useEnvand hand it to the flow asoauthConfig.hostedUiUrl, so a new value moves the signup page
to another tenant without a restart. -
#21426
3de7317Thanks @liviuciulinaru! - Replace the Card logout block with aMoretile-button (CardMore). The tile opens theMoresheet, and the sheet'sLogoutrow ends the Card session. -
#21438
8dd19d9Thanks @mcayuelas-ledger! - Move Pay contact copy resolution into @features/flow-pay-contact via @shared/i18n so hosts no longer pass translated labels. -
#21397
2fe4ef6Thanks @mcayuelas-ledger! - Wire Pay contact tile press to send (prefill a single-address contact), add a desktop View contact overflow action, and render LumenMenuTriggerrenderprops in the shared web passthrough stub. -
#21028
9b15a72Thanks @ooke-ledger! - Add the Perps deposit review step on desktop, reached from the deposit form, showing the swap and deposit details before the user confirms. The amount landing on the perps account now comes from a provider quote, since that balance has no counter value of its own. -
#21028
bcf6eefThanks @ooke-ledger! - Add the Perps deposit signing step on desktop, reached from the review screen. It runs on the same swap orchestration as thecustom.exchange.swaphandler — now extracted into a sharedexecuteSwap— behind the perps screens, and executes against the quote the review priced against. Declining a device prompt returns to the review with the entered amount intact, rather than raising an error screen. -
#21028
25b482dThanks @ooke-ledger! - Title the transaction detail dialog for Perps deposits: the dialog is named "Transaction detail" and its header leads with the deposit being funded, keeping the swapped pair on its own line. Swap opens the same dialog unchanged. -
#21028
70036b1Thanks @ooke-ledger! - Close the Perps deposit flow with a transaction signed screen, from which the user can follow the deposit on the status of the swap that funds it. -
#21380
59ea8fbThanks @francois-guerin-ledger! - chore(cosmos): remove Ledger validator as the default one for Osmosis -
#21295
6980e49Thanks @sarneijim! - Log Segment identify calls (success or failed) in the desktop analytics debug overlay -
#21028
93251f5Thanks @ooke-ledger! - Add the perps deposit amount form, so a deposit requested by the live app collects its funding account and amount before the review step -
#21240
1cb4dbeThanks @YazhuEth! - Persist SolanastakingResourcesthrough the generic coin framework, and revive accounts still holding the legacysolanaResourcesblob -
#21194
2bd6a1cThanks @liviuciulinaru! - Refresh Baanx Pay Card sessions after a 401, and keep the credentials out of every reader of redux.The two OAuth2 grants are RTK Query endpoints again. Both opt out of the Bearer and out of the
renewal, both run withtrack: false, so no session becomes a cache entry, and neither has a hook.The desktop redux logger and both DevTools configurations now strip every Card action, which also
closes a live leak: the code exchange logs its code and its code verifier in production, into the
file users attach to a support ticket. -
#21430
5b546c5Thanks @claudiiafg! - Remove unused PrefillAddAddressFlowRoot and the shared prefill listener store. Send now owns the prefilled add-address session via startWithPrefilled. -
#21493
475499dThanks @mcayuelas-ledger! - Extract Pay card persistence from the desktop db middleware into a dedicated helper -
#21650
349c522Thanks @lysyi3m! - Add an error message forUnexpectedGetBalanceError@ledgerhq/coin-tezosreports this error when a token balance cannot be retrieved, so Send Max
no longer claims the account has insufficient funds during an indexer outage. Without a
translation the send flow fell back to rendering the raw error name. -
#21392
2df85ebThanks @dilaouid! - feat(send): add skip memo screen in the send flow -
#21411
f670d92Thanks @claudiiafg! - Fix theme reverting to dark when navigating from My Ledger to Contacts -
#21326
9fb98abThanks @aussedatlo! - Drive the XRP app through the Device Management Kit behind theldmkXrpSignerfeature flag, keepinghw-app-xrpas the fallback -
#21465
9683837Thanks @dilaouid! - feat(tracking): add tracking contact send flow lwd
Patch Changes
- Updated dependencies [
7c6a8de,d01e4c0,8f8f1a4,fc74af8,81aa729,3d23fd4,b7f83a1,c270975,e1e7cb2,d182d46,5b79eb3,c06bd2e,eea933c,3b0dbae,dd134e9,5c23a76,96661b4,47a1cd0,8c40cc1,0089a4b,e601584,000eac0,60ee73c,ef29f07,55bd216,6ed1820,6b47659,b1b1e38,86fdaa1,51a3d3e,3a78322,2b8a4e4,92b90a6,23d2e1e,9672658,a55d4ca,147a290,6ccfc64,8993c24,8c83fe6,8f8d63e,b290a1e,52f573c,2d42e64,b7d0367,8c98d3b,e42c12a,73f68cd,eb62268,70b93a0,bed4fe7,a9e389f,e92cf97,5f6b8a8,9dd7db0,5b7d11d,ebb1371,3e14841,800e718,1e883b3,7aca4c8,6561cf0,53dcdc9,2744267,b864c2c,5e971b5,b7a8906,5db7a7d,2c70999,918e931,54351c2,761cf3e,36ea18d,ebeb266,ac0311e,91bae2a,08ee05c,d6b290b,0a02a32,66c7569,543b17d,a7d54c0,c3de11c,3de7317,d60ce38,7aa3071,faa8ef1,8dd19d9,2fe4ef6,9b15a72,bcf6eef,80b27a1,59ea8fb,6ad68ad,a6193dc,30619aa,93251f5,08ae9c2,1cb4dbe,2bd6a1c,d54d191,dcdec92,5b546c5,54124e4,db09cfc,a19ffef,1cf5583,b683a6d,3da476c,12199a1,0152cad,1c58fb1,6f39b04,2df85eb,9fb98ab,3a3d2fa,018ee9b,6656f90]:- @ledgerhq/transaction-observability@0.3.0
- @ledgerhq/live-common@37.6.0
- @features/flow-pay-card-details@0.3.0
- @features/flow-pay-contact@0.3.0
- @ledgerhq/coin-zcash@0.7.0
- @devtools/bindings@0.7.0
- @features/flow-pay-request@0.4.0
- @features/flow-contacts-introduction@1.1.0
- @features/flow-contacts@0.10.0
- @features/platform-contacts@0.6.0
- @features/flow-contacts-add-address@0.4.0
- @features/flow-contacts-edit-address@0.3.0
- @ledgerhq/coin-concordium@1.2.0
- @features/flow-contacts-edit-contact@0.4.0
- @features/flow-contacts-list@0.6.0
- @shared/env@0.6.0
- @shared/api-services@0.7.0
- @domain/api-card-management@0.5.0
- @features/flow-pay-card@0.3.0
- @features/flow-pay-card-widget@0.2.0
- @ledgerhq/coin-cosmos@1.2.0
- @shared/feature-flags@0.22.0
- @ledgerhq/live-dmk-desktop@0.21.0
- @domain/entity-currency-crypto@0.12.0
- @ledgerhq/types-live@6.123.0
- @ledgerhq/ledger-wallet-framework@3.3.0
- @domain/api-aggregated-assets@0.5.0
- @ledgerhq/react-ui@0.54.0
- @ledgerhq/live-countervalues@0.25.0
- @ledgerhq/live-countervalues-react@0.17.0
- @ledgerhq/coin-casper@3.3.0
- @features/platform-currencies@0.8.0
- @ledgerhq/wallet-analytics@0.4.0
- @ledgerhq/asset-aggregation@0.15.0
- @ledgerhq/live-currency-format@0.15.0
- @features/platform-env@0.3.0
- @ledgerhq/hw-ledger-key-ring-protocol@0.12.0
- @features/flow-pay-bank-transfer@0.3.0
- @features/flow-pay-card-auth@0.6.0
- @features/platform-card@0.4.0
- @features/flow-pay-feature-tour@0.5.0
- @ledgerhq/wallet-btc@0.4.0
- @ledgerhq/coin-bitcoin@0.52.0
- @ledgerhq/asset-detail@0.11.4
- @features/flow-contacts-add-contact@0.5.1
- @features/flow-contacts-delete-contact@0.2.1
- @features/flow-pay-balance@0.4.1
- @features/flow-pay-deposit@0.3.1
- @features/platform-device-action-content@0.2.0
- @features/platform-aggregated-assets@0.5.2
- @ledgerhq/ledger-key-ring-protocol@0.21.2
- @ledgerhq/live-dmk-speculos@0.10.8
- @ledgerhq/wallet-pnl@0.7.10
- @domain/api-altcoins-sentiment@0.3.5
- @domain/api-currency-fiat@0.4.4
- @domain/api-currency-token@0.6.1
- @domain/api-market-sentiment@0.3.5
- @domain/api-push-devices@0.2.5
- @features/flow-large-screen-upsell@2.0.2
- @features/platform-feature-flags@0.6.9
- @domain/entity-contact@0.8.2
- @domain/entity-currency@0.4.3
- @domain/entity-currency-token@0.5.2
- @ledgerhq/coin-cardano@1.1.1
- @ledgerhq/live-wallet@1.1.2
- @ledgerhq/coin-canton@1.1.1
- @ledgerhq/coin-filecoin@2.1.1
- @ledgerhq/domain-service@1.8.18
- @ledgerhq/live-signer-evm@0.23.1
- @shared/ui-info-state@0.2.1
- @shared/auth@0.6.0
- @shared/cloud-sync@0.3.0
- @shared/i18n@0.2.0
- @devtools/shell@0.9.2
- @features/flow-analytics-consent@0.2.5