Commit Graph
3863 Commits
Author SHA1 Message Date
jwinterm 9e5593011a Route error reports + tx-failed support contact to support@such.software
Cake's email was hardcoded as the recipient for the 'Send error report'
flow in ExceptionHandler and as the contact in the TransactionCommitFailed
user-facing message. Anyone tapping Send would have mailed their wallet
metadata to Cake's support team. Repointed both to support@such.software.
2026-05-16 19:41:56 -04:00
jwinterm 4506b82e30 Actually disable changelog modal (prior commit Edit raced the Read) 2026-05-16 19:05:13 -04:00
jwinterm 16c4d3b128 Hardcoded appName cake_wallet -> hash_wallet + nuke changelog modal + Wownero up top
Three semi-independent fixes flagged from a user-facing testing pass:

1. cw_core/lib/root_dir.dart had a hardcoded 'cake_wallet' for the
   Linux app data dir, bypassing the binary name entirely. That's why
   ~/.config/cake_wallet/ kept being created even after the project
   rename. Changed appName const to hash_wallet. Also:
   - CAKE_WALLET_DIR env-var override -> HASH_WALLET_DIR (with the
     old name kept as a fallback so users migrating from a Cake
     install via env-var don't lose their path).
   - linuxSymlinkSharedPreferences kept the legacy
     ['com.example.cake_wallet','cake_wallet'] paths in the migration
     array so existing Cake users get auto-migrated into hash_wallet's
     new home on first launch of the fork.

2. lib/new-ui/new_dashboard.dart: commented out the
   Future.delayed(300ms).then(_showChangelog) trigger. The changelog
   content lives under assets/new-ui/changelog/text and describes
   Cake's v6.1.0 release notes — not ours. The 'View more info' button
   inside the modal launched blog.cakewallet.com. Re-enable once we
   write our own changelog content.

3. tool/configure.dart: WalletType.wownero hoisted to the top of the
   generated availableWalletTypes list. It's the reason this fork
   exists, so it should be the first choice in create / restore
   pickers. Monero stays as #2.
2026-05-16 19:04:45 -04:00
jwinterm 33319c67c7 Land real Privacy Policy + Terms of Use (Such Software LLC, May 16 2026)
Replaces both placeholders with the legal-reviewed Hash Wallet documents
authored by the user.

Per user direction: stripped the Tor/I2P recommendation from the Privacy
Policy section 2 (network-level privacy guidance). New text recommends
running your own node and pointing the Software at it via custom node
settings — same intent, framed around the recommendation the user
actually wants to make for Hash Wallet rather than naming specific
overlay networks we don't currently integrate or document well.
2026-05-16 18:15:16 -04:00
jwinterm 27862c10ba Add ToS placeholder (forgot in prior commit due to Read race) 2026-05-16 18:07:20 -04:00
jwinterm 6e617f7a42 Welcome page polish + ToS placeholder + made_fun text fix
- res/values/strings_en.arb: made_easy value 'made easy' -> 'made fun'.
  This is what AnimatedTypingText actually feeds (line 183 of
  create_pin_welcome_page.dart), not payment_made_easy which is unused
  in this rendering path.
- assets/images/cake_logo_{light,dark}.svg replaced with mark-only
  (hash_wallet/01_mark.svg — just the # in green box, no embedded
  wordmark). Welcome screen layout already renders 'Hash Wallet' text
  next to this image; the previous wordmark-embedded SVG caused the
  duplicate 'Hash Wallet [...] Hash Wallet' you screenshot'd. Mark
  alone is theme-agnostic (green box with white # works on both light
  and dark backgrounds), so light + dark use the same file.
- assets/images/welcome_{dark,light}_theme.svg: gradient bottom stop
  faded to transparent. Eliminates the hard cutoff edge where the
  sky-rect ended and flat surface color began — the SVG now blends
  smoothly into the page background.
- assets/text/Terms_of_Use.txt: replaced 188-line Cake Labs LLC legal
  document with a Hash Wallet placeholder (same pattern as PRIVACY.md).
  Real ToS pending legal review.
2026-05-16 18:06:42 -04:00
jwinterm d03fd909ef Fix dangling 'if (!isMoneroOnly) ...[' in support_view_model.dart
Python regex strip from 6ec755ec2 removed the MoonPay + Robinhood
LinkListItem entries that lived inside an 'if (!isMoneroOnly) ...[ ]'
conditional list-spread, but left the opening '...['  dangling at
line 66 with no matching close bracket. mobx_codegen and hive_generator
both threw 'Expected to find ]' at line 67.

Remove the dead conditional. Build moves past secrets-generation +
mobx-codegen + hive-generator now.
2026-05-16 12:23:37 -04:00
jwinterm 6ec755ec2c Nuke buy providers + flip node defaults from Cake to community
Buy providers (Robinhood Connect, DFX, Onramper, MoonPay, Kryptonim, Meld):
- lib/entities/provider_types.dart: getAvailable{Buy,Sell}ProviderTypes()
  both return [] now. Each provider requires a formal partner contract
  with revenue-share — no free integrations exist. Re-add to the list
  once Such Software has registered the partner relationship per provider.
  Buy/Sell UI surfaces (cards_view.dart's onramp button -> Routes.buySellPage)
  still render but the provider list is empty, so the screen shows nothing.
- lib/view_model/support_view_model.dart: removed the third-party support
  LinkListItem entries for the dead buy providers. Kept the swap-provider
  support links (ChangeNow, SideShift, SimpleSwap, Exolix, SwapTrade,
  Trocador) — Trocador is still active and the others are useful for
  legacy users who created swaps before the trim.

Default node flip (per user request — 'someone else top choice, Cake nodes
stay in the list of others'):
- xmr-node.cakewallet.com:18081  -> node.sethforprivacy.com:443
- electrum.cakewallet.com:50002  -> electrum.blockstream.info:50002
- ltc-electrum.cakewallet.com:50002 -> electrum-ltc.bysh.me:50002
- btc-electrum.cakewallet.com:50002 -> electrum.blockstream.info:50002
Cake's nodes remain in the augmented lists (see asset/*_node_list.yml).
Silent-payments Electrs (electrs.cakewallet.com) + zcash default URI
unchanged — no good free alternative for silent payments, and zcash is
removed anyway.
2026-05-16 12:08:02 -04:00
jwinterm 04ed46aca3 Deep Cake scrub: gut user-visible refs, swap SVG asset contents
URL replacements throughout lib/:
- support_view_model.dart: removed Cake's own support channels (email,
  website, forum, Telegram, Telegram bot). Only GitHub Issues + Releases
  remain. Third-party provider support links (ChangeNow, SideShift,
  SimpleSwap, Exolix, Trocador, Onramper, DFX, MoonPay, Robinhood,
  Kryptonim) kept — genuinely useful when a swap goes sideways.
- transaction_details_view_model.dart + payjoin_details_view_model.dart:
  mempool.cakewallet.com -> mempool.space (canonical free public mempool,
  no affiliate).
- services_updates_widget.dart: status.cakewallet.com -> our GH issues.
- 8 widget/screen files: docs.cakewallet.com / blog / cakewallet.com help
  URLs repointed to github.com/Such-Software/hash-wallet (placeholder
  until we have our own docs; better than dead-linking to Cake's docs).

User-facing text changes:
- walletkit_service.dart: WalletKit metadata (name/description/url/icon/
  redirect) all -> Hash Wallet / Such Software repo / hashwallet:// scheme.
- di.dart: TrezorConnect callback URL + appName -> Hash Wallet.
- vulnerable_seeds_popup.dart + haven_wallet_removal_popup.dart: copy
  rewritten to say 'Hash Wallet' instead of 'Cake Wallet', and point to
  GH issues instead of Cake's support email.
- swap_provider_initial_preference_modal.dart: trailing 'Cake Wallet.'
  -> 'Hash Wallet.'

Deep-link URL scheme cakewallet:// -> hashwallet:// in:
- lib/main.dart, lib/src/screens/root/root.dart, lib/view_model/link_view_model.dart
  Means any cakewallet:// link from a payment QR / Trezor callback /
  shortcut now routes via hashwallet://. No existing user base so no
  migration needed.

SVG asset swaps (content replaced, filenames kept so call-sites compile
without rewriting):
- assets/new-ui/cake_squircle_icon.svg -> hash_wallet/02_app_icon.svg
- assets/new-ui/cakewallet-wordmark-light.svg -> hash_wallet/03_lockup_horizontal.svg
  (dark text for light backgrounds)
- assets/new-ui/cakewallet-wordmark.svg -> hash_wallet/03_lockup_horizontal_dark.svg
  (light text for dark backgrounds)
- apps_widget.dart: the conditional cakelabs-icon render became a SizedBox()
  no-op. The Apps tab is gutted anyway (placeholder content); this widget
  is also used elsewhere where the Cake Labs attribution badge is unwanted.
2026-05-16 11:54:49 -04:00
jwinterm 04203654f1 Rename Flutter project + binary: cake_wallet -> hash_wallet
The big one. Touches 760+ files. Locks in the user's decision to break
import-line compatibility with upstream cake-tech/cake_wallet in exchange
for a binary named hash_wallet on every platform.

Changes:
- pubspec_description.yaml: project name cake_wallet -> hash_wallet
- 762 Dart files: every 'package:cake_wallet/...' import rewritten to
  'package:hash_wallet/...' (lib/, cw_*/lib/, tool/, test/, integration_test/)
- linux/CMakeLists.txt: BINARY_NAME cake_wallet -> hash_wallet
- windows/CMakeLists.txt: project + BINARY_NAME (CakeWallet -> HashWallet)
- windows/runner/Runner.rc: company / file / product strings to Hash Wallet
  + Such Software LLC copyright
- macos/Runner.xcodeproj/project_base.pbxproj: cake_wallet_new.app refs
  -> hash_wallet.app (macOS output bundle name)
- com.suchsoftware.HashWallet.yml (Flatpak): all binary path refs
  cake_wallet -> hash_wallet (e.g. /app/hash_wallet/hash_wallet)
- linux/com.suchsoftware.HashWallet.desktop: Exec=hash_wallet
- scripts/android/copy_monero_deps.sh: CW_DIR target path
- configure_hash_wallet.sh: error message typo (old filename)

INTENTIONALLY UNCHANGED:
- cw_* subpackage names (cw_core, cw_bitcoin, cw_wownero, etc.) — they
  remain as the historical 'cake wallet' naming; renaming them would
  cascade through every sub-package's internal structure
- Method channel name 'com.cake_wallet/native_utils' in iOS/macOS/Android
  AppDelegates and MainActivity — it's a string identifier that has to
  match the Dart side exactly. Renaming requires both-sides change; it's
  internal-only and not user-visible.
- ghcr.io/cake-tech/cake_wallet:debian13-... docker image references in
  build scripts — that's Cake Labs' published image we use as the build
  environment, not ours.

User data directory now follows the new binary name:
  ~/.local/share/hash_wallet/  (was ~/.local/share/cake_wallet/)
  ~/.config/hash_wallet/       (was ~/.config/cake_wallet/)
Existing users on the old name will need migration if any exist.
2026-05-16 11:33:25 -04:00
jwinterm 2216320b35 Linux APPLICATION_ID: com.example.cake_wallet -> com.suchsoftware.hashwallet
GTK app identifier missed in last commit (Edit failed because Read wasn't
run first; the rest of the welcome-screen batch landed cleanly). Now the
Linux GDBus name + dock entry uses our own reverse-DNS, not the default
'com.example.*' GTK template value.
2026-05-16 11:16:07 -04:00
jwinterm 7a65bdae0b Welcome screen overhaul + APPLICATION_ID fix
- assets/images/cake_logo_{light,dark}.svg replaced with the Hash Wallet
  horizontal lockup variants (03_lockup_horizontal.svg + ..._dark.svg).
  Welcome screen now shows our wordmark instead of the Cake mark.

- assets/images/welcome_dark_theme.svg rewritten as a cyberpunk starry
  night: deep green gradient sky, mint/pink/blue nebula glows, sharp
  4-point stars, and a subtle '#'-shaped constellation made of dots
  connected by mint lines — keeps the night-sky feel but in our palette
  and ties back to the brand mark.

- assets/images/welcome_light_theme.svg rewritten as a sunny morning:
  minty sky gradient, warm yellow sun, soft pink lower-left halo, white
  clouds, plus subtle brand-green sparkles for continuity with the dark
  variant.

- linux/CMakeLists.txt: APPLICATION_ID changed from the default
  com.example.cake_wallet to com.suchsoftware.hashwallet. (BINARY_NAME
  stays cake_wallet — renaming it requires touching every
  package:cake_wallet/... import in the codebase; explicitly deferred.)

- res/values/strings_en.arb: 'payment_made_easy' string changed from
  'Payments made easy' to 'Payments · Privacy · Security · made fun'.
2026-05-16 11:15:43 -04:00
jwinterm c9a65da78d theme_list: sync to renamed BlackTheme accent enum entries
Companion to 59a6b25ff. The accent enum got renamed (cakePrimary,
tronRed, frostingPurple removed; hashGreen, suchPink, suchBlue added)
but ThemeList still referenced the old names. Rename in lock-step:

  cakePrimary       -> hashGreen
  tronRed           -> suchPink
  frostingPurple    -> suchBlue

Plus the corresponding ThemeList static fields (blackThemeCakePrimary
etc.) and switch cases. The integer 'raw' deserialize codes (12-17,
112-117) stay the same — existing user theme prefs will resolve to the
new accent at the same raw value.
2026-05-16 10:48:23 -04:00
jwinterm 59a6b25ff3 Theme overhaul: green primary + Such Software pink/blue accents
Tier A (theme classes):
- light_theme.dart: primary #1A5C38 (Hash green), secondary #B83278 (Such
  pink), tertiary #1F7DBF (Such blue), surface #F2F8F4 (very light minty).
  Full ColorScheme rewritten with green-family containers and green-tinted
  surface tokens.
- dark_theme.dart: primary #7FCAA0 (mint, readable on dark), secondary
  #E16FA6 (soft pink), tertiary #6AB7E6 (soft blue), surface #0B1F14
  (deep green). Containers + surface tokens tuned for the green palette.
- black_theme.dart: replaced accent enum (cakePrimary/tronRed/frostingPurple
  removed; hashGreen, suchPink, suchBlue added). bchGreen / bitcoinYellow /
  moneroOrange kept as chain identifiers.

Tier A (custom theme colors):
- light_theme_custom_colors.dart: backgroundGradient + cardGradient +
  toggleColorOffState retuned to green tints.
- dark_theme_custom_colors.dart: same for the dark variant.
- black_theme_custom_colors.dart: untouched (pure black AMOLED is brand-
  neutral on purpose).

Tier B (palette.dart):
- Cake's blue-family accents (Palette.blue, royalBlue, cornflower,
  blueCraiola family, pinkFlamingo, lavenders, oceanBlue, nightBlue,
  protectiveBlue, etc.) repainted into the green/pink/blue brand system.
- PaletteDark's night-blue surfaces wholesale repainted into deep-green
  equivalents. Original const names retained so every call-site compiles
  unchanged.
- moneroOrange, moneroLightOrange, bitcoinOrange, moneroCard, BCH green
  intentionally NOT touched — chain identifiers.
- Pure neutrals (gray, darkGray, manatee, dullGray, highContrastGray,
  shadowWhite, stateGray, granite, matrixGreen, red, error reds) kept.

Tier C deferred — hardcoded Color(0xFF...) literals scattered through
lib/ remain blue. Most should pull from ColorScheme so this should be
~80% visually rebranded already; iterate from screenshots.
2026-05-16 10:34:53 -04:00
jwinterm 4805e5b1aa Actually skip zcash in node_list.resetToDefault (previous commit missed this)
The companion to 78edfe0bb — that commit fixed the migration step 55 but
the resetToDefault() in lib/entities/node_list.dart was still trying to
loadDefaultNodes(WalletType.zcash) on every fresh wallet creation, which
is exactly where the user's reported popup fires.
2026-05-16 08:06:44 -04:00
jwinterm 78edfe0bb3 Skip zcash node loading and migration step 55 (chain removed)
The zcash chain was removed (cw_zcash deleted, assets/zcash_node_list.yml
deleted), but two places still tried to load it at runtime:

1. lib/entities/node_list.dart's resetToDefault() unconditionally called
   loadDefaultNodes(WalletType.zcash) which tried to read the deleted YAML.
2. lib/entities/default_settings_migration.dart migration step 55 called
   addWalletNodeList(type: WalletType.zcash) + _changeDefaultNode for zcash,
   same failure.

Both surfaced as a 'Unable to load asset: assets/zcash_node_list.yml' error
popup on every fresh wallet creation. Removing both call sites; migration
step 55 becomes a no-op (existing wallets advance through it without effect).

Also includes the new SVG variants added to assets/images/hash_wallet/:
03/04/05_*_dark.svg, 09_mark_outline.svg, 10_wordmark_only.svg,
11_vertical_lockup.svg, 12_notification_mono.svg — fills out the brand
kit with dark-theme wordmarks plus tiny/outline/wordmark-only/vertical/
notification variants for cases the existing set didn't cover.
2026-05-16 08:06:12 -04:00
jwinterm 5531eb37c0 Strip Cake-affiliate entries from Apps tab (Cake Pay, Cupcake, NanoGPT, dEuro)
User reported the Apps page still surfaced Cake Labs and Cake-affiliate
third parties despite all the other rebrand work — they're hardcoded in
lib/src/screens/dashboard/pages/cake_features_page.dart's _buildOldUi
and _buildNewUi.

- Cake Pay: Cake Labs' own gift-card product, already disabled via
  FeatureFlag.isCakePayEnabled but still rendered here
- Cupcake: Cake's hardware wallet companion app
- NanoGPT: third-party AI service with Cake affiliate revenue
- dEuro Savings: Frankencoin savings, also affiliate

Replaced both build methods with a simple 'No apps available yet'
placeholder. Page structure / nav tab kept intact so we don't have to
restructure the dashboard nav — can repopulate with Hash Wallet /
Such Software apps later (e.g. Smirk, Wowcheckout, etc.).
2026-05-16 07:58:01 -04:00
jwinterm ca14bd9907 Linux: window title 'Cake Wallet' -> 'Hash Wallet'
GTK title bar (and non-header-bar fallback) were both hardcoded in
linux/my_application.cc. User reported 'Cake Wallet' showing in the
window decoration despite all the Dart-side display name changes — that
string only exists in the C++ native shell.
2026-05-16 07:44:51 -04:00
jwinterm 6f039f64dd CI: pin upload-artifact to v3 for Gitea Actions compatibility
Gitea Actions does not implement the v2+ artifact HTTP API that GitHub
introduced. upload-artifact@v4 fails with GHESNotSupportedError. v3 uses
the older wire format that Gitea's act_runner handles correctly.

The Linux build itself succeeded — this just lets the downloadable
artifact get attached to the run page.
2026-05-15 20:04:02 -04:00
jwinterm 87d58c7494 CI: fix secrets generator early-return bug + inject Trocador via sed
Previous CI step pre-wrote tool/.secrets-config.json with a curated key
subset. The generator at tool/generate_secrets_config.dart has an early
return when the base config exists (line 61), which ALSO skips creating
the per-module configs (evm/solana/nano/tron/bitcoin). Result: dozens
of secrets.xxx references in cw_bitcoin/cw_evm/cw_nano/lib/main.dart
failed at compile time with 'Undefined name'.

New approach (matches Cake's CI pattern):
1. Run generate_new_secrets.dart with no pre-existing config → it creates
   all the JSON files from the full SecretKey list with empty defaults,
   then writes the per-module .secrets.g.dart files
2. sed-inject Trocador values into lib/.secrets.g.dart

Side effect: changenow_exchange_provider.dart's 'Map<String,dynamic> not
assignable to Map<String,String>' error also resolves — that error was
caused by Dart inferring 'dynamic' for the apiKey ternary because both
arms referenced undefined secrets. Once secrets exist as empty strings,
inference settles on String.
2026-05-15 19:49:04 -04:00
jwinterm 70320114a2 CI: serialize model_generator.sh + explicit Flutter precache step
The 'async' flag in model_generator.sh launches per-module flutter pub get
in parallel via 'bash -c ... &'. Flutter has a single-process startup lock
for SDK initialization — when N parallel calls race for it, most lose,
leaving the SDK cache half-initialized. Subsequent pub gets then fail
with the misleading 'doesn't support null safety' error because Flutter
can't resolve its own bundled sky_engine.

Two fixes:
1. Drop 'async' — model_generator.sh now runs the 8 modules sequentially.
   Adds maybe 3 minutes per CI run vs parallel, but reliable beats fast.
2. Add explicit 'flutter precache --linux' step before model_generator. The
   '|| true' absorbs the known flutter_gpu.zip 404 on Flutter 3.32.0 —
   that asset isn't actually published at the URL Flutter constructs and
   isn't needed for desktop Linux.
2026-05-15 13:55:23 -04:00
jwinterm df188b6114 Remove Cake-specific CI workflows (broken on our setup)
These came along with the original cake_wallet clone but reference Cake
Labs' private self-hosted runners (e.g. 'runs-on: [Linux, amd64, forlinux]'),
private docker registry tokens, and Cake-internal paths. They never run
successfully on our infrastructure and just clutter the Actions UI with
red warning triangles.

Removed:
- pr_test_build_{linux,android}.yml — Cake's own CI builds
- reusable-build.yml — shared build workflow they call into
- automated_integration_test.yml — heavy integration suite
- are_translations_sane.yml — translation lint
- no_{http_imports,print_in_dart,restricted_imports}.yaml — code lints

Keeping our build-linux.yml. Lint workflows can be re-added later if we
want them, adapted for our setup.
2026-05-15 13:25:15 -04:00
jwinterm a9bfc04cf3 Add Linux build CI workflow (Gitea Actions / GitHub Actions compatible)
Single workflow at .github/workflows/build-linux.yml that builds Linux
release in Cake's prebuilt Docker image. Skips the simplybs source-toolchain
bootstrap (which ate 9GB on jw-laptop before bailing) — uses the prebuilt
monero_c .so bundle instead, just like Cake's own CI does.

Targets runs-on: ubuntu-latest, which matches both your linux-beast
self-hosted runner (per its labels in the Gitea runners panel) AND
GitHub-hosted ubuntu-latest, so the same workflow file works whether CI
fires from Gitea Actions or GitHub Actions.

Triggers on push to dev/main, on PRs, and manual workflow_dispatch.
Outputs hash_wallet_linux_<sha>.zip as a downloadable artifact (14d retention).

Secrets needed on the runner / repo:
- TROCADOR_API_KEY
- TROCADOR_MONERO_API_KEY  (set to same value as TROCADOR_API_KEY for now)
- TROCADOR_EXCHANGE_MARKUP (e.g. "1")

Add via: GitHub repo Settings > Secrets and variables > Actions, or
Gitea repo Settings > Secrets.
2026-05-15 10:21:42 -04:00
jwinterm 7d3ab3ff44 prepare_moneroc.sh: skip zano submodule + shallow + parallel clones
monero_c (MrCyjaneK's multi-coin C wrapper) bundles monero, wownero, and
zano as sibling git submodules. Upstream prepare_moneroc.sh did a naive
'git submodule update --init --recursive' which pulled all three plus
their deep transitive submodules — zano alone drags down a ~100MB Qt UI
subtree we never compile.

Now: deinit + rm -rf zano (so it stays gone across runs), init only
monero and wownero, --depth 1 for shallow, --jobs 8 for parallel. Same
patches loop trimmed to drop zano.
2026-05-15 07:47:08 -04:00
jwinterm 492e60a6da Strip Zano from native build loops on Android and iOS
Zano was already removed at the configure layer, but the per-platform
build_monero_all.sh scripts still compiled libzano_wallet2_api_c on
Android and iOS — wasted build minutes for a chain we don't ship.

Linux + macOS already had the trimmed loop.
2026-05-15 06:45:35 -04:00
jwinterm 3dfd0f9146 Remove libwarp_api_ffi.so install rule from Linux CMakeLists
Leftover from zcash removal — Cake's Linux runner installed the warp_api_ffi
shared library produced by scripts/zcash_lib's Rust build. We deleted the
zcash_lib source so this install rule fails CMake. Drop it.
2026-05-14 20:53:33 -04:00
jwinterm 399764be5f Fix import_secrets_config to actually process the bitcoin config
Upstream Cake declares bitcoinConfigPath + bitcoinOutputPath at the top of
tool/import_secrets_config.dart but never references them in the function
body. Result: every fresh clone runs 'dart run tool/generate_new_secrets.dart'
and ends up with cw_evm/cw_solana/cw_tron/cw_nano/.secrets.g.dart populated
but cw_bitcoin/lib/.secrets.g.dart still missing — and the Linux build
fails on the cw_bitcoin import that needs breezApiKey.

Plumb bitcoin into the pipeline the same way the others are. The bitcoin
JSON config (tool/.bitcoin-secrets-config.json) only has breezApiKey today,
which we populate as an empty string since Lightning is disabled.
2026-05-14 20:49:25 -04:00
jwinterm 6d22ba76ec Add cw_mweb generated_bindings.g.dart stub for desktop builds
Cake's mwebd Go daemon is only built for iOS and Android — no Linux/macOS/
Windows toolchain in their build scripts. ffigen consequently never runs
on those platforms, leaving cw_mweb/lib/mweb_ffi.dart dangling on a
non-existent generated_bindings.g.dart import.

This stub provides type-compatible signatures so the Dart build compiles
on every platform. At runtime, DynamicLibrary.open will fail on desktop
(no libmweb.so/.dll/.dylib shipped) and MWeb features will no-op — standard
non-MWEB Litecoin sends/receives still work fine through cw_bitcoin.

For Android the real bindings are still produced via ffigen against the
libmweb.h Go-generated header, overwriting this stub at build time.

Force-added past the *.g.dart gitignore — this one's a hand-maintained
desktop fallback, not a build artifact.
2026-05-14 18:19:53 -04:00
jwinterm 53d8a3239e Lint script: target our actual modules instead of removed cw_zcash 2026-05-14 17:51:50 -04:00
jwinterm c64c740ba3 Nuke Zcash from build infra (chain already disabled at config layer)
Removed:
- cw_zcash/ directory (Dart wrapper, no longer needed)
- assets/zcash_node_list.yml
- scripts/prepare_zcash.sh
- scripts/{android,ios,linux,macos}/build_zcash.sh
- scripts/android/docker/Dockerfile.zcash
- scripts/zcash_lib/ if cloned (rebuildable from prepare_zcash.sh which is also gone)

Edited:
- scripts/lint.sh: replaced cw_zcash loop target with the actual modules we
  ship (cw_core, cw_monero, cw_wownero, cw_bitcoin, cw_bitcoin_cash,
  cw_dogecoin, cw_evm, cw_nano).
- hashwallet.bat: trimmed mobx codegen loop to enabled chains.
- pubspec_base.yaml: dropped zcash_node_list.yml + zcash_lib sapling
  asset references.
- scripts/android/docker/{build.sh,Dockerfile.final}: removed zcash image
  build + COPY stage.

tool/configure.dart still has the zcash codegen functions intact (they
just don't fire because we don't pass --zcash); leaving them as harmless
dead code rather than risking a regression in the codegen pipeline.
2026-05-14 17:51:19 -04:00
jwinterm 4fe96feb1b Trim model_generator.sh to only run build_runner on chains we ship
The hardcoded list iterated every cw_* module Cake ever supported, including
the ones we disabled (solana, tron, zano, decred, zcash). Those modules are
still on disk but aren't in pubspec.yaml, so the build_runner pass for them
is wasted work — minutes per fresh setup.

Trimmed to: cw_{core,evm,monero,bitcoin,nano,bitcoin_cash,wownero,dogecoin}.
cw_mweb is untouched (separate loop, only runs pub get not build_runner).
2026-05-14 17:38:18 -04:00
jwinterm 45ef3be0c6 Un-gitignore iOS AppIcon Contents.json template + commit it
Cake gitignored everything under AppIcon.appiconset/ because their
scripts/ios/app_icon.sh generated it at configure time. We use
flutter_launcher_icons which needs the Contents.json template to exist;
keeping it committed means a fresh clone can run launcher_icons without
manually creating the scaffold first.
2026-05-14 16:26:10 -04:00
jwinterm 3196284773 Pin Flutter 3.32.0 via .tool-versions and document in README
Newer Flutter SDKs drop the _macros pseudo-package that Cake's pinned
hive_generator + build_resolvers transitively require, so 'flutter pub get'
fails on Flutter 3.5+. Pin the version with .tool-versions (asdf/mise pick
this up automatically) and document the manual install path for everyone
else.
2026-05-14 16:19:56 -04:00
jwinterm 1b37802fbc Un-gitignore app_logo.png so the brand master persists in tree 2026-05-14 16:12:35 -04:00
jwinterm 27455565b9 Commit Hash Wallet app_logo.png master + override cakewallet_logo.png
- Un-gitignore assets/images/app_logo.png so our 1024x1024 brand master
  stays in tree (Cake gitignored it because their build symlinks per-product
  logos in via app_icon.sh; we have a single product so no symlink dance).
- Overwrite assets/images/cakewallet_logo.png with the Hash Wallet master
  too — that file is the source the existing scripts/{ios,android,macos}/
  app_icon.sh symlinks into place during configure, so swapping it gets the
  new logo into in-app surfaces without touching the Cake-style icon scripts.

Per-density Android mipmap and per-size iOS/macOS variants (cakewallet_android_icon/,
cakewallet_ios_icons/, cakewallet_macos_icons/) are still Cake's artwork.
Run 'flutter pub run flutter_launcher_icons' after pub get to regenerate
those from the master.
2026-05-14 16:12:16 -04:00
jwinterm d49f6bc4dd Add Hash Wallet app icon master + enable flutter_launcher_icons
- New assets/images/app_logo.png — 1024x1024 master with white # on
  green (#1a5c38) background. Source SVG checked in alongside as
  hash_wallet_app_icon_source.svg.
- Enable flutter_launcher_icons dependency (was commented out) and rename
  the legacy 'flutter_icons' config key to the modern 'flutter_launcher_icons'
  key. Added linux + windows generation; remove_alpha_ios per Apple
  requirement that App Store icons not have alpha.

After pub get, run 'flutter pub run flutter_launcher_icons' to populate
the per-platform icon variants (iOS appiconset, Android mipmaps, macOS
appiconset, etc.). Splash / launch images are still Cake's defaults; that's
a follow-up.
2026-05-14 16:07:22 -04:00
jwinterm f4f1bfeec1 Trocador: route status updates through prices.neroswap.com webhook
Per Trocador's commercial team, webhook-driven status updates are preferred
over polling. Adding 'webhook' param to /new_trade so Trocador POSTs status
changes to our Cloudflare Worker, which caches them in KV for the wallet to
read.

This commit only adds the producer side. The wallet still polls Trocador
directly (every 5 min via trade_monitor.dart); switching the polling source
to our worker is a follow-up.
2026-05-14 15:58:01 -04:00
jwinterm 4fd8ed4109 Augment default node lists with monero.fail-current and well-known public servers
- Wownero: add wownerod.foolsump.com (SSL) and spippolatori.it from
  monero.fail's currently-healthy set. Existing monerodevs nodes kept.
  (Wownero post-merge has only ~4 healthy public nodes per monero.fail.)
- Monero: add node.xmr.surf, xmr1/xmr5.doggett.tech, xmr.cryptostorm.is,
  nodes.hashvault.pro, xmr.hexide.com — all SSL, all up on monero.fail.
- BTC Electrum: add Stack Wallet, Blockstream, Emzy, qtornado as fallbacks
  alongside Cake's nodes.
- LTC Electrum: add ltc.rentonisk.com as additional fallback.
- Dogecoin Electrum: add electrum2/electrum3.cipig.net (siblings of the
  existing electrum1).
- Bitcoin Cash Electrum: add bch.imaginary.cash, bch.loping.net,
  electroncash.dk.

Existing Cake-operated nodes and Stack Wallet entries preserved as
fallbacks per the 'augment, don't replace' rule.
2026-05-14 11:24:47 -04:00
jwinterm 8deb922eb9 Point fiat price endpoint at prices.neroswap.com (existing CF zone) 2026-05-14 11:00:43 -04:00
jwinterm ffba48e811 Repoint fiat price fetch from Cake's API to prices.suchsoftware.com
Stop hitting fiat-api.cakewallet.com (and stop sending Cake's API key) for
spot price lookups. Point at our own Cloudflare Worker endpoint at
prices.suchsoftware.com which fetches Kraken (majors) + NonKYC (WOW) and
serves USD prices. Worker source lives in github.com/Such-Software/hash-wallet-prices.

Response shape unchanged so the rest of the wallet code (especially
balance display) needs no further edits.

Note: USD-only for now — non-USD fiats return 0 until forex conversion is
added server-side. Tor users fall back to clearnet until we deploy a .onion
mirror.
2026-05-14 08:58:51 -04:00
jwinterm 6845dc6a8b Disable Lightning across UI surfaces (FeatureFlag.isLightningEnabled = false)
- Add FeatureFlag.isLightningEnabled flag (off)
- Gate dashboard_view_model.hasLightning behind the flag, which transitively
  hides the LightningSwitcher in TopBar and the Lightning Username settings
  row (both already gated on hasLightning)
- Remove CryptoCurrency.btcln from CryptoCurrency.all so it stops appearing
  in any all-currencies pickers/lists

Lightning code paths (cw_bitcoin/lib/lightning/, lightning send/receive
pages) are intentionally left in place so the flag can be flipped back on
once we have an LSP / Greenlight node lined up.
2026-05-14 08:39:55 -04:00
jwinterm 8e24be5d15 Rename top-level scripts and Linux packaging to Hash Wallet
- configure_cake_wallet.sh -> configure_hash_wallet.sh
- cakewallet.bat -> hashwallet.bat (and Hash Wallet.zip output, Build\Hash Wallet)
- com.cakewallet.CakeWallet.yml -> com.suchsoftware.HashWallet.yml (Flatpak app-id changed)
- linux/com.cakewallet.CakeWallet.desktop -> linux/com.suchsoftware.HashWallet.desktop
- scripts/{macos,windows,linux}/cakewallet.sh -> hashwallet.sh
- scripts/linux/build_cake_release.sh -> build_hash_release.sh (output is hash_wallet.flatpak)
- README + docs/builds/{WINDOWS,LINUX}.md cross-refs updated

The Flutter binary name 'cake_wallet' is intentionally retained — renaming
the Dart project name would force ~all 'package:cake_wallet/...' imports
to be rewritten and break upstream cherry-picks.
2026-05-14 08:35:01 -04:00
jwinterm 7740cb0559 Continue Cake Wallet rebrand: legal, FAQ, and package metadata
- LICENSE.md: add Such Software LLC copyright alongside Cake Labs (MIT
  attribution preserved)
- PRIVACY.md: replace Cake Labs' policy with a Hash Wallet placeholder
  pending the full policy
- env.json: Windows app name + package id for Hash Wallet
- assets/faq/faq_*.json (13 locales): rebrand "Cake Wallet" -> "Hash Wallet"
- cw_*/pubspec.yaml: author -> Hash Wallet, homepage -> Such-Software repo
2026-05-14 08:26:07 -04:00
jwinterm a49c637d97 Rebrand Cake Wallet to Hash Wallet across all 30 locale ARBs 2026-05-14 08:19:19 -04:00
jwinterm 625022fdbb Initial Hash Wallet rebrand from Cake Wallet fork
- Re-enable Wownero and remove the wallet-deprecation popup
- Disable Solana, Tron, Zano, Zcash, Decred across all platform configs
- Trim swap providers to Trocador-only (its aggregator already covers
  ChangeNow, FixedFloat, LetsExchange, Exolix, StealthEx, Quantex, +16 more)
- Bundle ID com.suchsoftware.hashwallet, display name "Hash Wallet",
  URL scheme "hashwallet"; Android Java package moved
- iOS plist + macOS xcconfig + Windows bat updated
- About page and English strings rebranded; new README
- Cake Pay verified hidden via existing FeatureFlag.isCakePayEnabled = false
2026-05-14 08:04:08 -04:00
Omar 491a692cd6 Ignore flutter errors with no stack [skip ci] 2026-05-12 21:38:21 +02:00
SerhiiandGitHub 2c245040c0 fix cakepay number textfield (#3221) 2026-05-08 21:37:01 +02:00
SerhiiandGitHub 758cb8d8e5 restore swaps xyz tx registration (#3205) 2026-05-08 20:30:34 +02:00
malik1004xandGitHub 2645ae05ed fix evm combined balance for local separators (#3206) 2026-05-08 20:30:21 +02:00
Anton SchmidtandGitHub b142c34f0f fix: Windows file save dialog appearing behind app window (#3214)
Add lockParentWindow: true to all FilePicker.platform.saveFile() calls
so the Win32 save dialog gets the Flutter window as its owner and appears
in front of the application instead of behind it.

Also handle null result (user cancellation) gracefully instead of
force-unwrapping, which would throw an unhandled exception.

Fixes cake-tech/cake_wallet#3107
2026-05-07 04:44:46 +02:00