Save states are the feature that makes RetroArch and tool-assisted speedrunning (TAS) possible — frame-perfect rewinding and branching playthroughs depend on serializing every byte of CPU, RAM, and PPU/APU state exactly the way you're doing here. The ROM-checksum and version-header validation you're adding are real safeguards against the classic bug of loading a save state into the wrong game and corrupting emulator state.