* treasury: use 'mutate' and 'retain' to avoid creating a new vec * treasury: check the underflow case