The Timelock contract can modify system parameters, logic, and contracts in a 'time-delayed, opt-out' upgrade pattern. Timelock has a hard-coded minimum delay of 2 days, which is the least amount of notice possible for a governance action. Each proposed action will be published at a minimum of 2 days in the future from the time of announcement. Major upgrades, such as changing the risk system, may have up to a 30 day delay. Timelock is controlled by the governance module; pending and completed governance actions can be monitored on the Timelock Dashboard.
Emitted when a proposal has been queued in the Timelock.
ProposalExecuted
1
ProposalExecuted(uint id)
Copied!
Emitted when a proposal has been executed in the Timelock.
Read-Only Functions: PEAK
Get Current Votes
1
function getCurrentVotes(address account) returns (uint96)
Copied!
Returns the balance of votes for an account as of the current block.
Name
Type
Text
account
address
Address of the account of which to retrieve the number of votes.
Get Prior Votes
1
function getPriorVotes(address account, uint blockNumber) returns (uint256)
Copied!
Returns the prior number of votes for an account at a specific block number. The block number passed must be a finalized block or the function will revert.
Name
Type
Text
account
address
Address of the account of which to retrieve the prior number of votes.
blocknumber
uint
The block number at which to retrieve the prior number of votes.
​
​
​
unnamed
uint256
The number of prior votes
State-Changing Functions: PEAK
Delegate
1
function delegate(address delegatee)
Copied!
Delegate votes from the sender to the delegatee. Users can delegate to 1 address at a time, and the number of votes added to the delegatee’s vote count is equivalent to the balance of PEAK in the user’s account. Votes are delegated from the current block and onward, until the sender delegates again, or transfers their PEA.
Name
Type
Text
delegatee
address
The address to which msg.sender wishes to delegate their votes to.
Delegate votes from the sender to the delegatee. Users can delegate to 1 address at a time, and the number of votes added to the delegatee’s vote count is equivalent to the balance of PEAK in the user’s account. Votes are delegated from the current block and onward, until the sender delegates again, or transfers their PEAK.
Name
Type
Text
delegatee
address
The address to which msg.sender wishis to delegate their vote to
nonce
uint
The contract state required to match the signature. This can be retrieved from the contract’s public nonces mapping
expiry
uint
The time when the signature expires. A block timestamp in seconds since the unix epoch.
v
uint
The recovery byte of the signature.
r
bytes32
Half of the ECDSA signature pair.
s
bytes32
Half of the ECDSA signature pair.
Read-Only Functions: Governor Alpha
Quorum Votes
1
function quorumVotes() public pure returns (uint)
Copied!
Returns the minimum number of votes required for a proposal to succeed.
Proposal Threshold
1
function proposalThreshold() returns (uint)
Copied!
Returns the minimum number of votes required for an account to create a proposal.
Proposal Max Operation
1
function proposalMaxOperations() returns (uint)
Copied!
Returns the maximum number of actions that can be included in a proposal. Actions are functions calls that will be made when a proposal succeeds and executes.
Voting Delay
1
function votingDelay() returns (uint)
Copied!
Returns the number of blocks to wait before voting on a proposal may begin. This value is added to the current block number when a proposal is created.
Voting Period
1
function votingPeriod() returns (uint)
Copied!
Returns the duration of voting on a proposal, in blocks.
Proposals will be voted on by delegated voters. If there is sufficient support before the voting period ends, the proposal shall be automatically enacted. Enacted proposals are queued and executed in the Timelock contract.
The sender must hold more PEAK than the current proposal threshold (proposalThreshold()) as of the immediately previous block. The proposal can have up to 10 actions (based on proposalMaxOperations()).
The proposer cannot create another proposal if they currently have a pending or active proposal. It is not possible to queue two identical actions in the same block (due to a restriction in the Timelock), therefore actions in a single proposal must be unique, and unique proposals that share an identical action must be queued in different blocks.
Name
Type
Text
targets
address
The ordered list of target addresses for calls to be made during proposal execution. This array must be the same length as all other array parameters in this function.
values
uint
The ordered list of values (i.e. msg.value) to be passed to the calls made during proposal execution. This array must be the same length as all other array parameters in this function
signatures
string
The ordered list of function signatures to be passed during execution. This array must be the same length as all other array parameters in this function.
calldatas
bytes
The ordered list of data to be passed to each individual function call during proposal execution. This array must be the same length as all other array parameters in this function.
description
string
A human readable description of the proposal and the changes it will enact.
​
​
​
Unnamed
uint
Returns ID of the new proposal
Queue
1
function queue(uint proposalId)
Copied!
After a proposal has succeeded, any address can call the queue method to move the proposal into the Timelock queue. A proposal can only be queued if it has succeeded.
Name
Type
Text
proposalId
uint
ID of a given successful proposal
Execute
1
function execute(uint proposalId) payable
Copied!
After the Timelock delay period, any account may invoke the execute method to apply the changes from the proposal to the target contracts. This will invoke each of the actions described in the proposal. This function is payable so the Timelock contract can invoke payable functions that were selected in the proposal.
Name
Type
Text
proposalId
uint
ID of a given successful proposal
Cancel
1
function queue(uint proposalId)
Copied!
Cancel a proposal that has not yet been executed. The Guardian is the only one who may execute this unless the proposer does not maintain the delegates required to create a proposal. If the proposer does not have more delegates than the proposal threshold, anyone can cancel the proposal.
Name
Type
Text
proposalId
uint
ID of a proposal to cancel
Cast Vote
1
function castVote(uint proposalId, bool support)
Copied!
Cast a vote on a proposal. The account's voting weight is determined by it's number of delegated votes at the time the proposal becomes active.
Name
Type
Text
proposalId
uint
ID of a given successful proposal
support
bool
A boolean of true for 'yes' or false for 'no' on the proposal vote.
Cast a vote on a proposal. The account's voting weight is determined its number of delegated votes at the time the proposal became active. This method has the same purpose as Cast Vote, but instead enables offline signatures to participate in governance voting. For more details on how to create an offline signature, review EIP-712.
Name
Type
Text
proposalId
uint
ID of a given successful proposal
support
bool
A boolean of true for 'yes' or false for 'no' on the proposal vote.
expiry
uint
The time when the signature expires. A block timestamp in seconds since the unix epoch.