Managing Proposals

How to queue, execute, and cancel proposals

Besides creating a proposal and voting on it, there are several other actions that can be taken: queuing, executing, and canceling.

Queuing, executing, and canceling proposals can all be accomplished directly from the Proposal Page.

Queuing and Executing Proposals

Once voting ends, a proposal is not done. If a proposal passed, there are still more steps to take before it’s executed. A successful Governor proposal still needs to be queued—if the DAO uses a Timelock—and then executed.

Once a proposal passes, you can queue and execute it from the same place you voted:

What does it mean to “queue” a proposal?

Queue prepares a proposal for execution. The queue action sends the proposal to the Timelock contract, which starts the countdown until the proposal can be executed.

Someone needs to call the queue() function because the EVM (Ethereum Virtual Machine) does not support scheduled or automatic calls. Every call must be kicked off by a user.

If a Governor does not have a Timelock, then proposals don’t need to be queued. They can be executed as soon as the proposal passes.

Who can queue a proposal?

Generally, anyone can queue a proposal that has passed! The only exception is that some custom Governor contracts limit who can call queue().

How long will the proposal be queued?

This depends on the Timelock Delay of the Timelock contract. You can check that delay on Etherscan until Tally adds it to the DAO Page.

What does it mean to “execute” a proposal?

Executing a proposal runs its function calls onchain. Each proposal is associated with one or more function calls, which are visible in the Executable Code section of the Proposal page. These calls can do things like transfer assets from the treasury, update parameters of the Governor itself, change or upgrade a DeFi protocol, or call another smart contract.

Who can execute a proposal?

Generally, anyone can execute a proposal that has passed! The only exception is when a custom Governor contract limits who can call execute().

Sending ETH when executing a proposal

In some situations it is important to send ETH at the same time as executing a proposal (for example, when paying the Toll for sending a crosschain message to a bridge). In this case, it may be necessary to send ETH as part of the execution of the proposal.

Canceling Proposals

To cancel a proposal, click the three-dot menu to access additional actions. You can also copy the proposal's URL and view contextual information.

When can a proposal be canceled?

It depends! There isn’t a standard version of cancel logic across Governor implementations. Governor Alpha, Governor Bravo and OpenZeppelin Governor each have different behavior.

OpenZeppelin Governor

OpenZeppelin Governor leaves the cancellation up to the developer implementing the contract. Many DAOs implement a Canceller role that gives a list of addresses the power to cancel proposals.

Governor Alpha

If the proposer’s voting power drops below the voting threshold, anyone can cancel that proposal.

Governor Bravo

Same as Governor Alpha. Also, the proposer can always cancel their proposal.

Can a canceled proposal be re-submitted?

Not if it’s the exact same one. To re-submit a proposal, create a new proposal with the same executable code.

Last updated