# Altair DB/Cache TODOs
## Background
Altair has a new beacon state and beacon block. Every storage which was used for state and block need to get revamped. The storage include DB and cache. We need to figure out what's the best path forward. Duplicate the existing code? or use state.version() or block.version() internally to save or retrieve them via different bucket or cache? Or is there a better way?
## Options
1. Duplicate DB and cache into a new package. (Least desired)
2. Make Altair changes on existing DB and cache packages. (Ok desired)
```go=
type StateType int
const (
Phase0 StateType = iota
Altair
)
type BeaconState interface {
Type() StateType
}
func SaveState(state) {
switch BeaconState.Type() {
case Phase0:
stateV0, ok := state.(Phase0)
if !ok {
// error handling
}
// Save state to phase 0 bucket
case Altair:
// Save state to Altair bucket
default:
}
return
}
```
3. Do we even need different buckets? Can we get the same block root link to two different forked state? If the answer is no, then this problem might become easier
## Proposed solution