# Transaction Lifecycle
Radix Engine is a transactional state machine which accepts a transaction and a given state and
outputs a state change and additional output.
```
radix_engine(State, Transaction) -> (StateChange, Output)
```
The state change can then be applied to the database to update it's state:
```
state_commit(State, StateChange) -> State
```
## Three Stages
There are three stages in the transaction lifecycle:
1. *Bootup*, which consists of initializing the layers of the stack
2. *Execution*, which is the execution of the application logic specified by the transaction
3. *Shutdown*, which consists of cleaning up each layer and creating the final StateChange and Output