62 lines
3.0 KiB
Solidity
62 lines
3.0 KiB
Solidity
pragma solidity >=0.6.12;
|
|
|
|
// Author: Louis Holbrook <dev@holbrook.no> 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);
|
|
}
|