Ethereum has a simpler model by not having UTXOs (Unspent Transaction Outputs) like Bitcoin. What does Ethereum "give up" by not having UTXOs, and what does it gain?
The main validation constraints in a Bitcoin UTXO system are:
- every referenced input must be valid and not yet spent
- the transaction must have a signature matching the owner of the input for every input
- the total value of the inputs must equal or exceed the total value of the outputs
By contrast functionality in an Ethereum account-based system are:
- a global state stores a list of accounts with balances, code, and internal storage
- a transaction is valid if the sending account has enough balance to pay for it, in which case the sending account is debited and the receiving account is credited with the value
- if the receiving account has code, the code runs, and internal storage may also be changed, or the code may even create additional messages to other accounts which lead to further debits and credits
These systems indeed have various tradeoffs. For example, while Ethereum maintains the account balance as part of the global state, a Bitcoin user's "balance" is the total value for which the user has a private key capable of producing a valid signature.
In general, the benefits of UTXOs are:
- Higher degree of privacy: if a user uses a new address for each transaction that they receive then it can be difficult to link accounts to each other
- Potential scalability paradigms: UTXOs are more theoretically compatible with certain kinds of scalability paradigms
The benefits of accounts are:
- Large space savings: because every transaction need only make one reference and one signature and produces one output
- Greater fungibility: because there is no blockchain-level concept of the source of a specific set of coins, it becomes less practical to institute a redlist/blacklisting scheme
- Simplicity: easier to code and understand, especially once more complex scripts become involved
- Constant light client reference: light clients can at any point access all data related to an account by scanning down the state tree in a specific direction
One weakness of the account paradigm is that in order to prevent replay attacks, every transaction must have a "nonce" and the account must keep track of the nonces used.
The accepted answer is a very good summary of the following wiki:
See it for further details, including Ethereum's rationale:
We have decided that, particularly because we are dealing with dapps containing arbitrary state and code, the benefits of accounts massively outweigh the alternatives. Additionally, in the spirit of the We Have No Features principle, we note that if people really do care about privacy then mixers and coinjoin can be built via signed-data-packet protocols inside of contracts.