TokenVoting API
Core
TokenVoting
v1.3 (Release 1, Build 3). For each upgrade, if the reinitialization step is required, increment the version numbers in the modifier for both the initialize and initializeFrom functions.
initialize(contract IDAO _dao, struct MajorityVotingBase.VotingSettings _votingSettings, contract IVotesUpgradeable _token, struct IPlugin.TargetConfig _targetConfig, uint256 _minApprovals, bytes _pluginMetadata) external
Initializes the component.
This method is required to support [ERC-1822](https://eips.ethereum.org/EIPS/eip-1822).
initializeFrom(uint16 _fromBuild, bytes _initData) external
Reinitializes the TokenVoting after an upgrade from a previous build version. For each
reinitialization step, use the _fromBuild version to decide which internal functions to
call for reinitialization.
| The contract should only be upgradeable through PSP to ensure that _fromBuild is not incorrectly passed, and that the appropriate permissions for the upgrade are properly configured. |
supportsInterface(bytes4 _interfaceId) → bool public
Checks if this or the parent contract supports an interface by its ID.
getVotingToken() → contract IVotesUpgradeable public
getter function for the voting token.
public function also useful for registering interfaceId and for distinguishing from majority voting interface.
totalVotingPower(uint256 _blockNumber) → uint256 public
Returns the total voting power checkpointed for a specific block number.
createProposal(bytes _metadata, struct Action[] _actions, uint256 _allowFailureMap, uint64 _startDate, uint64 _endDate, enum IMajorityVoting.VoteOption _voteOption, bool _tryEarlyExecution) → uint256 proposalId public
Creates a new majority voting proposal.
Requires the CREATE_PROPOSAL_PERMISSION_ID permission.
createProposal(bytes _metadata, struct Action[] _actions, uint64 _startDate, uint64 _endDate, bytes _data) → uint256 proposalId external
Creates a new proposal.
customProposalParamsABI() → string external
The human-readable abi format for extra params included in data of createProposal.
Used for UI to easily detect what extra params the contract expects.
isMember(address _account) → bool external
Checks if an account is a member of the DAO.
This function must be implemented in the plugin contract that introduces the members to the DAO.
_vote(uint256 _proposalId, enum IMajorityVoting.VoteOption _voteOption, address _voter, bool _tryEarlyExecution) internal
Internal function to cast a vote. It assumes the queried proposal exists.
_canVote(uint256 _proposalId, address _account, enum IMajorityVoting.VoteOption _voteOption) → bool internal
Internal function to check if a voter can vote. It assumes the queried proposal exists.
bytes4 TOKEN_VOTING_INTERFACE_ID internal constant
The [ERC-165](https://eips.ethereum.org/EIPS/eip-165) interface ID of the contract.
MajorityVotingBase
This contract implements the IMajorityVoting interface.
__MajorityVotingBase_init(contract IDAO _dao, struct MajorityVotingBase.VotingSettings _votingSettings, struct IPlugin.TargetConfig _targetConfig, uint256 _minApprovals, bytes _pluginMetadata) internal
Initializes the component to be used by inheriting contracts.
This method is required to support [ERC-1822](https://eips.ethereum.org/EIPS/eip-1822).
supportsInterface(bytes4 _interfaceId) → bool public
Checks if this or the parent contract supports an interface by its ID.
vote(uint256 _proposalId, enum IMajorityVoting.VoteOption _voteOption, bool _tryEarlyExecution) public
Votes on a proposal and, optionally, executes the proposal.
_voteOption, 1 → abstain, 2 → yes, 3 → no
execute(uint256 _proposalId) public
Executes a proposal.
Requires the EXECUTE_PROPOSAL_PERMISSION_ID permission.
getVoteOption(uint256 _proposalId, address _voter) → enum IMajorityVoting.VoteOption public
Returns whether the account has voted for the proposal.
May return none if the _proposalId does not exist,
or the _account does not have voting power.
canVote(uint256 _proposalId, address _account, enum IMajorityVoting.VoteOption _voteOption) → bool public
Checks if an account can participate on a proposal. This can be because the vote - has not started, - has ended, - was executed, or - the voter doesn’t have voting powers.
Reverts if the proposal with the given _proposalId does not exist.
canExecute(uint256 _proposalId) → bool public
Checks if a proposal can be executed.
Reverts if the proposal with the given _proposalId does not exist.
hasSucceeded(uint256 _proposalId) → bool public
Whether proposal succeeded or not.
Reverts if the proposal with the given _proposalId does not exist.
isSupportThresholdReached(uint256 _proposalId) → bool public
Checks if the support value defined as: \texttt{support} = \frac{N_\text{yes}}{N_\text{yes}+N_\text{no}} for a proposal is greater than the support threshold.
isSupportThresholdReachedEarly(uint256 _proposalId) → bool public
Checks if the worst-case support value defined as: \texttt{worstCaseSupport} = \frac{N_\text{yes}}{ N_\text{total}-N_\text{abstain}} for a proposal is greater than the support threshold.
isMinParticipationReached(uint256 _proposalId) → bool public
Checks if the participation value defined as: \texttt{participation} = \frac{N_\text{yes}+N_\text{no}+N_\text{abstain}}{N_\text{total}} for a proposal is greater or equal than the minimum participation value.
isMinApprovalReached(uint256 _proposalId) → bool public
Checks if the min approval value defined as: \texttt{minApproval} = \frac{N_\text{yes}}{N_\text{total}} for a proposal is greater or equal than the minimum approval value.
supportThreshold() → uint32 public
Returns the support threshold parameter stored in the voting settings.
minParticipation() → uint32 public
Returns the minimum participation parameter stored in the voting settings.
minProposerVotingPower() → uint256 public
Returns the minimum voting power required to create a proposal stored in the voting settings.
votingMode() → enum MajorityVotingBase.VotingMode public
Returns the vote mode stored in the voting settings.
totalVotingPower(uint256 _blockNumber) → uint256 public
Returns the total voting power checkpointed for a specific block number.
getProposal(uint256 _proposalId) → bool open, bool executed, struct MajorityVotingBase.ProposalParameters parameters, struct MajorityVotingBase.Tally tally, struct Action[] actions, uint256 allowFailureMap, struct IPlugin.TargetConfig targetConfig public
Returns all information for a proposal by its ID.
updateVotingSettings(struct MajorityVotingBase.VotingSettings _votingSettings) external
Updates the voting settings.
Requires the UPDATE_VOTING_SETTINGS_PERMISSION_ID permission.
updateMinApprovals(uint256 _minApprovals) external
Updates the minimal approval value.
Requires the UPDATE_VOTING_SETTINGS_PERMISSION_ID permission.
createProposal(bytes _metadata, struct Action[] _actions, uint256 _allowFailureMap, uint64 _startDate, uint64 _endDate, enum IMajorityVoting.VoteOption _voteOption, bool _tryEarlyExecution) → uint256 proposalId external
Creates a new majority voting proposal.
_vote(uint256 _proposalId, enum IMajorityVoting.VoteOption _voteOption, address _voter, bool _tryEarlyExecution) internal
Internal function to cast a vote. It assumes the queried proposal exists.
_execute(uint256 _proposalId) internal
Internal function to execute a proposal. It assumes the queried proposal exists.
_canVote(uint256 _proposalId, address _account, enum IMajorityVoting.VoteOption _voteOption) → bool internal
Internal function to check if a voter can vote. It assumes the queried proposal exists.
_hasSucceeded(uint256 _proposalId, bool _isOpen) → bool internal
An internal function that checks if the proposal succeeded or not.
_canExecute(uint256 _proposalId) → bool internal
Internal function to check if a proposal can be executed. It assumes the queried proposal exists.
Threshold and minimal values are compared with > and >= comparators, respectively.
_isProposalOpen(struct MajorityVotingBase.Proposal proposal_) → bool internal
Internal function to check if a proposal is still open.
_updateVotingSettings(struct MajorityVotingBase.VotingSettings _votingSettings) internal
Internal function to update the plugin-wide proposal settings.
_updateMinApprovals(uint256 _minApprovals) internal
Internal function to update minimal approval value.
_validateProposalDates(uint64 _start, uint64 _end) → uint64 startDate, uint64 endDate internal
Validates and returns the proposal dates.
UPDATE_VOTING_SETTINGS_PERMISSION_ID() → bytes32 public
The ID of the permission required to call the updateVotingSettings function.
CREATE_PROPOSAL_PERMISSION_ID() → bytes32 public
The ID of the permission required to call the createProposal functions.
EXECUTE_PROPOSAL_PERMISSION_ID() → bytes32 public
The ID of the permission required to call the execute function.
VotingSettingsUpdated(enum MajorityVotingBase.VotingMode votingMode, uint32 supportThreshold, uint32 minParticipation, uint64 minDuration, uint256 minProposerVotingPower) event
Emitted when the voting settings are updated.
VotingMinApprovalUpdated(uint256 minApprovals) event
Emitted when the min approval value is updated.
MinDurationOutOfBounds(uint64 limit, uint64 actual) error
Thrown if the minimal duration value is out of bounds (less than one hour or greater than 1 year).
ProposalCreationForbidden(address sender) error
Thrown when a sender is not allowed to create a proposal.
VoteCastForbidden(uint256 proposalId, address account, enum IMajorityVoting.VoteOption voteOption) error
Thrown if an account is not allowed to cast a vote. This can be because the vote - has not started, - has ended, - was executed, or - the account doesn’t have voting powers.
ProposalAlreadyExists(uint256 proposalId) error
Thrown if the proposal with same actions and metadata already exists.
bytes4 MAJORITY_VOTING_BASE_INTERFACE_ID internal constant
The [ERC-165](https://eips.ethereum.org/EIPS/eip-165) interface ID of the contract.
TokenVotingSetup
v1.3 (Release 1, Build 3)
constructor(contract GovernanceERC20 _governanceERC20Base, contract GovernanceWrappedERC20 _governanceWrappedERC20Base) public
The contract constructor deploying the plugin implementation contract and receiving the governance token base contracts to clone from.
prepareInstallation(address _dao, bytes _data) → address plugin, struct IPluginSetup.PreparedSetupData preparedSetupData external
Prepares the installation of a plugin.
prepareUpdate(address _dao, uint16 _fromBuild, struct IPluginSetup.SetupPayload _payload) → bytes initData, struct IPluginSetup.PreparedSetupData preparedSetupData external
Prepares the update of a plugin.
Revoke the upgrade plugin permission to the DAO for all builds prior the current one (3).
prepareUninstallation(address _dao, struct IPluginSetup.SetupPayload _payload) → struct PermissionLib.MultiTargetPermission[] permissions external
Prepares the uninstallation of a plugin.
supportsIVotesInterface(address token) → bool public
Unsatisfiably determines if the token is an IVotes interface.
Many tokens don’t use ERC165 even though they still support IVotes.
VotingPowerCondition
constructor(address _tokenVoting) public
Initializes the contract with the TokenVoting plugin address and fetches the associated token.
isGranted(address _where, address _who, bytes32 _permissionId, bytes _data) → bool public
Checks if a call is permitted.
The function checks both the voting power and token balance to ensure _who meets the minimum voting
threshold defined in the TokenVoting plugin. Returns false if the minimum requirement is unmet.