OpenZeppelin/workshops

got "Error: call revert exception (method="getNonce(address)...." error when running "yarn sign" script

said017 opened this issue · 3 comments

Hi, I wonder why i got this error

Error: call revert exception (method="getNonce(address)", errorSignature=null, errorArgs=[null], reason=null, code=CALL_EXCEPTION, version=abi/5.0.12)
    at Logger.makeError (D:\react-next-js\gasless\workshops\25-defender-metatx-api\node_modules\@ethersproject\logger\src.ts\index.ts:205:28)
    at Logger.throwError (D:\react-next-js\gasless\workshops\25-defender-metatx-api\node_modules\@ethersproject\logger\src.ts\index.ts:217:20)
    at Interface.decodeFunctionResult (D:\react-next-js\gasless\workshops\25-defender-metatx-api\node_modules\@ethersproject\abi\src.ts\interface.ts:326:23)
    at Contract.<anonymous> (D:\react-next-js\gasless\workshops\25-defender-metatx-api\node_modules\@ethersproject\contracts\src.ts\index.ts:309:44)
    at step (D:\react-next-js\gasless\workshops\25-defender-metatx-api\node_modules\@ethersproject\contracts\lib\index.js:46:23)
    at Object.next (D:\react-next-js\gasless\workshops\25-defender-metatx-api\node_modules\@ethersproject\contracts\lib\index.js:27:53)
    at fulfilled (D:\react-next-js\gasless\workshops\25-defender-metatx-api\node_modules\@ethersproject\contracts\lib\index.js:18:58)

Notes: I already make sure that Forwarder and Registry contract are deployed in Goerli and I call the contract with the deployed address (never run & test in local node for this project) so different network problem im pretty sure is eliminated.

It seems this function call is the cause of the error :

async function buildRequest(forwarder, input) {
  // console.log("go here?");
  // console.log(forwarder.address);
  // console.log(input.from);
  const nonce = await forwarder
    .getNonce(input.from)
    .then((nonce) => nonce.toString());
  return { value: 0, gas: 1e6, nonce, ...input };
}

Thanks before

for anyone having the same problem, I solved it by changing this line :

const request = await signMetaTxRequest(signer.provider, forwarder, { to, from, data });

to this line

  const request = await signMetaTxRequest(
    signer.provider,
    forwarder.connect(signer),
    {
      to,
      from,
      data,
    }
  );

What should i do in sign.js class i wrote your solution but it wasn't working

It worked for me and transactions pass successfully but nothing appears in the las registrations list ...