Part of #4865 (decentralized moderation teams). Item A2 of the PR split. Wave 1: no dependency, can start now.
Summary
Add a yes/no masternode vote poll kind, resolved by a supermajority of yes plus no with a minimum amount of cast voting power. It serves stage 1 of a challenge ("replace the incumbent?") and charter amendment votes.
Decisions implemented: D21, D41 in #4865.
Current behaviour
VotePoll has only the contested-document variant. YesNoAbstainVoteChoice (YES, NO, ABSTAIN) already exists in packages/rs-dpp/src/voting/vote_choices/yes_no_abstain_vote_choice/mod.rs but nothing uses it. Masternode voting power is 1 per masternode and 4 per evonode (masternode_vote/transform_into_action/v0/mod.rs).
Scope
- A new
VotePoll variant: a yes/no poll keyed by a resource path chosen by the caller, with a vote window, using YesNoAbstainVoteChoice.
- Resolution rule, parameters carried by the poll: it passes when yes power is strictly more than two thirds of yes plus no power (2/3 + 1, abstain excluded from the denominator) and yes plus no power is at least the minimum (400 for moderation, evonode 4, masternode 1). Otherwise it fails. Both numbers are poll parameters, so other features can reuse the kind.
- Storage of votes and tallies, end-date index, stored result (passed or failed with the final tallies), clean-up.
check_for_ended_vote_polls dispatches on the variant and records the outcome; the callback that acts on it is filled in by the challenge and amendment PRs.
- Masternode vote validation accepts the new poll kind, same per-vote cost and prefunded balance rules as today.
- Proof verification for the poll's queries.
Out of scope
- Fund amounts and target-contract windows (A3).
- Opening these polls (H4, H5).
Tests
- Passes at exactly the threshold and fails one power below it, with abstain votes present in both cases.
- Fails when yes plus no is below the minimum even with 100% yes.
- Evonode votes count 4.
- Clean-up leaves nothing behind.
Coordination
A1 adds another variant to the same enum. Trivial conflict, merge either first.
Part of #4865 (decentralized moderation teams). Item A2 of the PR split. Wave 1: no dependency, can start now.
Summary
Add a yes/no masternode vote poll kind, resolved by a supermajority of yes plus no with a minimum amount of cast voting power. It serves stage 1 of a challenge ("replace the incumbent?") and charter amendment votes.
Decisions implemented: D21, D41 in #4865.
Current behaviour
VotePollhas only the contested-document variant.YesNoAbstainVoteChoice(YES, NO, ABSTAIN) already exists inpackages/rs-dpp/src/voting/vote_choices/yes_no_abstain_vote_choice/mod.rsbut nothing uses it. Masternode voting power is 1 per masternode and 4 per evonode (masternode_vote/transform_into_action/v0/mod.rs).Scope
VotePollvariant: a yes/no poll keyed by a resource path chosen by the caller, with a vote window, usingYesNoAbstainVoteChoice.check_for_ended_vote_pollsdispatches on the variant and records the outcome; the callback that acts on it is filled in by the challenge and amendment PRs.Out of scope
Tests
Coordination
A1 adds another variant to the same enum. Trivial conflict, merge either first.