Skip to main content

Parthenon

Git Source

Inherits: Policy

Parthenon, OlympusDAO's on-chain governance system.

The Parthenon policy is also the Kernel's Executor.

State Variables

getProposalMetadata

Return a proposal metadata object for a given proposal id.

mapping(uint256 => ProposalMetadata) public getProposalMetadata;

COLLATERAL_REQUIREMENT

The amount of VOTES a proposer needs to post in collateral in order to submit a proposal

This number is expressed as a percentage of total supply in basis points: 500 = 5% of the supply

uint256 public constant COLLATERAL_REQUIREMENT = 500;

COLLATERAL_MINIMUM

The minimum amount of VOTES the proposer must post in collateral to submit

uint256 public constant COLLATERAL_MINIMUM = 10e18;

WARMUP_PERIOD

Amount of time a wallet must wait after depositing before they can vote.

uint256 public constant WARMUP_PERIOD = 1 minutes;

ACTIVATION_TIMELOCK

Amount of time a submitted proposal must exist before triggering activation.

uint256 public constant ACTIVATION_TIMELOCK = 1 minutes;

ACTIVATION_DEADLINE

Amount of time a submitted proposal can exist before activation can no longer be triggered.

uint256 public constant ACTIVATION_DEADLINE = 3 minutes;

EXECUTION_THRESHOLD

Net votes required to execute a proposal on chain as a percentage of total registered votes.

uint256 public constant EXECUTION_THRESHOLD = 33;

VOTING_PERIOD

The period of time a proposal has for voting

uint256 public constant VOTING_PERIOD = 3 minutes;

EXECUTION_TIMELOCK

Required time for a proposal before it can be activated.

This amount should be greater than 0 to prevent flash loan attacks.

uint256 public constant EXECUTION_TIMELOCK = VOTING_PERIOD + 1 minutes;

EXECUTION_DEADLINE

Amount of time after the proposal is activated (NOT AFTER PASSED) when it can be activated (otherwise proposal will go stale).

This is inclusive of the voting period (so the deadline is really ~4 days, assuming a 3 day voting window).

uint256 public constant EXECUTION_DEADLINE = VOTING_PERIOD + 1 weeks;

COLLATERAL_DURATION

Amount of time a non-executed proposal must wait for the proposal to go through.

This is inclusive of the voting period (so the deadline is really ~4 days, assuming a 3 day voting window).

uint256 public constant COLLATERAL_DURATION = 16 weeks;

INSTR

INSTRv1 public INSTR;

VOTES

VOTESv1 public VOTES;

Functions

constructor

constructor(Kernel kernel_) Policy(kernel_);

configureDependencies

function configureDependencies() external override returns (Keycode[] memory dependencies);

requestPermissions

function requestPermissions() external view override returns (Permissions[] memory requests);

_max

function _max(uint256 a, uint256 b) public pure returns (uint256);

submitProposal

function submitProposal(Instruction[] calldata instructions_, string calldata title_, string calldata proposalURI_)
external;

activateProposal

function activateProposal(uint256 proposalId_) external;

vote

function vote(uint256 proposalId_, bool approve_) external;

executeProposal

function executeProposal(uint256 proposalId_) external;

reclaimCollateral

function reclaimCollateral(uint256 proposalId_) external;

Events

ProposalSubmitted

event ProposalSubmitted(uint256 proposalId, string title, string proposalURI);

ProposalActivated

event ProposalActivated(uint256 proposalId, uint256 timestamp);

VotesCast

event VotesCast(uint256 proposalId, address voter, bool approve, uint256 userVotes);

ProposalExecuted

event ProposalExecuted(uint256 proposalId);

CollateralReclaimed

event CollateralReclaimed(uint256 proposalId, uint256 tokensReclaimed_);

Errors

NotAuthorized

error NotAuthorized();

UnableToActivate

error UnableToActivate();

ProposalAlreadyActivated

error ProposalAlreadyActivated();

WarmupNotCompleted

error WarmupNotCompleted();

UserAlreadyVoted

error UserAlreadyVoted();

UserHasNoVotes

error UserHasNoVotes();

ProposalIsNotActive

error ProposalIsNotActive();

DepositedAfterActivation

error DepositedAfterActivation();

PastVotingPeriod

error PastVotingPeriod();

ExecutorNotSubmitter

error ExecutorNotSubmitter();

NotEnoughVotesToExecute

error NotEnoughVotesToExecute();

ProposalAlreadyExecuted

error ProposalAlreadyExecuted();

ExecutionTimelockStillActive

error ExecutionTimelockStillActive();

ExecutionWindowExpired

error ExecutionWindowExpired();

UnmetCollateralDuration

error UnmetCollateralDuration();

CollateralAlreadyReturned

error CollateralAlreadyReturned();

Structs

ProposalMetadata

struct ProposalMetadata {
address submitter;
uint256 submissionTimestamp;
uint256 collateralAmt;
uint256 activationTimestamp;
uint256 totalRegisteredVotes;
uint256 yesVotes;
uint256 noVotes;
bool isExecuted;
bool isCollateralReturned;
mapping(address => uint256) votesCastByUser;
}