So what do you do if a balance has $30 and the audit table shows two deposits of $20?
How do you know which one to trust? By reading the code and figuring out what the bug is.
If you’re storing a log of database changes (what’s usually meant by an audit table), as in
(Table_Name, Column_Name, Old_Value, New_Value, Timestamp)
Then the database state is the source of truth, and the audit table is simply a record of changes ever occurred that reached that state.
In either case, there’s a single source of truth.