diff --git a/README.md b/README.md index 0852d8552..2482bf485 100644 --- a/README.md +++ b/README.md @@ -1,190 +1,79 @@ -
+# Hash Wallet -![logo](.github/assets/cake-wallet-gh-header-2.svg) +**Hash Wallet** (`#`) is an open-source, non-custodial, multi-currency crypto wallet for Android, iOS, macOS, Linux, and Windows. It is a fork of [Cake Wallet](https://github.com/cake-tech/cake_wallet) maintained by [Such Software LLC](https://github.com/Such-Software). -
+## Why a fork? -
+Cake Wallet ended Wownero support in early 2026. Hash Wallet exists to keep Wownero as a first-class mobile experience, run by the project's founder, while shipping a slimmer, more focused multi-coin wallet without the chains and integrations we don't want to maintain or recommend. -[](https://apps.apple.com/us/app/cake-wallet/id1334702542?platform=iphone) -[](https://play.google.com/store/apps/details?id=com.cakewallet.cake_wallet) -[](https://fdroid.cakelabs.com) -[](https://apps.apple.com/us/app/cake-wallet/id1334702542?platform=mac) -[](https://github.com/cake-tech/cake_wallet/releases) +## Supported chains -
- -# Cake Wallet - -[Cake Wallet](https://cakewallet.com) is an open-source, non-custodial, and private multi-currency crypto wallet for Android, iOS, macOS, and Linux. - -Cake Wallet includes support for several cryptocurrencies, including: * Monero (XMR) +* Wownero (WOW) * Bitcoin (BTC) -* Ethereum (ETH) -* Litecoin (LTC) +* Litecoin (LTC), incl. MWEB * Bitcoin Cash (BCH) +* Dogecoin (DOGE) +* Nano (XNO) +* Ethereum (ETH) + ERC-20s * Polygon (POL) * Base (BASE) * Arbitrum (ARB) -* Solana (SOL) -* Tron (TRX) -* Nano (XNO) -* Zano (ZANO) -* Decred (DCR) -* Wownero (WOW) +* BNB Smart Chain (BSC) -## Features +Hardware wallet support: Ledger, Trezor, BitBox. -### App-Wide Features +## What's different from Cake Wallet -* Completely noncustodial. *Your keys, your coins.* -* Built-in exchange for dozens of pairs -* Easily pay cryptocurrency invoices with fixed rate exchanges -* Buy cryptocurrency (BTC/LTC/XMR/ETH) with credit/debit/bank -* Sell cryptocurrency by bank transfer -* Scan QR codes for easy cryptocurrency transfers -* Create several wallets -* Select your own custom nodes/servers -* Address book -* Backup to an external location or iCloud -* Send to OpenAlias, Unstoppable Domains, Yats, and FIO Crypto Handles -* Set desired network fee level -* Store local transaction notes -* Extremely simple user experience -* Convenient exchange and sending templates for recurring payments -* Create donation links and invoices in the receive screen -* Robust privacy settings (eg: Tor-only connections) -* Robust security settings (eg: Cake 2FA) +**Removed:** +* Solana, Tron, Zano, Zcash, Decred (chain support disabled) +* Lightning Network (deferred — running Greenlight infra is out of scope for now) +* Cake Pay gift cards (Cake Labs–operated service) +* All direct swap-provider integrations except [Trocador](https://trocador.app), which already aggregates ChangeNow, FixedFloat, LetsExchange, Exolix, StealthEx, Quantex, and ~16 others under one privacy-friendly API -### Monero Specific Features +**Replaced or planned:** +* Default Monero/Wownero/BTC node lists augmented with community nodes (don't rely on Cake Labs–operated nodes alone) +* Fiat price API replacement (Cake's API → public source) — pending +* Tor / Arti integration improvements — pending -* The Monero view key is retained on the device for maximum privacy -* Full support for Monero subaddresses and accounts -* Specify restore height for faster syncing -* Specify multiple recipients for batch sending -* Optionally set Monero nodes as trusted for faster syncing -* Specify a proxy for Monero nodes, compatible with Tor and i2p +## Build instructions -### Bitcoin Specific Features +The build system is unchanged from upstream Cake Wallet. See `docs/` for per-platform instructions: -* Bitcoin coin control (specify specific outputs to spend) -* Automatically generate new addresses -* Specify multiple recipients for batch sending +* Android: `docs/build_android.md` +* iOS: `docs/build_ios.md` +* macOS: `docs/build_macos.md` +* Linux: `docs/build_linux.md` +* Windows: `docs/build_windows.md` -### Ethereum Specific Features +Required Flutter version is pinned in `Dockerfile` (currently 3.32.0). Before the first `flutter pub get`, you must run the prep scripts to clone external native dependencies: -* Store ETH and all ERC-20 tokens -* Add custom tokens by contract address -* Enable or disable Etherscan for transaction history - -### Litecoin Specific Features - -* Litecoin coin control (specify specific outputs to spend) -* Automatically generate new addresses -* Specify multiple recipients for batch sending - -# Monero.com by Cake Wallet for Android and iOS - -## Open Source Monero-Only Wallet - -*Exchanging to/from other assets is also supported.* - -## Links - -* Website: https://monero.com -* App Store (iOS): https://apps.apple.com/app/id1601990386 -* Google Play: https://play.google.com/store/apps/details?id=com.monero.app -* F-Droid: https://fdroid.cakelabs.com -* APK: https://github.com/cake-tech/cake_wallet/releases - -### APK Verification - -APK releases on GitHub, Accrescent, and F-Droid use the same key. They can easily be verified using [apksigner](https://developer.android.com/tools/apksigner#options-verify) or [AppVerifier](https://github.com/soupslurpr/AppVerifier). - -See below for Cake Wallet's SHA-256 signing certificate hash: - -``` -com.cakewallet.cake_wallet -C5:40:53:AB:0F:10:D9:54:17:62:A3:DA:76:65:AE:3D:BA:5E:7C:74:3A:B4:F1:08:A5:34:9D:62:AC:10:6E:F5 +```bash +./scripts/prepare_torch.sh +./scripts/prepare_moneroc.sh +./scripts/prepare_zcash.sh # still required by build, even though Zcash is disabled +./scripts/build_bitbox_flutter.sh +# Then fetch the prebuilt reown_flutter tarball (CI does this; reproduce locally +# with the URL in .github/workflows/pr_test_build_linux.yml if you have it). ``` -# Support +Then run the platform-specific configure script, e.g.: -We have 24/7 free support. Please contact support@cakewallet.com +```bash +APP_LINUX_TYPE=cakewallet ./configure_cake_wallet.sh linux +``` -We have excellent user guides, which are also open-source and open for contributions: https://docs.cakewallet.com +## Contributing -# Build Instructions +Issues and PRs welcome at https://github.com/Such-Software/hash-wallet. -More instructions to follow +## License -For instructions on how to build for Android: please view file `howto-build-android.md` +Hash Wallet is distributed under the [MIT License](LICENSE), inheriting from Cake Wallet. -# Contributing +``` +Copyright (C) 2018–2023 Cake Labs LLC +Copyright (C) 2026 Such Software LLC +``` -## Improving translations - -Edit the applicable `strings_XX.arb` file in `res/values/` and open a pull request with the changes. - -## Current list of language files: - -- English -- Spanish -- French -- German -- Italian -- Portuguese -- Dutch -- Polish -- Croatian -- Russian -- Ukrainian -- Hindi -- Japanese -- Chinese -- Korean -- Thai -- Arabic -- Turkish -- Burmese -- Urdu -- Bulgarian -- Czech -- Indonesian -- Hausa -- Yoruba - -## Add a new language - -1. Create a new `strings_XX.arb` file in `res/values/`, replacing XX with the language's [ISO 639-1 code](https://en.wikipedia.org/wiki/ISO_639-1). - -2. Edit the strings in this file, replacing XXX below with the translation for each string. - -`"welcome": "Welcome to",` -> `"welcome": "XXX",` - -3. For strings where there is a variable, denoted by a $ symbol and braces, such as ${status}, the string in braces should not be translated. For example, when editing line 106: - -"time" : "${minutes}m ${seconds}s" - -The only parts to be translated, if needed, are the values m and s after the variables. - -4. Add the language to `lib/entities/language_service.dart` under both `supportedLocales` and `localeCountryCode`. Use the name of the language in the local language and in English in parentheses after for `supportedLocales`. Use the [ISO 3166-1 alpha-3 code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) for `localeCountryCode`. You must choose one country, so choose the country with the most native speakers of this language or is otherwise best associated with this language. - -5. Add a relevant flag to `assets/images/flags/XXXX.png`, replacing XXXX with the 3 letters localeCountryCode. The image must be 42x26 pixels with 3 pixels of transparent margin on all 4 sides. You can resize the flag with [paint.net](https://www.getpaint.net/) to 36x20 pixels, expand the canvas to 42x26 pixels with the flag anchored in the middle, and then manually delete the 3 pixels on each side to make it transparent. Or you can use another program like Photoshop. - -6. Add the new language code to `tool/utils/translation/translation_constants.dart` - -## Add a new fiat currency - -1. Check with [Cake Wallet support](https://guides.cakewallet.com) to see if the desired new fiat currency is available through our fiat API. Not all fiat currencies are. - -2. If the currency is associated strongly with a specific issuing country, map the [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code with the applicable [ISO 3166-1 alpha-3 code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) in `lib/entities/fiat_currency.dart`. If the currency is used in a whole region or organization, then map with a reasonable interpretation of this (eg: eur countryCode for EUR symbol). - -3. Add the raw mapping underneath in `lib/entities/fiat_currency.dart` following the same format as the others. - -4. Add a flag of the issuing country or organization to `assets/images/flags/XXXX.png`, replacing XXXX with the ISO 3166-1 alpha-3 code used above (eg: `usa.png`, `eur.png`). Do not add this if the flag with the same name already exists. The image must be 42x26 pixels with a 3 pixels of transparent margin on all 4 sides. - ---- - -Copyright (C) 2018-2023 Cake Labs LLC +Cake Wallet, the Cake Wallet logo, and related marks are trademarks of Cake Labs LLC and are not used by Hash Wallet. diff --git a/android/app/build.gradle b/android/app/build.gradle index 6c1540222..cedc2e4ba 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -56,7 +56,7 @@ android { } - namespace "com.cakewallet.cake_wallet" + namespace "com.suchsoftware.hashwallet" defaultConfig { applicationId appProperties['id'] diff --git a/android/app/src/main/java/com/cakewallet/cake_wallet/Application.java b/android/app/src/main/java/com/suchsoftware/hashwallet/Application.java similarity index 72% rename from android/app/src/main/java/com/cakewallet/cake_wallet/Application.java rename to android/app/src/main/java/com/suchsoftware/hashwallet/Application.java index d3eb70ba6..fda37f587 100644 --- a/android/app/src/main/java/com/cakewallet/cake_wallet/Application.java +++ b/android/app/src/main/java/com/suchsoftware/hashwallet/Application.java @@ -1,4 +1,4 @@ -package com.cakewallet.cake_wallet; +package com.suchsoftware.hashwallet; import io.flutter.app.FlutterApplication; diff --git a/android/app/src/main/java/com/cakewallet/cake_wallet/MainActivity.java b/android/app/src/main/java/com/suchsoftware/hashwallet/MainActivity.java similarity index 98% rename from android/app/src/main/java/com/cakewallet/cake_wallet/MainActivity.java rename to android/app/src/main/java/com/suchsoftware/hashwallet/MainActivity.java index df3f6be01..b89257a3b 100644 --- a/android/app/src/main/java/com/cakewallet/cake_wallet/MainActivity.java +++ b/android/app/src/main/java/com/suchsoftware/hashwallet/MainActivity.java @@ -1,4 +1,4 @@ -package com.cakewallet.cake_wallet; +package com.suchsoftware.hashwallet; import androidx.annotation.NonNull; diff --git a/cakewallet.bat b/cakewallet.bat index 5bb41128c..7469fa614 100644 --- a/cakewallet.bat +++ b/cakewallet.bat @@ -1,5 +1,5 @@ @echo off -set cw_win_app_config=--monero --bitcoin --ethereum --polygon --nano --bitcoinCash --solana --tron --dogecoin --base --arbitrum --bsc +set cw_win_app_config=--monero --bitcoin --ethereum --polygon --nano --bitcoinCash --wownero --dogecoin --base --arbitrum --bsc set cw_root=%cd% set cw_archive_name=Cake Wallet.zip set cw_archive_path=%cw_root%\%cw_archive_name% diff --git a/cw_core/lib/exceptions.dart b/cw_core/lib/exceptions.dart index 35999b78b..b0c5124fb 100644 --- a/cw_core/lib/exceptions.dart +++ b/cw_core/lib/exceptions.dart @@ -65,14 +65,4 @@ class RestoreFromSeedException implements Exception { final String message; RestoreFromSeedException(this.message); -} - -class WalletDeprecationException implements Exception { - final String seed; - final CryptoCurrency curr; - - @override - String toString() => "Wallet type no longer supported"; - - WalletDeprecationException({required this.seed, required this.curr}); } \ No newline at end of file diff --git a/cw_wownero/lib/wownero_wallet_service.dart b/cw_wownero/lib/wownero_wallet_service.dart index c42f7d60c..48e8a8d22 100644 --- a/cw_wownero/lib/wownero_wallet_service.dart +++ b/cw_wownero/lib/wownero_wallet_service.dart @@ -1,6 +1,5 @@ import 'dart:ffi'; import 'dart:io'; -import 'package:cw_core/exceptions.dart' show WalletDeprecationException; import 'package:cw_core/monero_wallet_utils.dart'; import 'package:cw_core/pathForWallet.dart'; import 'package:cw_core/unspent_coins_info.dart'; @@ -139,7 +138,6 @@ class WowneroWalletService extends WalletService< } wallet = WowneroWallet(walletInfo: walletInfo, derivationInfo: await walletInfo.getDerivationInfo(), unspentCoinsInfo: unspentCoinsInfoSource, password: password); - throw WalletDeprecationException(seed: wallet.seed, curr: wallet.currency); final isValid = wallet.walletAddresses.validate(); diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 6df8e02bf..cbe54e3e5 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -519,7 +519,7 @@ "$(PROJECT_DIR)/Flutter", ); MARKETING_VERSION = 1.0.1; - PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet; + PRODUCT_BUNDLE_IDENTIFIER = com.suchsoftware.hashwallet; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -671,7 +671,7 @@ ); MARKETING_VERSION = 1.0.1; ONLY_ACTIVE_ARCH = NO; - PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet; + PRODUCT_BUNDLE_IDENTIFIER = com.suchsoftware.hashwallet; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -714,7 +714,7 @@ "$(PROJECT_DIR)/Flutter", ); MARKETING_VERSION = 1.0.1; - PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet; + PRODUCT_BUNDLE_IDENTIFIER = com.suchsoftware.hashwallet; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; diff --git a/ios/Runner/InfoBase.plist b/ios/Runner/InfoBase.plist index d82fec087..3a115acae 100644 --- a/ios/Runner/InfoBase.plist +++ b/ios/Runner/InfoBase.plist @@ -6,12 +6,12 @@ BGTaskSchedulerPermittedIdentifiers - com.fotolockr.cakewallet.monero_sync_task + com.suchsoftware.hashwallet.monero_sync_task CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName - Cake Wallet + Hash Wallet CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -19,7 +19,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - cake_wallet + hash_wallet CFBundlePackageType APPL CFBundleShortVersionString diff --git a/lib/core/wallet_loading_service.dart b/lib/core/wallet_loading_service.dart index 55c65859f..10eab25e4 100644 --- a/lib/core/wallet_loading_service.dart +++ b/lib/core/wallet_loading_service.dart @@ -5,12 +5,10 @@ import 'package:cake_wallet/core/key_service.dart'; import 'package:cake_wallet/entities/preferences_key.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/main.dart'; -import 'package:cake_wallet/new-ui/widgets/wallet_deprecation_popup.dart'; import 'package:cake_wallet/reactions/on_authentication_state_change.dart'; import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; import 'package:cake_wallet/utils/exception_handler.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; -import 'package:cw_core/exceptions.dart' show WalletDeprecationException; import 'package:cw_core/utils/print_verbose.dart'; import 'package:cw_core/wallet_base.dart'; import 'package:cw_core/wallet_info.dart'; @@ -75,17 +73,10 @@ class WalletLoadingService { } catch (error, stack) { String corruptedWalletsSeeds = "Corrupted wallets seeds (if retrievable, empty otherwise):"; - if(error is WalletDeprecationException) { - if(navigatorKey.currentContext != null) { - showModalBottomSheet( - context: navigatorKey.currentContext!, builder: (context)=>WalletDeprecationPopup(type: type, seed: error.seed,)); - } - } else { - await ExceptionHandler.resetLastPopupDate(); - final isLedgerError = await ExceptionHandler.isLedgerError(error); - if (isLedgerError || await requireHardwareWalletConnection(type, name)) rethrow; - await ExceptionHandler.onError(FlutterErrorDetails(exception: error, stack: stack)); - } + await ExceptionHandler.resetLastPopupDate(); + final isLedgerError = await ExceptionHandler.isLedgerError(error); + if (isLedgerError || await requireHardwareWalletConnection(type, name)) rethrow; + await ExceptionHandler.onError(FlutterErrorDetails(exception: error, stack: stack)); // try fetching the seeds of the corrupted wallet to show it to the user try { diff --git a/lib/new-ui/pages/about_page.dart b/lib/new-ui/pages/about_page.dart index a869ba1a3..12220d507 100644 --- a/lib/new-ui/pages/about_page.dart +++ b/lib/new-ui/pages/about_page.dart @@ -80,7 +80,7 @@ class _AboutPageState extends State { spacing: 8, children: [ Text( - "Cake Wallet", + "Hash Wallet", style: TextStyle(fontSize: 32, fontWeight: FontWeight.w500), ), Text(widget.appVersion, @@ -107,44 +107,14 @@ class _AboutPageState extends State { SizedBox(height: 32), NewListSections(sections: { "": [ - ListItemRegularRow( - keyValue: "official website", - label: "Official Website", - onTap: () => launchUrl(Uri.https("cakewallet.com")), - trailingIconPath: "assets/new-ui/link_arrow.svg", - foregroundColor: Theme.of(context).colorScheme.primary, - trailingIconSize: 10), - ListItemRegularRow( - keyValue: "docs", - label: "Cake Docs", - onTap: () => launchUrl(Uri.https("docs.cakewallet.com")), - trailingIconPath: "assets/new-ui/link_arrow.svg", - foregroundColor: Theme.of(context).colorScheme.primary, - trailingIconSize: 10) - ], - "2": [ ListItemRegularRow( keyValue: "gh", label: "GitHub", - onTap: () => launchUrl(Uri.https("github.com", "cake-tech")), + onTap: () => launchUrl(Uri.https("github.com", "Such-Software/hash-wallet")), trailingIconPath: "assets/new-ui/link_arrow.svg", foregroundColor: Theme.of(context).colorScheme.primary, trailingIconSize: 10), - ListItemRegularRow( - keyValue: "twitter", - label: "X (Twitter)", - onTap: () => launchUrl(Uri.https("twitter.com", "cakewallet")), - trailingIconPath: "assets/new-ui/link_arrow.svg", - foregroundColor: Theme.of(context).colorScheme.primary, - trailingIconSize: 10), - ListItemRegularRow( - keyValue: "tg", - label: "Telegram", - onTap: () => launchUrl(Uri.https("t.me", "cakewallet")), - trailingIconPath: "assets/new-ui/link_arrow.svg", - foregroundColor: Theme.of(context).colorScheme.primary, - trailingIconSize: 10) - ] + ], }) ], ) diff --git a/lib/new-ui/widgets/wallet_deprecation_popup.dart b/lib/new-ui/widgets/wallet_deprecation_popup.dart deleted file mode 100644 index 2b233c0ac..000000000 --- a/lib/new-ui/widgets/wallet_deprecation_popup.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'package:cake_wallet/new-ui/widgets/animated_dropdown.dart'; -import 'package:cake_wallet/new-ui/widgets/new_primary_button.dart'; -import 'package:cake_wallet/new-ui/widgets/receive_page/receive_top_bar.dart'; -import 'package:cake_wallet/src/widgets/cake_image_widget.dart'; -import 'package:cw_core/currency_for_wallet_type.dart'; -import 'package:cw_core/wallet_type.dart'; -import 'package:flutter/material.dart'; - -class WalletDeprecationPopup extends StatelessWidget { - const WalletDeprecationPopup({super.key, required this.type, this.seed}); - - final WalletType type; - final String? seed; - - @override - Widget build(BuildContext context) { - final curr = walletTypeToCryptoCurrency(type); - - return Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.vertical(top: Radius.circular(20)), - color: Theme.of(context).colorScheme.surface), - child: SafeArea( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - ModalTopBar( - title: "", - leadingIcon: Icon(Icons.close), - onLeadingPressed: Navigator.of(context).pop, - ), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 12.0), - child: Column( - spacing: 24, - children: [ - CakeImageWidget( - imageUrl: curr.iconPath, - width: 64, - height: 64, - ), - Text( - "${curr.fullName} is no longer supported", - style: TextStyle(fontSize: 20, fontWeight: FontWeight.w600), - textAlign: TextAlign.center, - ), - Text( - "Apologies for the inconvenience.", - textAlign: TextAlign.center, - ), - if (seed != null) ...[ - Text( - "If you need to migrate your seed, you can see it below.", - textAlign: TextAlign.center, - ), - AnimatedDropdown(content: Text(seed!), dropdownText: "Tap to show seed"), - ], - NewPrimaryButton( - onPressed: Navigator.of(context).pop, - text: "Close", - color: Theme.of(context).colorScheme.primary, - textColor: Theme.of(context).colorScheme.onPrimary), - SizedBox() - ], - ), - ) - ], - ), - ), - ); - } -} diff --git a/lib/utils/package_info.dart b/lib/utils/package_info.dart index 5f3f0e743..abc3fc90a 100644 --- a/lib/utils/package_info.dart +++ b/lib/utils/package_info.dart @@ -22,8 +22,8 @@ class PackageInfo { buildNumber: packageInfo.buildNumber); } - static const _defaultCWAppName = 'Cake Wallet'; - static const _defaultCWAppPackageName = 'com.cakewallet.cake_wallet'; + static const _defaultCWAppName = 'Hash Wallet'; + static const _defaultCWAppPackageName = 'com.suchsoftware.hashwallet'; static const _defaultCWAppVersion = '1.0.0'; static const _defaultCWAppBuildNumber = '1'; diff --git a/lib/view_model/exchange/exchange_view_model.dart b/lib/view_model/exchange/exchange_view_model.dart index 9811a999e..290438761 100644 --- a/lib/view_model/exchange/exchange_view_model.dart +++ b/lib/view_model/exchange/exchange_view_model.dart @@ -309,18 +309,22 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with final TradesStore tradesStore; final SharedPreferences sharedPreferences; + // Hash Wallet: trimmed to Trocador only. Trocador's aggregator already fronts + // ChangeNow, LetsExchange, Exolix, StealthEx, FixedFloat, Quantex, etc., + // letting us collect markup as the affiliate. Re-enable individual providers + // here only after registering Such Software affiliate keys per provider. List get _allProviders => [ - ChangeNowExchangeProvider(settingsStore: _settingsStore), + // ChangeNowExchangeProvider(settingsStore: _settingsStore), // SideShiftExchangeProvider(), - ChainflipExchangeProvider(), - if (FeatureFlag.isExolixEnabled) ExolixExchangeProvider(), - SwapTradeExchangeProvider(), - LetsExchangeExchangeProvider(), - StealthExExchangeProvider(), - XOSwapExchangeProvider(), - SwapsXyzExchangeProvider(), - JupiterExchangeProvider(), - NearIntentsExchangeProvider(), + // ChainflipExchangeProvider(), + // if (FeatureFlag.isExolixEnabled) ExolixExchangeProvider(), + // SwapTradeExchangeProvider(), + // LetsExchangeExchangeProvider(), + // StealthExExchangeProvider(), + // XOSwapExchangeProvider(), + // SwapsXyzExchangeProvider(), + // JupiterExchangeProvider(), + // NearIntentsExchangeProvider(), TrocadorExchangeProvider( useTorOnly: _useTorOnly, providerStates: _settingsStore.trocadorProviderStates), ]; diff --git a/lib/wallet_type_utils.dart b/lib/wallet_type_utils.dart index 093aebc8e..469c5ac0e 100644 --- a/lib/wallet_type_utils.dart +++ b/lib/wallet_type_utils.dart @@ -20,5 +20,5 @@ String get approximatedAppName { return 'Monero.com'; } - return 'Cake Wallet'; + return 'Hash Wallet'; } diff --git a/macos/Runner/Configs/AppInfoBase.xcconfig b/macos/Runner/Configs/AppInfoBase.xcconfig index aabf7b387..276ba5007 100644 --- a/macos/Runner/Configs/AppInfoBase.xcconfig +++ b/macos/Runner/Configs/AppInfoBase.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = ${PRODUCT_NAME} PRODUCT_BUNDLE_IDENTIFIER = ${PRODUCT_BUNDLE_IDENTIFIER} // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2022 com.fotolockr. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2026 Such Software LLC. All rights reserved. diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 1ded5a8e7..34a3e4398 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -147,7 +147,7 @@ "cake_pay_web_cards_subtitle": "Buy worldwide prepaid cards and gift cards", "cake_pay_web_cards_title": "Cake Pay Web Cards", "cake_seeds_save_disclaimer": "Please save these words in a secure place! You will need these words to restore your wallet on a new device.", - "cake_wallet": "Cake Wallet", + "cake_wallet": "Hash Wallet", "cakepay_confirm_no_vpn": "I confirm I am not using a Proxy or VPN", "cakepay_confirm_purchase": "Confirm Purchase", "cakepay_confirm_terms_agreed": "I agree to the terms and conditions presented here:", @@ -226,7 +226,7 @@ "confirm_fee_deduction_content": "Do you agree to deduct the fee from the output?", "confirm_passphrase": "Confirm passphrase", "confirm_sending": "Confirm sending", - "confirm_silent_payments_switch_node": "Your current node does not support Silent Payments.\\n\\nCake Wallet will switch to a compatible node while scanning.", + "confirm_silent_payments_switch_node": "Your current node does not support Silent Payments.\\n\\nHash Wallet will switch to a compatible node while scanning.", "confirm_transaction": "Confirm transaction", "confirmations": "Confirmations", "confirmed": "Confirmed Balance", @@ -237,7 +237,7 @@ "connect_hw_info_step_1": "Make sure your device is powered ON.", "connect_hw_info_step_2": "Turn Bluetooth on for both devices and pair them from the phone, OR connect your devices together using a USB cable.", "connect_hw_info_step_3": "Unlock your device and navigate to the desired crypto app.", - "connect_hw_info_step_4": "Select your device in Cake Wallet and continue with the setup.", + "connect_hw_info_step_4": "Select your device in Hash Wallet and continue with the setup.", "connect_yats": "Connect Yats", "connect_your_hardware_wallet": "Connect your hardware wallet using Bluetooth or USB", "connect_your_hardware_wallet_ble": "Connect your hardware wallet using Bluetooth", @@ -440,7 +440,7 @@ "evm_ecosystem_description": "If necessary, modify the network and token you would like to use for this payment.", "exchange": "Exchange", "exchange_extra_info": "Please don’t forget to specify the Memo or Extra ID while sending this transaction for the exchange", - "exchange_incorrect_current_wallet_for_xmr": "If you want to swap XMR from your Cake Wallet Monero balance, please switch to your Monero wallet first.", + "exchange_incorrect_current_wallet_for_xmr": "If you want to swap XMR from your Hash Wallet Monero balance, please switch to your Monero wallet first.", "exchange_new_template": "New template", "exchange_provider_unsupported": "${providerName} is no longer supported!", "exchange_providers": "Exchange Providers", @@ -450,7 +450,7 @@ "exchange_result_write_down_ID": "*Please copy or write down your ID shown above.", "exchange_result_write_down_trade_id": "Please copy or write down the trade ID to continue.", "exchange_sync_alert_content": "Please wait until your wallet is synchronized", - "exchange_trade_result_confirm": "By pressing send from Cake Wallet, you will be sending ${fetchingLabel} ${from} from your wallet called ${walletName} to the address shown below. Or you can send from your external wallet to the address/QR code on the send from external wallet details page.\n\nPlease press either of the buttons to continue or go back to change the amounts.", + "exchange_trade_result_confirm": "By pressing send from Hash Wallet, you will be sending ${fetchingLabel} ${from} from your wallet called ${walletName} to the address shown below. Or you can send from your external wallet to the address/QR code on the send from external wallet details page.\n\nPlease press either of the buttons to continue or go back to change the amounts.", "expired": "Expired", "expires": "Expires", "expiresOn": "Expires on", @@ -513,7 +513,7 @@ "got_it": "Got it", "gross_balance": "Gross Balance", "group_by_type": "Group by type", - "haven_app": "Haven by Cake Wallet", + "haven_app": "Haven by Hash Wallet", "haven_app_wallet_text": "Awesome wallet for Haven", "help": "help", "hidden_addresses": "Hidden Addresses", @@ -629,7 +629,7 @@ "minutes_to_pin_code": "${minute} minutes", "mm": "MM", "modify_2fa": "Modify Cake 2FA", - "monero_com": "Monero.com by Cake Wallet", + "monero_com": "Monero.com by Hash Wallet", "monero_com_wallet_text": "Awesome wallet for Monero", "monero_dark_theme": "Monero Dark Theme", "monero_light_theme": "Monero Light Theme", @@ -756,7 +756,7 @@ "potential_scam": "Potential Scam", "powered_by": "Powered by ${title}", "pre_seed_button_text": "I understand. Show me my seed", - "pre_seed_description": "On the next page you will see a series of words. This is your unique and private seed and it is the ONLY way to recover your wallet in case of loss or malfunction. It is YOUR responsibility to write it down and store it in a safe place outside of the Cake Wallet app.", + "pre_seed_description": "On the next page you will see a series of words. This is your unique and private seed and it is the ONLY way to recover your wallet in case of loss or malfunction. It is YOUR responsibility to write it down and store it in a safe place outside of the Hash Wallet app.", "pre_seed_title": "IMPORTANT", "preference": "Preference", "prepaid_cards": "Prepaid Cards", @@ -840,7 +840,7 @@ "restore_bitcoin_description_from_keys": "Restore your wallet from generated WIF string from your private keys", "restore_bitcoin_description_from_seed": "Restore your wallet from 24 word combination code", "restore_bitcoin_title_from_keys": "Restore from WIF", - "restore_description_from_backup": "Get Cake Wallet back exactly as you had it by restoring from a backup file.", + "restore_description_from_backup": "Get Hash Wallet back exactly as you had it by restoring from a backup file.", "restore_description_from_cupcake": "Link with our companion air-gapped app, installed on a second phone.", "restore_description_from_hardware_wallet": "Link your hardware wallet device from a variety of manufacturers.", "restore_description_from_keys": "Restore your wallet from generated keystrokes saved from your private keys", @@ -958,7 +958,7 @@ "send_external_desc": "Don't close this page until you send the funds, or else the deposit won't proceed.", "send_fee": "Fee:", "send_from": "Send from", - "send_from_cake_wallet": "Send from Cake Wallet", + "send_from_cake_wallet": "Send from Hash Wallet", "send_from_external": "Send from External", "send_from_external_wallet": "Send from External Wallet", "send_name": "Name", @@ -1083,7 +1083,7 @@ "support_description_guides": "Documentation and support for common issues", "support_description_live_chat": "Free and fast! Trained support representatives are available to assist", "support_description_other_links": "Join our communities or reach us or our partners through other methods", - "support_title_guides": "Cake Wallet docs", + "support_title_guides": "Hash Wallet docs", "support_title_live_chat": "Live support", "support_title_other_links": "Other support links", "supported": "Supported", @@ -1132,7 +1132,7 @@ "template": "Template", "template_name": "Template Name", "testnet_coins_no_value": "Testnet coins have no value", - "third_intro_content": "Yats live outside of Cake Wallet, too. Any wallet address on earth can be replaced with a Yat!", + "third_intro_content": "Yats live outside of Hash Wallet, too. Any wallet address on earth can be replaced with a Yat!", "third_intro_title": "Yat plays nicely with others", "this_pair_is_not_supported_warning": "This pair is not supported with the currently selected exchange(s). Please select another exchange.", "thorchain_contract_address_not_supported": "THORChain does not support sending to a contract address", @@ -1152,7 +1152,7 @@ "tokens_strong_warning": "Never send tokens to this address!", "tor_connection": "Tor connection", "tor_connection_timeout": "Tor connection timeout", - "tor_experimental": "This is an experimental feature, not all connections made from Cake Wallet support Tor routing - some connections may use clearnet, in order to fully route app traffic use Tor with VPN mode.", + "tor_experimental": "This is an experimental feature, not all connections made from Hash Wallet support Tor routing - some connections may use clearnet, in order to fully route app traffic use Tor with VPN mode.", "tor_only": "Tor only", "total": "Total", "total_saving": "Total Savings", @@ -1302,7 +1302,7 @@ "wallet_group": "Wallet Group", "wallet_group_description_existing_seed": "You’ve chosen to use an existing seed for this wallet. You may verify the seed again if you need to confirm or write it down.", "wallet_group_description_four": "to create a wallet with an entirely new seed.", - "wallet_group_description_one": "In Cake Wallet, you can create a", + "wallet_group_description_one": "In Hash Wallet, you can create a", "wallet_group_description_open_wallet": "Otherwise, you can continue to open the wallet", "wallet_group_description_three": "to see the available wallets and/or wallet groups screen. Or choose", "wallet_group_description_two": "by selecting an existing wallet to share a seed with. Each wallet group can contain a single wallet of each currency type.\n\nYou can select", @@ -1358,11 +1358,11 @@ "xmr_to_error_description": "Invalid amount. Maximum limit 8 digits after the decimal point", "yat": "Yat", "yat_address": "Yat Address", - "yat_alert_content": "Cake Wallet users can now send and receive all their favorite currencies with a one-of-a-kind emoji-based username.", + "yat_alert_content": "Hash Wallet users can now send and receive all their favorite currencies with a one-of-a-kind emoji-based username.", "yat_alert_title": "Send and receive crypto more easily with Yat", "yat_error": "Yat error", "yat_error_content": "No addresses linked with this Yat. Try another Yat", - "yat_popup_content": "You can now send and receive crypto in Cake Wallet with your Yat - a short, emoji-based username. Manage Yats at any time on the settings screen", + "yat_popup_content": "You can now send and receive crypto in Hash Wallet with your Yat - a short, emoji-based username. Manage Yats at any time on the settings screen", "yat_popup_title": "Your wallet address can be emojified.", "yes": "Yes", "yesterday": "Yesterday", @@ -1374,7 +1374,7 @@ "youCanGoBackToYourDapp": "You can go back to your dApp now", "your": "Your", "yy": "YY", - "zcash_card_description": "If you don't see your full balance Cake Wallet can attempt to sweep funds from internal change addresses used by some wallets.", + "zcash_card_description": "If you don't see your full balance Hash Wallet can attempt to sweep funds from internal change addresses used by some wallets.", "zcash_card_dismiss": "Dismiss", "zcash_card_enable_later": "You can always enable this card later in settings", "zcash_card_missing_funds": "Missing funds?", diff --git a/scripts/android/app_env.sh b/scripts/android/app_env.sh index 00bed6ce4..97c37e807 100644 --- a/scripts/android/app_env.sh +++ b/scripts/android/app_env.sh @@ -20,12 +20,12 @@ MONERO_COM_BUNDLE_ID="com.monero.app" MONERO_COM_PACKAGE="com.monero.app" MONERO_COM_SCHEME="monero.com" -CAKEWALLET_NAME="Cake Wallet" +CAKEWALLET_NAME="Hash Wallet" CAKEWALLET_VERSION="6.1.2" CAKEWALLET_BUILD_NUMBER=4410 -CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet" -CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet" -CAKEWALLET_SCHEME="cakewallet" +CAKEWALLET_BUNDLE_ID="com.suchsoftware.hashwallet" +CAKEWALLET_PACKAGE="com.suchsoftware.hashwallet" +CAKEWALLET_SCHEME="hashwallet" if ! [[ " ${TYPES[*]} " =~ " ${APP_ANDROID_TYPE} " ]]; then diff --git a/scripts/android/pubspec_gen.sh b/scripts/android/pubspec_gen.sh index 9cf8976d6..8feca17da 100755 --- a/scripts/android/pubspec_gen.sh +++ b/scripts/android/pubspec_gen.sh @@ -10,7 +10,7 @@ case $APP_ANDROID_TYPE in CONFIG_ARGS="--monero" ;; $CAKEWALLET) - CONFIG_ARGS="--monero --bitcoin --ethereum --polygon --nano --bitcoinCash --solana --tron --wownero --zano --decred --dogecoin --base --zcash --arbitrum --bsc" + CONFIG_ARGS="--monero --bitcoin --ethereum --polygon --nano --bitcoinCash --wownero --dogecoin --base --arbitrum --bsc" ;; esac diff --git a/scripts/ios/app_config.sh b/scripts/ios/app_config.sh index 70577e4da..ef7c6b28c 100755 --- a/scripts/ios/app_config.sh +++ b/scripts/ios/app_config.sh @@ -31,7 +31,7 @@ case $APP_IOS_TYPE in ;; $CAKEWALLET) - CONFIG_ARGS="--monero --bitcoin --ethereum --polygon --nano --bitcoinCash --solana --tron --wownero --zano --decred --dogecoin --base --zcash --arbitrum --bsc" + CONFIG_ARGS="--monero --bitcoin --ethereum --polygon --nano --bitcoinCash --wownero --dogecoin --base --arbitrum --bsc" ;; esac diff --git a/scripts/ios/app_env.sh b/scripts/ios/app_env.sh index 7f12ba31f..6093d0a3a 100644 --- a/scripts/ios/app_env.sh +++ b/scripts/ios/app_env.sh @@ -16,10 +16,10 @@ MONERO_COM_VERSION="6.1.2" MONERO_COM_BUILD_NUMBER=163 MONERO_COM_BUNDLE_ID="com.cakewallet.monero" -CAKEWALLET_NAME="Cake Wallet" +CAKEWALLET_NAME="Hash Wallet" CAKEWALLET_VERSION="6.1.2" CAKEWALLET_BUILD_NUMBER=418 -CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" +CAKEWALLET_BUNDLE_ID="com.suchsoftware.hashwallet" if ! [[ " ${TYPES[*]} " =~ " ${APP_IOS_TYPE} " ]]; then diff --git a/scripts/linux/app_config.sh b/scripts/linux/app_config.sh index 050bee6c7..d2ad97984 100755 --- a/scripts/linux/app_config.sh +++ b/scripts/linux/app_config.sh @@ -13,7 +13,7 @@ CONFIG_ARGS="" case $APP_LINUX_TYPE in $CAKEWALLET) - CONFIG_ARGS="--monero --bitcoin --ethereum --polygon --nano --bitcoinCash --solana --tron --wownero --dogecoin --base --arbitrum --bsc --excludeFlutterSecureStorage";; + CONFIG_ARGS="--monero --bitcoin --ethereum --polygon --nano --bitcoinCash --wownero --dogecoin --base --arbitrum --bsc --excludeFlutterSecureStorage";; esac cp -rf pubspec_description.yaml pubspec.yaml diff --git a/scripts/linux/app_env.sh b/scripts/linux/app_env.sh index 0a66f626c..31400ccc1 100755 --- a/scripts/linux/app_env.sh +++ b/scripts/linux/app_env.sh @@ -13,7 +13,7 @@ if [ -n "$1" ]; then APP_LINUX_TYPE=$1 fi -CAKEWALLET_NAME="Cake Wallet" +CAKEWALLET_NAME="Hash Wallet" CAKEWALLET_VERSION="6.1.0" CAKEWALLET_BUILD_NUMBER=79 diff --git a/scripts/macos/app_config.sh b/scripts/macos/app_config.sh index 64ae2dd96..79dba309d 100755 --- a/scripts/macos/app_config.sh +++ b/scripts/macos/app_config.sh @@ -36,7 +36,7 @@ case $APP_MACOS_TYPE in $MONERO_COM) CONFIG_ARGS="--monero";; $CAKEWALLET) - CONFIG_ARGS="--monero --bitcoin --ethereum --polygon --nano --bitcoinCash --solana --tron --wownero --dogecoin --base --arbitrum --bsc";; + CONFIG_ARGS="--monero --bitcoin --ethereum --polygon --nano --bitcoinCash --wownero --dogecoin --base --arbitrum --bsc";; esac cp -rf pubspec_description.yaml pubspec.yaml diff --git a/scripts/macos/app_env.sh b/scripts/macos/app_env.sh index 194d12ccf..b0e886ed5 100755 --- a/scripts/macos/app_env.sh +++ b/scripts/macos/app_env.sh @@ -20,10 +20,10 @@ MONERO_COM_VERSION="6.1.0" MONERO_COM_BUILD_NUMBER=79 MONERO_COM_BUNDLE_ID="com.cakewallet.monero" -CAKEWALLET_NAME="Cake Wallet" +CAKEWALLET_NAME="Hash Wallet" CAKEWALLET_VERSION="6.1.0" CAKEWALLET_BUILD_NUMBER=147 -CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" +CAKEWALLET_BUNDLE_ID="com.suchsoftware.hashwallet" if ! [[ " ${TYPES[*]} " =~ " ${APP_MACOS_TYPE} " ]]; then echo "Wrong app type." diff --git a/tool/configure.dart b/tool/configure.dart index 80856320d..77be3c817 100644 --- a/tool/configure.dart +++ b/tool/configure.dart @@ -2024,9 +2024,9 @@ Future generateWalletTypes({ outputContent += '\tWalletType.banano,\n'; } - // if (hasWownero) { - // outputContent += '\tWalletType.wownero,\n'; - // } + if (hasWownero) { + outputContent += '\tWalletType.wownero,\n'; + } outputContent += '];\n'; await walletTypesFile.writeAsString(outputContent);