MultiSig Timelock

First Flight #55
Beginner FriendlyWallet
100 EXP
View results
Submission Details
Impact: low
Likelihood: medium
Invalid

No Graceful Handling of Permanently Failing Transactions

Root + Impact

Description

  • Transactions should either execute or be cancelable.

  • If a transaction always reverts (bad calldata, incompatible target, logic change), it becomes stuck forever.

    // 4. Execute the transaction
    (bool success,) = payable(txn.to).call{value: txn.value}(txn.data);
    if (!success) {
    revert MultiSigTimelock__ExecutionFailed();
    }

Risk

Likelihood:

  • Happens when contract code at txn.to changes

  • Happens with malformed calldata

Impact:

  • ETH locked indefinitely

  • Operational deadlock

Proof of Concept

// txn.to is a contract that always reverts
// executeTransaction() can never succeed

Recommended Mitigation

Introduce transaction cancellation or failure state.

+ + enum TxStatus { Pending, Executed, Failed }
+ txn.status = TxStatus.Failed;
Updates

Lead Judging Commences

kelechikizito Lead Judge 4 days ago
Submission Judgement Published
Invalidated
Reason: Lack of quality

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.

Give us feedback!