Hey @Richard_Zhang, I found the issue: there are two copies of OpenZeppelin Contracts on the repo you shared.
The MinimalForwarder
being imported by the Registry
contract was the old-ish openzeppelin-solidity
, but that one defines is EIP712 domain separator using the domain name GSNv2 Forwarder
(see here) as opposed to MinimalForwarder
(as expected by the signer here). This was causing the verification step of the signature to fail.
This issue is carried over from the OpenZeppelin/workshops
repo, where I updated the 712 domain name in the script but failed to bump the Contracts library version in the deps to account for it. I've just pushed a fix, along with a new verify
script that will test the signature in the local tmp/request.json
against the deployed minimal forwarder.
Thanks for your help in locating this issue!