pragma solidity >=0.6.12; // Author: Louis Holbrook 0826EDA1702D1E87C6E2875121D2E7BB88C2A746 // SPDX-License-Identifier: AGPL-3.0-or-later // File-version: 1 interface ITokenVote { // A new proposal has been created. event ProposalAdded(uint256 indexed _blockDeadline, uint256 indexed voteTargetPpm, uint256 indexed _proposalIdx); // A proposal vote has been completed. // The proposal is identified by the serial number in _proposalIdx. It is up to the implementer to define how the proposal should be retrieved by index. // The proposal result may be in one of three states: // * Ratified (_cancelled == false, _insufficient == false) // * Cancelled (_cancelled == true, _insufficient == false) // * Not reached quorum (_cancelled == false, _insufficient == true) event ProposalCompleted(uint256 indexed _proposalIdx, bool indexed _cancelled, bool indexed _insufficient, uint256 _totalVote); // Propose a new vote. // Voting is active until one of: // * total cancel vote reach quorum (_targetVotePpm, ppm = parts-per-million). // * _blockWait blocks from now. function propose(bytes32 _description, uint256 _blockWait, uint24 _targetVotePpm) external returns (uint256); // Same as propose(...), but provide options to vote on. function proposeMulti(bytes32 _description, bytes32[] memory _options, uint256 _blockWait, uint24 _targetVotePpm) external returns (uint256); // Get number of options available for the proposal. // This decides the boundary of the index that can be used with voteOptions(...) // If the result is 0, vote(...) can be used aswell. function optionCount(uint256 _proposalIdx) external view returns(uint256); // Get proposal option. Assumes that proposal was created with proposeMulti(...) function getOption(uint256 _proposalIdx, uint256 _optionIdx) external view returns (bytes32); // Get vote count for the given option. // If proposal has no options, it should be called with _optionIdx = 0 function voteCount(uint256 _proposalIdx, uint256 _optionIdx) external view returns(uint256); // Vote on a proposal without options. // Assumes that proposal was created with propose(...) and will fail otherwise. function vote(uint256 _value) external returns (bool); // Vote on a proposal option. Assumes that proposal was created with proposeMulti(...). // Must work with a non-option proposal if _optionIndex is 0. function voteOption(uint256 _optionIndex, uint256 _value) external returns (bool); // Vote to cancel a proposal. // If cancel has the majority: // * A vote without options will have rejected the proposal description. // * A vote with options will have rejected the proposal description as well as all option descriptions. function voteCancel(uint256 _value) external returns (bool); // Finalize the vote for a proposal. // May be called if deadline has been passed, or if: // * quorum has been reached with cancel votes. // * quorum has been reached and proposal has no/only one option. function finalize() external returns (bool); }