# req-030 Schist must implement the procedure described below as `calculate_bucket_balance`. ## calculate_bucket_balance Inputs: - A bucket name, `name` 1. If no bucket exists with the name, `name`, then return empty. 2. If more than one bucket exists with the name, `name`, then panic. 3. Let `bucket` be the bucket with the given name. 4. Let `cache_key = bucket.balance_cache_key`. 5. Let `is_up_to_date` be the result of the procedure, `is_bucket_balance_up_to_date(bucket)`, as described in req-035. 6. If `is_up_to_date = TRUE`, then return `bucket.balance`. 7. Carry out the procedure, `update_bucket_drips(bucket)`, as described in req-037. 8. Let `transaction_sum` be the sum over the property, `amount`, of all transactions `t` such that `t.bucket_id = bucket.id`. 9. Let `drip_sum` be the sum over the property, `amount`, of all drips `d` such that `d.bucket_id = bucket.id`. 10. Return `drip_sum - transaction_sum`. Source: req-029