Powers 102 Specification
Organisational Structure & Context
Vision & Mission
Powers 102 is a collection of governance paths that demonstrate how to implement governance frameworks from existing DAOs on-chain using the Powers protocol. Unlike Powers 101 which provides a basic organizational structure, Powers 102 showcases specific governance patterns and workflows that are commonly used in production DAOs, implemented as reusable on-chain mandates.
The mission is to provide reference implementations that developers can adapt for their own organizations, demonstrating the flexibility and composability of the Powers protocol.
Treasury Management
Treasury management in Powers 102 varies depending on which governance flow is being demonstrated. Each example showcases different approaches to proposal creation, voting, and execution that can be adapted to various treasury management needs.
Roles
| Role Id | Role name | Selection criteria |
|---|---|---|
| 0 | Admin | Admin role assigned at deployment for system management. |
| 1 | Members | Varies by governance flow - may include token holders, elected representatives, or self-selected participants. |
| 2 | Delegates | Varies by governance flow - may be elected, appointed, or token-weighted. |
| 3 | Nominees | Candidates for elected positions in electoral flow examples. |
| … | Public | Everyone. |
On-chain Mandates
Executive Mandates (executing actions)
| Role | Name & Description | Base contract | User Input | Executable Output | Conditions |
|---|---|---|---|---|---|
| Members | Snapshot & Governor Integration: Propose action with off-chain signaling via Snapshot, followed by on-chain voting via Governor.sol | SnapshotGovernor.sol | "address[] Targets", "uint256[] Values", "bytes[] Calldatas", "string snapshotId" | Oracle-verified execution of proposed action | Snapshot vote passes, Governor vote passes, oracle verification successful |
| Members | Flag Action: Flag an action or proposal as inappropriate | FlagAction.sol | "bytes32 actionHash", "string reason" | Increments flag counter for action | Caller is member, action exists |
| Members | Execute Flagged Consequence: Take consequence action after threshold of flags | FlagAction.sol | "bytes32 actionHash" | Executes predefined consequence | Flag threshold reached (N flags) |
| Admin | Adopt Mandate Package: Deploy and configure multiple new mandates in a single transaction | AdoptMandatePackage.sol | "address[] mandateAddresses", "bytes[] configData" | Adopts multiple mandates with configuration | Valid mandate addresses, compatible with existing framework |
Electoral Mandates (assigning roles)
| Role | Name & Description | Base contract | User Input | Executable Output | Conditions |
|---|---|---|---|---|---|
| Public | Nominate for List Election: Self-nominate for elected role | ListElection.sol | "uint256 roleId", "string statement" | Adds nominee to election list | Election period active, not already nominated |
| Members | Vote in List Election: Vote for one or more nominees | ListElection.sol | "address[] nominees", "uint256 roleId" | Records vote | Valid nominees, voting period active |
| Members | Finalize List Election: Assign roles to winners | ListElection.sol | "uint256 roleId" | Assigns role to top vote recipients | Voting period ended, quorum reached |
| Public | Nominate for Token Election: Self-nominate for token-weighted election | TokenElection.sol | "uint256 roleId", "string statement" | Adds nominee to election | Election period active, holds minimum tokens |
| Members | Delegate Voting Power: Delegate ERC20Votes tokens to nominee | ERC20Votes | "address nominee" | Transfers voting weight | Token holder, valid nominee |
| Members | Finalize Token Election: Assign roles based on delegated tokens | TokenElection.sol | "uint256 roleId" | Assigns role to highest token-weighted nominees | Election period ended, delegation counted |
| Members | Peer Select: Members vote to assign role to peer | PeerSelect.sol | "address peer", "uint256 roleId" | Records selection vote | Valid peer, selection period active |
| Public | Select by Tax Paid: Automatic role assignment based on tax contributions | TaxBasedSelection.sol | "uint256 roleId" | Assigns role to caller | Tax threshold reached in current epoch |
Constitutional Mandates (adopting and revoking mandates)
Constitutional changes in Powers 102 are demonstrated through the Adopt Mandate Package mechanism, which allows for:
- Deployment of multiple related mandates in a single governance action
- Configuration of mandate parameters during adoption
- Integration with existing governance frameworks
- Example implementation that mirrors Powers 101 governance structure
The package adoption mandate is designed to work with an existing 'AdoptMandates' mandate in the governance framework, providing a template for how organizations can upgrade their governance capabilities.
Off-chain Operations
Dispute Resolution
Dispute resolution processes vary by governance flow:
- For Flagged Actions: Community members can flag inappropriate proposals, with automatic consequences after reaching a threshold
- For Elections: Disputes are handled through transparent vote counting and on-chain verification
- For Token-Based Systems: Disputes follow token holder governance processes with on-chain evidence
Code of Conduct / Ethics
Participants in Powers 102 governance flows should:
- Use flagging mechanisms responsibly and only for legitimate concerns
- Participate in good faith during election processes
- Respect the outcomes of on-chain voting mechanisms
- Maintain transparency in delegation and voting activities
- Report bugs or vulnerabilities through proper channels
Communication Channels
Each governance flow may utilize different communication channels depending on implementation:
- Snapshot Integration: Requires Snapshot space configuration and IPFS for proposal storage
- Elections: May use Discord, forums, or dedicated platforms for candidate statements
- General Discussion: GitHub, Discord, and documentation sites for technical discussions
Risk Assessments
Snapshot Oracle Dependency
The Snapshot integration relies on oracle services to verify off-chain votes. Oracle failures or manipulation could disrupt governance. Mitigation: Use multiple oracle providers, implement time-locks, and maintain fallback governance mechanisms.
Flag Action Abuse
The flagging mechanism could be used maliciously to block legitimate proposals if the threshold is set too low. Mitigation: Set appropriate flag thresholds, implement anti-spam measures, and allow for flag review processes.
Token Concentration in Elections
Token-weighted elections may favor large token holders, potentially leading to plutocratic outcomes. Mitigation: Implement quadratic voting, set delegation limits, or combine with other selection mechanisms.
Low Participation in Elections
List elections may suffer from low voter turnout, resulting in unrepresentative outcomes. Mitigation: Set appropriate quorum requirements, extend voting periods, and incentivize participation.
Tax-Based Selection Gaming
Accounts might artificially inflate tax payments to gain roles without genuine contribution. Mitigation: Set meaningful thresholds, implement multi-epoch requirements, and combine with reputation systems.
Mandate Package Complexity
Adopting multiple mandates simultaneously increases the risk of unforeseen interactions or vulnerabilities. Mitigation: Require thorough testing, implement staged rollouts, and maintain emergency pause mechanisms.