2023-05-07 20:01:06 +02:00
pragma solidity >= 0 . 6 . 12 ;
// Author: Louis Holbrook <dev@holbrook.no> 0826EDA1702D1E87C6E2875121D2E7BB88C2A746
// SPDX-License-Identifier: AGPL-3.0-or-later
2023-08-01 15:50:09 +02:00
// File-version: 2
2023-05-07 20:01:06 +02:00
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 ) ;
2023-08-01 15:50:09 +02:00
// Add a voting option to a proposal
function addOption ( uint256 _proposalIdx , bytes32 _description ) external ;
2023-05-07 20:01:06 +02:00
2023-05-07 20:16:08 +02:00
// 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 ) ;
2023-05-07 20:01:06 +02:00
// 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 ) ;
}