I'm creating a DApp platform which allows customers to send and receive USDT (ERC-20 Token). The problem I have is that if customer want to send some Tethers out, he should have enough ETH too as the gas, while he might did not receive any ETH on his account.
I have 3 different ideas about this.

  1. Charge the customer's ETH by myself, and send USDT directly from his account.
  2. Move customer's USDT to my account (in someway without transaction fee), and send the desired USDT to final recipient using the ETH provided in my own account.
  3. Send USDT from customer's account, but using my own account to provide the fee for transaction instead of using customer's one.

For some reasons, I need to implement the way 2 or 3, but I don't know how? Are they practical at all? If so, how can I do them?

  • As USDT is not my own contract, I think the solution 1 is suitable when I have access to modify it. This is the same for solution 2 in my mind. Am I wrong? – Mohammad Saberi Apr 8 '20 at 7:10

There has to be special support for this in token contract and wallet themselves. There are a couple of ongoing efforts in this space.

Modify your dApp so that the receiver pays the gas, see Gas Station Network. A special wallet support is required.

Not applicable to you, but an example from MakerDAO contract to have somebody else to send a presigned transaction.

In your case, it sounds like you could build a special "wallet" smart contract that receives the USDT tokens through approve() and transferFrom() (two transactions), keeps internal accounting and the withdraw is a special function that you as a wallet owner trigger and pay the gas.

  • Alternatively. you first swap USDT to another stable coint that has this functionality, like DAI. – Mikko Ohtamaa Apr 8 '20 at 8:26

Not the answer you're looking for? Browse other questions tagged or ask your own question.