1
0
forked from mico/idle_moloch
idle_moloch/lib/Baal/contracts/interfaces/IBaal.sol
2024-11-01 11:55:27 +01:00

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);
}