@@ -525,29 +525,27 @@ contract KlerosCore is IArbitrator {
525
525
lastPhaseChange = block .timestamp ;
526
526
emit NewPhase (phase);
527
527
} else if (phase == Phase.freezing) {
528
- if (block .timestamp - lastPhaseChange >= maxFreezingTime) {
529
- // Enough time spent in Freezing already.
530
- phase = Phase.staking;
531
- lastPhaseChange = block .timestamp ;
532
- emit NewPhase (phase);
533
- } else {
534
- // Check if all the DKs which needed the Freezing phase are ready for Staking phase.
535
- for (uint256 i = 0 ; i < disputesKitIDsThatNeedFreezing.length ; i++ ) {
536
- require (
537
- disputeKitNodes[disputesKitIDsThatNeedFreezing[i]].disputeKit.isResolving (),
538
- "A dispute kit has not passed to Resolving phase "
539
- );
540
-
541
- if (disputeKitNodes[disputesKitIDsThatNeedFreezing[i]].disputeKit.disputesWithoutJurors () == 0 ) {
528
+ bool freezingPhaseFinished = block .timestamp - lastPhaseChange >= maxFreezingTime;
529
+ for (uint256 i = disputesKitIDsThatNeedFreezing.length - 1 ; i >= 0 ; -- i) {
530
+ IDisputeKit disputeKit = disputeKitNodes[disputesKitIDsThatNeedFreezing[i]].disputeKit;
531
+ if (freezingPhaseFinished && ! disputeKit.isResolving ()) {
532
+ // Force the dispute kit to be ready for Staking phase.
533
+ disputeKit.passPhase (); // Warning: don't call if already in Resolving phase, because it reverts.
534
+ require (disputeKit.isResolving (), "A dispute kit has not passed to Resolving phase " );
535
+ } else {
536
+ // Check if the dispute kit is ready for Staking phase.
537
+ require (disputeKit.isResolving (), "A dispute kit has not passed to Resolving phase " );
538
+
539
+ if (disputeKit.disputesWithoutJurors () == 0 ) {
542
540
// The dispute kit had time to finish drawing jurors for all its disputes.
543
541
disputeKitNodes[disputesKitIDsThatNeedFreezing[i]].needsFreezing = false ;
544
- delete disputesKitIDsThatNeedFreezing[i] ;
542
+ disputesKitIDsThatNeedFreezing. pop () ;
545
543
}
546
544
}
547
- phase = Phase.staking;
548
- lastPhaseChange = block .timestamp ;
549
- emit NewPhase (phase);
550
545
}
546
+ phase = Phase.staking;
547
+ lastPhaseChange = block .timestamp ;
548
+ emit NewPhase (phase);
551
549
}
552
550
}
553
551
0 commit comments