-
Notifications
You must be signed in to change notification settings - Fork 12k
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
Add a governor extension that implements a proposal guardian #5303
Add a governor extension that implements a proposal guardian #5303
Conversation
🦋 Changeset detectedLatest commit: 276185d The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Looks good other than some comments. Would it make sense to call it something like |
Compound Governance already has a feature like this where the council is called the |
9bc440d
to
d613cc8
Compare
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.
What's the rationale to allow a proposer to cancel a proposal at any time?
I think the contract would be simpler if it just focus on allowing the guardian to cancel at any time and otherwise fallback to their original behavior with super
.
The inspiration for this PR is in #5260 which was then replaced by #5301. There is some context missing but will try to give a TLDR.
|
Co-authored-by: Ernesto García <ernestognw@gmail.com>
Co-authored-by: Ernesto García <ernestognw@gmail.com>
Right, this was my interpretation as well. I also don't have any concrete example of such an exploit. Getting back to the whole idea of enhancing cancellation capabilities, one concern I have with this design is the pattern: if (...) {
...
_cancel(...);
} else if (...) {
...
_cancel(...);
} else {
super.cancel();
} The reasoning is that we're allowing to bypass Consider a contract that inherits from contract GovernorCancellationCounter {
uint256 cancellations;
function cancel(...) public override virtual returns (uint256) {
cancellations++;
super.cancel(...);
}
}
contract MyGovernor is ..., GovernorCancellationCounter, GovernorProposalGuardian { ... } // Order is important In this case, the count would be missing the internal branches that don't call I'd feel more comfortable if function _validateCancel(...) internal virtual {
// Current logic
uint256 proposalId = hashProposal(targets, values, calldatas, descriptionHash);
_validateStateBitmap(proposalId, _encodeStateBitmap(ProposalState.Pending));
if (_msgSender() != proposalProposer(proposalId)) {
revert GovernorOnlyProposer(_msgSender());
}
}
...
function cancel(...) public virtual returns (uint256) {
_validateCancel();
return _cancel(targets, values, calldatas, descriptionHash);
} I think this way users can override |
use `_validateCancel` instead of overriding `cancel`
Co-authored-by: Hadrien Croubois <hadrien.croubois@gmail.com>
Co-authored-by: Hadrien Croubois <hadrien.croubois@gmail.com>
Co-authored-by: Hadrien Croubois <hadrien.croubois@gmail.com>
Should the proposal guardian have the ability to give up this role? I could see an argument in either direction but think it's worth a brief discussion before merging. For: Against: I think I lean towards for since the frequency of broken proposals out in the wild is quite high. If the proposal guardian isn't able to act effectively, the DAO needs the proposers to have this ability. |
When there is a guardian, proposer still have the ability to cancel "early". IMO:
function transferProposalGuardian(address newProposalGuardian) public {
require(_msgSender == proposalGuardian());
_setProposalGuardian(newProposalGuardian);
} When in doubts, or when we think not everyone needs something, I'm always in favor of not forving the feature. In that particular case, the Governor is already close to the limit en terms of bytecode size, so I would avoid increassing it for something users may not want/need. |
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.
LGTM
* Update ReentrancyGuardTransient documentation (OpenZeppelin#5417) * Optimize `MerkleTree` for loops by using `uint256` iterators (OpenZeppelin#5415) Co-authored-by: Ernesto García <ernestognw@gmail.com> * Update `_revokeRole` documentation in AccessControl (OpenZeppelin#5321) Co-authored-by: Ernesto García <ernestognw@gmail.com> * Merge release-v5.2 branch (OpenZeppelin#5424) Signed-off-by: Hadrien Croubois <hadrien.croubois@gmail.com> Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Hadrien Croubois <hadrien.croubois@gmail.com> Co-authored-by: Sam Bugs <101145325+0xsambugs@users.noreply.github.com> Co-authored-by: Ernesto García <ernestognw@gmail.com> Co-authored-by: Arr00 <13561405+arr00@users.noreply.github.com> Co-authored-by: wizard <112275929+famouswizard@users.noreply.github.com> Co-authored-by: leopardracer <136604165+leopardracer@users.noreply.github.com> Co-authored-by: cairo <cairoeth@protonmail.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Francisco Giordano <fg@frang.io> Co-authored-by: Simka <0xsimka@gmail.com> Co-authored-by: Voronor <129545215+voronor@users.noreply.github.com> * Add a Calldata library with `emptyBytes` and `emptyString` functions (OpenZeppelin#5422) Co-authored-by: Ernesto García <ernestognw@gmail.com> * Update governor docs (OpenZeppelin#5420) * Add missing `Calldata`, `Bytes`, `CAIP2` and `CAIP10` API references (OpenZeppelin#5428) * Expose `_isTrustedByTarget` internally in ERC2771Forwarder (OpenZeppelin#5416) * Update LICENSE (OpenZeppelin#5434) * Refactor EnumerableSet.behavior.js for reuse in the community repo (OpenZeppelin#5441) * Replace `overriden` with `overridden` in GovernorCountingOverridable.sol (OpenZeppelin#5446) Co-authored-by: Arr00 <13561405+arr00@users.noreply.github.com> Co-authored-by: ernestognw <ernestognw@gmail.com> * Remove Unnecessary Initialisation of `_paused` (OpenZeppelin#5448) Co-authored-by: Ernesto García <ernestognw@gmail.com> * Fix Broken Docs References (OpenZeppelin#5436) * Update actions/upload-artifact action to v4 (OpenZeppelin#4826) * Remove unused `setBaseURI` tests (OpenZeppelin#5456) Co-authored-by: Hadrien Croubois <hadrien.croubois@gmail.com> * Group typographical errors (OpenZeppelin#5443) Co-authored-by: futreall <86553580+futreall@users.noreply.github.com> Co-authored-by: Marco <wudmytrotest200@gmail.com> Co-authored-by: Dmitry <98899785+mdqst@users.noreply.github.com> Co-authored-by: Dmytrol <46675332+Dimitrolito@users.noreply.github.com> Co-authored-by: Noisy <125606576+donatik27@users.noreply.github.com> Co-authored-by: Danil <37103154+Danyylka@users.noreply.github.com> Co-authored-by: CrazyFrog <anna.shuraeva13@gmail.com> Co-authored-by: Bryer <0xbryer@gmail.com> Co-authored-by: Viktor Pavlik <160131789+Vikt0rPavlik@users.noreply.github.com> Co-authored-by: Skylar Ray <137945430+sky-coderay@users.noreply.github.com> Co-authored-by: Brawn <nftdropped@gmail.com> Co-authored-by: fuder.eth <139509124+vtjl10@users.noreply.github.com> Co-authored-by: FT <140458077+zeevick10@users.noreply.github.com> Co-authored-by: Ann Wagner <chant_77_swirly@icloud.com> Co-authored-by: Hopium <135053852+Hopium21@users.noreply.github.com> Co-authored-by: Arr00 <13561405+arr00@users.noreply.github.com> Co-authored-by: Hadrien Croubois <hadrien.croubois@gmail.com> * Fix interface docs ordering and add missing interface (OpenZeppelin#5460) * Add a governor extension that implements a proposal guardian (OpenZeppelin#5303) Co-authored-by: Arr00 <13561405+arr00@users.noreply.github.com> Co-authored-by: Ernesto García <ernestognw@gmail.com> * Fix the CLI output of formal verification runs (OpenZeppelin#5445) * Update dependency halmos to v0.2.4 (OpenZeppelin#5461) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Use stable foundry version in CI (OpenZeppelin#5465) * Add stake management function to ERC4337Utils (OpenZeppelin#5471) * Add forum badge correct link (OpenZeppelin#5481) * SafeERC20.trySafeTransfer{,from} (OpenZeppelin#5483) * Improve promise rejections handling in hardhat/async-test-sanity.js (OpenZeppelin#5429) Co-authored-by: Arr00 <13561405+arr00@users.noreply.github.com> * Use slither v0.10.4 (OpenZeppelin#5488) * Add ERC6909 Implementation along with extensions (OpenZeppelin#5394) Co-authored-by: Hadrien Croubois <hadrien.croubois@gmail.com> Co-authored-by: Ernesto García <ernestognw@gmail.com> * Rename ERC4337Utils ENTRYPOINT to ENTRYPOINT_V07 (OpenZeppelin#5472) Co-authored-by: Hadrien Croubois <hadrien.croubois@gmail.com> * Add Bytes32x2Set (OpenZeppelin#5442) Co-authored-by: Ernesto García <ernestognw@gmail.com> * Add clear function to Enumerable{Set,Map} (OpenZeppelin#5486) Co-authored-by: Hadrien Croubois <hadrien.croubois@gmail.com> * Make set-max-old-space-size.sh compatible with sh (OpenZeppelin#5493) Co-authored-by: Hadrien Croubois <hadrien.croubois@gmail.com> * Update FUNDING.json (OpenZeppelin#5496) Co-authored-by: Hadrien Croubois <hadrien.croubois@gmail.com> * Update FUNDING.json hierarchy (OpenZeppelin#5500) Co-authored-by: Hadrien Croubois <hadrien.croubois@gmail.com> * Test behavior of SignatureChecker against the identity precompile (0x4) (OpenZeppelin#5501) * Treat code-size warnings as errors (OpenZeppelin#5101) Co-authored-by: Hadrien Croubois <hadrien.croubois@gmail.com> * Make `TimelockController` receive function virtual (OpenZeppelin#5506) Co-authored-by: Arr00 <13561405+arr00@users.noreply.github.com> Co-authored-by: Hadrien Croubois <hadrien.croubois@gmail.com> --------- Signed-off-by: Hadrien Croubois <hadrien.croubois@gmail.com> Co-authored-by: Ernesto García <ernestognw@gmail.com> Co-authored-by: Michael <20623991+heueristik@users.noreply.github.com> Co-authored-by: Maks <soskapola96@gmail.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Hadrien Croubois <hadrien.croubois@gmail.com> Co-authored-by: Sam Bugs <101145325+0xsambugs@users.noreply.github.com> Co-authored-by: Arr00 <13561405+arr00@users.noreply.github.com> Co-authored-by: wizard <112275929+famouswizard@users.noreply.github.com> Co-authored-by: leopardracer <136604165+leopardracer@users.noreply.github.com> Co-authored-by: cairo <cairoeth@protonmail.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Francisco Giordano <fg@frang.io> Co-authored-by: Simka <0xsimka@gmail.com> Co-authored-by: Voronor <129545215+voronor@users.noreply.github.com> Co-authored-by: Eric Lau <ericglau@outlook.com> Co-authored-by: planetBoy <140164174+Guayaba221@users.noreply.github.com> Co-authored-by: sudo rm -rf --no-preserve-root / <pcaversaccio@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Renan Souza <renan.rodrigues.souza1@gmail.com> Co-authored-by: futreall <86553580+futreall@users.noreply.github.com> Co-authored-by: Marco <wudmytrotest200@gmail.com> Co-authored-by: Dmitry <98899785+mdqst@users.noreply.github.com> Co-authored-by: Dmytrol <46675332+Dimitrolito@users.noreply.github.com> Co-authored-by: Noisy <125606576+donatik27@users.noreply.github.com> Co-authored-by: Danil <37103154+Danyylka@users.noreply.github.com> Co-authored-by: CrazyFrog <anna.shuraeva13@gmail.com> Co-authored-by: Bryer <0xbryer@gmail.com> Co-authored-by: Viktor Pavlik <160131789+Vikt0rPavlik@users.noreply.github.com> Co-authored-by: Skylar Ray <137945430+sky-coderay@users.noreply.github.com> Co-authored-by: Brawn <nftdropped@gmail.com> Co-authored-by: fuder.eth <139509124+vtjl10@users.noreply.github.com> Co-authored-by: FT <140458077+zeevick10@users.noreply.github.com> Co-authored-by: Ann Wagner <chant_77_swirly@icloud.com> Co-authored-by: Hopium <135053852+Hopium21@users.noreply.github.com> Co-authored-by: Yan Victor SN <98413246+YanVictorSN@users.noreply.github.com> Co-authored-by: Ursula <asp_woods_34@icloud.com> Co-authored-by: Michalis Kargakis <kargakis@protonmail.com> Co-authored-by: luca <80516439+xdaluca@users.noreply.github.com> Co-authored-by: Jonas <43515441+JSeiferth@users.noreply.github.com> Co-authored-by: Joseph Delong <joseph@delong.me>
Fixes #5301
PR Checklist
npx changeset add
)