Skip to content

Commit

Permalink
Fast Fellowship Promote Tracks (polkadot-fellows#356)
Browse files Browse the repository at this point in the history
Add fast promotion tracks with 7 days (instead of 30 days) voting
period.
The tracks have a 50% turnout and 66% approval criteria. To be used in
combination with paritytech/polkadot-sdk#4778.

It could be that the 50% turnout is too much for tracks I and II, but
for III there are not so many fellows so we can expect them to all vote
IMHO.

---------

Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Co-authored-by: joe petrowski <[email protected]>
  • Loading branch information
ggwpez and joepetrowski authored Aug 2, 2024
1 parent 9d9f164 commit 5ecaca1
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 5 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Runtime apis to help with delegate-stake based Nomination Pools ([SDK v1.13 #4537](https://github.com/paritytech/polkadot-sdk/pull/4537)).
- Kusama system chains: enable PoV-reclaim.

### Added

- Fast promotion tracks for the Fellowship ranks I-III ([polkadot-fellows/runtimes#356](https://github.com/polkadot-fellows/runtimes/pull/356)).

### Changed

- Polkadot chains: allow arbitrary XCM execution ([polkadot-fellows/runtimes#345](https://github.com/polkadot-fellows/runtimes/pull/345)).
- Bounties: Remove payout delay ([polkadot-fellows/runtimes#386](https://github.com/polkadot-fellows/runtimes/pull/386)).
- Polkadot System Chains: Reduce the base transaction fee by half ([polkadot-fellows/runtimes#398](https://github.com/polkadot-fellows/runtimes/pull/398)).

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
mod origins;
mod tracks;
use crate::{
fellowship::origins::EnsureCanFastPromoteTo,
impls::ToParentTreasury,
weights,
xcm_config::{AssetHubUsdt, LocationToAccountId, TreasurerBodyId},
Expand All @@ -33,7 +34,7 @@ use frame_support::{
},
PalletId,
};
use frame_system::{EnsureNever, EnsureRoot, EnsureRootWithSuccess, EnsureWithSuccess};
use frame_system::{EnsureRoot, EnsureRootWithSuccess};
pub use origins::{
pallet_origins as pallet_fellowship_origins, Architects, EnsureCanPromoteTo, EnsureCanRetainAt,
EnsureFellowship, Fellows, Masters, Members, ToVoice,
Expand Down Expand Up @@ -206,8 +207,7 @@ impl pallet_core_fellowship::Config<FellowshipCoreInstance> for Runtime {
>,
EnsureCanPromoteTo,
>;
// TODO until https://github.com/polkadot-fellows/runtimes/pull/356/files
type FastPromoteOrigin = EnsureWithSuccess<EnsureNever<u16>, AccountId, ConstU16<0>>;
type FastPromoteOrigin = EnsureCanFastPromoteTo;
type EvidenceSize = ConstU32<65536>;
type MaxRank = ConstU32<9>;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,16 @@ pub mod pallet_origins {
/// Origin aggregated through weighted votes of those with rank 8 or above when voting on
/// a month-long track; `Success` is 6.
PromoteTo6Dan,

/// Origin aggregated through weighted votes of those with rank 3 or above when voting on
/// a 30 day long track; `Success` is 1.
FastPromoteTo1Dan,
/// Origin aggregated through weighted votes of those with rank 4 or above when voting on
/// a 30 day long track; `Success` is 2.
FastPromoteTo2Dan,
/// Origin aggregated through weighted votes of those with rank 5 or above when voting on
/// a 30 day long track; `Success` is 3.
FastPromoteTo3Dan,
}

impl Origin {
Expand Down Expand Up @@ -244,4 +254,14 @@ pub mod pallet_origins {
PromoteTo6Dan = ranks::DAN_6,
}
}

// Fellowship origin indicating weighted voting from at least the rank of `Success + 2` on
// a 30 day long track; needed for fast Fellowship promotion voting.
decl_ensure! {
pub type EnsureCanFastPromoteTo: EnsureOrigin<Success = Rank> {
FastPromoteTo1Dan = ranks::DAN_1,
FastPromoteTo2Dan = ranks::DAN_2,
FastPromoteTo3Dan = ranks::DAN_3,
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,12 @@ pub mod constants {
pub const PROMOTE_TO_4DAN: TrackId = 24;
pub const PROMOTE_TO_5DAN: TrackId = 25;
pub const PROMOTE_TO_6DAN: TrackId = 26;

// Fast track promotions (30 days) used to fast-track promotions. This works out as the track ID
// minus 28.
pub const FAST_PROMOTE_TO_1DAN: TrackId = 31;
pub const FAST_PROMOTE_TO_2DAN: TrackId = 32;
pub const FAST_PROMOTE_TO_3DAN: TrackId = 33;
}

/// Convert the track ID (defined above) into the minimum rank (i.e. fellowship Dan grade) required
Expand All @@ -71,6 +77,9 @@ impl Convert<TrackId, Rank> for MinRankOfClass {
// A promotion vote; the track ID turns out to be 18 more than the minimum required
// rank.
promotion @ 21..=26 => promotion - 18,
// A fast promotion vote; the track ID turns out to be 28 more than the minimum required
// rank.
fast_promote @ 31..=33 => fast_promote - 28,
_ => Rank::MAX,
}
}
Expand Down Expand Up @@ -110,13 +119,32 @@ const PROMOTE_MIN_SUPPORT: pallet_referenda::Curve = pallet_referenda::Curve::Li
ceil: Perbill::from_percent(100),
};

const FAST_PROMOTE_MAX_DECIDING: u32 = 10;
const FAST_PROMOTE_DECISION_DEPOSIT: Balance = 5 * DOLLARS;
const FAST_PROMOTE_PREPARE_PERIOD: BlockNumber = 0;
const FAST_PROMOTE_DECISION_PERIOD: BlockNumber = 30 * DAYS;
const FAST_PROMOTE_CONFIRM_PERIOD: BlockNumber = HOURS;
const FAST_PROMOTE_MIN_ENACTMENT_PERIOD: BlockNumber = 0;
const FAST_PROMOTE_MIN_APPROVAL: pallet_referenda::Curve =
pallet_referenda::Curve::LinearDecreasing {
length: Perbill::from_percent(100),
floor: Perbill::from_percent(66),
ceil: Perbill::from_percent(100),
};
const FAST_PROMOTE_MIN_SUPPORT: pallet_referenda::Curve =
pallet_referenda::Curve::LinearDecreasing {
length: Perbill::from_percent(100),
floor: Perbill::from_percent(50),
ceil: Perbill::from_percent(100),
};

pub struct TracksInfo;
impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
type Id = TrackId;
type RuntimeOrigin = <RuntimeOrigin as frame_support::traits::OriginTrait>::PalletsOrigin;
fn tracks() -> &'static [(Self::Id, pallet_referenda::TrackInfo<Balance, BlockNumber>)] {
use constants as tracks;
static DATA: [(TrackId, pallet_referenda::TrackInfo<Balance, BlockNumber>); 21] = [
static DATA: [(TrackId, pallet_referenda::TrackInfo<Balance, BlockNumber>); 24] = [
(
tracks::MEMBERS,
pallet_referenda::TrackInfo {
Expand Down Expand Up @@ -483,6 +511,48 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
min_support: PROMOTE_MIN_SUPPORT,
},
),
(
tracks::FAST_PROMOTE_TO_1DAN,
pallet_referenda::TrackInfo {
name: "fast promote to I Dan",
max_deciding: FAST_PROMOTE_MAX_DECIDING,
decision_deposit: FAST_PROMOTE_DECISION_DEPOSIT,
prepare_period: FAST_PROMOTE_PREPARE_PERIOD,
decision_period: FAST_PROMOTE_DECISION_PERIOD,
confirm_period: FAST_PROMOTE_CONFIRM_PERIOD,
min_enactment_period: FAST_PROMOTE_MIN_ENACTMENT_PERIOD,
min_approval: FAST_PROMOTE_MIN_APPROVAL,
min_support: FAST_PROMOTE_MIN_SUPPORT,
},
),
(
tracks::FAST_PROMOTE_TO_2DAN,
pallet_referenda::TrackInfo {
name: "fast promote to II Dan",
max_deciding: FAST_PROMOTE_MAX_DECIDING,
decision_deposit: FAST_PROMOTE_DECISION_DEPOSIT,
prepare_period: FAST_PROMOTE_PREPARE_PERIOD,
decision_period: FAST_PROMOTE_DECISION_PERIOD,
confirm_period: FAST_PROMOTE_CONFIRM_PERIOD,
min_enactment_period: FAST_PROMOTE_MIN_ENACTMENT_PERIOD,
min_approval: FAST_PROMOTE_MIN_APPROVAL,
min_support: FAST_PROMOTE_MIN_SUPPORT,
},
),
(
tracks::FAST_PROMOTE_TO_3DAN,
pallet_referenda::TrackInfo {
name: "fast promote to III Dan",
max_deciding: FAST_PROMOTE_MAX_DECIDING,
decision_deposit: FAST_PROMOTE_DECISION_DEPOSIT,
prepare_period: FAST_PROMOTE_PREPARE_PERIOD,
decision_period: FAST_PROMOTE_DECISION_PERIOD,
confirm_period: FAST_PROMOTE_CONFIRM_PERIOD,
min_enactment_period: FAST_PROMOTE_MIN_ENACTMENT_PERIOD,
min_approval: FAST_PROMOTE_MIN_APPROVAL,
min_support: FAST_PROMOTE_MIN_SUPPORT,
},
),
];
&DATA[..]
}
Expand Down Expand Up @@ -525,7 +595,11 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
Ok(Origin::PromoteTo5Dan) => Ok(tracks::PROMOTE_TO_5DAN),
Ok(Origin::PromoteTo6Dan) => Ok(tracks::PROMOTE_TO_6DAN),

_ => Err(()),
Ok(Origin::FastPromoteTo1Dan) => Ok(tracks::FAST_PROMOTE_TO_1DAN),
Ok(Origin::FastPromoteTo2Dan) => Ok(tracks::FAST_PROMOTE_TO_2DAN),
Ok(Origin::FastPromoteTo3Dan) => Ok(tracks::FAST_PROMOTE_TO_3DAN),

Err(_) => Err(()),
}
}
}
Expand Down

0 comments on commit 5ecaca1

Please sign in to comment.