fix: one transaction approval at a time, and honest copy for a nonce collision (closes #271)
All checks were successful
check / check (push) Successful in 28s
All checks were successful
check / check (push) Successful in 28s
This commit was merged in pull request #284.
This commit is contained in:
25
TODO.md
25
TODO.md
@@ -70,6 +70,31 @@ undefined identifiers, which is how
|
||||
stubbed RPC and the unobservable toolbar popup — were checked against the
|
||||
current `src/content/inpage.js` and `tests/e2e/` and left as they are
|
||||
([#285](https://git.eeqj.de/sneak/AutistMask/issues/285)).
|
||||
- 2026-08-17: One transaction approval at a time. Populating in the background
|
||||
before the window opens is what makes the displayed object the verified
|
||||
object, and it also fixes the nonce: two `eth_sendTransaction` calls populated
|
||||
concurrently took the same nonce from a node that had seen neither broadcast,
|
||||
and the second could then never be sent, because the only way to give it a
|
||||
fresh nonce is to populate it again after the user has read the old one off
|
||||
the screen. A second request is now refused with EIP-1193 `-32002` while one
|
||||
is unanswered — the slot is taken immediately before population, after the
|
||||
authorization checks, so no second nonce is allocated, no second window opens,
|
||||
and a page the wallet refuses anyway cannot hold the slot against the
|
||||
connected site. The slot is freed at `settleApproval()`, the single point an
|
||||
approval is retired, so every path that ends an approval ends the hold with
|
||||
it; an approval whose window is gone and whose attempt has failed is settled
|
||||
there rather than left waiting on a window that no longer exists, and an
|
||||
approval window that could not be opened at all is answered with `-32603`
|
||||
instead of holding the page's promise open. Signature approvals are not gated,
|
||||
consuming no nonce. A collision that does happen is also reported accurately
|
||||
now: a broadcast the node refused for the nonce, and an approval carrying a
|
||||
nonce this worker has already broadcast for that address on that chain (caught
|
||||
before the node is asked at all), both say the transaction did not reach the
|
||||
network and to send it again, instead of warning that it may have sent. The
|
||||
record is keyed by chain as well as address, because nonce spaces are per
|
||||
chain and low nonces overlap across them. `already known` deliberately keeps
|
||||
the ambiguous wording, because a node that says it has the transaction has it
|
||||
([#271](https://git.eeqj.de/sneak/AutistMask/issues/271)).
|
||||
- 2026-08-14: The parts of the
|
||||
[#150](https://git.eeqj.de/sneak/AutistMask/issues/150) and
|
||||
[#151](https://git.eeqj.de/sneak/AutistMask/issues/151) definition of done the
|
||||
|
||||
Reference in New Issue
Block a user