Releases: ScopeLift/flexible-voting
v3.0.0
Breaking Changes
- This version updates openzeppelin-contracts from v5.0.2 to v5.1.0.
GovernorCountingFractional
was removed from this repo in favor of the OZ implementation in 5.1.0, found here. Integrators should bump OZ and import from there
Non-Breaking Changes
- This version updates forge-std to the latest version, v1.9.5
v2.0.0
Breaking Changes
- This version updates openzeppelin-contracts from 4.9.3 to v5.0.2.
FlexVotingClient
now usesTrace208
for balance checkpoints. Any child contract that read from or wrote to balance checkpoints will need to be updated.FlexVotingClient
andGovernorCountingFractional
now revert with custom, namespaced errors rather than strings- e.g.
FlexVotingClient__NoVotingWeight
is thrown in place of the string"no weight"
.
- e.g.
FlexVotingClient
requires that voting tokens be EIP6372-compatible, seeIVotingToken
for detailsGovernorCountingFractional
removed its override ofcastVoteWithReasonAndParamsBySig
, as OpenZeppelin updated the parent version to patch the security vulnerability our override was created to avoidFlexVotingClient
,GovernorCountingFractional
, andFractionalPool
now require solidity >= 0.8.20 to compile, up from 0.8.10FlexVotingClient
is now issued under MIT license
Non-Breaking Changes
- Standalone unit, fuzz, and invariant tests were written for
FlexVotingClient
FlexVotingClient
now uses EIP6372-compatible timepoints instead of block numbers to checkpoint balances, allowing it to also interface with Governors/voting-tokens that have timestamp clocksFlexVotingClient
exposes a_checkpointTotalBalance
internal function to make it easy for child contracts to create total balance checkpoints. The new function is analogous to the_checkpointRawBalanceOf
function already in place for individual account balance checkpointing.
v1.2.0
What's Changed
- Bump OZ to v4.9.6, the latest pre-v5.x.x version
- Bump solmate to latest (v6.8.0)
- Bump forge-std to latest
Full Changelog: v1.1.3...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.