Bitcoin pioneered UTxO. Ethereum chose accounts. Both work, but they make fundamentally different trade-offs.
Your “balance” is the sum of individual outputs you control. Each transaction destroys old outputs and creates new ones.
Each address holds a running balance. Transactions directly modify the global state by updating sender and receiver balances.
| Property | UTxO | Account |
|---|---|---|
| State model | Immutable outputs | Mutable balances |
| Parallelism | Native | Requires ordering |
| Determinism | Fully deterministic | Depends on global state |
| Failed transactions | Rejected pre-chain | Can fail on-chain |
| Privacy | New address per tx | Single address reuse |
| Contract patterns | State machines / CEM | Direct state mutation |
| Formal verification | Easier (local reasoning) | Harder (global effects) |
See how the same 20 ₳ transfer from Alice to Bob plays out in each paradigm.
The choice between accounts and outputs isn’t only architectural — it shapes how wallets can be drained.
Wallet drainers exploit exactly this. Phishing convinces a user to sign ‘approve’ on a malicious contract; afterwards ‘transferFrom’ can empty the wallet at the attacker’s pace. Most users forget the permission is even active.
Each UTxO is consumed once, in full. There is no ‘approve’ equivalent, because there are no balances to grant access to. Every spend is a fresh signature on an explicit transaction.
An ‘approve’ is the crypto version of a standing direct debit: convenient until you forget who can still pull from your account. eUTXO is closer to paying with cash — every transfer is an act, not a permission.
Optional. Score 3/3 to earn mastery badges. Your first attempt counts for the Polymath badge.