Your friend pays for your pizza and you want to pay her back using a Citizen Coin. You should be able to create a link that you can share with her (over any medium, including a QR code she can sign) that would automatically create a wallet for her.
Now she has a wallet with some coins, but she has no native coin to pay for transaction fees. So, she's stuck.
Privacy: Enabling ETH-less withdrawal of tokens sent to stealth addresses
Pay for gas in supported ERC-20 tokens: Allow users to pay for gas in ERC-20 tokens that support permit function
Pay for gas off-chain: Allow users to pay for gas indirectly via a L2 rollup or a credit card (in our case, using the transaction fees and demurrage fee)
Onboarding: Allow dapps to subsidize the onboarding process for new users
A GSN seems much more reliable as it is decentralized. It would be too easy to shut down a relay or to hold its owner responsible for the transactions happening through it. An alternative would be to create our own network of relays (and maybe all businesses / POS should act as relays?)
Use case:
A solution is to use a gas station network such as https://opengsn.org (v3 works on Polygon test net, not sure when it will work on prod, otherwise need to use v2.2) or a relay (e.g. https://docs.openzeppelin.com/defender/relay).
Example use cases for GSN:
(source: https://docs.opengsn.org/)
A GSN seems much more reliable as it is decentralized. It would be too easy to shut down a relay or to hold its owner responsible for the transactions happening through it. An alternative would be to create our own network of relays (and maybe all businesses / POS should act as relays?)
Next steps, dig into the doc of the last stable version of OpenGSN: https://docs-v2.opengsn.org