A contract account is a type of account on Ethereum and similar blockchains that is controlled by smart contract code rather than by a private key. It has an address and can hold ether and tokens, like any account, but it also stores program code and data. It cannot start a transaction by itself: it acts only when a transaction or another contract calls it, and then runs its code in the Ethereum Virtual Machine. The other kind of account is the externally owned account (EOA), controlled by a key holder. Smart contract wallets, which add features such as recovery and spending limits, are contract accounts, and account abstraction aims to let them behave more like EOAs.