All updates to all variables (called "accounts") follow rules of double entry accounting -- each account is managed by an agent who is directed to bring the balance of each of a list of other accounts to zero by making transfers to or from them!
Those accounts follow an order of priority -- each account's balance has a positive and negative limit, meaning that not all agents' goals can be satisfied every iteration.
(I implemented a system with these rules a while ago for an unreleased virtual pet game! Later I got to show my system off to some friends at Google, but they didn't hire me over it.
If the perks aren't obvious to you, try implementing them. Also consider obvious changes to this design -- giving each agent a transfer limit, or giving agents more complicated patterns of behavior. You can still get some interesting behavior out of this design by keeping agents' decisions simple, mind.)