I have 2 wallets: wallet A and wallet B where wallet A holds some amount of an ERC20 token.
I would like to be able to transfer some of those ERC20 tokens from wallet A to wallet B in a way that wallet B pays all the gas fees.
I do not want to use the 'approve' function of the ERC20 contract since invoking the 'approve' function involves a gas payment by wallet A (imagin wallet A has 0 ETH, it only holds ERC20).
As I see it wallet A should sign a raw transaction of a smart contract call (calling the 'transfer' function of the ERC20 contract) and wallet B should broadcast it and therefore pay for the gas.
Does this make sense? If wallet B broadcasts transaction which is signed by wallet A, will the msg.sender (inside the contract's 'transfer' function) be recognized as wallet A who singed this transaction?
Assuming this is how it works, how do I create, sign and broadcast a smart contract call using Ethers (preferred with Node.js/Typescript)?