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 40s
All checks were successful
check / check (push) Successful in 40s
Populating the transaction in the background before the approval window opens is what makes the displayed object the verified object. It also fixes the nonce before the user has answered anything, so two eth_sendTransaction calls populated concurrently took the same nonce from a node that had seen neither of them broadcast, and the second could never be sent: its approved nonce is spent, and the only way to give it a fresh one is to populate it again after the user has read the old one off the screen. A second transaction approval is now refused while one is unanswered, with EIP-1193 code -32002. The refusal happens before anything is populated — no second nonce is allocated, no window opens — and the slot is released when the requesting page has its answer. Signature approvals are not gated; a signature consumes no nonce. A collision that does happen is now reported for what it is. A broadcast the node refused for the nonce, and an approval carrying a nonce this worker has already broadcast (caught before the node is asked at all), both report that the transaction did not reach the network and to send it again, instead of the standing broadcast wording that warns it may have sent. "already known" keeps that ambiguous wording deliberately: a node that says it has the transaction has it. Nothing about verification is weakened. The approval still carries the transaction the screen displayed, and the artifact is still compared against that object field for field.
This commit is contained in:
@@ -1163,7 +1163,11 @@ on ConfirmTx, DeleteWallet, ApproveTx and ApproveSign.
|
||||
opening the window, so the screen shows a complete transaction and the signed
|
||||
artifact can be compared with it field for field. A request that cannot be
|
||||
populated — unreachable node, reverting gas estimate — opens no window and is
|
||||
failed back to the site.
|
||||
failed back to the site. Only one transaction approval exists at a time:
|
||||
populating fixes the nonce, so a second `eth_sendTransaction` arriving while
|
||||
one is unanswered is refused with EIP-1193 code `-32002` rather than being
|
||||
populated at the same nonce. It opens no window and takes no nonce, and the
|
||||
site can send it again once the pending one is answered.
|
||||
- **Elements**:
|
||||
- "Transaction Request" heading
|
||||
- Phishing warning banner (shown when the hostname is on the phishing
|
||||
|
||||
Reference in New Issue
Block a user