Make sure your contracts are not affected by the recently disclosed vulnerability
delegatecall()
preserves the caller’s context.
delegatecall()
to its own address (address(this).delegatecall(...)
), the Trusted Forwarder check will always pass, as msg.sender will consistently be the Gelato Relay Contract.In scenarios where the target method modifies the calldata, it becomes uncertain whether the last 20 bytes accurately represent the original user when _msgSender() is invoked.🚨 If you’re implementing delegatecall() in conjunction with ERC-2771, please reach out to us for assistance. We’ll help ensure that your implementation is robust and secure.