# Startup Scenarios
1. Clean start
* Check that the database is empty/nonexistent.
* Load a snapshot -> populate the ledger, solid entry points, genesis time, epoch commitments something, mana, validators.
* Initialize protocol with chain ID from snapshot
* Perform the heuristic to select the chain based on tips.
* Perform chain validation.
* Warp sync.
2. Start after graceful shutdown
* Check that the database is existing and read latest clean epoch
* Load a snapshot + snapshot diffs to recover latest clean epoch state (root blocks, validators, mana, ledger).
* Initialize protocol with chain ID from snapshot
* Perform the heuristic to select the chain based on tips.
* Perform chain validation.
* Warp sync.
3. Start after non-graceful shutdown
* Database is corrupted.
* If the last clean epoch bucket is corrupted, then check previous ones?
* Load a snapshot + snapshot diffs to recover latest clean epoch state (root blocks, validators, mana, ledger).
* Initialize protocol with chain ID from snapshot
* Perform the heuristic to select the chain based on tips.
* Perform chain validation.
* Warp sync.
## What to store