-
Notifications
You must be signed in to change notification settings - Fork 24
Allow for reschedule of dropped exec #100
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
Still needs a test but wanted to open the PR for discussion on whether there are any edge cases that this could introduce. |
require(!done, "spell-already-cast"); | ||
require(eta == 0 || | ||
pause.plans(keccak256(abi.encode(action, tag, sig, eta))) == false, | ||
"This spell has already been scheduled"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe we can only use the pause.plans(keccak256(abi.encode(action, tag, sig, eta))) == false
condition and remove the conditions on done
and eta
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
is flipped in the spell itself. Once the spell is cast it is removed from the pause. We still want it here to prevent an executed spell from being rescheduled.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, so we can consider only removing the eta
check.
Note that after eta
is set it can not be set back to 0, so it will only be 0 if the spell was never scheduled. In that case the spell params will also not appear in the pause mapping (2nd condition), making the eta == 0
condition redundant.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
eta still needs to be checked here. The new eta doesn't get set until the next line, so if the ETA is not zero here it means the spell has been scheduled once. If it's not done and it's not in the pause with the old eta, then it means the spell was scheduled and dropped before the cast.
Removing the ETA check here would allow spells to be scheduled repeatedly.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I guess I see your point, re: checking the pause using eta 0, but in this case we avoid the additional cost of a bunch of memory loads, a keccak hash, and an external call on the most common path.
We could add tests and start doing another run of reviews |
It may be possible for an exec to be scheduled by a vote, and then dropped from the pause by a competing hat.
This change allows a spell to be re-scheduled in the case where it is scheduled, dropped, and then re-raised to the hat.