Quorum Logic
function _quorumReached(uint256 proposalId) internal view virtual override returns (bool) {
ProposalVote storage proposalvote = _proposalVotes[proposalId];
return quorum(proposalSnapshot(proposalId)) <= proposalvote.forVotes + proposalvote.abstainVotes;
For + Abstain. Linha 73, do GovernorCountingSimpleUpgreadable.sol
function _voteSucceeded(uint256 proposalId) internal view virtual override returns (bool) {
ProposalVote storage proposalvote = _proposalVotes[proposalId];
return proposalvote.forVotes > proposalvote.againstVotes;
}
To approve a proposal, For > Against. Line 82, GovernorCountingSimpleUpgreadable.sol
Proposal threshold: 1M $ARB
// @notice Votes required for proposal.
function proposalThreshold()
public
view
override(GovernorSettingsUpgradeable, GovernorUpgradeable)
returns (uint256)
{
return GovernorSettingsUpgradeable.proposalThreshold();
Line 154, L2ArbitrumGovernor.sol
Quorum needed (Votable Supply)
/// @notice Calculates the quorum size, excludes token delegated to the exclude address
function quorum(uint256 blockNumber)
public
view
override(IGovernorUpgradeable, GovernorVotesQuorumFractionUpgradeable)
returns (uint256)
{
return (getPastCirculatingSupply(blockNumber) * quorumNumerator(blockNumber))
/ quorumDenominator();
Como a governança da Virtuals (e outras), usa um quorumNumerator/quorumDenominator.
quorumDenominator set to 10000
* @dev Returns the current quorum numerator. See {quorumDenominator}.
*/
function quorumNumerator() public view virtual returns (uint256) {
return _quorumNumeratorHistory._checkpoints.length == 0 ? _quorumNumerator : _quorumNumeratorHistory.latest();
}
Já o quorumNumerator é uma informação que é atualizada recorrentemente. *Linha 41, do GovernorVotesQuorumFractionUpgradeable.sol.*