Watch-only accounts with offline signing #26
No reviewers
Labels
No labels
accessibility
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
backmeupplz/plainwallet!26
Loading…
Reference in a new issue
No description provided.
Delete branch "offline-signing"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #20.
What
{"plainwallet":"sign","from":…,"transaction"|"message"|"typedData":…}; transactions are the standard unsigned encoding with nonce and fees fixed). Copy it, or save it to a file in the browser extensions. Then paste or load what the other device signed.eth_sendTransaction,personal_signandeth_signTypedData_v4all work. The approval window turns into the export/paste screen, and the site gets the hash or signature.storage.local.offline) and listed under Waiting for a signature (N) on the home screen until broadcast or discarded. Messages aren't kept, since only the waiting site could use them.Security notes (please review)
from, or, for messages, verifies asfrom's signature of exactly that message or typed data. The popup checks it for inline errors; for dapps the background checks it again before broadcasting or returning it.SIGNEDwould invalidate every existing MAC. On Firefox a website process could edit that list, but a broadcast still needs the other device's signature over exactly that entry. This is documented in Known gaps.ponytail:note): exporting a second transaction before broadcasting the first reuses the nonce, so the second fails to broadcast.Checks
npm test(newtest-offline.js: tx round-trips for legacy/1559/deploy; wrong signer, changed nonce or chain, unsigned, junk, 7702 and no-chain-id all refused; message and typed-data verification; account-dialog watch group and removal),tsc --noEmit,npm run build,wxt build -b firefox --mv3,npm run build:android.personal_sign,eth_signTypedData_v4(both signatures recover to the account),eth_sendTransaction(mined, removed from the waiting list).🤖 Generated with Claude Code