Making ERC721 Transfer Transaction without any gas by using GSN

Hi it's very first time to list a ticket to be supported.
I am curious with the point, if GSN supports the ERC721 token transfer.

Here's the specification.

  1. Alice has NFT#1 which is ERC721 standard - not customized.
  2. We have relayer smart contract.
  3. Alice is gonna send NFT#1 to through our relayer smart cotract without any gas to Bob.
  4. In this situation - Our smart contract is doing transferFrom(Alice, Bob, tokenId) as a code. But for doing this Alice has to approve Relayer address due to tokenID #1
  5. I think the other things could be gasless with meta-transaction but approve cannot be done with meta-transaction.

In this case Alice at least needs to pay for the gas for approve method so that Relayer smart contract can make transfer from Alice to Bob.

My goal is not paying gas on Alice side.

If you can tell me how to approach this point with GSN, that'd be great!

Thank you!
Have a nice day

First: Alice should NOT approve the relayer. If Alice does that, anyone could use the relayer to transfer Alice token, because Alice approved the relayer to do so.

When doing that kind of relayed meta-tx, you want to token contract to be "relayer-aware". This is done using EIP-2771.

This means that the token contract will have to use our ERC2771Context to override _msgSender. The token contract will also have to approve one trusted forwarder (relayer).
We have a forwarder demonstrator that we are working toward making production ready.

The bottom line is: the token contract must be designed for that. This is not something you can do with any contract.