Примерно так же, как хранится реальная валюта в реальных учетных (банковских, бухгалтерских и т.п.) системах. Текущий баланс + журнал транзакций.
У вас в системе по факту уже две валюты: реальные деньги и игровая валюта. Их нужно хранить отдельно. И отдельной транзакцией отражать перевод из одной в другую.
Если нужно сделать возврат средств, которые уже потрачены, не нужно выяснять, на что именно они потрачены и как это все откатить назад. Просто баланс становится отрицательным, что означает долг.