Council of 21 Governance

Council of 21 Governance

UltraDAG’s governance model separates technical consensus (validators, stake-weighted) from protocol governance (council, one-vote-per-seat). The Council of 21 governs protocol parameters without requiring any stake — seats are earned through expertise and community trust.


Design Philosophy

Traditional blockchain governance suffers from plutocratic capture: whoever holds the most tokens controls the protocol. UltraDAG deliberately separates these concerns:

  • Validators secure the network through staking and produce DAG vertices
  • The Council governs protocol parameters through expertise-based seats
  • 1-vote-per-seat prevents wealth concentration in governance
No stake requirement
Council members do not need to hold or stake any UDAG to participate in governance. Seats are granted through DAO proposals and represent expertise, not financial investment.

Council Structure

The Council has 21 seats divided across six categories:

CategorySeatsPurpose
Technical7Protocol development, security research, cryptography
Business4Partnerships, ecosystem growth, market strategy
Legal3Regulatory compliance, legal framework
Academic3Research, peer review, formal methods
Community2User advocacy, documentation, outreach
Foundation2Treasury oversight, organizational management
Total21

Each category has a fixed maximum enforced by the protocol. A CouncilMembership proposal to add a Technical member will be rejected if all 7 Technical seats are already occupied.


Voting Mechanics

Equal Governance Weight

Every council member has exactly 1 vote, regardless of category, tenure, or any UDAG holdings:

$$ \text{vote_weight}(\text{member}) = 1 $$

This contrasts with stake-weighted governance where a single whale can override the entire community.

Proposal Lifecycle

A proposal moves through the following states: Created (Active) -> Passed (if quorum + supermajority met) or Rejected (if voting period expires) -> PendingExecution (execution delay) -> Executed (parameter changes applied).

  1. Creation: a council member submits a proposal (requires MIN_FEE_SATS fee)
  2. Active: voting is open for the configured voting period
  3. Passed/Rejected: determined by quorum and supermajority thresholds
  4. Execution delay: passed proposals wait before taking effect
  5. Executed: parameter changes are applied to the protocol

Voting Parameters

ParameterDefaultGovernable Range
Quorum10% of council seats5-100%
Supermajority66% of votes cast51-100%
Voting period120,960 rounds (~3.5 days)1,000-1,000,000 rounds
Execution delay2,016 rounds (~2.8 hours)2,016-100,000 rounds
Max active proposals201-100
Snapshot quorum
The quorum denominator is **snapshotted at proposal creation time**. This prevents manipulation where council members vote and then resign to lower the quorum threshold.

Proposal Types

TextProposal

Non-binding signals. Used for community sentiment, roadmap discussions, and coordination:

{
  "proposal_type": "Text",
  "title": "Increase bootstrap node diversity",
  "description": "Proposal to add bootstrap nodes in APAC and LATAM regions..."
}

TextProposals execute immediately after the delay period with no protocol effect.

ParameterChange

Modifies a governable protocol parameter:

{
  "proposal_type": "ParameterChange",
  "title": "Reduce minimum fee from 10,000 to 5,000 sats",
  "description": "Lower fees to encourage micropayment adoption...",
  "param_name": "min_fee_sats",
  "param_value": 5000
}
DAO activation gate
ParameterChange proposals require at least **8 active validators** (`MIN_DAO_VALIDATORS`) to execute. Below this threshold, passed proposals remain in `PendingExecution` (hibernation) until the validator count recovers. This prevents a small group from modifying protocol parameters before the network is sufficiently decentralized.

CouncilMembership

Add or remove council members:

{
  "proposal_type": "CouncilMembership",
  "title": "Add Jane Doe as Technical council member",
  "description": "Jane is a leading cryptographer with 15 years of experience...",
  "action": "Add",
  "address": "a1b2c3d4...",
  "category": "Technical"
}

Only existing council members can propose and vote on membership changes. Category seat limits are enforced.


Governable Parameters

The following 10 parameters can be modified via ParameterChange proposals:

ParameterDefaultMinMaxDescription
min_fee_sats10,0001100,000,000Minimum transaction fee
min_stake_to_propose10,000 UDAG1 sat1,000,000 UDAGMinimum stake for proposal creation
quorum_numerator105100Quorum percentage
approval_numerator6651100Supermajority percentage
voting_period_rounds120,9601,0001,000,000Voting period length
execution_delay_rounds2,0162,016100,000Delay before execution
max_active_proposals201100Concurrent proposal limit
observer_reward_percent200100Passive staking reward rate
council_emission_percent10030Council’s share of emission
slash_percent5010100Equivocation slash severity
Parameter change safety
All parameters have enforced minimum and maximum bounds. Even a compromised council cannot set fees to `u64::MAX` or slash percentages to 0%.

Council Emission Rewards

Council members receive a share of each round’s block reward:

$$ \text{council_pool} = \text{round_reward} \times \frac{\text{council_emission_percent}}{100} $$

The pool is distributed equally among occupied council seats:

$$ \text{member_reward} = \frac{\text{council_pool}}{\text{occupied_seats}} $$

At default settings (10% council emission, 1 UDAG round reward, 21 seats):

$$ \text{member_reward} = \frac{0.1 \text{ UDAG}}{21} \approx 0.00476 \text{ UDAG/round} $$

This provides economic compensation for governance participation without requiring council members to hold or stake tokens.


DAO Activation Gate

The DAO activation mechanism prevents premature parameter changes:

ConditionBehavior
Active validators >= 8DAO is active, ParameterChange proposals execute normally
Active validators < 8DAO is hibernating, ParameterChange proposals stay in PendingExecution
TextProposalsAlways execute regardless of validator count
CouncilMembershipAlways execute regardless of validator count
Self-healing
The DAO automatically **reactivates** when the validator count recovers above the threshold. Hibernated proposals execute once conditions are met. Conversely, if validators drop out, the DAO automatically **hibernates** — no manual intervention required.

Empty Council Safety

If all council members are removed (all 21 seats vacant):

  • snapshot_total_stake = 0 at proposal creation
  • has_passed_with_params() returns false when total stake is 0
  • No proposals can pass — the council is effectively locked

This prevents a scenario where an attacker removes all members and then self-nominates with no oversight.


RPC Endpoints

EndpointMethodDescription
/proposalPOSTCreate a new governance proposal
/votePOSTVote on an active proposal
/proposalsGETList all proposals (max 200, newest first)
/proposal/:idGETGet proposal details including voter breakdown
/vote/:id/:addressGETCheck vote status for an address on a proposal
/governance/configGETView current governance parameters

Example: View Current Config

curl http://localhost:10333/governance/config
{
  "min_fee_sats": 10000,
  "min_stake_to_propose": 1000000000000,
  "quorum_numerator": 10,
  "approval_numerator": 66,
  "voting_period_rounds": 120960,
  "execution_delay_rounds": 2016,
  "max_active_proposals": 20,
  "observer_reward_percent": 20,
  "council_emission_percent": 10,
  "slash_percent": 50
}

Next Steps