GovernorPreventLateQuorumHarness.sol 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.2;
  3. import "../munged/governance/extensions/GovernorPreventLateQuorum.sol";
  4. import "../munged/governance/Governor.sol";
  5. import "../munged/governance/extensions/GovernorCountingSimple.sol";
  6. import "../munged/governance/extensions/GovernorVotes.sol";
  7. import "../munged/governance/extensions/GovernorVotesQuorumFraction.sol";
  8. import "../munged/governance/extensions/GovernorTimelockControl.sol";
  9. import "../munged/token/ERC20/extensions/ERC20Votes.sol";
  10. contract GovernorPreventLateQuorumHarness is Governor, GovernorCountingSimple, GovernorVotes, GovernorVotesQuorumFraction, GovernorTimelockControl, GovernorPreventLateQuorum {
  11. using SafeCast for uint256;
  12. using Timers for Timers.BlockNumber;
  13. constructor(IVotes _token, TimelockController _timelock, uint64 initialVoteExtension, uint256 quorumNumeratorValue)
  14. Governor("Harness")
  15. GovernorVotes(_token)
  16. GovernorVotesQuorumFraction(quorumNumeratorValue)
  17. GovernorTimelockControl(_timelock)
  18. GovernorPreventLateQuorum(initialVoteExtension)
  19. {}
  20. mapping(uint256 => uint256) public ghost_sum_vote_power_by_id;
  21. // variable added to check when _castVote is called
  22. uint256 public latestCastVoteCall;
  23. // Harness from GovernorPreventLateQuorum //
  24. function getVoteExtension() public view returns(uint64) {
  25. return _voteExtension;
  26. }
  27. function getExtendedDeadlineIsUnset(uint256 proposalId) public view returns(bool) {
  28. return _extendedDeadlines[proposalId].isUnset();
  29. }
  30. function getExtendedDeadlineIsStarted(uint256 proposalId) public view returns(bool) {
  31. return _extendedDeadlines[proposalId].isStarted();
  32. }
  33. function getExtendedDeadline(uint256 proposalId) public view returns(uint64) {
  34. return _extendedDeadlines[proposalId].getDeadline();
  35. }
  36. // Harness from GovernorCountingSimple //
  37. function getAgainstVotes(uint256 proposalId) public view returns(uint256) {
  38. ProposalVote storage proposalvote = _proposalVotes[proposalId];
  39. return proposalvote.againstVotes;
  40. }
  41. function getAbstainVotes(uint256 proposalId) public view returns(uint256) {
  42. ProposalVote storage proposalvote = _proposalVotes[proposalId];
  43. return proposalvote.abstainVotes;
  44. }
  45. function getForVotes(uint256 proposalId) public view returns(uint256) {
  46. ProposalVote storage proposalvote = _proposalVotes[proposalId];
  47. return proposalvote.forVotes;
  48. }
  49. function quorumReached(uint256 proposalId) public view returns(bool) {
  50. return _quorumReached(proposalId);
  51. }
  52. function voteSucceeded(uint256 proposalId) public view returns(bool) {
  53. return _voteSucceeded(proposalId);
  54. }
  55. // Harness from Governor //
  56. function getExecutor() public view returns (address){
  57. return _executor();
  58. }
  59. function isExecuted(uint256 proposalId) public view returns (bool) {
  60. return _proposals[proposalId].executed;
  61. }
  62. function isCanceled(uint256 proposalId) public view returns (bool) {
  63. return _proposals[proposalId].canceled;
  64. }
  65. // The following functions are overrides required by Solidity added by Certora. //
  66. function proposalDeadline(uint256 proposalId) public view virtual override(Governor, GovernorPreventLateQuorum, IGovernor) returns (uint256) {
  67. return super.proposalDeadline(proposalId);
  68. }
  69. function _castVote(
  70. uint256 proposalId,
  71. address account,
  72. uint8 support,
  73. string memory reason,
  74. bytes memory params
  75. ) internal virtual override(Governor, GovernorPreventLateQuorum) returns (uint256) {
  76. // flag for when _castVote is called
  77. latestCastVoteCall = block.number;
  78. // added to run GovernorCountingSimple.spec
  79. uint256 deltaWeight = super._castVote(proposalId, account, support, reason, params);
  80. ghost_sum_vote_power_by_id[proposalId] += deltaWeight;
  81. return deltaWeight;
  82. }
  83. /*
  84. function castVote(
  85. uint256 proposalId,
  86. address account,
  87. uint8 support,
  88. string memory reason,
  89. bytes memory params
  90. ) public returns(uint256) {
  91. return _castVote(proposalId, account, support, reason, params);
  92. }
  93. */
  94. function lateQuorumVoteExtension() public view virtual override returns (uint64) {
  95. return super.lateQuorumVoteExtension();
  96. }
  97. function setLateQuorumVoteExtension(uint64 newVoteExtension) public virtual override onlyGovernance {
  98. super.setLateQuorumVoteExtension(newVoteExtension);
  99. }
  100. // The following functions are overrides required by Solidity added by OZ Wizard. //
  101. function votingDelay() public pure override returns (uint256) {
  102. return 1; // 1 block
  103. }
  104. function votingPeriod() public pure override returns (uint256) {
  105. return 45818; // 1 week
  106. }
  107. function quorum(uint256 blockNumber)
  108. public
  109. view
  110. override(IGovernor, GovernorVotesQuorumFraction)
  111. returns (uint256)
  112. {
  113. return super.quorum(blockNumber);
  114. }
  115. function state(uint256 proposalId)
  116. public
  117. view
  118. override(Governor, GovernorTimelockControl)
  119. returns (ProposalState)
  120. {
  121. return super.state(proposalId);
  122. }
  123. function propose(address[] memory targets, uint256[] memory values, bytes[] memory calldatas, string memory description)
  124. public
  125. override(Governor, IGovernor)
  126. returns (uint256)
  127. {
  128. return super.propose(targets, values, calldatas, description);
  129. }
  130. function _execute(uint256 proposalId, address[] memory targets, uint256[] memory values, bytes[] memory calldatas, bytes32 descriptionHash)
  131. internal
  132. override(Governor, GovernorTimelockControl)
  133. {
  134. super._execute(proposalId, targets, values, calldatas, descriptionHash);
  135. }
  136. function _cancel(address[] memory targets, uint256[] memory values, bytes[] memory calldatas, bytes32 descriptionHash)
  137. internal
  138. override(Governor, GovernorTimelockControl)
  139. returns (uint256)
  140. {
  141. return super._cancel(targets, values, calldatas, descriptionHash);
  142. }
  143. function _executor()
  144. internal
  145. view
  146. override(Governor, GovernorTimelockControl)
  147. returns (address)
  148. {
  149. return super._executor();
  150. }
  151. function supportsInterface(bytes4 interfaceId)
  152. public
  153. view
  154. override(Governor, GovernorTimelockControl)
  155. returns (bool)
  156. {
  157. return super.supportsInterface(interfaceId);
  158. }
  159. }