Safe Multisig Transaction No Longer Wanted? How to Truly Cancel It

 / 
2

In Safe multisig, clicking "Delete" or "Reject" does not mean the transaction is truly cancelled. Safe's official documentation makes this very clear: removing a transaction from the queue is only an off-chain action. The transaction data and existing signatures remain valid, and anyone who gathers enough signatures can still execute it. The only reliable way to make an unwanted transaction invalid is to consume its nonce on-chain — initiate an "empty" transaction with the same nonce, collect enough signatures, execute it, and use up that nonce. Once the nonce is consumed, the original transaction can never be executed on-chain.

OKX Exchange
A leading global cryptocurrency platform,suitable for both beginners and experienced traders.
New user benefit: 20% off trading fees upon registration!!

Why "Delete" and "Reject" Are Not Enough

Once a Safe signature is generated, it cannot be cryptographically "taken back." When you click reject in the interface, you are only recording your intention to reject in Safe's backend service. The transaction itself is not destroyed. If the transaction has already collected some signatures, anyone holding that signature data — whether another signer or an external party who has had access to the transaction data — can add the missing signatures and execute it.

A concrete dangerous scenario: in a 2/2 Safe, you initiate a transaction, sign it, and then delete it from the queue. If your co-signer copied the transaction data and your signature before you deleted it, they can still add their own signature and execute it. If the transaction has already collected all required signatures, the risk is even greater: the transaction queue is public, and anyone who obtains the fully signed transaction data can execute it directly.

That is why Safe's official documentation includes a warning next to the delete function, clearly recommending: for transactions that already have signatures, do not rely on deletion. Use replacement or cancellation instead.

The Real Way to Cancel: Consume the Nonce with a Same-Nonce Transaction

Every Safe transaction has a nonce. Nonces increase strictly in order, and each nonce can only be consumed once. Once a nonce is used by an executed transaction, all other transactions using the same nonce become permanently invalid.

The feature in the Safe interface is called "Reject transaction". What it actually does is not "undo" — it initiates a new, empty transaction using the same nonce as the rejected transaction. The destination of this empty transaction is usually the Safe's own address, with a transfer amount of 0 and empty data. Its only job is to be executed on-chain and consume that nonce.

Specific steps:

  1. In the pending transaction list, expand the transaction you no longer want to execute and click the Reject button.

  2. Sign this "rejection transaction" with your connected wallet. The signature itself is off-chain and does not cost gas.

  3. This rejection transaction will appear in the transaction list, using the same nonce as the original rejected transaction. It requires the same number of signatures as any other Safe transaction to be executed.

  4. Other signers go to the details page of this rejection transaction and click Confirm.

  5. Once the required signatures are collected, click Execute. This step requires paying gas because it is a real on-chain transaction.

  6. After successful execution, the original nonce is consumed, and the unwanted transaction becomes permanently invalid.

The key point is: before the rejection transaction is executed on-chain, the original transaction is still valid and can still be executed by others. So if the transaction is already close to the signature threshold, you should push the rejection transaction to be executed on-chain as soon as possible, rather than leaving it in the queue.

Transactions Without Signatures: Deletion Is Enough

If the unwanted transaction has not yet been signed by any Safe signer (only the proposer has signed, or no one has signed at all), the situation is much simpler. The proposer can simply delete it from the interface. There is no need to go through the on-chain nonce consumption process. This is because there are no valid Safe signatures that others can exploit, and after deletion, the transaction cannot gather enough signatures to be executed.

The judgment standard is simple: open the transaction details and check whether the signature list contains signatures from Safe owners other than the proposer. If yes, use "Reject transaction" to consume the nonce on-chain. If no, simply delete it.

Completion Criteria

The true sign of cancellation is not that the original transaction disappears from the interface, but that the rejection transaction is successfully executed on-chain and the original nonce is consumed. You can look up the rejection transaction's hash on a block explorer and see its status as successful. Returning to the Safe queue, the unwanted transaction will show as replaced or no longer executable.

If you have only clicked delete or reject but the rejection transaction has not yet been executed on-chain, the original transaction is still in an "executable" state. Do not consider it safe until the rejection transaction is confirmed and executed on-chain.

OKX Exchange
A leading global cryptocurrency platform,suitable for both beginners and experienced traders.
New user benefit: 20% off trading fees upon registration!!

References

  1. Safe Help Documentation "Reject and delete transactions" https://help.safe.global/en/articles/40817-reject-and-delete-transactions
  2. Safe Help Documentation "Why do I need to pay for cancelling a transaction" https://help.safe.global/articles/4016097317-why-do-i-need-to-pay-for-cancelling-a-transaction
  3. GitHub Documentation "SECURE_TRANSACTION_CANCELLATION.md" https://raw.githubusercontent.com/hadv/vito-interface/refs/heads/feature/safe-message-signing-client/SECURE_TRANSACTION_CANCELLATION.md#1
  4. GitHub Commit Record https://github.com/hadv/vito-interface/commit/a06be81f1cd289a867897893c0e8b14267753879#1
  5. Mirador Blog "Safe transaction stuck" https://mirador.org/blog/safe-transaction-stuck