Governance
https://github.com/Into-the-Fathom/fathom-dao-smart-contracts/blob/master/contracts/dao/governance/MainTokenGovernor.sol
The MainTokenGovernor
is an advanced governance contract integrates multiple functionalities including proposal management, token governance, timelock control, and emergency stops. It extends several OpenZeppelin contracts to create a robust governance framework.
Structs
ProposalCore
voteStart
(Timers.BlockNumber): The block number marking the start of the voting period.voteEnd
(Timers.BlockNumber): The block number marking the end of the voting period.executed
(bool): Indicates whether the proposal has been executed.canceled
(bool): Indicates whether the proposal has been canceled.expireTimestamp
(uint256): A timestamp after which the proposal can no longer be executed.
Storage Variables
isSupportedToken
(mapping(address => bool)): Tracks whether a token is supported for operations like relay or recovery.
isSupportedToken
(mapping(address => bool)): Tracks whether a token is supported for operations like relay or recovery.listOfSupportedTokens
(address[]): A dynamic list of all tokens that have been added as supported, allowing for enumeration and iteration through supported tokens.
listOfSupportedTokens
(address[]): A dynamic list of all tokens that have been added as supported, allowing for enumeration and iteration through supported tokens.isConfirmed
(mapping(uint256 => bool)): Maps proposal IDs to their confirmation status, indicating whether a proposal has been confirmed by the multisig.
isConfirmed
(mapping(uint256 => bool)): Maps proposal IDs to their confirmation status, indicating whether a proposal has been confirmed by the multisig.isProposalExecuted
(mapping(uint256 => bool)): Maps proposal IDs to a boolean indicating whether they have been executed. Ensures a proposal can't be executed more than once.
isProposalExecuted
(mapping(uint256 => bool)): Maps proposal IDs to a boolean indicating whether they have been executed. Ensures a proposal can't be executed more than once.Set Functions
relayERC20
relayERC20
Arguments:
target
(address): The address of the token to relay.data
(bytes): The data payload for the relay transaction.
Description: Allows the governance system to relay ERC20 tokens that might have been sent to the contract by mistake. It ensures only supported tokens can be relayed.
relayNativeToken
relayNativeToken
Arguments:
target
(address): The address of the recipient or contract.value
(uint256): The amount of native tokens (e.g., ETH) to send.data
(bytes): The data payload for the relay transaction.
Description: Similar to
relayERC20
but for native blockchain tokens like ETH, ensuring that any mistakenly sent native tokens can be returned or used in governance operations.
propose
Arguments:
targets
(address[]): Addresses of contracts called under the proposal.values
(uint256[]): List of values (in wei) for each call.calldatas
(bytes[]): Calldata to be sent to each target.description
(string): Human-readable description of the proposal.
Returns:
uint256
(proposalId)Description: Initiates a new proposal in the governance system.
cancelProposal
Arguments:
targets
(address[])values
(uint256[])calldatas
(bytes[])descriptionHash
(bytes32)
Returns:
uint256
Description: Cancels a proposal, can only be accessed by Multisig.
emergencyStop
Description: Halts all contract functions effectively, only callable by Multisig, can also recover and send all supported tokens and native tokens to the multisig's address.
addSupportingToken
Arguments:
_token
(address): Address of the token to add as supported.
Description: Adds a token to the list of supported tokens for relay or recovery operations.
removeSupportingToken
Arguments:
_token
(address): Address of the token to remove from supported list.
Description: Removes a token from the list of supported tokens, disallowing any future relay or recovery operations for it.
Events
TokenSupported
TokenSupported
Arguments: None.
Description: Emitted when a token is added to the list of supported tokens for relay operations.
TokenUnsupported
TokenUnsupported
Arguments: None.
Description: Emitted when a token is removed from the list of supported tokens.
ProposalQueued
ProposalQueued
Parameters:
proposalId (uint256): ID of the proposal that has been queued.
eta (uint256): Estimated time of execution for the proposal.
Description: Emitted when a proposal is successfully queued in the timelock to be executed later.
ProposalExecuted
ProposalExecuted
Parameters:
proposalId (uint256): ID of the proposal that has been executed.
Description: Emitted when a proposal is successfully executed.
ConfirmProposal
ConfirmProposal
Parameters:
signer (address): Address of the signer who confirmed the proposal.
proposalId (uint256): ID of the confirmed proposal.
Description: Emitted when a proposal is confirmed by a multisig signer.
RevokeConfirmation
RevokeConfirmation
Parameters:
signer (address): Address of the signer who revoked the confirmation.
proposalId (uint256): ID of the proposal whose confirmation was revoked.
Description: Emitted when the confirmation of a proposal is revoked by a multisig signer.
MaxTargetUpdated
MaxTargetUpdated
Parameters:
newMaxTargets (uint256): New maximum number of targets allowed in a proposal.
oldMaxTargets (uint256): Old maximum number of targets that was previously allowed.
Description: Emitted when the maximum number of targets that can be included in a proposal is updated.
ProposalLifetimeUpdated
ProposalLifetimeUpdated
Parameters:
newProposalLifetime (uint256): The new duration (in seconds) that a proposal remains valid.
oldProposalLifetime (uint256): The old duration that a proposal was valid.
Description: Emitted when the lifespan of proposals is updated.
BlocklistStatusUpdated
BlocklistStatusUpdated
Parameters:
account (address): Address of the account whose blocklist status was updated.
isBlocklisted (bool): New blocklist status of the account.
Description: Emitted when the blocklist status of an account is updated to either restrict or allow proposal creation by that account.
Last updated