MorpheusAI

MorpheusAI
Foundry
22,500 USDC
View results
Submission Details
Severity: low
Invalid

``retryMessage()`` of L2MessageReceiver.sol should implement a try-catch block.

Summary

retryMessage() of L2MessageReceiver.sol should implement a try-catch block.

Vulnerability Details

The retryMessage() of L2MessageReceiver.sol is used to retry messages which are failed in _blockingLzReceive(). But retry is only possible once as retryMessage() deletes the failedMessages data mapping even if retry message fails.

./L2MessageReceiver.sol#Line64
delete failedMessages[senderChainId_][senderAndReceiverAddresses_][nonce_];

Impact

User should be able to retry message for as many times as possible. Also, retry message may fail due to some technical or external issues.

Tools Used

Manual Analysis

Recommendations

Implement try-catch block in retryMessage().

function retryMessage(
uint16 senderChainId_,
bytes memory senderAndReceiverAddresses_,
uint64 nonce_,
bytes memory payload_
) external {
bytes32 payloadHash_ = failedMessages[senderChainId_][senderAndReceiverAddresses_][nonce_];
require(payloadHash_ != bytes32(0), "L2MR: no stored message");
require(keccak256(payload_) == payloadHash_, "L2MR: invalid payload");
try IL2MessageReceiver(address(this)).nonblockingLzReceive(
senderChainId_, senderAndReceiverAddresses_, payload_
) {
delete failedMessages[senderChainId_][senderAndReceiverAddresses_][nonce_];
emit RetryMessageSuccess(senderChainId_, senderAndReceiverAddresses_, nonce_, payload_);
} catch {
emit RetryMessageFailure(senderChainId_, senderAndReceiverAddresses_, nonce_, payload_);
}
}
Updates

Lead Judging Commences

inallhonesty Lead Judge
over 1 year ago
inallhonesty Lead Judge over 1 year ago
Submission Judgement Published
Invalidated
Reason: Incorrect statement

Support

FAQs

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