I have a forwarder contract that calls a function (joinChallenge) on behalf of a user(gasless).

User successfully signs permit request.

I'm getting a revert on the execute call for forwarder.execute.

Can someone tell me why it's failling ?

This is the main contract the forwarder calls it's joinChallenge function. And this is the ERC20Permit contract the main contract calls transferFrom. Contract is verified.


1 Answer 1


The Tenderly debugger for the transaction shows that it's because the incorrect amount was sent with the call.

Screenshot of execution trace resulting in a revert.

For accessibility, here is the code from the screenshot (a redundant comment is left out for brevity):

function execute(ForwardRequestData calldata request) public payable virtual {
    if (msg.value != request.value) {
        revert ERC2771ForwarderMismatchedValue(request.value, msg.value);
  • 1
    waaw! Thanks alot for sharing the tenderly debugger! Looks super useful. Gonna debug this and mark as solution
    – Ibra
    Feb 5 at 14:25

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.