Tokens – When is an ERC-20 Token Transfer Considered Confirmed?

erc-20eventstokens

I'm wondering when you should consider that a transfer of ERC-20 tokens is confirmed. At the beginning I thought that just making sure the transaction calling transfer is confirmed successfully was enough, but then I started to think that maybe I should wait for the Transfer event instead.

I've seen that most tokens out there just emit the Transfer event right there inside of the transfer function. However let's suppose the following contract:

  • User A calls the transfer function to transfer tokens to address B
  • The transfer function sends an event to ask for validation of user B
  • The transfer function will be completed at this point, but tokens haven't been transferred yet and the Transfer event is not triggered either
  • Someone validates user B and calls another function in the contract that completes the initial transaction (tokens are moved)
  • The Transfer event is triggered now, indicating that the transfer has been completed

In this case, the correct thing to do would be to wait for the Transfer event to confirm a transaction of tokens, because just waiting for the confirmation of the transaction calling the transfer function is not enough.

However I'm not sure if that's what ERC-20 specification says and what most tools that work with ERC-20 tokens expect. So my questions is if it is fine to create a token where the confirmation of the transfer is done when the Transfer event is triggered instead of when the transaction to call transfer is confirmed.

Best Answer

The transaction that calls transfer and the Transfer event happen at the same time. Transactions are atomic, meaning things that happen in it happen, from an external application's context, at once or not at all. So you can either listen for the event or for the transaction's confirmation, it's up to you.

Related Topic