The executeMetaTransaction function in the NativeMetaTransaction contract handles relaying transactions. It accepts the user address, function signature, and signature details, verifies the signature, increases the user’s nonce to prevent reuse, and then executes the function signature on the contract’s behalf.
The relevant code is as follows:
This line attempts to forward msg.value
(Ether) to address(this)
, implying that Ether might be sent to the contract. However, the contract does not implement a receive or fallback function to handle incoming Ether. Without one of these functions, any transaction with attached Ether will revert, causing executeMetaTransaction
to fail.
Since the contract lacks a receive or fallback function, any attempt to send Ether will cause a revert.
Any attempt to call executeMetaTransaction with Ether attached will fail, resulting in a revert.
Manual Review
Since the contract is intended to accept Ether, add a receive()
function to handle incoming Ether:
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.