Smart contracts are a type of Ethereum account. They are not typically controlled by a user, instead they are deployed to the network and run as programmed. User accounts can then interact with a smart contract by submitting transactions that execute a function defined within the contract. Smart contracts can define rules, like a regular contract, and automatically enforce them via the code. Smart contract code cannot be altered once deployed, only states and variables can be changed dependent on the way the contract was designed.