Releases: ScopeLift/flexible-voting
v1.2.0
v1.1.3
This version updates openzeppelin-contracts
, a transitive dependency of flexible-voting
, to v4.9.3. This was the last version of the OpenZeppelin contracts in the v4.x series. A future of version of Flexible Voting will be released with compatibility for OpenZeppelin v5.x.
This release does not change any code in the core Flexible Voting code, i.e. the GovernorCountingFractional
contract or the FlexibleVotingClient
contract. Upgrading should be safe in all cases, except when you are depending on a part of OpenZeppelin—through Flexible Voting—which changed between v4.8.0 and v4.9.3.
v1.1.2
This release changes the imports internally in the project to use relative imports. We do this because projects attempting to import the Flexible Voting using Foundry were seeing the error "Could not read source code for analysis" when attempting to run forge coverage
. It is unclear if this is a bug in Foundry but switching to relative imports resolve the problem. See this issue in the Foundry repo for more information. No changes, breaking or otherwise, were made to the source other than to change the import paths.
v1.1.1
This release does not make any source changes to GovernorCountingFractional
, breaking or otherwise. Instead, this release removes voting client contract implementations out of this repo and into their own located here. This avoids unneeded transitive dependencies being pulled into projects that use Flexible Voting as a direct dependency.
This release also includes minor cleanup to the FlexibleVotingClient
base contract. Please note, if you're planning an integration with Flexible Voting, that breaking improvements to this base client are planned in the near future.
If your project uses v1.1.0, you can safely upgrade to this release.
v1.1.0
This release fixes a bug in GovernorCountingFractional
that would have allowed votes cast by signature to be replayed if the following conditions were met:
- The delegate voted via signature using the
castVoteWithReasonAndParamsBySig
method - The delegate cast a vote that assigned less than or equal to 50% of their available voting weight
- Replaying the signature vote would not put the delegate's total voting power over 100%, after accounting for other votes cast
To resolve the issue, a nonce was added when voting fractionally by signature. When casting a fractional vote by signature the nonce must be included in the params
past to the castVoteWithReasonAndParamsBySig
method.
This bug was uncovered in an audit by Trail of Bits. The fix was reviewed by OpenZeppelin and the updated version of their audit report includes a summary of the bug and subsequent fix.
v1.0.0 should now be considered deprecated. Only v1.1.0
of the GovernorCountingFractional
contract should be used.
v1.0.0
This is the first official release of GovernorCountingFractional
, an extension of OpenZeppelin's Governor
contract that allows delegates to:
- Split their voting weight across AGAINST/FOR/ABSTAIN options.
- Cast partial votes with less than their full voting weight.
- Cast multiple/rolling votes of partial weight for the same proposal.
This release marks the conclusion of OpenZeppelin's audit of this extension. Their report is available here.
As of this commit, fixes for all issues reported in the audit were reviewed by OpenZeppelin and have been merged. See the audit report "Conclusions" section for confirmation, which also links to this commit.