diff --git a/src/governance/GhostGovernor.sol b/src/governance/GhostGovernor.sol index dff48c5..0503b71 100644 --- a/src/governance/GhostGovernor.sol +++ b/src/governance/GhostGovernor.sol @@ -137,6 +137,7 @@ contract GhostGovernor is } proposalId = _propose(targets, values, calldatas, description, proposer); + _countVote(proposalId, proposer, 1, proposerVotes, ""); lockedAmounts[proposalId] += proposerVotes; activeProposedLock = proposerVotes; diff --git a/test/governance/GhostGovernor.t.sol b/test/governance/GhostGovernor.t.sol index 0102ff8..610c107 100644 --- a/test/governance/GhostGovernor.t.sol +++ b/test/governance/GhostGovernor.t.sol @@ -168,10 +168,12 @@ contract GhostGovernorTest is Test { assertEq(uint8(governor.state(proposalId)), uint8(IGovernor.ProposalState.Active)); _castVoteWrapper(proposalId, bob, 1, true, true); - assertEq(uint8(governor.state(proposalId)), uint8(IGovernor.ProposalState.Active)); - _castVoteWrapper(proposalId, carol, 1, true, true); assertEq(uint8(governor.state(proposalId)), uint8(IGovernor.ProposalState.Succeeded)); + vm.expectRevert(); + vm.prank(carol); + governor.castVote(proposalId, 0); + vm.expectRevert(); vm.prank(dave); governor.castVote(proposalId, 0); @@ -219,16 +221,15 @@ contract GhostGovernorTest is Test { assertEq(governor.lockedAmounts(proposalId), amount); assertEq(ghst.balanceOf(alice), 0); - _castVoteWrapper(proposalId, alice, 1, false, false); (uint256 againstVotes, uint256 forVotes, uint256 abstainVotes) = governor.proposalVotes(proposalId); assertEq(againstVotes, 0); - assertEq(forVotes, 0); + assertEq(forVotes, amount); assertEq(abstainVotes, 0); _castVoteWrapper(proposalId, bob, 1, true, true); (againstVotes, forVotes, abstainVotes) = governor.proposalVotes(proposalId); assertEq(againstVotes, 0); - assertEq(forVotes, 2 * amount); + assertEq(forVotes, 3 * amount); assertEq(abstainVotes, 0); assertEq(ghst.balanceOf(alice), 0); @@ -254,7 +255,7 @@ contract GhostGovernorTest is Test { (proposalId,,,,) = _proposeDummy(bob, 420); _waitForActive(proposalId); - _castVoteWrapper(proposalId, alice, 1, false, true); + _castVoteWrapper(proposalId, alice, 1, true, true); _castVoteWrapper(proposalId, carol, 1, true, true); vm.roll(block.number + 3); @@ -375,9 +376,9 @@ contract GhostGovernorTest is Test { assertEq(governor.voteOf(proposalId, eve), 0); vm.roll(governor.proposalDeadline(proposalId)); - _castVoteWrapper(proposalId, bob, 1, false, false); + _castVoteWrapper(proposalId, bob, 1, false, true); vm.roll(governor.proposalDeadline(proposalId)); - _castVoteWrapper(proposalId, carol, 0, false, false); + _castVoteWrapper(proposalId, carol, 0, true, false); vm.roll(governor.proposalDeadline(proposalId)); _castVoteWrapper(proposalId, dave, 1, true, false); vm.roll(governor.proposalDeadline(proposalId)); @@ -492,6 +493,27 @@ contract GhostGovernorTest is Test { assertEq(ghst.totalSupply(), 200); } + function test_proposeAutoForVote() public { + vm.startPrank(init); + ghst.mint(alice, PROPOSAL_THRESHOLD); + ghst.mint(bob, 69 * PROPOSAL_THRESHOLD); + vm.stopPrank(); + + vm.roll(block.number + 1); + (uint256 proposalId,,,,) = _proposeDummy(alice, 69); + + (uint256 againstVotes, uint256 forVotes, uint256 abstainVotes) = governor.proposalVotes(proposalId); + assertEq(forVotes, PROPOSAL_THRESHOLD); + assertEq(againstVotes, 0); + assertEq(abstainVotes, 0); + + vm.roll(block.number + 1); + + vm.expectRevert(); + vm.prank(alice); + governor.castVote(proposalId, 1); + } + function _proposeDummy(address who, uint256 index) private returns (