mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-31 13:21:01 +00:00
69ed3087e1
Migrating [PR from the archived polkadot repo](https://github.com/paritytech/polkadot/pull/7272) As per https://github.com/paritytech/polkadot/pull/7272#issuecomment-1559240466, the changes in this MR include the following pallets into [x] Rococo and [x] Westend runtimes: pallet_conviction_voting pallet_referenda pallet_ranked_collective pallet_custom_origins pallet_whitelist And only for westend-runtime: pallet_treasury Following [Kusama runtime config](https://github.com/paritytech/polkadot/tree/dbae30efe080a1d41fe54ef4da8af47614c9ca93/runtime/kusama/src) as a baseline. Benchmarking of the following pallets done for both Rococo and Westend: pallet_conviction_voting pallet_referenda pallet_ranked_collective (only on Rococo) pallet_whitelist And only for Westend: pallet_treasury Removed Gov1 from Rococo as in https://github.com/paritytech/polkadot/pull/6701 Rococo Gov1 storage will be cleaned in a different PR - [issue ](https://github.com/paritytech/polkadot-sdk/issues/1618) --------- Co-authored-by: Giles Cope <gilescope@gmail.com>
321 lines
10 KiB
Rust
321 lines
10 KiB
Rust
// Copyright (C) Parity Technologies (UK) Ltd.
|
|
// This file is part of Polkadot.
|
|
|
|
// Polkadot is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
|
|
// Polkadot is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Polkadot. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
//! Track configurations for governance.
|
|
|
|
use super::*;
|
|
|
|
const fn percent(x: i32) -> sp_arithmetic::FixedI64 {
|
|
sp_arithmetic::FixedI64::from_rational(x as u128, 100)
|
|
}
|
|
use pallet_referenda::Curve;
|
|
const APP_ROOT: Curve = Curve::make_reciprocal(4, 28, percent(80), percent(50), percent(100));
|
|
const SUP_ROOT: Curve = Curve::make_linear(28, 28, percent(0), percent(50));
|
|
const APP_STAKING_ADMIN: Curve = Curve::make_linear(17, 28, percent(50), percent(100));
|
|
const SUP_STAKING_ADMIN: Curve =
|
|
Curve::make_reciprocal(12, 28, percent(1), percent(0), percent(50));
|
|
const APP_TREASURER: Curve = Curve::make_reciprocal(4, 28, percent(80), percent(50), percent(100));
|
|
const SUP_TREASURER: Curve = Curve::make_linear(28, 28, percent(0), percent(50));
|
|
const APP_FELLOWSHIP_ADMIN: Curve = Curve::make_linear(17, 28, percent(50), percent(100));
|
|
const SUP_FELLOWSHIP_ADMIN: Curve =
|
|
Curve::make_reciprocal(12, 28, percent(1), percent(0), percent(50));
|
|
const APP_GENERAL_ADMIN: Curve =
|
|
Curve::make_reciprocal(4, 28, percent(80), percent(50), percent(100));
|
|
const SUP_GENERAL_ADMIN: Curve =
|
|
Curve::make_reciprocal(7, 28, percent(10), percent(0), percent(50));
|
|
const APP_AUCTION_ADMIN: Curve =
|
|
Curve::make_reciprocal(4, 28, percent(80), percent(50), percent(100));
|
|
const SUP_AUCTION_ADMIN: Curve =
|
|
Curve::make_reciprocal(7, 28, percent(10), percent(0), percent(50));
|
|
const APP_LEASE_ADMIN: Curve = Curve::make_linear(17, 28, percent(50), percent(100));
|
|
const SUP_LEASE_ADMIN: Curve = Curve::make_reciprocal(12, 28, percent(1), percent(0), percent(50));
|
|
const APP_REFERENDUM_CANCELLER: Curve = Curve::make_linear(17, 28, percent(50), percent(100));
|
|
const SUP_REFERENDUM_CANCELLER: Curve =
|
|
Curve::make_reciprocal(12, 28, percent(1), percent(0), percent(50));
|
|
const APP_REFERENDUM_KILLER: Curve = Curve::make_linear(17, 28, percent(50), percent(100));
|
|
const SUP_REFERENDUM_KILLER: Curve =
|
|
Curve::make_reciprocal(12, 28, percent(1), percent(0), percent(50));
|
|
const APP_SMALL_TIPPER: Curve = Curve::make_linear(10, 28, percent(50), percent(100));
|
|
const SUP_SMALL_TIPPER: Curve = Curve::make_reciprocal(1, 28, percent(4), percent(0), percent(50));
|
|
const APP_BIG_TIPPER: Curve = Curve::make_linear(10, 28, percent(50), percent(100));
|
|
const SUP_BIG_TIPPER: Curve = Curve::make_reciprocal(8, 28, percent(1), percent(0), percent(50));
|
|
const APP_SMALL_SPENDER: Curve = Curve::make_linear(17, 28, percent(50), percent(100));
|
|
const SUP_SMALL_SPENDER: Curve =
|
|
Curve::make_reciprocal(12, 28, percent(1), percent(0), percent(50));
|
|
const APP_MEDIUM_SPENDER: Curve = Curve::make_linear(23, 28, percent(50), percent(100));
|
|
const SUP_MEDIUM_SPENDER: Curve =
|
|
Curve::make_reciprocal(16, 28, percent(1), percent(0), percent(50));
|
|
const APP_BIG_SPENDER: Curve = Curve::make_linear(28, 28, percent(50), percent(100));
|
|
const SUP_BIG_SPENDER: Curve = Curve::make_reciprocal(20, 28, percent(1), percent(0), percent(50));
|
|
const APP_WHITELISTED_CALLER: Curve =
|
|
Curve::make_reciprocal(16, 28 * 24, percent(96), percent(50), percent(100));
|
|
const SUP_WHITELISTED_CALLER: Curve =
|
|
Curve::make_reciprocal(1, 28, percent(20), percent(5), percent(50));
|
|
|
|
const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo<Balance, BlockNumber>); 15] = [
|
|
(
|
|
0,
|
|
pallet_referenda::TrackInfo {
|
|
name: "root",
|
|
max_deciding: 1,
|
|
decision_deposit: 100 * GRAND,
|
|
prepare_period: 8 * MINUTES,
|
|
decision_period: 20 * MINUTES,
|
|
confirm_period: 12 * MINUTES,
|
|
min_enactment_period: 5 * MINUTES,
|
|
min_approval: APP_ROOT,
|
|
min_support: SUP_ROOT,
|
|
},
|
|
),
|
|
(
|
|
1,
|
|
pallet_referenda::TrackInfo {
|
|
name: "whitelisted_caller",
|
|
max_deciding: 100,
|
|
decision_deposit: 10 * GRAND,
|
|
prepare_period: 6 * MINUTES,
|
|
decision_period: 20 * MINUTES,
|
|
confirm_period: 4 * MINUTES,
|
|
min_enactment_period: 3 * MINUTES,
|
|
min_approval: APP_WHITELISTED_CALLER,
|
|
min_support: SUP_WHITELISTED_CALLER,
|
|
},
|
|
),
|
|
(
|
|
10,
|
|
pallet_referenda::TrackInfo {
|
|
name: "staking_admin",
|
|
max_deciding: 10,
|
|
decision_deposit: 5 * GRAND,
|
|
prepare_period: 8 * MINUTES,
|
|
decision_period: 20 * MINUTES,
|
|
confirm_period: 8 * MINUTES,
|
|
min_enactment_period: 3 * MINUTES,
|
|
min_approval: APP_STAKING_ADMIN,
|
|
min_support: SUP_STAKING_ADMIN,
|
|
},
|
|
),
|
|
(
|
|
11,
|
|
pallet_referenda::TrackInfo {
|
|
name: "treasurer",
|
|
max_deciding: 10,
|
|
decision_deposit: 1 * GRAND,
|
|
prepare_period: 8 * MINUTES,
|
|
decision_period: 20 * MINUTES,
|
|
confirm_period: 8 * MINUTES,
|
|
min_enactment_period: 5 * MINUTES,
|
|
min_approval: APP_TREASURER,
|
|
min_support: SUP_TREASURER,
|
|
},
|
|
),
|
|
(
|
|
12,
|
|
pallet_referenda::TrackInfo {
|
|
name: "lease_admin",
|
|
max_deciding: 10,
|
|
decision_deposit: 5 * GRAND,
|
|
prepare_period: 8 * MINUTES,
|
|
decision_period: 20 * MINUTES,
|
|
confirm_period: 8 * MINUTES,
|
|
min_enactment_period: 3 * MINUTES,
|
|
min_approval: APP_LEASE_ADMIN,
|
|
min_support: SUP_LEASE_ADMIN,
|
|
},
|
|
),
|
|
(
|
|
13,
|
|
pallet_referenda::TrackInfo {
|
|
name: "fellowship_admin",
|
|
max_deciding: 10,
|
|
decision_deposit: 5 * GRAND,
|
|
prepare_period: 8 * MINUTES,
|
|
decision_period: 20 * MINUTES,
|
|
confirm_period: 8 * MINUTES,
|
|
min_enactment_period: 3 * MINUTES,
|
|
min_approval: APP_FELLOWSHIP_ADMIN,
|
|
min_support: SUP_FELLOWSHIP_ADMIN,
|
|
},
|
|
),
|
|
(
|
|
14,
|
|
pallet_referenda::TrackInfo {
|
|
name: "general_admin",
|
|
max_deciding: 10,
|
|
decision_deposit: 5 * GRAND,
|
|
prepare_period: 8 * MINUTES,
|
|
decision_period: 20 * MINUTES,
|
|
confirm_period: 8 * MINUTES,
|
|
min_enactment_period: 3 * MINUTES,
|
|
min_approval: APP_GENERAL_ADMIN,
|
|
min_support: SUP_GENERAL_ADMIN,
|
|
},
|
|
),
|
|
(
|
|
15,
|
|
pallet_referenda::TrackInfo {
|
|
name: "auction_admin",
|
|
max_deciding: 10,
|
|
decision_deposit: 5 * GRAND,
|
|
prepare_period: 8 * MINUTES,
|
|
decision_period: 20 * MINUTES,
|
|
confirm_period: 8 * MINUTES,
|
|
min_enactment_period: 3 * MINUTES,
|
|
min_approval: APP_AUCTION_ADMIN,
|
|
min_support: SUP_AUCTION_ADMIN,
|
|
},
|
|
),
|
|
(
|
|
20,
|
|
pallet_referenda::TrackInfo {
|
|
name: "referendum_canceller",
|
|
max_deciding: 1_000,
|
|
decision_deposit: 10 * GRAND,
|
|
prepare_period: 8 * MINUTES,
|
|
decision_period: 14 * MINUTES,
|
|
confirm_period: 8 * MINUTES,
|
|
min_enactment_period: 3 * MINUTES,
|
|
min_approval: APP_REFERENDUM_CANCELLER,
|
|
min_support: SUP_REFERENDUM_CANCELLER,
|
|
},
|
|
),
|
|
(
|
|
21,
|
|
pallet_referenda::TrackInfo {
|
|
name: "referendum_killer",
|
|
max_deciding: 1_000,
|
|
decision_deposit: 50 * GRAND,
|
|
prepare_period: 8 * MINUTES,
|
|
decision_period: 20 * MINUTES,
|
|
confirm_period: 8 * MINUTES,
|
|
min_enactment_period: 3 * MINUTES,
|
|
min_approval: APP_REFERENDUM_KILLER,
|
|
min_support: SUP_REFERENDUM_KILLER,
|
|
},
|
|
),
|
|
(
|
|
30,
|
|
pallet_referenda::TrackInfo {
|
|
name: "small_tipper",
|
|
max_deciding: 200,
|
|
decision_deposit: 1 * 3 * CENTS,
|
|
prepare_period: 1 * MINUTES,
|
|
decision_period: 14 * MINUTES,
|
|
confirm_period: 4 * MINUTES,
|
|
min_enactment_period: 1 * MINUTES,
|
|
min_approval: APP_SMALL_TIPPER,
|
|
min_support: SUP_SMALL_TIPPER,
|
|
},
|
|
),
|
|
(
|
|
31,
|
|
pallet_referenda::TrackInfo {
|
|
name: "big_tipper",
|
|
max_deciding: 100,
|
|
decision_deposit: 10 * 3 * CENTS,
|
|
prepare_period: 4 * MINUTES,
|
|
decision_period: 14 * MINUTES,
|
|
confirm_period: 12 * MINUTES,
|
|
min_enactment_period: 3 * MINUTES,
|
|
min_approval: APP_BIG_TIPPER,
|
|
min_support: SUP_BIG_TIPPER,
|
|
},
|
|
),
|
|
(
|
|
32,
|
|
pallet_referenda::TrackInfo {
|
|
name: "small_spender",
|
|
max_deciding: 50,
|
|
decision_deposit: 100 * 3 * CENTS,
|
|
prepare_period: 10 * MINUTES,
|
|
decision_period: 20 * MINUTES,
|
|
confirm_period: 10 * MINUTES,
|
|
min_enactment_period: 5 * MINUTES,
|
|
min_approval: APP_SMALL_SPENDER,
|
|
min_support: SUP_SMALL_SPENDER,
|
|
},
|
|
),
|
|
(
|
|
33,
|
|
pallet_referenda::TrackInfo {
|
|
name: "medium_spender",
|
|
max_deciding: 50,
|
|
decision_deposit: 200 * 3 * CENTS,
|
|
prepare_period: 10 * MINUTES,
|
|
decision_period: 20 * MINUTES,
|
|
confirm_period: 12 * MINUTES,
|
|
min_enactment_period: 5 * MINUTES,
|
|
min_approval: APP_MEDIUM_SPENDER,
|
|
min_support: SUP_MEDIUM_SPENDER,
|
|
},
|
|
),
|
|
(
|
|
34,
|
|
pallet_referenda::TrackInfo {
|
|
name: "big_spender",
|
|
max_deciding: 50,
|
|
decision_deposit: 400 * 3 * CENTS,
|
|
prepare_period: 10 * MINUTES,
|
|
decision_period: 20 * MINUTES,
|
|
confirm_period: 14 * MINUTES,
|
|
min_enactment_period: 5 * MINUTES,
|
|
min_approval: APP_BIG_SPENDER,
|
|
min_support: SUP_BIG_SPENDER,
|
|
},
|
|
),
|
|
];
|
|
|
|
pub struct TracksInfo;
|
|
impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
|
|
type Id = u16;
|
|
type RuntimeOrigin = <RuntimeOrigin as frame_support::traits::OriginTrait>::PalletsOrigin;
|
|
fn tracks() -> &'static [(Self::Id, pallet_referenda::TrackInfo<Balance, BlockNumber>)] {
|
|
&TRACKS_DATA[..]
|
|
}
|
|
fn track_for(id: &Self::RuntimeOrigin) -> Result<Self::Id, ()> {
|
|
if let Ok(system_origin) = frame_system::RawOrigin::try_from(id.clone()) {
|
|
match system_origin {
|
|
frame_system::RawOrigin::Root => Ok(0),
|
|
_ => Err(()),
|
|
}
|
|
} else if let Ok(custom_origin) = origins::Origin::try_from(id.clone()) {
|
|
match custom_origin {
|
|
origins::Origin::WhitelistedCaller => Ok(1),
|
|
// General admin
|
|
origins::Origin::StakingAdmin => Ok(10),
|
|
origins::Origin::Treasurer => Ok(11),
|
|
origins::Origin::LeaseAdmin => Ok(12),
|
|
origins::Origin::FellowshipAdmin => Ok(13),
|
|
origins::Origin::GeneralAdmin => Ok(14),
|
|
origins::Origin::AuctionAdmin => Ok(15),
|
|
// Referendum admins
|
|
origins::Origin::ReferendumCanceller => Ok(20),
|
|
origins::Origin::ReferendumKiller => Ok(21),
|
|
// Limited treasury spenders
|
|
origins::Origin::SmallTipper => Ok(30),
|
|
origins::Origin::BigTipper => Ok(31),
|
|
origins::Origin::SmallSpender => Ok(32),
|
|
origins::Origin::MediumSpender => Ok(33),
|
|
origins::Origin::BigSpender => Ok(34),
|
|
_ => Err(()),
|
|
}
|
|
} else {
|
|
Err(())
|
|
}
|
|
}
|
|
}
|
|
pallet_referenda::impl_tracksinfo_get!(TracksInfo, Balance, BlockNumber);
|