# PartyGovernance.sol#accept - passThresholdBps isn't cached for each proposal which can lead to problems if changed through another proposal

PartyGovernance.accept reads live global passThresholdBps instead of a per-proposal cached value, letting a governance-parameter change retroactively pass or block pending proposals.

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

**Target:** PartyGovernance.sol accept / SetGovernanceParameterProposal
**Root cause:** accept() calls _areVotesPassing with the current global governanceValues.passThresholdBps rather than a value snapshotted at proposal creation, so a SetGovernanceParameterProposal executed mid-lifecycle changes the pass bar for all in-flight proposals.
**Steps:**
1. Party has passThresholdBps=5000 (50%); Alice+Bob hold ~30% voting power.
2. Alice creates proposal A; it stalls below 50%.
3. Alice/Bob pass proposal B setting passThresholdBps=3000 (30%).
4. Bob calls `accept(proposalA)`; _areVotesPassing now uses 3000, so A passes with 30% votes.
5. Reverse: raise threshold to 7000 mid-vote and a 60%-supported proposal A can never pass.
**How found:** Code reading of _executeSetGovernanceParameter showing passThresholdBps is mutable, then tracing accept() to see it reads the live global value instead of a cached per-proposal value like totalVotingPower.
**Exploitation:** A minority bloc passes a governance-parameter proposal lowering passThresholdBps, then accepts a previously stalled proposal it favors; conversely a majority raises the threshold to permanently block rivals' pending proposals.
**Escalation:** A 60% holder sets passThresholdBps=6000 to guarantee own proposals pass while blocking all others, easing a 51%-style governance capture.
**Insight:** When auditing governance, check every threshold/quorum read at execution time against whether it was snapshotted at proposal creation; mutable global params read live create retroactive outcome changes.
