Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,23 @@

- added: Verbose logging for exchange rate queries: the request body, resolved/rate-less counts, and errors are captured when the Verbose Logging setting is enabled.
- added: Exchange-rate cache snapshot in the support log output, plus a `rates-cache-replay` script that re-runs those queries against the rates server and reports the result for each pair.
- added: "-m" tag on the version number in the Help scene for Maestro test builds
- changed: Sign MoonPay buy/sell widget URLs and bind them to the customer's IP via the info server, for MoonPay's on-ramp IP-matching security upgrade.
- changed: Style the entire "Already have an account? Sign in" line in the getting-started USP carousel with the tertiary link color, not just "Sign in".
- changed: Refresh the buy, sell, sort, scan-QR and FIO names icons to the updated design.
- changed: Use a custom chart icon for the side menu Markets row, so it matches the rest of the menu.
- changed: Use the UI4 warning card for the Reveal Raw Keys and Reveal Master Private Key password confirmation warnings.
- changed: Tron resource staking now describes its claim action as reclaiming your own TRX, instead of claiming a reward.
- fixed: NYM max swaps from EVM wallets now report the correct limit error instead of an unsupported-route error (edge-exchange-plugins 2.52.1).
- fixed: Exchange rate queries no longer request each chain's own asset twice, which had been inflating every rate query with duplicate pairs.
- fixed: XRP minimum balance warning copy to clarify the reserve is met once the address balance reaches 1 XRP, not on top of it.
- fixed: Round fiat balances to cents in the Wallets list, matching the wallet detail scene
- fixed: Notification center cards no longer shrink their text to fit. Long titles and messages now truncate with an ellipsis so every card renders at the same size.
- fixed: Sort the Privacy Settings Nym Mix Net asset list alphabetically by display name
- fixed: Next button overlapping the wallet list on the Choose Wallets to Add scene
- fixed: Wrap the fiat value in parentheses on the Stake/Unstake/Claim amount row, and remove the space between the fiat symbol and amount to match the network fee tile.
- fixed: Staked "locked" balance in the wallet view no longer gets cut off. The crypto amount is truncated to an exchange-rate-appropriate number of decimals, and the text is no longer clamped to a fraction of the card width.
- fixed: Improve the unstake error experience by replacing the popup alert and generic "unknown error occurred" with the real error in the scene's error field, and showing a clear message when the wallet lacks the balance to cover the unstaking network fee.

## 4.50.0 (2026-07-21)

