Files
Jules 838d20c153 fix(wallet): recover from stuck transactions instead of breaking the session (#1316)
* fix(wallet): poll receipts on the node that took the broadcast

Chain 1 now proxies to the same `/alchemy` path `nodes.broadcastTransaction`
and `nodes.getNonce` use. A node that does not hold the transaction answers
receipt lookups with null forever.

* fix(wallet): only commit the nonce on a validated broadcast

The result was read unvalidated, so a broadcast that produced no transaction
still burned its nonce and gapped every later one. Failures now carry the
node's own reason instead of the status code.

* fix(wallet): reconcile the nonce down against an empty pool

Nothing lowered the local counter, so one dropped transaction left every
later one signed at a gapped nonce until the browser restarted. When the
node's pending and latest counts agree it holds nothing for the account, so
a counter above that is lowered once it has stayed ahead for 5 blocks.

* feat(wallet): detect and notify dropped transactions

A never-mined transaction kept its 30s alarm forever, since only receipt
`0x1` and `0x0` settled it. `eth_getTransactionByHash` is now the probe: a
null receipt means nothing on its own, but three consecutive polls where the
node has no record of the hash settle it as dropped. RPC failures do not
count towards that.

* fix(wallet): sync pending transactions from the background monitor

The page read the list once at mount and wrote its own copy back over the
monitor's removals, leaving settled transactions pending. It now watches the
key it shares with the monitor.

* fix(wallet): keep the earliest mark for a pending count

The post-send mark overwrote the block a held one carried, so every send
from the address restarted the 5-block window and the counter was never
lowered -- each retry only added another gapped transaction. `resolveNonce`
now reports when a mark for the pool count is already held.
2026-08-27 13:21:36 +00:00
..
2026-02-09 23:00:17 +01:00
2025-12-05 10:47:23 +09:00
2025-05-09 01:42:28 +09:00
2025-05-09 01:42:28 +09:00
2026-03-09 11:41:24 +00:00
2025-08-26 03:09:11 +09:00
2025-08-26 03:09:11 +09:00
2025-08-26 03:09:11 +09:00