I'm building a cryptocurrency service which allows users to deposit and transfer ETH and ECR-20 based tokens (such as USDC and USDT). When a user deposits an ERC-20 token, the user must have sufficient ETH balance to pay for sweeping/transferring his ERC-20 based token balance to a central address.
I see two approaches to implement this concept.
One approach is to force the user to deposit enough ETH into his account in advance to cover the cost of transferring his ERC-20 tokens (such as USDC) to a hot/central wallet. If a user makes a ERC-20 deposit without sufficient ETH balance to cover gas costs to transfer those tokens to our central wallet, we can simply reject the deposit until his balance is filled. I believe most popular exchanges use this approach when a user tries to withdraw/send ERC-20 tokens to an external wallet.
The other approach is to charge the user a set deposit fee upfront (such as $10) for each ERC-20 token deposited and then transfer enough ETH to the user's account so we ensure that the balance is sufficient to cover the cost of the transfer. The benefit of this approach is that it makes it much easier for the users of our service as one can simply deposit any ERC-20 token without worrying about whether his ETH balance is sufficient to cover gas costs.
Of course the obvious downside is that it is much more complicated to implement. In fact, I'm not aware of a single exchange that uses this approach even though it would be significantly less work for their users (Although not the main point of this question - if someone knows of an exchange that uses the second approach I would be grateful if they can share)
What are some of the pros and cons of each approach? Are there any other points I need to take into consideration when choosing an approach to implement?