Skip to content

governance: complete CIP-1694 phases 5-8 (tallying, ratification, enactment, epoch boundary) #1955

Description

@wolf31o2

Summary

CIP-1694 governance is partially implemented in Dingo. Phases 1-2 are complete (data structures, DRep management, voting power calculation, activity/expiry tracking, voter type mapping — PRs #1329, #1373). Phases 3-4 are partial (CC hot key auth and resignation done; CC member expiry, threshold calculations, no-confidence handling, parent action chain validation, action expiry not yet). Phases 5-8 are not started.

This issue tracks the remaining work needed for Conway-era governance compliance: vote tallying, ratification, enactment, and epoch boundary processing. The gouroboros conformance suite for these areas (314 Conway tests including GOV/GOVCERT/ENACT/RATIFY/EPOCH) already passes for the protocol layer, so the validation rules are well-defined.

Phase 5 — Vote Tallying

  • DRep vote tallying against active stake distribution
  • SPO vote tallying against active stake distribution
  • CC vote tallying with member quorum
  • Threshold checking against per-action thresholds defined in protocol parameters

Voting thresholds (already defined in protocol params):

  • DRep: dvtCommitteeNoConfidence, dvtCommitteeNormal, dvtHardForkInitiation, dvtPPEconomicGroup, dvtPPGovGroup, dvtPPNetworkGroup, dvtPPTechnicalGroup, dvtTreasuryWithdrawal, dvtUpdateToConstitution
  • SPO: pvtCommitteeNoConfidence, pvtCommitteeNormal, pvtHardForkInitiation, pvtPPSecurityGroup

Phase 6 — Ratification & Enactment

  • Detect when an action has crossed all required thresholds (DRep + SPO + CC where applicable)
  • Enact ParameterChange
  • Enact UpdateCommittee (add/remove CC members)
  • Enact NewConstitution (update constitution hash)
  • Enact TreasuryWithdrawal (move funds from treasury)
  • Schedule HardForkInitiation for the next epoch boundary

Phase 7 — Certificate Processing (Completion)

  • Wire all governance certificate types into the existing ledger certificate pipeline (most done; verify completeness for RegPool, UnregDRep, vote/stake delegation combos)
  • Voting procedure processing (vote messages on actions)
  • Proposal procedure processing (action submission with deposit)
  • Parent action chain validation: previous action root tracking. Requires a gov_roots table not yet created.

Phase 8 — Epoch Boundary Processing

  • Wire ratification + enactment into the epoch transition code path (event/epoch.go EpochTransitionEvent)
  • Recalculate tallies at boundary
  • Process ratifications discovered during the epoch
  • Enact actions
  • Expire old / unratified actions and return their deposits
  • CC member expiry tracking (currently CC member expiry epoch is not stored in the DB — needs schema + migration)

Action Types Reference

Action CC Vote DRep Vote SPO Vote
NoConfidence - yes yes
UpdateCommittee - yes yes
NewConstitution yes yes -
HardForkInitiation yes yes yes
ParameterChange yes yes varies
TreasuryWithdrawal yes yes -
Info - yes yes

Testing

  • Unit tests for tallying, threshold checking, ratification detection per action type
  • Integration tests for full proposal → vote → ratify → enact flow per action type
  • Test edge cases: tied votes, threshold-exactly-met, expired actions, withdrawn actions
  • Test against real mainnet data once enactment lands

Roadmap

Q2 2026 — testnet block production prerequisites; Conway-era compliance.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

Relationships

None yet

Development

No branches or pull requests

Issue actions