# totalVotingPower needs to be snapshotted for each proposal because it can change and thereby affect consensus when accepting / vetoing proposals

PartyGovernance compares snapshot-based votes against live totalVotingPower, so supply changes skew pass thresholds and can block or force proposal acceptance.

- Payout: Contest reward
- Severity: medium
- Program: PartyDAO
- Credited: HollaDieWaldfee
- Disclosed: 2023-06-23
- Write-up quality: 6/10
- Original: https://github.com/code-423n4/2023-04-party-findings/issues/9
- Library page: https://bugbountylibrary.com/r/c4%3A2023-04-party%3AM-07
- Tags: domain:web3 impact:integrity kind:contest platform:code4rena sev:medium tech:evm tech:solidity technique:source-review vuln:business-logic vuln:governance

**Target:** PartyGovernance / VetoProposal governance contracts
**Root cause:** Votes are read at proposedTime-1 snapshot but totalVotingPower used in _areVotesPassing is the current live value, so the two are inconsistent when supply changes.
**Steps:**
1. Create proposal via `PartyGovernance.propose`, setting proposedTime.
2. Vote via `accept`/`voteToVeto`, which reads `getVotingPowerAt(msg.sender, proposedTime-1, snapIndex)`.
3. Change totalVotingPower (e.g. ReraiseETHCrowdfund mints new votes) after proposal creation.
4. Observe `_areVotesPassing(values.votes, _governanceValues.totalVotingPower, passThresholdBps)` uses new total against old-snapshot votes.
5. If total increased, threshold unreachable; if decreased, fewer votes suffice to pass.
**How found:** Code review of propose/accept/veto paths noticing votes use proposedTime-1 snapshot while the pass check reads current totalVotingPower; sponsor confirmed a missing PR.
**Exploitation:** A member (or crowdfund) changes totalVotingPower after a proposal is created; because votes are snapshot-based but the denominator is live, an attacker can either single-handedly pass a proposal after supply drops or grief proposals by raising supply.
**Insight:** When auditing governance, verify every quantity in a quorum/threshold check shares the same snapshot as the votes; mismatched denominators let supply changes flip outcomes.