Expand Down
Binary file modified android/app/src/main/assets/fonts/custom.ttf
Binary file not shown.
8 changes: 3 additions & 5 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -225,13 +225,11 @@ export default [
'src/components/modals/ScanModal.tsx',
'src/components/modals/StateProvinceListModal.tsx',

'src/components/modals/TextInputModal.tsx',
'src/components/modals/TransferModal.tsx',

'src/components/modals/WalletListSortModal.tsx',
'src/components/modals/WcSmartContractModal.tsx',

'src/components/navigation/AlertDropdown.tsx',
'src/components/navigation/BackButton.tsx',
'src/components/navigation/CurrencySettingsTitle.tsx',
'src/components/navigation/EdgeHeader.tsx',
Expand All @@ -245,7 +243,7 @@ export default [
'src/components/navigation/ParamHeaderTitle.tsx',
'src/components/navigation/SideMenuButton.tsx',
'src/components/navigation/TransactionDetailsTitle.tsx',
'src/components/notification/NotificationCenterCard.tsx',

'src/components/progress-indicators/AccountSyncBar.tsx',

'src/components/progress-indicators/FullScreenLoader.tsx',
Expand Down Expand Up @@ -401,7 +399,7 @@ export default [
'src/components/tiles/AprCard.tsx',
'src/components/tiles/CountdownTile.tsx',
'src/components/tiles/CryptoFiatAmountTile.tsx',
'src/components/tiles/EditableAmountTile.tsx',

'src/components/tiles/ErrorTile.tsx',
'src/components/tiles/FiatAmountTile.tsx',
'src/components/tiles/InterestRateChangeTile.tsx',
Expand Down Expand Up @@ -463,7 +461,7 @@ export default [

'src/plugins/gui/util/fetchRevolut.ts',
'src/plugins/gui/util/initializeProviders.ts',
'src/plugins/stake-plugins/currency/tronStakePlugin.ts',

'src/plugins/stake-plugins/generic/pluginInfo/optimismTarotPool.ts',
'src/plugins/stake-plugins/generic/policyAdapters/CardanoKilnAdaptor.ts',
'src/plugins/stake-plugins/generic/policyAdapters/EthereumKilnAdaptor.ts',
Expand Down
22 changes: 12 additions & 10 deletions src/__tests__/modals/__snapshots__/TextInputModal.test.tsx.snap
Original file line number Diff line number Diff line change
Expand Up @@ -286,12 +286,13 @@ exports[`TextInputModal should render with a blank input field 1`] = `
</View>
</View>
<View
fullHeight={false}
style={
{
"flexGrow": undefined,
"flexShrink": 1,
}
[
{
"flexShrink": 1,
},
undefined,
]
}
>
<Text
Expand Down Expand Up @@ -1139,12 +1140,13 @@ exports[`TextInputModal should render with a populated input field 1`] = `
</View>
</View>
<View
fullHeight={false}
style={
{
"flexGrow": undefined,
"flexShrink": 1,
}
[
{
"flexShrink": 1,
},
undefined,
]
}
>
<Text
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -816,7 +816,7 @@ exports[`CreateWalletSelectCrypto should render with loading props 1`] = `
contentContainerStyle={
{
"marginHorizontal": 11,
"paddingBottom": 112,
"paddingBottom": 0,
"paddingLeft": 0,
"paddingRight": 0,
"paddingTop": 0,
Expand Down
28 changes: 14 additions & 14 deletions src/__tests__/scenes/__snapshots__/SendScene2.ui.test.tsx.snap
Original file line number Diff line number Diff line change
Expand Up @@ -925,7 +925,7 @@ exports[`SendScene2 1 spendTarget 1`] = `
]
}
>
0.23
(€0.23)
</Text>
</View>
<View
Expand Down Expand Up @@ -2703,7 +2703,7 @@ exports[`SendScene2 1 spendTarget with info tiles 1`] = `
]
}
>
0.23
(€0.23)
</Text>
</View>
<View
Expand Down Expand Up @@ -4459,7 +4459,7 @@ exports[`SendScene2 2 spendTargets 1`] = `
]
}
>
Amount: 0.00001234 BTC (€ 0.23)
Amount: 0.00001234 BTC (€0.23)
</Text>
</View>
<View
Expand Down Expand Up @@ -4945,7 +4945,7 @@ exports[`SendScene2 2 spendTargets 1`] = `
]
}
>
2.26
(€2.26)
</Text>
</View>
<View
Expand Down Expand Up @@ -6469,7 +6469,7 @@ exports[`SendScene2 2 spendTargets hide tiles 1`] = `
]
}
>
Amount: 0.00001234 BTC (€ 0.23)
Amount: 0.00001234 BTC (€0.23)
</Text>
</View>
<View
Expand Down Expand Up @@ -6722,7 +6722,7 @@ exports[`SendScene2 2 spendTargets hide tiles 1`] = `
]
}
>
2.26
(€2.26)
</Text>
</View>
<View
Expand Down Expand Up @@ -8060,7 +8060,7 @@ exports[`SendScene2 2 spendTargets hide tiles 2`] = `
]
}
>
Amount: 0.00001234 BTC (€ 0.23)
Amount: 0.00001234 BTC (€0.23)
</Text>
</View>
<View
Expand Down Expand Up @@ -9631,7 +9631,7 @@ exports[`SendScene2 2 spendTargets hide tiles 3`] = `
]
}
>
Amount: 0.00001234 BTC (€ 0.23)
Amount: 0.00001234 BTC (€0.23)
</Text>
</View>
<View
Expand Down Expand Up @@ -10969,7 +10969,7 @@ exports[`SendScene2 2 spendTargets lock tiles 1`] = `
]
}
>
Amount: 0.00001234 BTC (€ 0.23)
Amount: 0.00001234 BTC (€0.23)
</Text>
</View>
<View
Expand Down Expand Up @@ -11382,7 +11382,7 @@ exports[`SendScene2 2 spendTargets lock tiles 1`] = `
]
}
>
2.26
(€2.26)
</Text>
</View>
<View
Expand Down Expand Up @@ -12744,7 +12744,7 @@ exports[`SendScene2 2 spendTargets lock tiles 2`] = `
]
}
>
Amount: 0.00001234 BTC (€ 0.23)
Amount: 0.00001234 BTC (€0.23)
</Text>
</View>
</View>
Expand Down Expand Up @@ -13157,7 +13157,7 @@ exports[`SendScene2 2 spendTargets lock tiles 2`] = `
]
}
>
2.26
(€2.26)
</Text>
</View>
</View>
Expand Down Expand Up @@ -14446,7 +14446,7 @@ exports[`SendScene2 2 spendTargets lock tiles 3`] = `
]
}
>
Amount: 0.00001234 BTC (€ 0.23)
Amount: 0.00001234 BTC (€0.23)
</Text>
</View>
</View>
Expand Down Expand Up @@ -14786,7 +14786,7 @@ exports[`SendScene2 2 spendTargets lock tiles 3`] = `
]
}
>
2.26
(€2.26)
</Text>
</View>
</View>
Expand Down
38 changes: 38 additions & 0 deletions src/__tests__/stakeErrorUtils.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { describe, expect, test } from '@jest/globals'
import { DustSpendError, InsufficientFundsError } from 'edge-core-js'

import { lstrings } from '../locales/strings'
import { getDisplayErrorMessage } from '../util/stakeErrorUtils'

describe('getDisplayErrorMessage', () => {
test('returns the message of an Error that carries one', () => {
expect(getDisplayErrorMessage(new Error('Insufficient funds'))).toBe(
'Insufficient funds'
)
})

test('fishes out the message from edge-core-js error subclasses', () => {
expect(
getDisplayErrorMessage(new InsufficientFundsError({ tokenId: null }))
).not.toBe('')
expect(getDisplayErrorMessage(new DustSpendError())).not.toBe('')
})

test('falls back to the generic string for an Error with no message', () => {
expect(getDisplayErrorMessage(new Error(''))).toBe(
lstrings.unknown_error_occurred_fragment
)
})

test('falls back to the generic string for non-Error values', () => {
expect(getDisplayErrorMessage('some string')).toBe(
lstrings.unknown_error_occurred_fragment
)
expect(getDisplayErrorMessage(undefined)).toBe(
lstrings.unknown_error_occurred_fragment
)
expect(getDisplayErrorMessage(null)).toBe(
lstrings.unknown_error_occurred_fragment
)
})
})
Loading
Loading