mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-26 06:08:40 +01:00
046e57c5988433a30d60ec5ae0df1348cfedd31d
4
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
ef6879b617 |
fix(CW-1638): include transaction notes in history CSV export (#3623)
* fix(CW-1638): include transaction notes in history CSV export The `note` column of the transaction-history CSV export was always written as an empty string for transaction rows, so notes a user added to a transaction never appeared in the exported file. Index the `TransactionDescription` Hive box once per export and look each transaction's note up by the same keys the app writes them under (`<txHash>_<primaryAddress>`, falling back to the legacy bare `<txHash>`), then write it through the existing `escapeField` so multi-line notes and notes containing commas or quotes stay valid CSV. `CsvExportService` now takes the box, so it is resolved through `getIt` at both export entry points. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q5EdTdWZSvzbKKmd9MCEJh * perf(CW-1638): resolve the note-key address once per CSV export `_noteFor` read `balanceViewModel.wallet.walletAddresses.primaryAddress` once per transaction row. On Monero and Wownero that getter is not a field read: it calls `getAddress`, which issues an FFI `numSubaddresses` call plus four `ffiAddress` calls before its address cache is consulted. Since `buildCsvContent` runs on the main isolate, exporting a wallet with a long history meant thousands of synchronous FFI round-trips with no yield point. Every item in one export belongs to the same wallet, so the value is invariant across rows. Resolve it once in `buildCsvContent` and thread it through to `_noteFor`. An export holding no transaction rows now skips the read entirely. No change to the exported output. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q5EdTdWZSvzbKKmd9MCEJh * fix(CW-1638): neutralise spreadsheet formulas in CSV export The note column this PR adds is fed by TransactionDescription.transactionNote, which is not always authored by the user: a scanned bitcoin: URI carries tx_description / message straight through payment_request.dart into Output.note, and an address-resolution result writes Output.note too. Both are folded into the note persisted by SendViewModel. escapeField only quoted for , " and \n, so a note beginning with = + - @ TAB or CR reached the cell untouched and Excel / LibreOffice / Sheets evaluate it as a formula (=IMPORTDATA to exfiltrate a neighbouring cell, =HYPERLINK for phishing anchor text, =cmd|… for DDE). trade.memo and the provider-supplied trade/order strings had the same exposure already. Neutralise inside escapeField rather than at the two call sites so every column is covered and a future free-text column cannot forget it. Values starting with a trigger are prefixed with an apostrophe, the spreadsheet text marker, guarded by a plain-number test so negative amounts are left alone — formatFixed really can emit a leading '-'. Also quote on a bare \r, which previously passed through unquoted and splits rows in many CSV parsers. Tests cover the escaping rules, the neutralisation, a row built end to end, and the note column itself, including the two lookup keys and the payment-request injection path. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * perf(CW-1638): bound the CSV note lookup to the exported rows Review feedback: the note index copied every entry in the shared transactionDescriptionBox, including notes belonging to other wallets, so its memory scaled with the box rather than with the export. Collect the keys the exported rows can ask for first — for each transaction row both `<txHash>_<primaryAddress>` and the bare `<txHash>` — then walk the box once and keep only matching notes. Lookups stay O(1) per row and first-wins/key-preference behaviour is unchanged; a box walk is skipped entirely when the export has no transaction rows. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q5EdTdWZSvzbKKmd9MCEJh * refactor(CW-1638): simplify the CSV note lookup to a plain scan Notes are written into the TransactionDescriptions box with `add` (send_view_model.dart:1257,1263 and transaction_details_view_model.dart:299), so entries carry auto-incrementing integer keys and `box.get(descriptionKey)` cannot find them. Drop the prebuilt lookup map and the wanted-key set in favour of a per-row scan that mirrors the app's own read path in `TransactionDetailsViewModel.note`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q5EdTdWZSvzbKKmd9MCEJh * docs(CW-1638): drop the explanatory comments from the CSV note lookup [skip ci] Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q5EdTdWZSvzbKKmd9MCEJh --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Omar <omarh.ismail1@gmail.com> |
||
|
|
16ddc0837a | Reformat the whole codebase with 100 line width (#3403) | ||
|
|
75f3fe735b |
Introduce Money class and refactor currency handling (#3157)
* feat: add `Money` class for precise currency handling and amount parsing - Introduced `Money` class for handling money values with fixed-point precision. - Added parsing and comparison methods to `CryptoCurrency` and `FiatCurrency` interfaces. - Implemented `smartAmountSanitizer` for format normalization. Includes extensive unit tests for validation. * refactor: optimize Money class with new factories and string formatting improvements * refactor: unify balance handling with `Money` refactor * refactor: update `ElectrumBalance` and transaction logic to use `Money` for currency precision * refactor: standardize balance handling with `Money` across `Monero`, `Wownero`, and `Zano` wallets * refactor: migrate EVM balance and transaction handling to `Money` for consistent currency precision * refactor: migrate Decred balance and transaction handling to `Money` for consistent currency precision * refactor: migrate nano balance and transaction handling to `Money` for consistent currency precision * refactor: migrate Solana balance and transaction logic to `Money` for precise currency handling * refactor: migrate Tron balance and transaction handling to `Money` for consistent currency precision * refactor: migrate Zcash balance and transaction handling to `Money` for consistent currency precision * refactor: adjust lib to handle money * refactor: remove legacy Decred amount formatting and migrate to `Money` * refactor: migrate pending transaction amount and fee to `Money` * refactor: migrate dEuro savings and transaction logic to `Money` for improved precision and consistency * refactor: migrate Bitcoin and lightning transaction logic to `Money` for consistent currency precision * refactor: migrate Wownero, EVM, Zano, and Zcash transaction logic to `Money` for consistent and precise currency handling * refactor: standardize balance handling across wallets, migrate to `Money.zero` and refine `Balance` class for consistency * refactor: migrate Solana transaction and wallet logic to `Money` for consistent and precise currency handling * refactor: improve fiat balance and formatting for consistency on dashboard * fix: fiat input mode switching and standardize crypto amount display logic * fix: cw_evm generator * refactor: migrate exchange amount handling to `Money` for improved precision and consistency * test: remove redundant and commented-out tests, tidy test cases, and apply minor formatting adjustments * fix using Money wrapper in BridgeViewModel and USDT0Service * refactor: streamline `AmountConverter` and `LightningWallet`, add `cw_core` tests to GitHub workflow, and remove unused/deprecated logic * refactor: enhance `changeReceiveAmount` with `isCanonical` support, improve null handling, and refine amount parsing logic * minor fix * try/catch the lightning log file error * feat: add copy-to-clipboard functionality for transaction amounts, fix typo in trailing widget method name (#3219) * Cw 1234 disallow sp and mweb addresses as refund for swaps (#3187) * disallow SP and MWEB for swaps * Simplify address selection in addressForExchange Refactor addressForExchange method to simplify address selection logic. * validate refund and receive address types * localize address validation messages * minor ui fix [skip ci] * minor fix [skip ci] * Revert "localize address validation messages" * fix translations --------- Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com> * refactor: replace manual amount sanitization with `sanitized()` extension across the codebase, add unit tests for `AmountSanitizer` * fix: correct `sanitized()` test expectations for decimal handling in `amount_sanitizer_test.dart` * refactor: fee display logic and append currency symbol in `send_confirm_sheet.dart` * refactor: simplify `ZcashBalance` class by replacing custom fields with inherited properties, update references accordingly * refactor: replace hardcoded USDT contract address with `DefaultTronTokens` lookup, improve maintainability * refactor: replace `currency` with `inputAmount.currency` in Solana transaction signing methods to avoid inconsistency * fix: handle null `fee` in `electrum_transaction_info.dart` to prevent potential runtime errors * refactor: replace raw fee and amount handling with `Money` object for improved consistency and maintainability * fix: limit fiat balance display to 2 decimal places in `balance_view_model.dart` * refactor: replace raw `amount` and `fee` types with `Money` in Solana transaction methods for consistency and precision * refactor: replace raw `amount` and `fee` handling with `Money` and improve balance calculation consistency across view models * refactor: replace raw balance strings with `Money` and simplify `UnconfirmedBalanceModal` widget logic * refactor: replace `print` with `printV` for better logging, add equality and hashCode overrides to `ERC20Currency` for object comparison * feat: prepare deuro savings migration * feat: add V1 savings migration support and improve formatting consistency in DEuro view model * feat: add V1 savings withdrawal support and update associated UI components and logic * refactor: replace `Image.asset` with `CakeImageWidget`, update balance string handling, and streamline address validation logic * refactor: use `Money.tryParse` with fallback to `Money.zero` in `NanoBalance.fromRawString` for safer balance parsing * refactor: replace `ERC20Currency` with `Erc20Token` for consistency and remove unused `evm_erc20_currency.dart` file * refactor: add computed `hasDepositAmount` for deposit null-checks, optimize balance handling in `zano_wallet`, update Breez SDK to v0.14.0, and implement equality/hashCode for `Currency` * refactor: rename `amountSats` to `amount` in `PrepareLnurlPayRequest` for consistency * revert: downgrade Breez SDK to v0.11.0 in `pubspec.yaml` and update relevant references in `pubspec.lock` * fix: use `cryptoAmount.copyWith` for currency consistency and replace `Image.asset` with `CakeImageWidget` in swap address modal * fix: ensure currency consistency by using `cryptoAmount.copyWith` in Solana and EVM wallet transactions * refactor: simplify CSV row generation logic by removing `_splitAmountCurrency` and streamlining amount/fee handling * fix: LateInitializationError Field 'sdk' has not been initialized * fix: use `Money.tryParse` for safer parsing of deposit and receive amounts * chore: remove debug print statement * refactor: update transaction processing to consistently use `Money` for amounts and fees * refactor: improve currency and amount handling, simplify logic, and enhance code readability in Send and Swap pages * refactor: integrate `DecimalInputFormatter` for consistent decimal input across Send and Swap pages, simplify input handling logic * fix: "fiatMode" per output on sendPage * refactor: make transaction_details_height applicable more readable * fix: use correct base unit for deposit * refactor: use Money in estimateFakeSendAllTxAmount method * fix decred frozen balance minor fixes * fix decred frozen balance minor fixes * fix: automatically switch to lightning if lnurl or invoice detected * fix: getBolt11Amount test cases * fix: standardise crypto amount formatting and display * fix: use base unit for Tron transaction fee parsing * refactor: hardcode fractional digits to 8 in `AmountParsingProxy` display methods * refactor: ensure consistent 8-decimal precision for fee formatting in `PendingTransaction` * fix: use `AmountParsingProxy` for available balance display in exchange view model * fix: improve amount formatting and layout in swap and send confirmation sheets * chore: remove redundant decimal truncation in balance view model and send confirmation sheet * fix: allow for editing text field if it is filled with "ALL" * fix: allow for editing text field if it is filled with "ALL" * fix: update currency detection logic for lightning mode * avoid potential infinite loop [skip ci] * fix: getDisplayCryptoAmount * fix: update estimated fee calculation * chore: simplify fee calculation logic [skip-ci] * fix value display in hidden mode * fix stale state in send confirm sheet * fix decimals for mweb * fix available balance display for sol/trx on swap * restore proper hint text * fix swap receive amount calculation for xno --------- Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com> Co-authored-by: Serhii <17529954+serhii-bor@users.noreply.github.com> Co-authored-by: Robert Malikowski <malikowskirobert@gmail.com> |
||
|
|
4125c5fe80 |
Allow Exporting transaction history to a CSV file (#3230)
* Allow Exporting transaction history to a CSV file * fix: improve safety for share dialog bounds and navigation pop |