diff --git a/contracts/acp/ACPSimple.sol b/contracts/acp/ACPSimple.sol index c64c695..559430f 100644 --- a/contracts/acp/ACPSimple.sol +++ b/contracts/acp/ACPSimple.sol @@ -184,9 +184,12 @@ contract ACPSimple is address(this), job.budget ); - } else if ((oldPhase >= PHASE_TRANSACTION && oldPhase <= PHASE_EVALUATION) && - phase >= PHASE_COMPLETED && phase <= PHASE_REJECTED) { - _claimBudget(jobId); + } else if ( + (oldPhase >= PHASE_TRANSACTION && oldPhase <= PHASE_EVALUATION) && + phase >= PHASE_COMPLETED && + phase <= PHASE_REJECTED + ) { + _claimBudget(job); } } @@ -204,11 +207,16 @@ contract ACPSimple is } function claimBudget(uint256 id) public nonReentrant { - _claimBudget(id); + Job storage job = jobs[id]; + if (job.phase < PHASE_TRANSACTION && block.timestamp > job.expiredAt) { + _updateJobPhase(id, PHASE_EXPIRED); + } else { + _claimBudget(job); + } } - function _claimBudget(uint256 id) internal { - Job storage job = jobs[id]; + function _claimBudget(Job storage job) internal { + uint256 id = job.id; require(job.budget > job.amountClaimed, "No budget to claim"); uint256 claimableAmount = job.budget - job.amountClaimed;