Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Allow voting in democracy #1331

Merged
merged 2 commits into from
Jul 1, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 30 additions & 7 deletions runtime/polkadot/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,12 @@ pub struct BaseFilter;
impl Filter<Call> for BaseFilter {
fn filter(call: &Call) -> bool {
match call {
Call::Parachains(parachains::Call::set_heads(..)) => true,
Call::Parachains(parachains::Call::set_heads(..))
| Call::Democracy(democracy::Call::vote(..))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we should move the allowed calls from the bottom to the top here as well?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It wouldn't gain much as there's usage of defaults for selection happening both ways (e.g. Call::Vesting(vesting::Call::vested_transfer(..)) | Call::Indices(indices::Call::transfer(..)))

| Call::Democracy(democracy::Call::remove_vote(..))
| Call::Democracy(democracy::Call::delegate(..))
| Call::Democracy(democracy::Call::undelegate(..))
=> true,

// Governance stuff
Call::Democracy(_) | Call::Council(_) | Call::TechnicalCommittee(_) |
Expand Down Expand Up @@ -394,20 +399,38 @@ impl democracy::Trait for Runtime {
type VotingPeriod = VotingPeriod;
type MinimumDeposit = MinimumDeposit;
/// A straight majority of the council can decide what their next motion is.
type ExternalOrigin = collective::EnsureProportionAtLeast<_1, _2, AccountId, CouncilCollective>;
type ExternalOrigin = system::EnsureOneOf<AccountId,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dumb question, but would this AccountId allow any account to take on this origin? The following two lines make sense to me.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no - it's an overhang from rust's less-than-ideal type inference; we need to provide it explicitly, but it's not one of the origins.

collective::EnsureProportionAtLeast<_1, _2, AccountId, CouncilCollective>,
system::EnsureRoot<AccountId>,
>;
/// A 60% super-majority can have the next scheduled referendum be a straight majority-carries vote.
type ExternalMajorityOrigin = collective::EnsureProportionAtLeast<_3, _5, AccountId, CouncilCollective>;
type ExternalMajorityOrigin = system::EnsureOneOf<AccountId,
collective::EnsureProportionAtLeast<_3, _5, AccountId, CouncilCollective>,
system::EnsureRoot<AccountId>,
>;
/// A unanimous council can have the next scheduled referendum be a straight default-carries
/// (NTB) vote.
type ExternalDefaultOrigin = collective::EnsureProportionAtLeast<_1, _1, AccountId, CouncilCollective>;
type ExternalDefaultOrigin = system::EnsureOneOf<AccountId,
collective::EnsureProportionAtLeast<_1, _1, AccountId, CouncilCollective>,
system::EnsureRoot<AccountId>,
>;
/// Two thirds of the technical committee can have an ExternalMajority/ExternalDefault vote
/// be tabled immediately and with a shorter voting/enactment period.
type FastTrackOrigin = collective::EnsureProportionAtLeast<_2, _3, AccountId, TechnicalCollective>;
type InstantOrigin = collective::EnsureProportionAtLeast<_1, _1, AccountId, TechnicalCollective>;
type FastTrackOrigin = system::EnsureOneOf<AccountId,
collective::EnsureProportionAtLeast<_2, _3, AccountId, TechnicalCollective>,
system::EnsureRoot<AccountId>,
>;
type InstantOrigin = system::EnsureOneOf<AccountId,
collective::EnsureProportionAtLeast<_1, _1, AccountId, TechnicalCollective>,
system::EnsureRoot<AccountId>,
>;
type InstantAllowed = InstantAllowed;
type FastTrackVotingPeriod = FastTrackVotingPeriod;
// To cancel a proposal which has been passed, 2/3 of the council must agree to it.
type CancellationOrigin = collective::EnsureProportionAtLeast<_2, _3, AccountId, CouncilCollective>;
type CancellationOrigin = system::EnsureOneOf<AccountId,
collective::EnsureProportionAtLeast<_2, _3, AccountId, CouncilCollective>,
system::EnsureRoot<AccountId>,
>;
// Any single technical committee member may veto a coming council proposal, however they can
// only do it once and it lasts only for the cooloff period.
type VetoOrigin = collective::EnsureMember<AccountId, TechnicalCollective>;
Expand Down