forked from mico/idle_moloch
113 lines
5.9 KiB
Solidity
113 lines
5.9 KiB
Solidity
//SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.7;
|
|
|
|
interface IBaal {
|
|
// DATA STRUCTURES
|
|
struct Proposal {
|
|
/*Baal proposal details*/
|
|
uint32 id; /*id of this proposal, used in existence checks (increments from 1)*/
|
|
uint32 prevProposalId; /* id of the previous proposal - set at sponsorship from latestSponsoredProposalId */
|
|
uint32 votingStarts; /*starting time for proposal in seconds since unix epoch*/
|
|
uint32 votingEnds; /*termination date for proposal in seconds since unix epoch - derived from `votingPeriod` set on proposal*/
|
|
uint32 graceEnds; /*termination date for proposal in seconds since unix epoch - derived from `gracePeriod` set on proposal*/
|
|
uint32 expiration; /*timestamp after which proposal should be considered invalid and skipped. */
|
|
uint256 baalGas; /* gas needed to process proposal */
|
|
uint256 yesVotes; /*counter for `members` `approved` 'votes' to calculate approval on processing*/
|
|
uint256 noVotes; /*counter for `members` 'dis-approved' 'votes' to calculate approval on processing*/
|
|
uint256 maxTotalSharesAndLootAtVote; /* highest share+loot count during any individual yes vote*/
|
|
uint256 maxTotalSharesAtSponsor; /* highest share+loot count during any individual yes vote*/
|
|
bool[4] status; /* [cancelled, processed, passed, actionFailed] */
|
|
address sponsor; /* address of the sponsor - set at sponsor proposal - relevant for cancellation */
|
|
bytes32 proposalDataHash; /*hash of raw data associated with state updates*/
|
|
}
|
|
|
|
/* Unborn -> Submitted -> Voting -> Grace -> Ready -> Processed
|
|
\-> Cancelled \-> Defeated */
|
|
enum ProposalState {
|
|
Unborn, /* 0 - can submit */
|
|
Submitted, /* 1 - can sponsor -> voting */
|
|
Voting, /* 2 - can be cancelled, otherwise proceeds to grace */
|
|
Cancelled, /* 3 - terminal state, counts as processed */
|
|
Grace, /* 4 - proceeds to ready/defeated */
|
|
Ready, /* 5 - can be processed */
|
|
Processed, /* 6 - terminal state */
|
|
Defeated /* 7 - terminal state, yes votes <= no votes, counts as processed */
|
|
}
|
|
|
|
function lootToken() external view returns (address);
|
|
function sharesToken() external view returns (address);
|
|
function votingPeriod() external view returns (uint32);
|
|
function gracePeriod() external view returns (uint32);
|
|
function proposalCount() external view returns (uint32);
|
|
function proposalOffering() external view returns (uint256);
|
|
function quorumPercent() external view returns (uint256);
|
|
function sponsorThreshold() external view returns (uint256);
|
|
function minRetentionPercent() external view returns (uint256);
|
|
function latestSponsoredProposalId() external view returns (uint32);
|
|
function state(uint32 id) external view returns (ProposalState);
|
|
function proposals(uint32 id) external view returns (Proposal memory);
|
|
|
|
function setUp(bytes memory initializationParams) external;
|
|
function multisendLibrary() external view returns (address);
|
|
// Module
|
|
function avatar() external view returns (address);
|
|
function target() external view returns (address);
|
|
function setAvatar(address avatar) external;
|
|
function setTarget(address avatar) external;
|
|
// BaseRelayRecipient
|
|
function trustedForwarder() external view returns (address);
|
|
function setTrustedForwarder(address trustedForwarderAddress) external;
|
|
|
|
function mintLoot(address[] calldata to, uint256[] calldata amount) external;
|
|
function burnLoot(address[] calldata from, uint256[] calldata amount) external;
|
|
function mintShares(address[] calldata to, uint256[] calldata amount) external;
|
|
function burnShares(address[] calldata from, uint256[] calldata amount) external;
|
|
function totalLoot() external view returns (uint256);
|
|
function totalShares() external view returns (uint256);
|
|
function totalSupply() external view returns (uint256);
|
|
function lootPaused() external view returns (bool);
|
|
function sharesPaused() external view returns (bool);
|
|
|
|
function shamans(address shaman) external view returns (uint256);
|
|
function setShamans(address[] calldata shamans, uint256[] calldata permissions) external;
|
|
function isAdmin(address shaman) external view returns (bool);
|
|
function isManager(address shaman) external view returns (bool);
|
|
function isGovernor(address shaman) external view returns (bool);
|
|
function lockAdmin() external;
|
|
function lockManager() external;
|
|
function lockGovernor() external;
|
|
function adminLock() external view returns (bool);
|
|
function managerLock() external view returns (bool);
|
|
function governorLock() external view returns (bool);
|
|
function setAdminConfig(bool pauseShares, bool pauseLoot) external;
|
|
function setGovernanceConfig(bytes memory governanceConfig) external;
|
|
|
|
function submitProposal(
|
|
bytes calldata proposalData,
|
|
uint32 expiration,
|
|
uint256 baalGas,
|
|
string calldata details
|
|
) external payable returns (uint256);
|
|
function sponsorProposal(uint32 id) external;
|
|
function processProposal(uint32 id, bytes calldata proposalData) external;
|
|
function cancelProposal(uint32 id) external;
|
|
function getProposalStatus(uint32 id) external returns (bool[4] memory);
|
|
function submitVote(uint32 id, bool approved) external;
|
|
function submitVoteWithSig(
|
|
address voter,
|
|
uint256 expiry,
|
|
uint256 nonce,
|
|
uint32 id,
|
|
bool approved,
|
|
uint8 v,
|
|
bytes32 r,
|
|
bytes32 s
|
|
) external;
|
|
|
|
function executeAsBaal(address to, uint256 value, bytes calldata data) external;
|
|
function ragequit(address to, uint256 sharesToBurn, uint256 lootToBurn, address[] calldata tokens) external;
|
|
|
|
function hashOperation(bytes memory transactions) external pure returns (bytes32);
|
|
function encodeMultisend(bytes[] memory calls, address target) external pure returns (bytes memory);
|
|
}
|