🔄 Proposal Lifecycle: Upgrades & Forks

Understand how protocol changes get proposed and executed

Upgrade blockchain protocol through voting

Proposal Lifecycle

The Five Stages

Every governance proposal follows a structured lifecycle from creation to execution. This process includes multiple checkpoints and delays designed to prevent attacks and give stakeholders time to react.

⚡ Interactive Proposal Simulator

Watch a proposal progress through all lifecycle stages:

📝
Pending
🗳️
Active
Succeeded
⏱️
Queued
🚀
Executed
📝

Pending

Proposal created, waiting for voting delay

Stage Breakdown

📝

1. Pending (Voting Delay)

After proposal creation, a short delay (typically 1 block) gives users time to prepare for voting. This prevents last-minute proposals that catch voters off-guard.

Proposal ID: 123
Proposer: 0xABC...DEF
Voting Starts: Block 15,000,001
🗳️

2. Active (Voting Period)

Token holders cast votes (For, Against, Abstain) during the voting period (3-7 days typically). Voting power is snapshot at proposal creation to prevent manipulation.

Voting Period: 7 days
Quorum Required: 400,000 votes
Current Votes: 450,000 (65% FOR)

3. Succeeded

Proposal passes if it meets quorum and majority vote FOR. At this stage, the proposal is ready to be queued in the timelock contract but hasn't been executed yet.

Final Votes: 450,000
FOR: 292,500 (65%)
AGAINST: 112,500 (25%)
Status: PASSED ✓
⏱️

4. Queued (Timelock)

Proposal is queued in timelock contract with mandatory delay (1-2 days). This gives stakeholders time to exit if they disagree, serving as the last line of defense against harmful proposals.

Queued At: Block 15,050,000
Timelock Delay: 2 days
Executable After: Block 15,062,000
🚀

5. Executed

After timelock expires, anyone can execute the proposal by calling the execute function. The proposed changes are applied to protocol contracts automatically.

Executed At: Block 15,062,100
Executor: 0x789...GHI
Changes Applied: ✓

Creating a Proposal

Proposals require a minimum token threshold (e.g., 25,000 COMP) to prevent spam. Each proposal contains target addresses, function signatures, calldata, and descriptions.

Example Proposal Code (Compound)
function propose(
  address[] targets,
  uint[] values,
  string[] signatures,
  bytes[] calldatas,
  string description
) returns (uint proposalId)

// Example: Change collateral factor
targets = [cTokenAddress]
values = [0]
signatures = ["_setCollateralFactor(uint256)"]
calldatas = [abi.encode(75e16)] // 75%
description = "Increase ETH collateral factor to 75%"

💡 Key Insight: Snapshot Voting Power

Voting power is recorded at the block when the proposal is created (snapshot block). This prevents users from buying tokens to influence an active vote, then immediately selling after voting. The snapshot mechanism ensures fair representation of stakeholders at the time of proposal creation.