That would certainly work, but a transaction system would probably be a lot less memory. I'm actually saving the results rather than the inputs. Something like a player moved 1 unit right and 3 units down and died, or a box moved one unit left
As you said it depends on the game so the full level state should be fine for a lot of cases