I had a discussion with someone explaining that every time a transaction occurs (e.g. ICO token or ETH) on Ethereum it would pass via a smart contract or would require one.
I would like to know what are your best arguments to prove him wrong?
Ethereum Stack Exchange is a question and answer site for users of Ethereum, the decentralized application platform and smart contract enabled blockchain. It only takes a minute to sign up.Sign up to join this community
I think the best way to look at it is by defining the two types of accounts possible on Ethereum:
Transactions can only originate from EOAs, can be targeted to other EOAs or Smart Contracts, and can contain both a value (Ether) and a data payload.
When you construct an Ethereum transaction that contains value, it is the equivalent of a payment. Such transactions behave differently depending on whether the destination address is a contract or not.
For EOA addresses, or rather for any address that isn’t flagged as a contract on the blockchain, Ethereum will record a state change, adding the value you sent to the balance of the address. If the address has not been seen before, it will be added to the client’s internal representation of the state and its balance initialized to the value of your payment.
So in this case, there can be a transaction between two users which does not involve a smart contract or require one. It simply uses the state machine defined by the EVM to update the balances on both accounts.
I recommend both you and your friend take a read through the chapter I linked above.
EDIT: BTW, you mentioned ICOs and Tokens. In this case, it will ALWAYS require a smart contract because tokens in Ethereum are represented as smart contracts. The "smart contract"-free transaction described above only applies to Ether transactions.
@Shawn's answer is very good. A simple way to explain is that transactions have a receiving account. All accounts may or may not have code. An account that has code is what's called a smart contract. A transaction can be sent to an account that does not have any code, so no smart contract is executed.
So the current answer is no. However, in the future, it may change and all accounts will have code. It's a complex topic that can be searched for using the term account abstraction.