A Proposal ID is a unique, immutable identifier assigned to a formal submission for change within a blockchain's on-chain governance system. It acts as the primary reference for tracking a proposal's lifecycle—from submission and discussion through voting and potential execution. This ID is typically a sequential number (e.g., Proposal #42) or a cryptographic hash generated when the proposal transaction is confirmed on-chain, ensuring its permanence and verifiability.
Proposal ID
What is a Proposal ID?
A unique identifier for a formal submission within a decentralized governance system, enabling tracking, voting, and execution.
The core function of a Proposal ID is to create a tamper-proof audit trail. Every action related to the proposal—casting votes, delegating voting power, querying status, or executing the proposal's payload—references this ID. In systems like Compound's Governor Bravo or Uniswap's governance, the Proposal ID is the key used by smart contracts to map to the proposal's stored metadata, which includes the proposer, execution logic, and vote tallies.
For participants, the Proposal ID is essential for navigation and interaction. It allows voters to inspect proposal details on a block explorer or governance dashboard, delegate their voting power to a specific proposal, and verify the integrity of the voting process. Analysts and developers use these IDs to programmatically track governance activity, build dashboards, and audit historical decision-making within the protocol.
The structure of a Proposal ID can vary. While sequential integers are common for simplicity, some protocols use more complex identifiers. For example, Aragon clients may use an IPFS hash as the ID, pointing to the proposal's detailed description and discussion. MakerDAO's executive proposals utilize a unique spell address that, when cast, executes bundled changes, with the spell's address serving as the de facto ID.
Understanding and using Proposal IDs is fundamental for active governance participation. They are the immutable anchors that link off-chain discussion and debate to on-chain action, ensuring that every protocol change is transparent, accountable, and permanently recorded on the public ledger for anyone to audit.
How a Proposal ID Works
A technical breakdown of the unique identifier that tracks and manages governance proposals in decentralized protocols.
A Proposal ID is a unique, sequential identifier assigned to every formal governance proposal submitted to a decentralized protocol, serving as its primary reference for tracking, voting, and execution. This immutable identifier is typically generated on-chain when a proposal is created, often as a simple incrementing integer (e.g., Proposal #42) or a hash of the proposal's content. It functions as the key for querying a proposal's status—such as Pending, Active, Passed, or Rejected—its voting results, and its associated metadata on a blockchain explorer or governance dashboard.
The lifecycle of a Proposal ID is governed by the protocol's smart contracts. Once assigned, the ID is used to anchor all subsequent actions: voters cast their votes for or against a specific Proposal ID, and upon successful passage, the encoded actions are executed by referencing this same ID. This creates a verifiable audit trail. In systems like Compound's Governor Bravo or Uniswap's Governor, the Proposal ID is central to the propose, vote, and queue/execute functions, ensuring each step is irrevocably linked to the original submission.
For developers and analysts, the Proposal ID is essential for building governance tools and conducting analysis. By querying on-chain data using the ID, one can reconstruct the complete history of a proposal, analyze voter behavior, and monitor the execution of passed measures. It is the cornerstone of transparency in Decentralized Autonomous Organization (DAO) operations, allowing any participant to independently verify the process and outcome of collective decision-making.
Key Features of a Proposal ID
A Proposal ID is a unique, immutable identifier for a governance action within a decentralized protocol. It is the primary reference point for tracking a proposal's lifecycle, from submission to execution.
Unique Identifier
A Proposal ID is a deterministic hash or sequential integer that uniquely identifies a single governance action. It is generated upon proposal submission and cannot be altered, ensuring a permanent, tamper-proof record. This ID is used in all subsequent governance functions, such as voting, queuing, and execution.
- Example: In Compound Governance, proposal IDs are sequential (e.g.,
Proposal 117). - Example: In Aave, the ID is a
bytes32hash derived from proposal parameters.
Immutable Metadata Anchor
The Proposal ID serves as a key to retrieve all immutable metadata associated with the proposal. This includes the proposer address, target contracts, calldata, and the block number at which voting begins. Once created, this metadata is locked and defines the exact on-chain action to be executed if the proposal passes.
- Critical for Verification: Voters and tools use the ID to fetch and audit the proposal's details before casting votes.
Lifecycle State Tracker
Smart contracts use the Proposal ID to manage and track the proposal's state machine. The ID is the index for state variables that record:
- Status: (e.g.,
Pending,Active,Succeeded,Queued,Executed,Canceled). - Vote Totals: Counts of
for,against, andabstainvotes. - Timestamps: Start and end blocks for voting and execution deadlines. This allows the protocol to enforce rules and prevent invalid state transitions.
Execution & Interaction Handle
To execute a passed proposal or interact with it (e.g., to queue or cancel), the Proposal ID is the required input parameter for the governance contract's functions. This ensures the correct set of encoded transactions is relayed to the target contracts.
- Function Calls: Methods like
execute(uint256 proposalId)orqueue(uint256 proposalId)rely on this identifier. - Security: The ID guarantees that the executed logic matches what was originally proposed and voted upon.
Cross-Platform Reference
Beyond the smart contract, the Proposal ID is the universal reference used across the ecosystem:
- Frontends & Explorers: Display proposal details and voting history.
- Snapshot & Off-Chain Tools: Sync off-chain sentiment with on-chain execution via the ID.
- Analytics & Reporting: Track governance participation and proposal outcomes over time. This creates a consistent pointer for discussion, analysis, and verification across different platforms.
Derivation & Uniqueness Guarantees
The method of generating the ID is crucial for preventing collisions and ensuring predictability.
- Sequential IDs: Simple counters (e.g., Governor Bravo) guarantee uniqueness but reveal proposal count.
- Hash-Based IDs: Derived from a hash of proposal parameters (e.g.,
keccak256(block.chainid, targets, values, calldatas, descriptionHash)). This is more robust and prevents front-running of proposal numbers. The chosen method impacts how proposals are referenced and discovered within the protocol.
Common Proposal ID Formats
A Proposal ID is a unique identifier for a governance proposal. Its format varies by blockchain, reflecting the underlying data structure used to generate it.
Numeric ID (Compound, Uniswap)
A simple, sequential integer assigned to each new proposal. This is the most common format.
- Example:
Proposal #117on Compound. - Mechanism: Stored as a
uint256in the governance contract's state, incremented with each proposal submission. - Use Case: Simple lookup and reference in governance interfaces and on-chain calls.
Keccak256 Hash (Aave, Arbitrum)
A unique 32-byte identifier generated by hashing the proposal's core parameters. This creates a content-addressable ID.
- Example:
0x8f7a...c4d2 - Mechanism: The hash is typically computed from the proposal's targets, values, calldata, and description.
- Advantage: The ID is deterministic and verifiable, preventing collisions and ensuring proposal integrity.
IPFS CID (MakerDAO)
An InterPlanetary File System (IPFS) Content Identifier used to point to the full proposal metadata stored off-chain.
- Example:
QmXyZ...AbC1 - Mechanism: The on-chain proposal stores only the CID hash. The full text, discussion, and context are retrieved from IPFS.
- Benefit: Enables rich, detailed proposals without incurring high on-chain gas costs for storage.
Substrate-Style Multihash (Polkadot, Kusama)
A Blake2b hash (a specific cryptographic function) of the proposal's call data, often represented as a hex string. This is standard in Substrate-based chains.
- Example:
0x1a2b3c... - Mechanism: The
proposeextrinsic hashes the encodedProposalcall to generate the ID. - Context: Used within the
democracyorcollectivepallets to track referenda or council motions.
Cosmos SDK Proposal ID
A sequential uint64 identifier managed by the gov module. It is globally unique across all proposal types (e.g., Text, ParameterChange, SoftwareUpgrade).
- Example:
42 - Mechanism: Stored in the module's
GenesisStateand keeper. TheNextProposalIDis incremented upon submission. - Ecosystem: Standard across Cosmos SDK chains like Cosmos Hub, Osmosis, and Juno.
Transaction Hash as ID (Early DAOs)
The hash of the transaction that created the proposal is used as its identifier. This was more common in early, simpler governance systems.
- Example:
0xe3a1...f9b2(an Ethereum transaction hash). - Mechanism: The proposal's existence and content are inferred from the transaction log events and calldata.
- Limitation: Less explicit than a dedicated ID field, making historical querying more complex.
Role in the Proposal Lifecycle
A Proposal ID is a unique, immutable identifier assigned to a governance submission, serving as its primary reference point throughout its entire lifecycle from creation to execution.
The Proposal ID is the fundamental handle for tracking a governance action. It is typically a sequential integer (e.g., Proposal 42) generated by the smart contract upon submission. This identifier is used in all subsequent interactions: for on-chain voting, querying proposal status, and executing the proposal's payload upon successful passage. Its immutability ensures a permanent, auditable record within the blockchain's state.
Within the proposal lifecycle, the ID anchors key metadata and state transitions. The lifecycle stages—Pending, Active, Passed/Failed, and Executed—are all associated with this single ID. Voters cast their ballots by referencing it, and block explorers index all related data—such as the proposer, description, voting tallies, and transaction hashes—under this primary key. This creates a cohesive, verifiable history for each governance action.
The technical implementation of a Proposal ID is protocol-specific. In systems like Compound and Uniswap, it is a uint256. In Cosmos SDK chains, it may be a unique string or number stored in the governance module's state. Regardless of format, its core function remains: to be a deterministic pointer that prevents ambiguity and ensures that votes and execution logic are applied to the correct proposal, which is critical for the security and integrity of decentralized governance.
Proposal ID Usage in Major Protocols
A Proposal ID is a unique identifier for a governance action, but its structure and lifecycle vary significantly across ecosystems. This section details how major protocols implement and utilize this core governance primitive.
Code Example: Generating a Proposal ID
A practical demonstration of how a unique identifier for a governance proposal is programmatically created, typically using a hash function.
A Proposal ID is a unique, deterministic identifier for a governance proposal, most commonly generated by hashing the proposal's content. In decentralized autonomous organizations (DAOs) like those built on Compound or Uniswap, this is often implemented by taking the keccak256 hash of the encoded proposal parameters. For example, a function might hash the concatenation of proposal targets, values, calldata, and a description hash. This cryptographic method ensures that even a minor change to the proposal's details results in a completely different ID, preserving integrity and preventing collisions.
The generation process is typically encapsulated within the smart contract's proposal submission function. When a governance proposal is created via a function like propose(), the contract internally computes the ID before storing the proposal struct in a mapping. This mapping, often proposals[proposalId], allows the contract to efficiently retrieve all proposal data—such as its proposer, vote counts, and execution state—using this single, unique key. The generated ID is then emitted in an event and returned to the caller, becoming the public reference for the proposal throughout its lifecycle.
Developers interacting with these systems must understand that the ID is not a sequential number but a cryptographic fingerprint. Tools like Ethers.js or web3.py can be used to compute the ID off-chain to verify or predict it. For instance, one can simulate the contract's hashing logic in JavaScript to confirm the ID matches before submitting an on-chain transaction. This practice is crucial for building reliable front-ends and monitoring bots that track proposal creation and status changes in real-time.
Understanding this generation mechanism is key for security auditing. A flawed ID generation algorithm could lead to duplicate IDs or be manipulated by an attacker to bypass governance safeguards. Therefore, the hashing logic should use all immutable proposal parameters and follow the exact same encoding (abi.encode or abi.encodePacked) as the on-chain contract. This ensures consistency between off-chain simulations and on-chain execution, a fundamental requirement for trustworthy decentralized governance systems.
Technical Details
A Proposal ID is a unique identifier for a governance action within a decentralized autonomous organization (DAO) or blockchain protocol. It is the primary reference for tracking a proposal's lifecycle from submission to execution.
A Proposal ID is a unique, sequential identifier assigned to a governance proposal upon its submission to a blockchain protocol's smart contract. It functions as the primary key for querying the proposal's state, metadata, and voting results. The ID is generated by the governance contract, often by incrementing a counter, and is immutable. It is used in all subsequent interactions: to cast votes, check the proposal's status (e.g., active, passed, executed), and trigger the execution of its encoded actions once voting concludes successfully.
Frequently Asked Questions
A Proposal ID is a unique identifier for a governance action within a decentralized autonomous organization (DAO) or blockchain protocol. These questions cover its purpose, structure, and how to interact with it.
A Proposal ID is a unique, sequential identifier assigned to a specific governance proposal within a decentralized protocol, such as a DAO or a blockchain network like Ethereum. It functions as a primary key in the governance contract's state, allowing users to query, reference, and vote on a specific proposal. The ID is typically a uint256 integer that increments with each new proposal submission. For example, in Compound Governance, proposal #117 might refer to a specific parameter change, and its ID is used to cast votes for or against it.
Get In Touch
today.
Our experts will offer a free quote and a 30min call to discuss your project.