fix: one transaction history row per value movement (closes #177)
All checks were successful
check / check (push) Successful in 25s
All checks were successful
check / check (push) Successful in 25s
A plain ERC-20 transfer produced two rows: the token-transfer row and the zero-ETH native row for the same hash. parseTx leaves method "transfer" out of the display-level contract-call case, so the merge loop's direction === "contract" test never absorbed the native side. The merge is now the pure mergeTransactions(txs, tokenTransfers) in src/shared/transactions.js, unit tested directly. It keys the native entry by hash and each token transfer by hash plus token contract, and drops the native entry when it moved no ETH and a token transfer shares its hash. A native entry that moved ETH survives beside the token rows, a zero-value native transaction with no token transfer on its hash still displays, and a display-level contract call keeps consolidating its legs into one row. The dust filter's isContractCall exemption is unchanged: it still carries approve and other zero-ETH calls that have no token row to be represented by.
This commit is contained in:
4
TODO.md
4
TODO.md
@@ -44,6 +44,10 @@ undefined identifiers, which is how
|
||||
|
||||
# Completed Steps
|
||||
|
||||
- 2026-08-11: One row per on-chain value movement in transaction history: the
|
||||
merge moved into the pure `mergeTransactions` and the zero-ETH native side of
|
||||
a plain ERC-20 transfer absorbed into its token row
|
||||
([#177](https://git.eeqj.de/sneak/AutistMask/issues/177)).
|
||||
- 2026-08-11: `TODO.md` Workflow rewritten to the branch-and-PR-per-issue model
|
||||
on `next`, with Status and Next Step refreshed
|
||||
([#191](https://git.eeqj.de/sneak/AutistMask/issues/191)).
|
||||
|
||||
Reference in New Issue
Block a user