In this track: Digital value and units
Native transfers versus token transfers
Sending ETH and asking a token contract to update balances use different fields.
Giving someone a coin and asking a ticket office to update its register are different actions, even if both appear as “send” in an app.
1 ETH = 1000000000 Gwei = 1000000000000000000 Wei.
A simple native payment
For a straightforward ETH payment, the transaction’s destination is the recipient and its value is the ETH amount in Wei. Input data can be empty. Sending to code can also trigger execution, so not every native payment behaves like an ordinary account transfer.
A typical ERC-20 transfer
The transaction goes to the token contract. Its calldata encodes transfer(recipient, amount). The recipient of the tokens is an argument inside the call, and the amount is in that token’s raw units. The transaction’s native ETH value is commonly zero.
Do not confuse the two destinations
If an explorer shows the token contract as the transaction destination, that does not mean it is the final token recipient. Read the decoded arguments and relevant events, while recognizing that logs alone can be misleading for malicious implementations.
Inspect it yourself
Encode a transfer in the ABI lab and locate the address in word zero. Compare the encoded amount with an ETH conversion. A transaction can still require ETH for execution fees even when the transferred asset is a token.
In a typical ERC-20 transfer, where is the token recipient specified?
The transaction calls the token contract; its arguments identify the intended token recipient.
Original explanations by EtherTools. Examples are educational and source-linked; this site is independent of the Ethereum Foundation. Our approach.