diff --git a/CHANGELOG.md b/CHANGELOG.md index cfba92d8c57..a1d6a390c21 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased (develop) +- added: eCash.com (ECX) wallet metadata, kept disabled until the chain forks from Bitcoin on 2026-08-22. - added: App/device attestation for gated info-server requests - added: "-m" tag on the version number in the Help scene for Maestro test builds - added: Sign Message option in the wallet list menu for Bitcoin-family wallets, letting users prove self-hosted wallet ownership to exchanges by signing an exchange-provided message. @@ -16,6 +17,7 @@ - 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. - changed: Deep links now wait only for the account state they actually use, so a link that just opens a scene, such as the buy/sell entry, follows immediately after login instead of waiting for every wallet to finish loading. +- fixed: Opening a wallet whose plugin has no entry in the GUI's currency table no longer crashes the app, and sharing a transaction from a chain with no block explorer no longer shares an empty link. - fixed: The buy/sell amount field no longer reads "Amount undefined" while the app is still working out which wallet to use. - fixed: Show the Monero Transaction Key of a send whose key never reached the transaction's saved metadata, by falling back to the key the wallet engine mirrors into `otherParams`. Covers sends made on 4.49.0 and later while the send path reported no key, on devices that still hold the original wallet cache. - fixed: Bitwave CSV exports now use ISO 8601 UTC timestamps, leave the fee columns blank so Bitwave does not double-count fees, and copy the description into the second custom metadata column. diff --git a/src/components/modals/WalletListMenuModal.tsx b/src/components/modals/WalletListMenuModal.tsx index 54cf80a1b53..06da7eecfd0 100644 --- a/src/components/modals/WalletListMenuModal.tsx +++ b/src/components/modals/WalletListMenuModal.tsx @@ -98,6 +98,7 @@ export const WALLET_LIST_MENU: Array<{ 'digibyte', 'dogecoin', 'eboost', + 'ecashcom', 'eos', 'zcoin', 'feathercoin', @@ -132,6 +133,7 @@ export const WALLET_LIST_MENU: Array<{ 'dogecoin', 'eboost', 'ecash', + 'ecashcom', 'feathercoin', 'groestlcoin', 'litecoin', diff --git a/src/components/themed/BuyCrypto.tsx b/src/components/themed/BuyCrypto.tsx index 87c78f2911a..45d912bd4f1 100644 --- a/src/components/themed/BuyCrypto.tsx +++ b/src/components/themed/BuyCrypto.tsx @@ -56,7 +56,7 @@ export const BuyCrypto: React.FC = (props: Props) => { const { displayName, pluginId } = wallet.currencyInfo const { highPrecisionSyncRatioDisplay = false } = - SPECIAL_CURRENCY_INFO[pluginId] + SPECIAL_CURRENCY_INFO[pluginId] ?? {} const syncRatioPrecisionOpts = highPrecisionSyncRatioDisplay ? { minPrecision: 5, diff --git a/src/components/themed/TransactionListRow.tsx b/src/components/themed/TransactionListRow.tsx index 9b4a9ca7678..e0de0823118 100644 --- a/src/components/themed/TransactionListRow.tsx +++ b/src/components/themed/TransactionListRow.tsx @@ -250,6 +250,9 @@ const TransactionViewInner: React.FC = props => { }) const handleLongPress = useHandler(() => { + // Chains with no block explorer publish an empty template, which would + // share an empty link: + if (currencyInfo.transactionExplorer === '') return const url = sprintf(currencyInfo.transactionExplorer, transaction.txid) const shareOptions = { failOnCancel: false, diff --git a/src/components/themed/WalletListCreateRow.tsx b/src/components/themed/WalletListCreateRow.tsx index a9245e1b8cc..c4b3914e093 100644 --- a/src/components/themed/WalletListCreateRow.tsx +++ b/src/components/themed/WalletListCreateRow.tsx @@ -32,9 +32,9 @@ export interface WalletListCreateRowProps { onPress?: (walletId: string, tokenId: EdgeTokenId) => Promise } -export const WalletListCreateRowComponent = ( - props: WalletListCreateRowProps -): React.ReactElement => { +export const WalletListCreateRowComponent: React.FC< + WalletListCreateRowProps +> = props => { const { createItem, createWalletId, @@ -160,7 +160,11 @@ export const WalletListCreateRowComponent = ( }) return ( - + = { isStakingSupported: false, unstoppableDomainsTicker: 'ECASH' }, + ecashcom: { + hasSegwit: true, + maxSpendTargets: UTXO_MAX_SPEND_TARGETS, + initWalletName: lstrings.string_first_ecashcom_wallet_name, + isImportKeySupported: true + }, ethereum: { initWalletName: lstrings.string_first_ethereum_wallet_name, dummyPublicAddress: '0x0d73358506663d484945ba85d0cd435ad610b0a0', diff --git a/src/locales/en_US.ts b/src/locales/en_US.ts index 51f82a5058b..da2c250703a 100644 --- a/src/locales/en_US.ts +++ b/src/locales/en_US.ts @@ -748,6 +748,7 @@ const strings = { string_first_dash_wallet_name: 'My Dash', string_first_digibyte_wallet_name: 'My DigiByte', string_first_ecash_wallet_name: 'My eCash', + string_first_ecashcom_wallet_name: 'My eCash.com', string_first_eos_wallet_name: 'My EOS', string_first_holesky_wallet_name: 'My Holesky', string_first_hyperevm_wallet_name: 'My HyperEVM', diff --git a/src/locales/strings/enUS.json b/src/locales/strings/enUS.json index ecfa739a196..e7d83b20478 100644 --- a/src/locales/strings/enUS.json +++ b/src/locales/strings/enUS.json @@ -570,6 +570,7 @@ "string_first_dash_wallet_name": "My Dash", "string_first_digibyte_wallet_name": "My DigiByte", "string_first_ecash_wallet_name": "My eCash", + "string_first_ecashcom_wallet_name": "My eCash.com", "string_first_eos_wallet_name": "My EOS", "string_first_holesky_wallet_name": "My Holesky", "string_first_hyperevm_wallet_name": "My HyperEVM", diff --git a/src/util/corePlugins.ts b/src/util/corePlugins.ts index 55c017dad00..09b414eddff 100644 --- a/src/util/corePlugins.ts +++ b/src/util/corePlugins.ts @@ -70,6 +70,9 @@ export const currencyPlugins: EdgeCorePluginsInit = { bitcoingold: true, bitcoingoldtestnet: false, bitcoinsv: true, + // eCash.com (ECX) forks from Bitcoin on 2026-08-22. Enable once a Blockbook + // endpoint for the chain exists: + ecashcom: false, bitcointestnet: true, bitcointestnet4: true, dash: ENV.DASH_INIT,