fix: clear stale guardian votes when guardians are removed - #345
Merged
icentedward76-sketch merged 2 commits intoAug 31, 2026
Conversation
|
@timilehin01010-byte Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overview
This PR fixes a stale-vote cleanup gap in the will contract. Previously,
reset_guardian_votesandreset_guardian_cancel_votesonly iterated overwill.guardians, so a guardian who voted and was later removed from the list could leave aGuardianVote/GuardianCancelVoteentry in storage indefinitely. If that same address was later re-added as a guardian, the old vote record could still be found byhas_guardian_voted, causing the guardian to be treated as having already voted in a new, unrelated cycle.This PR ensures guardian-list-changing entry points explicitly clean up vote/cancel-vote entries for guardians being removed, and adds a regression test for the remove/re-add scenario.
Related Issue
Closes #bounty
Changes
🧹 Stale Guardian Vote Cleanup
[MODIFY]
contracts/will/src/storage.rsupdate_guardians, compute the set of guardian addresses being removed and explicitly clear theirGuardianVoteandGuardianCancelVotestorage entries before updating the guardian list.update_will_settings, apply the same explicit cleanup for any guardian that is removed when the new guardian list is set.reset_guardian_votes/reset_guardian_cancel_votesbehavior for the current guardian list unchanged.[ADD]
contracts/will/src/regression_test.rshas_guardian_votedreturnsfalsein the new cycle, proving the stale vote was cleared.Verification Results
GuardianVote/GuardianCancelVoteentries for that guardianupdate_guardians/update_will_settingsnow remove stale vote entries for removed guardianshas_guardian_voted == falseafter remove/re-addcargo test --workspacepassescargo clippy --all-targets -- -D warningspassesCloses #334