The MultiSigWallet allows owners to submit transactions, approve them, and execute them. However, once an owner approves a transaction, there is no way to revoke that approval. If a transaction is approved by both owners but cannot be executed (e.g., due to insufficient balance or the recipient being a contract that reverts), the transaction is stuck forever in an approved-but-unexecuted state.
Additionally, there is no way to cancel a transaction. The transactions array only grows, and each entry can only be marked executed = true through successful execution. This means:
A malicious owner can spam low-value or impossible transactions, polluting the array.
There's no nonce or expiry mechanism — old transactions remain valid indefinitely.
If user relationships sour (likely in a dating context), one owner can refuse to cooperate, permanently locking funds.
Likelihood:
In a dating application context, matched users becoming adversarial after a failed relationship is a realistic and expected scenario.
Impact:
Funds in the MultiSig wallet can be permanently locked if one owner becomes uncooperative.
No emergency recovery mechanism exists.
This test deploys a MultiSig with 2 ETH and has Alice submit and approve a valid 1 ETH transaction. Bob simply never approves. Alice has no mechanism to cancel, revoke, or withdraw — her funds are permanently locked unless Bob cooperates.
Add functions to revoke approvals and cancel transactions. Consider adding a time-lock mechanism where, if one party is unresponsive for an extended period, the other party can withdraw their portion.
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.