Логика и структура БД для работы с балансом и транзакциями
Некоторые списания будут реализованы по схеме, когда пользователь запрашивает его, а некий модератор спустя время подтверждает. Т.е. сначала просто блокировка средств на счету. Добавьте это поле и всё будет просто.

Нужно ли хранить входящий/исходящий баланс в истории транзакций?Это удобно, но и без них многие работают.

С другой стороны, как быть с неподтверждёнными транзакциями.Если вы позволяете использовать средства до подтверждения, то зачислять как обычно, а в случае неподтверждения добавлять отменяющую транзакцию. Если нет — транзакция происходит только в момент подтверждения платежа; платеж и транзакция по изменению баланса — разные сущности.
Баланс храни в отдельной таблице.