#43221 [BC-Insight] Expired transactions prevent new submissions due to delayed garbage collection
Submitted on Apr 3rd 2025 at 19:46:19 UTC by @KlosMitSoss for Attackathon | Movement Labs
Report ID: #43221
Report Type: Blockchain/DLT
Report severity: Insight
Target: https://github.com/immunefi-team/attackathon-movement/tree/main/protocol-units/execution/maptos/opt-executor
Impacts:
Description
Brief/Intro
A transaction cannot be submitted when the mempool is full. This remains true even if there are expired transactions that could be garbage collected since the transaction is initially submitted before the garbage collection process occurs.
Vulnerability Details
The garbage collection functions are called only after submit_transaction()
is executed. Consequently, even when the mempool is full and contains expired transactions, the new transaction cannot be submitted.
As a result, the transaction must be resubmitted, despite the presence of expired transactions in the mempool. To address this issue, the garbage collection functions should be invoked at the start of the receive_transaction_tick()
function.
Impact Details
A transaction cannot be submitted even when there are expired transactions in the mempool. As a result, the transaction needs to be submitted again.
References
Code references are provided throughout the report
Proof of Concept
Proof of Concept
The mempool is full but there is at least one transaction that could be garbage collected.
The transaction cannot be submitted since the mempool is full and
gc()
is only called after the call tosubmit_transaction()
(https://github.com/immunefi-team/attackathon-movement/blob/a2790c6ac17b7cf02a69aea172c2b38d2be8ce00/protocol-units/execution/maptos/opt-executor/src/background/transaction_pipe.rs#L140-L161).The function needs to be called again to submit the transaction.
Was this helpful?