mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-17 11:21:07 +00:00
Runtime: Polkadot Fellowship promotion/demotion periods, members activity and salaries (#2607)
* core fellowship * core fellowship weights * salary * weights * fellowship pot * registration period 15 days * use treasury account for salary pay, promotion origin * decision period for tracks 30 days * docs * comment * Couple of fixes and some refactoring * Alter curves to be a bit more conservative * Use `PayOverXcm` for fellowship salary payments * Docs and remove unneeded code * Fixes * Move Fellowship stuff in line with whitepaper * fix: induction by a single Fellow (not proficient) * doc fix * renames, pallet index, allow unpaid for salary pallet * Fix budget units * Fixes * Test sovereign account for Fellowship salaries * Nice address test * Fixes * test for PayOverXcm setup * Update parachains/runtimes/collectives/collectives-polkadot/src/fellowship/mod.rs Co-authored-by: Bastian Köcher <git@kchr.de> --------- Co-authored-by: Gav <gavin@parity.io> Co-authored-by: Bastian Köcher <git@kchr.de>
This commit is contained in:
Generated
+31
@@ -1887,6 +1887,35 @@ dependencies = [
|
|||||||
"unicode-width",
|
"unicode-width",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "collectives-polkadot-it"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"asset-hub-polkadot-runtime",
|
||||||
|
"collectives-polkadot-runtime",
|
||||||
|
"cumulus-pallet-xcmp-queue",
|
||||||
|
"frame-support",
|
||||||
|
"frame-system",
|
||||||
|
"integration-tests-common",
|
||||||
|
"pallet-assets",
|
||||||
|
"pallet-balances",
|
||||||
|
"pallet-core-fellowship",
|
||||||
|
"pallet-salary",
|
||||||
|
"pallet-xcm",
|
||||||
|
"parachains-common",
|
||||||
|
"parity-scale-codec",
|
||||||
|
"polkadot-core-primitives",
|
||||||
|
"polkadot-parachain",
|
||||||
|
"polkadot-runtime",
|
||||||
|
"polkadot-runtime-parachains",
|
||||||
|
"sp-core",
|
||||||
|
"sp-runtime",
|
||||||
|
"sp-weights",
|
||||||
|
"xcm",
|
||||||
|
"xcm-emulator",
|
||||||
|
"xcm-executor",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "collectives-polkadot-runtime"
|
name = "collectives-polkadot-runtime"
|
||||||
version = "1.0.0"
|
version = "1.0.0"
|
||||||
@@ -1915,11 +1944,13 @@ dependencies = [
|
|||||||
"pallet-balances",
|
"pallet-balances",
|
||||||
"pallet-collator-selection",
|
"pallet-collator-selection",
|
||||||
"pallet-collective",
|
"pallet-collective",
|
||||||
|
"pallet-core-fellowship",
|
||||||
"pallet-multisig",
|
"pallet-multisig",
|
||||||
"pallet-preimage",
|
"pallet-preimage",
|
||||||
"pallet-proxy",
|
"pallet-proxy",
|
||||||
"pallet-ranked-collective",
|
"pallet-ranked-collective",
|
||||||
"pallet-referenda",
|
"pallet-referenda",
|
||||||
|
"pallet-salary",
|
||||||
"pallet-scheduler",
|
"pallet-scheduler",
|
||||||
"pallet-session",
|
"pallet-session",
|
||||||
"pallet-timestamp",
|
"pallet-timestamp",
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ members = [
|
|||||||
"parachains/integration-tests/emulated/assets/asset-hub-kusama",
|
"parachains/integration-tests/emulated/assets/asset-hub-kusama",
|
||||||
"parachains/integration-tests/emulated/assets/asset-hub-polkadot",
|
"parachains/integration-tests/emulated/assets/asset-hub-polkadot",
|
||||||
"parachains/integration-tests/emulated/assets/asset-hub-westend",
|
"parachains/integration-tests/emulated/assets/asset-hub-westend",
|
||||||
|
"parachains/integration-tests/emulated/collectives/collectives-polkadot",
|
||||||
"test/client",
|
"test/client",
|
||||||
"test/relay-sproof-builder",
|
"test/relay-sproof-builder",
|
||||||
"test/relay-validation-worker-provider",
|
"test/relay-validation-worker-provider",
|
||||||
|
|||||||
+39
@@ -0,0 +1,39 @@
|
|||||||
|
[package]
|
||||||
|
name = "collectives-polkadot-it"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Parity Technologies <admin@parity.io>"]
|
||||||
|
edition = "2021"
|
||||||
|
description = "Polkadot Collectives parachain runtime integration tests based on xcm-emulator"
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
codec = { package = "parity-scale-codec", version = "3.4.0", default-features = false }
|
||||||
|
|
||||||
|
# Substrate
|
||||||
|
sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" }
|
||||||
|
frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" }
|
||||||
|
frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" }
|
||||||
|
sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" }
|
||||||
|
sp-weights = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" }
|
||||||
|
pallet-balances = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" }
|
||||||
|
pallet-assets = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" }
|
||||||
|
pallet-core-fellowship = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" }
|
||||||
|
pallet-salary = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" }
|
||||||
|
|
||||||
|
# Polkadot
|
||||||
|
polkadot-core-primitives = { default-features = false, git = "https://github.com/paritytech/polkadot", branch = "master" }
|
||||||
|
polkadot-parachain = { default-features = false, git = "https://github.com/paritytech/polkadot", branch = "master" }
|
||||||
|
polkadot-runtime-parachains = { git = "https://github.com/paritytech/polkadot", branch = "master" }
|
||||||
|
polkadot-runtime = { git = "https://github.com/paritytech/polkadot", branch = "master" }
|
||||||
|
xcm = { default-features = false, git = "https://github.com/paritytech/polkadot", branch = "master" }
|
||||||
|
xcm-executor = { default-features = false, git = "https://github.com/paritytech/polkadot", branch = "master" }
|
||||||
|
pallet-xcm = { default-features = false, git = "https://github.com/paritytech/polkadot", branch = "master" }
|
||||||
|
|
||||||
|
# Cumulus
|
||||||
|
parachains-common = { path = "../../../../common" }
|
||||||
|
cumulus-pallet-xcmp-queue = { default-features = false, path = "../../../../../pallets/xcmp-queue" }
|
||||||
|
collectives-polkadot-runtime = { path = "../../../../runtimes/collectives/collectives-polkadot" }
|
||||||
|
asset-hub-polkadot-runtime = { path = "../../../../runtimes/assets/asset-hub-polkadot" }
|
||||||
|
|
||||||
|
# Local
|
||||||
|
xcm-emulator = { default-features = false, path = "../../../../../xcm/xcm-emulator" }
|
||||||
|
integration-tests-common = { default-features = false, path = "../../common" }
|
||||||
+30
@@ -0,0 +1,30 @@
|
|||||||
|
// Copyright Parity Technologies (UK) Ltd.
|
||||||
|
// This file is part of Cumulus.
|
||||||
|
|
||||||
|
// Cumulus 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.
|
||||||
|
|
||||||
|
// Cumulus 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 Cumulus. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
//! Collectives Parachain integration tests based on xcm-emulator.
|
||||||
|
|
||||||
|
#![cfg(test)]
|
||||||
|
|
||||||
|
pub use frame_support::assert_ok;
|
||||||
|
pub use integration_tests_common::{
|
||||||
|
constants::accounts::ALICE, AccountId, AssetHubPolkadot as AssetHub,
|
||||||
|
AssetHubPolkadotPallet as AssetHubPallet, Collectives, CollectivesPallet, Polkadot,
|
||||||
|
PolkadotMockNet,
|
||||||
|
};
|
||||||
|
pub use xcm::prelude::*;
|
||||||
|
pub use xcm_emulator::{assert_expected_events, Parachain};
|
||||||
|
|
||||||
|
mod tests;
|
||||||
+80
@@ -0,0 +1,80 @@
|
|||||||
|
// Copyright Parity Technologies (UK) Ltd.
|
||||||
|
// This file is part of Cumulus.
|
||||||
|
|
||||||
|
// Cumulus 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.
|
||||||
|
|
||||||
|
// Cumulus 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 Cumulus. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
//! Integration tests concerning the Fellowship.
|
||||||
|
|
||||||
|
use crate::*;
|
||||||
|
use collectives_polkadot_runtime::fellowship::FellowshipSalaryPaymaster;
|
||||||
|
use frame_support::traits::{
|
||||||
|
fungibles::{Create, Mutate},
|
||||||
|
tokens::Pay,
|
||||||
|
};
|
||||||
|
use sp_core::crypto::Ss58Codec;
|
||||||
|
use xcm_emulator::{Network, TestExt};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn pay_salary() {
|
||||||
|
let asset_id: u32 = 1984;
|
||||||
|
let pay_from: AccountId =
|
||||||
|
<AccountId as Ss58Codec>::from_string("13w7NdvSR1Af8xsQTArDtZmVvjE8XhWNdL4yed3iFHrUNCnS")
|
||||||
|
.unwrap();
|
||||||
|
let pay_to = Polkadot::account_id_of(ALICE);
|
||||||
|
let pay_amount = 9000;
|
||||||
|
|
||||||
|
PolkadotMockNet::_init();
|
||||||
|
PolkadotMockNet::reset();
|
||||||
|
|
||||||
|
AssetHub::execute_with(|| {
|
||||||
|
type AssetHubAssets = <AssetHub as AssetHubPallet>::Assets;
|
||||||
|
|
||||||
|
assert_ok!(<AssetHubAssets as Create<_>>::create(
|
||||||
|
asset_id,
|
||||||
|
pay_to.clone(),
|
||||||
|
true,
|
||||||
|
pay_amount / 2
|
||||||
|
));
|
||||||
|
assert_ok!(<AssetHubAssets as Mutate<_>>::mint_into(asset_id, &pay_from, pay_amount * 2));
|
||||||
|
});
|
||||||
|
|
||||||
|
Collectives::execute_with(|| {
|
||||||
|
type RuntimeEvent = <Collectives as Parachain>::RuntimeEvent;
|
||||||
|
|
||||||
|
assert_ok!(FellowshipSalaryPaymaster::pay(&pay_to, (), pay_amount));
|
||||||
|
assert_expected_events!(
|
||||||
|
Collectives,
|
||||||
|
vec![
|
||||||
|
RuntimeEvent::XcmpQueue(cumulus_pallet_xcmp_queue::Event::XcmpMessageSent { .. }) => {},
|
||||||
|
]
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
AssetHub::execute_with(|| {
|
||||||
|
type RuntimeEvent = <AssetHub as Parachain>::RuntimeEvent;
|
||||||
|
|
||||||
|
assert_expected_events!(
|
||||||
|
AssetHub,
|
||||||
|
vec![
|
||||||
|
RuntimeEvent::Assets(pallet_assets::Event::Transferred { asset_id: id, from, to, amount }) => {
|
||||||
|
asset_id: id == &asset_id,
|
||||||
|
from: from == &pay_from,
|
||||||
|
to: to == &pay_to,
|
||||||
|
amount: amount == &pay_amount,
|
||||||
|
},
|
||||||
|
RuntimeEvent::XcmpQueue(cumulus_pallet_xcmp_queue::Event::Success { .. }) => {},
|
||||||
|
]
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
// Copyright Parity Technologies (UK) Ltd.
|
||||||
|
// This file is part of Cumulus.
|
||||||
|
|
||||||
|
// Cumulus 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.
|
||||||
|
|
||||||
|
// Cumulus 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 Cumulus. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
mod fellowship;
|
||||||
@@ -34,11 +34,12 @@ use xcm::latest::prelude::*;
|
|||||||
use xcm_builder::{
|
use xcm_builder::{
|
||||||
AccountId32Aliases, AllowExplicitUnpaidExecutionFrom, AllowKnownQueryResponses,
|
AccountId32Aliases, AllowExplicitUnpaidExecutionFrom, AllowKnownQueryResponses,
|
||||||
AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, CurrencyAdapter,
|
AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, CurrencyAdapter,
|
||||||
DenyReserveTransferToRelayChain, DenyThenTry, EnsureXcmOrigin, FungiblesAdapter, IsConcrete,
|
DenyReserveTransferToRelayChain, DenyThenTry, DescribeAllTerminal, DescribeFamily,
|
||||||
LocalMint, NativeAsset, NoChecking, ParentAsSuperuser, ParentIsPreset, RelayChainAsNative,
|
EnsureXcmOrigin, FungiblesAdapter, HashedDescription, IsConcrete, LocalMint, NativeAsset,
|
||||||
SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative,
|
NoChecking, ParentAsSuperuser, ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative,
|
||||||
SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, TrailingSetTopicAsId,
|
SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32,
|
||||||
UsingComponents, WeightInfoBounds, WithComputedOrigin, WithUniqueTopic,
|
SovereignSignedViaLocation, TakeWeightCredit, TrailingSetTopicAsId, UsingComponents,
|
||||||
|
WeightInfoBounds, WithComputedOrigin, WithUniqueTopic,
|
||||||
};
|
};
|
||||||
use xcm_executor::{traits::WithOriginFilter, XcmExecutor};
|
use xcm_executor::{traits::WithOriginFilter, XcmExecutor};
|
||||||
|
|
||||||
@@ -66,6 +67,8 @@ pub type LocationToAccountId = (
|
|||||||
SiblingParachainConvertsVia<Sibling, AccountId>,
|
SiblingParachainConvertsVia<Sibling, AccountId>,
|
||||||
// Straight up local `AccountId32` origins just alias directly to `AccountId`.
|
// Straight up local `AccountId32` origins just alias directly to `AccountId`.
|
||||||
AccountId32Aliases<RelayNetwork, AccountId>,
|
AccountId32Aliases<RelayNetwork, AccountId>,
|
||||||
|
// Foreign locations alias into accounts according to a hash of their standard description.
|
||||||
|
HashedDescription<AccountId, DescribeFamily<DescribeAllTerminal>>,
|
||||||
);
|
);
|
||||||
|
|
||||||
/// Means for transacting the native currency on this chain.
|
/// Means for transacting the native currency on this chain.
|
||||||
|
|||||||
@@ -34,11 +34,12 @@ use xcm::latest::prelude::*;
|
|||||||
use xcm_builder::{
|
use xcm_builder::{
|
||||||
AccountId32Aliases, AllowExplicitUnpaidExecutionFrom, AllowKnownQueryResponses,
|
AccountId32Aliases, AllowExplicitUnpaidExecutionFrom, AllowKnownQueryResponses,
|
||||||
AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, CurrencyAdapter,
|
AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, CurrencyAdapter,
|
||||||
DenyReserveTransferToRelayChain, DenyThenTry, EnsureXcmOrigin, FungiblesAdapter, IsConcrete,
|
DenyReserveTransferToRelayChain, DenyThenTry, DescribeFamily, DescribePalletTerminal,
|
||||||
LocalMint, NativeAsset, NoChecking, ParentAsSuperuser, ParentIsPreset, RelayChainAsNative,
|
EnsureXcmOrigin, FungiblesAdapter, HashedDescription, IsConcrete, LocalMint, NativeAsset,
|
||||||
SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative,
|
NoChecking, ParentAsSuperuser, ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative,
|
||||||
SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, UsingComponents,
|
SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32,
|
||||||
WeightInfoBounds, WithComputedOrigin,
|
SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, WeightInfoBounds,
|
||||||
|
WithComputedOrigin,
|
||||||
};
|
};
|
||||||
use xcm_executor::{traits::WithOriginFilter, XcmExecutor};
|
use xcm_executor::{traits::WithOriginFilter, XcmExecutor};
|
||||||
|
|
||||||
@@ -66,6 +67,9 @@ pub type LocationToAccountId = (
|
|||||||
SiblingParachainConvertsVia<Sibling, AccountId>,
|
SiblingParachainConvertsVia<Sibling, AccountId>,
|
||||||
// Straight up local `AccountId32` origins just alias directly to `AccountId`.
|
// Straight up local `AccountId32` origins just alias directly to `AccountId`.
|
||||||
AccountId32Aliases<RelayNetwork, AccountId>,
|
AccountId32Aliases<RelayNetwork, AccountId>,
|
||||||
|
// Foreign chain account alias into local accounts according to a hash of their standard
|
||||||
|
// description.
|
||||||
|
HashedDescription<AccountId, DescribeFamily<DescribePalletTerminal>>,
|
||||||
);
|
);
|
||||||
|
|
||||||
/// Means for transacting the native currency on this chain.
|
/// Means for transacting the native currency on this chain.
|
||||||
@@ -177,6 +181,9 @@ match_types! {
|
|||||||
pub type FellowsPlurality: impl Contains<MultiLocation> = {
|
pub type FellowsPlurality: impl Contains<MultiLocation> = {
|
||||||
MultiLocation { parents: 1, interior: X2(Parachain(1001), Plurality { id: BodyId::Technical, ..}) }
|
MultiLocation { parents: 1, interior: X2(Parachain(1001), Plurality { id: BodyId::Technical, ..}) }
|
||||||
};
|
};
|
||||||
|
pub type FellowshipSalaryPallet: impl Contains<MultiLocation> = {
|
||||||
|
MultiLocation { parents: 1, interior: X2(Parachain(1001), PalletInstance(64)) }
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A call filter for the XCM Transact instruction. This is a temporary measure until we properly
|
/// A call filter for the XCM Transact instruction. This is a temporary measure until we properly
|
||||||
@@ -355,7 +362,11 @@ pub type Barrier = DenyThenTry<
|
|||||||
// If the message is one that immediately attemps to pay for execution, then allow it.
|
// If the message is one that immediately attemps to pay for execution, then allow it.
|
||||||
AllowTopLevelPaidExecutionFrom<Everything>,
|
AllowTopLevelPaidExecutionFrom<Everything>,
|
||||||
// Parent, its pluralities (i.e. governance bodies), and the Fellows plurality get free execution.
|
// Parent, its pluralities (i.e. governance bodies), and the Fellows plurality get free execution.
|
||||||
AllowExplicitUnpaidExecutionFrom<(ParentOrParentsPlurality, FellowsPlurality)>,
|
AllowExplicitUnpaidExecutionFrom<(
|
||||||
|
ParentOrParentsPlurality,
|
||||||
|
FellowsPlurality,
|
||||||
|
FellowshipSalaryPallet,
|
||||||
|
)>,
|
||||||
// Subscriptions for version tracking are OK.
|
// Subscriptions for version tracking are OK.
|
||||||
AllowSubscriptionsFrom<ParentOrSiblings>,
|
AllowSubscriptionsFrom<ParentOrSiblings>,
|
||||||
),
|
),
|
||||||
@@ -498,3 +509,18 @@ impl pallet_assets::BenchmarkHelper<MultiLocation> for XcmBenchmarkHelper {
|
|||||||
MultiLocation { parents: 1, interior: X1(Parachain(id)) }
|
MultiLocation { parents: 1, interior: X1(Parachain(id)) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn foreign_pallet_has_correct_local_account() {
|
||||||
|
use sp_core::crypto::{Ss58AddressFormat, Ss58Codec};
|
||||||
|
use xcm_executor::traits::ConvertLocation;
|
||||||
|
|
||||||
|
const COLLECTIVES_PARAID: u32 = 1001;
|
||||||
|
const FELLOWSHIP_SALARY_PALLET_ID: u8 = 64;
|
||||||
|
let fellowship_salary =
|
||||||
|
(Parent, Parachain(COLLECTIVES_PARAID), PalletInstance(FELLOWSHIP_SALARY_PALLET_ID));
|
||||||
|
let account = LocationToAccountId::convert_location(&fellowship_salary.into()).unwrap();
|
||||||
|
let polkadot = Ss58AddressFormat::try_from("polkadot").unwrap();
|
||||||
|
let address = Ss58Codec::to_ss58check_with_version(&account, polkadot);
|
||||||
|
assert_eq!(address, "13w7NdvSR1Af8xsQTArDtZmVvjE8XhWNdL4yed3iFHrUNCnS");
|
||||||
|
}
|
||||||
|
|||||||
@@ -36,6 +36,8 @@ pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/parityt
|
|||||||
pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
|
pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
|
||||||
pallet-referenda = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
|
pallet-referenda = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
|
||||||
pallet-ranked-collective = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
|
pallet-ranked-collective = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
|
||||||
|
pallet-core-fellowship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
|
||||||
|
pallet-salary = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
|
||||||
sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
|
sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
|
||||||
sp-arithmetic = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "master" }
|
sp-arithmetic = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "master" }
|
||||||
sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
|
sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
|
||||||
@@ -103,6 +105,8 @@ runtime-benchmarks = [
|
|||||||
"pallet-preimage/runtime-benchmarks",
|
"pallet-preimage/runtime-benchmarks",
|
||||||
"pallet-referenda/runtime-benchmarks",
|
"pallet-referenda/runtime-benchmarks",
|
||||||
"pallet-ranked-collective/runtime-benchmarks",
|
"pallet-ranked-collective/runtime-benchmarks",
|
||||||
|
"pallet-core-fellowship/runtime-benchmarks",
|
||||||
|
"pallet-salary/runtime-benchmarks",
|
||||||
]
|
]
|
||||||
try-runtime = [
|
try-runtime = [
|
||||||
"cumulus-pallet-aura-ext/try-runtime",
|
"cumulus-pallet-aura-ext/try-runtime",
|
||||||
@@ -131,6 +135,8 @@ try-runtime = [
|
|||||||
"pallet-preimage/try-runtime",
|
"pallet-preimage/try-runtime",
|
||||||
"pallet-referenda/try-runtime",
|
"pallet-referenda/try-runtime",
|
||||||
"pallet-ranked-collective/try-runtime",
|
"pallet-ranked-collective/try-runtime",
|
||||||
|
"pallet-core-fellowship/try-runtime",
|
||||||
|
"pallet-salary/try-runtime",
|
||||||
]
|
]
|
||||||
std = [
|
std = [
|
||||||
"codec/std",
|
"codec/std",
|
||||||
@@ -187,4 +193,6 @@ std = [
|
|||||||
"pallet-referenda/std",
|
"pallet-referenda/std",
|
||||||
"pallet-ranked-collective/std",
|
"pallet-ranked-collective/std",
|
||||||
"substrate-wasm-builder",
|
"substrate-wasm-builder",
|
||||||
|
"pallet-core-fellowship/std",
|
||||||
|
"pallet-salary/std",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -16,8 +16,8 @@
|
|||||||
pub mod account {
|
pub mod account {
|
||||||
use frame_support::PalletId;
|
use frame_support::PalletId;
|
||||||
|
|
||||||
/// Relay Chain treasury pallet id, used to convert into AccountId
|
/// Polkadot treasury pallet id, used to convert into AccountId
|
||||||
pub const RELAY_TREASURY_PALLET_ID: PalletId = PalletId(*b"py/trsry");
|
pub const POLKADOT_TREASURY_PALLET_ID: PalletId = PalletId(*b"py/trsry");
|
||||||
/// Alliance pallet ID.
|
/// Alliance pallet ID.
|
||||||
/// It is used as a temporarily place to deposit a slashed imbalance
|
/// It is used as a temporarily place to deposit a slashed imbalance
|
||||||
/// before the teleport to the Treasury.
|
/// before the teleport to the Treasury.
|
||||||
|
|||||||
+136
-60
@@ -19,42 +19,38 @@
|
|||||||
pub(crate) mod migration;
|
pub(crate) mod migration;
|
||||||
mod origins;
|
mod origins;
|
||||||
mod tracks;
|
mod tracks;
|
||||||
|
use cumulus_primitives_core::Junction::GeneralIndex;
|
||||||
|
use frame_system::EnsureNever;
|
||||||
pub use origins::{
|
pub use origins::{
|
||||||
pallet_origins as pallet_fellowship_origins, Fellows, FellowshipCandidates, FellowshipExperts,
|
pallet_origins as pallet_fellowship_origins, Architects, EnsureCanPromoteTo, EnsureCanRetainAt,
|
||||||
FellowshipMasters,
|
EnsureFellowship, Fellows, Masters, Members,
|
||||||
};
|
};
|
||||||
|
use xcm_builder::{AliasesIntoAccountId32, LocatableAssetId, PayOverXcm};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
constants, impls::ToParentTreasury, weights, AccountId, Balance, Balances, BlockNumber,
|
constants, impls::ToParentTreasury, weights, AccountId, Balance, Balances, FellowshipReferenda,
|
||||||
FellowshipReferenda, GovernanceLocation, Preimage, RelayTreasuryAccount, Runtime, RuntimeCall,
|
GovernanceLocation, PolkadotTreasuryAccount, Preimage, Runtime, RuntimeCall, RuntimeEvent,
|
||||||
RuntimeEvent, Scheduler, DAYS,
|
Scheduler, DAYS,
|
||||||
};
|
};
|
||||||
use frame_support::{
|
use frame_support::{
|
||||||
parameter_types,
|
parameter_types,
|
||||||
traits::{EitherOf, MapSuccess, TryMapSuccess},
|
traits::{EitherOf, EitherOfDiverse, MapSuccess},
|
||||||
};
|
};
|
||||||
use pallet_xcm::{EnsureXcm, IsVoiceOfBody};
|
use pallet_xcm::{EnsureXcm, IsVoiceOfBody};
|
||||||
use polkadot_runtime_constants::xcm::body::FELLOWSHIP_ADMIN_INDEX;
|
use polkadot_runtime_constants::{time::HOURS, xcm::body::FELLOWSHIP_ADMIN_INDEX};
|
||||||
use sp_arithmetic::traits::CheckedSub;
|
use sp_core::{ConstU128, ConstU32};
|
||||||
use sp_core::ConstU32;
|
use sp_runtime::traits::{AccountIdConversion, ConstU16, ConvertToValue, Replace};
|
||||||
use sp_runtime::{
|
|
||||||
morph_types,
|
|
||||||
traits::{AccountIdConversion, ConstU16, Replace, TypedGet},
|
|
||||||
};
|
|
||||||
use xcm::latest::BodyId;
|
use xcm::latest::BodyId;
|
||||||
|
|
||||||
use self::origins::EnsureFellowship;
|
|
||||||
|
|
||||||
/// The Fellowship members' ranks.
|
/// The Fellowship members' ranks.
|
||||||
pub mod ranks {
|
pub mod ranks {
|
||||||
use pallet_ranked_collective::Rank;
|
use pallet_ranked_collective::Rank;
|
||||||
|
|
||||||
pub const CANDIDATES: Rank = 0;
|
pub const DAN_1: Rank = 1; // aka Members.
|
||||||
pub const DAN_1: Rank = 1;
|
|
||||||
pub const DAN_2: Rank = 2;
|
pub const DAN_2: Rank = 2;
|
||||||
pub const DAN_3: Rank = 3; // aka Fellows.
|
pub const DAN_3: Rank = 3; // aka Fellows.
|
||||||
pub const DAN_4: Rank = 4;
|
pub const DAN_4: Rank = 4; // aka Architects.
|
||||||
pub const DAN_5: Rank = 5; // aka Experts.
|
pub const DAN_5: Rank = 5;
|
||||||
pub const DAN_6: Rank = 6;
|
pub const DAN_6: Rank = 6;
|
||||||
pub const DAN_7: Rank = 7; // aka Masters.
|
pub const DAN_7: Rank = 7; // aka Masters.
|
||||||
pub const DAN_8: Rank = 8;
|
pub const DAN_8: Rank = 8;
|
||||||
@@ -62,9 +58,6 @@ pub mod ranks {
|
|||||||
}
|
}
|
||||||
|
|
||||||
parameter_types! {
|
parameter_types! {
|
||||||
pub const AlarmInterval: BlockNumber = 1;
|
|
||||||
pub const SubmissionDeposit: Balance = 0;
|
|
||||||
pub const UndecidingTimeout: BlockNumber = 7 * DAYS;
|
|
||||||
// Referenda pallet account, used to temporarily deposit slashed imbalance before teleporting.
|
// Referenda pallet account, used to temporarily deposit slashed imbalance before teleporting.
|
||||||
pub ReferendaPalletAccount: AccountId = constants::account::REFERENDA_PALLET_ID.into_account_truncating();
|
pub ReferendaPalletAccount: AccountId = constants::account::REFERENDA_PALLET_ID.into_account_truncating();
|
||||||
pub const FellowshipAdminBodyId: BodyId = BodyId::Index(FELLOWSHIP_ADMIN_INDEX);
|
pub const FellowshipAdminBodyId: BodyId = BodyId::Index(FELLOWSHIP_ADMIN_INDEX);
|
||||||
@@ -80,63 +73,146 @@ impl pallet_referenda::Config<FellowshipReferendaInstance> for Runtime {
|
|||||||
type RuntimeEvent = RuntimeEvent;
|
type RuntimeEvent = RuntimeEvent;
|
||||||
type Scheduler = Scheduler;
|
type Scheduler = Scheduler;
|
||||||
type Currency = Balances;
|
type Currency = Balances;
|
||||||
|
// Fellows can submit proposals.
|
||||||
type SubmitOrigin =
|
type SubmitOrigin =
|
||||||
pallet_ranked_collective::EnsureMember<Runtime, FellowshipCollectiveInstance, 1>;
|
pallet_ranked_collective::EnsureMember<Runtime, FellowshipCollectiveInstance, 3>;
|
||||||
type CancelOrigin = FellowshipExperts;
|
type CancelOrigin = Architects;
|
||||||
type KillOrigin = FellowshipMasters;
|
type KillOrigin = Masters;
|
||||||
type Slash = ToParentTreasury<RelayTreasuryAccount, ReferendaPalletAccount, Runtime>;
|
type Slash = ToParentTreasury<PolkadotTreasuryAccount, ReferendaPalletAccount, Runtime>;
|
||||||
type Votes = pallet_ranked_collective::Votes;
|
type Votes = pallet_ranked_collective::Votes;
|
||||||
type Tally = pallet_ranked_collective::TallyOf<Runtime, FellowshipCollectiveInstance>;
|
type Tally = pallet_ranked_collective::TallyOf<Runtime, FellowshipCollectiveInstance>;
|
||||||
type SubmissionDeposit = SubmissionDeposit;
|
type SubmissionDeposit = ConstU128<0>;
|
||||||
type MaxQueued = ConstU32<100>;
|
type MaxQueued = ConstU32<100>;
|
||||||
type UndecidingTimeout = UndecidingTimeout;
|
type UndecidingTimeout = ConstU32<{ 7 * DAYS }>;
|
||||||
type AlarmInterval = AlarmInterval;
|
type AlarmInterval = ConstU32<1>;
|
||||||
type Tracks = tracks::TracksInfo;
|
type Tracks = tracks::TracksInfo;
|
||||||
type Preimages = Preimage;
|
type Preimages = Preimage;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type FellowshipCollectiveInstance = pallet_ranked_collective::Instance1;
|
pub type FellowshipCollectiveInstance = pallet_ranked_collective::Instance1;
|
||||||
|
|
||||||
morph_types! {
|
|
||||||
/// A `TryMorph` implementation to reduce a scalar by a particular amount, checking for
|
|
||||||
/// underflow.
|
|
||||||
pub type CheckedReduceBy<N: TypedGet>: TryMorph = |r: N::Type| -> Result<N::Type, ()> {
|
|
||||||
r.checked_sub(&N::get()).ok_or(())
|
|
||||||
} where N::Type: CheckedSub;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl pallet_ranked_collective::Config<FellowshipCollectiveInstance> for Runtime {
|
impl pallet_ranked_collective::Config<FellowshipCollectiveInstance> for Runtime {
|
||||||
type WeightInfo = weights::pallet_ranked_collective::WeightInfo<Runtime>;
|
type WeightInfo = weights::pallet_ranked_collective::WeightInfo<Runtime>;
|
||||||
type RuntimeEvent = RuntimeEvent;
|
type RuntimeEvent = RuntimeEvent;
|
||||||
// Promotion is by any of:
|
// Promotions and the induction of new members are serviced by `FellowshipCore` pallet instance.
|
||||||
// - Root can promote arbitrarily.
|
type PromoteOrigin = EnsureNever<pallet_ranked_collective::Rank>;
|
||||||
// - the FellowshipAdmin origin (i.e. token holder referendum);
|
|
||||||
// - a vote by the rank *above* the new rank.
|
|
||||||
type PromoteOrigin = EitherOf<
|
|
||||||
frame_system::EnsureRootWithSuccess<Self::AccountId, ConstU16<65535>>,
|
|
||||||
EitherOf<
|
|
||||||
MapSuccess<
|
|
||||||
EnsureXcm<IsVoiceOfBody<GovernanceLocation, FellowshipAdminBodyId>>,
|
|
||||||
Replace<ConstU16<9>>,
|
|
||||||
>,
|
|
||||||
TryMapSuccess<EnsureFellowship, CheckedReduceBy<ConstU16<1>>>,
|
|
||||||
>,
|
|
||||||
>;
|
|
||||||
// Demotion is by any of:
|
// Demotion is by any of:
|
||||||
// - Root can demote arbitrarily.
|
// - Root can demote arbitrarily.
|
||||||
// - the FellowshipAdmin origin (i.e. token holder referendum);
|
// - the FellowshipAdmin origin (i.e. token holder referendum);
|
||||||
// - a vote by the rank two above the current rank.
|
|
||||||
type DemoteOrigin = EitherOf<
|
type DemoteOrigin = EitherOf<
|
||||||
frame_system::EnsureRootWithSuccess<Self::AccountId, ConstU16<65535>>,
|
frame_system::EnsureRootWithSuccess<Self::AccountId, ConstU16<{ ranks::DAN_9 }>>,
|
||||||
EitherOf<
|
MapSuccess<
|
||||||
MapSuccess<
|
EnsureXcm<IsVoiceOfBody<GovernanceLocation, FellowshipAdminBodyId>>,
|
||||||
EnsureXcm<IsVoiceOfBody<GovernanceLocation, FellowshipAdminBodyId>>,
|
Replace<ConstU16<{ ranks::DAN_9 }>>,
|
||||||
Replace<ConstU16<9>>,
|
|
||||||
>,
|
|
||||||
TryMapSuccess<EnsureFellowship, CheckedReduceBy<ConstU16<2>>>,
|
|
||||||
>,
|
>,
|
||||||
>;
|
>;
|
||||||
type Polls = FellowshipReferenda;
|
type Polls = FellowshipReferenda;
|
||||||
type MinRankOfClass = sp_runtime::traits::Identity;
|
type MinRankOfClass = tracks::MinRankOfClass;
|
||||||
type VoteWeight = pallet_ranked_collective::Geometric;
|
type VoteWeight = pallet_ranked_collective::Geometric;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub type FellowshipCoreInstance = pallet_core_fellowship::Instance1;
|
||||||
|
|
||||||
|
impl pallet_core_fellowship::Config<FellowshipCoreInstance> for Runtime {
|
||||||
|
type WeightInfo = weights::pallet_core_fellowship::WeightInfo<Runtime>;
|
||||||
|
type RuntimeEvent = RuntimeEvent;
|
||||||
|
type Members = pallet_ranked_collective::Pallet<Runtime, FellowshipCollectiveInstance>;
|
||||||
|
type Balance = Balance;
|
||||||
|
// Parameters are set by any of:
|
||||||
|
// - Root;
|
||||||
|
// - the FellowshipAdmin origin (i.e. token holder referendum);
|
||||||
|
// - a vote among all Fellows.
|
||||||
|
type ParamsOrigin = EitherOfDiverse<
|
||||||
|
EnsureXcm<IsVoiceOfBody<GovernanceLocation, FellowshipAdminBodyId>>,
|
||||||
|
Fellows,
|
||||||
|
>;
|
||||||
|
// Induction (creating a candidate) is by any of:
|
||||||
|
// - Root;
|
||||||
|
// - the FellowshipAdmin origin (i.e. token holder referendum);
|
||||||
|
// - a single Fellow;
|
||||||
|
// - a vote among all Members.
|
||||||
|
type InductOrigin = EitherOfDiverse<
|
||||||
|
EnsureXcm<IsVoiceOfBody<GovernanceLocation, FellowshipAdminBodyId>>,
|
||||||
|
EitherOfDiverse<
|
||||||
|
pallet_ranked_collective::EnsureMember<
|
||||||
|
Runtime,
|
||||||
|
FellowshipCollectiveInstance,
|
||||||
|
{ ranks::DAN_3 },
|
||||||
|
>,
|
||||||
|
Members,
|
||||||
|
>,
|
||||||
|
>;
|
||||||
|
// Approval (rank-retention) of a Member's current rank is by any of:
|
||||||
|
// - Root;
|
||||||
|
// - the FellowshipAdmin origin (i.e. token holder referendum);
|
||||||
|
// - a vote by the rank two above the current rank for all retention up to the Master rank.
|
||||||
|
type ApproveOrigin = EitherOf<
|
||||||
|
MapSuccess<
|
||||||
|
EnsureXcm<IsVoiceOfBody<GovernanceLocation, FellowshipAdminBodyId>>,
|
||||||
|
Replace<ConstU16<{ ranks::DAN_9 }>>,
|
||||||
|
>,
|
||||||
|
EnsureCanRetainAt,
|
||||||
|
>;
|
||||||
|
// Promotion is by any of:
|
||||||
|
// - Root can promote arbitrarily.
|
||||||
|
// - the FellowshipAdmin origin (i.e. token holder referendum);
|
||||||
|
// - a vote by the rank two above the new rank for all promotions up to the Master rank.
|
||||||
|
type PromoteOrigin = EitherOf<
|
||||||
|
MapSuccess<
|
||||||
|
EnsureXcm<IsVoiceOfBody<GovernanceLocation, FellowshipAdminBodyId>>,
|
||||||
|
Replace<ConstU16<{ ranks::DAN_9 }>>,
|
||||||
|
>,
|
||||||
|
EnsureCanPromoteTo,
|
||||||
|
>;
|
||||||
|
type EvidenceSize = ConstU32<65536>;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub type FellowshipSalaryInstance = pallet_salary::Instance1;
|
||||||
|
|
||||||
|
use xcm::prelude::*;
|
||||||
|
|
||||||
|
parameter_types! {
|
||||||
|
pub AssetHub: MultiLocation = (Parent, Parachain(1000)).into();
|
||||||
|
pub AssetHubUsdtId: AssetId = (PalletInstance(50), GeneralIndex(1984)).into();
|
||||||
|
pub UsdtAsset: LocatableAssetId = LocatableAssetId {
|
||||||
|
location: AssetHub::get(),
|
||||||
|
asset_id: AssetHubUsdtId::get(),
|
||||||
|
};
|
||||||
|
// The interior location on AssetHub for the paying account. This is the Fellowship Salary
|
||||||
|
// pallet instance (which sits at index 64). This sovereign account will need funding.
|
||||||
|
pub Interior: InteriorMultiLocation = PalletInstance(64).into();
|
||||||
|
}
|
||||||
|
|
||||||
|
const USDT_UNITS: u128 = 1_000_000;
|
||||||
|
|
||||||
|
/// [`PayOverXcm`] setup to pay the Fellowship salary on the AssetHub in USDT.
|
||||||
|
pub type FellowshipSalaryPaymaster = PayOverXcm<
|
||||||
|
Interior,
|
||||||
|
crate::xcm_config::XcmRouter,
|
||||||
|
crate::PolkadotXcm,
|
||||||
|
ConstU32<{ 6 * HOURS }>,
|
||||||
|
AccountId,
|
||||||
|
(),
|
||||||
|
ConvertToValue<UsdtAsset>,
|
||||||
|
AliasesIntoAccountId32<(), AccountId>,
|
||||||
|
>;
|
||||||
|
|
||||||
|
impl pallet_salary::Config<FellowshipSalaryInstance> for Runtime {
|
||||||
|
type WeightInfo = weights::pallet_salary::WeightInfo<Runtime>;
|
||||||
|
type RuntimeEvent = RuntimeEvent;
|
||||||
|
type Paymaster = FellowshipSalaryPaymaster;
|
||||||
|
type Members = pallet_ranked_collective::Pallet<Runtime, FellowshipCollectiveInstance>;
|
||||||
|
|
||||||
|
#[cfg(not(feature = "runtime-benchmarks"))]
|
||||||
|
type Salary = pallet_core_fellowship::Pallet<Runtime, FellowshipCoreInstance>;
|
||||||
|
#[cfg(feature = "runtime-benchmarks")]
|
||||||
|
type Salary = frame_support::traits::tokens::ConvertRank<
|
||||||
|
crate::impls::benchmarks::RankToSalary<Balances>,
|
||||||
|
>;
|
||||||
|
// 15 days to register for a salary payment.
|
||||||
|
type RegistrationPeriod = ConstU32<{ 15 * DAYS }>;
|
||||||
|
// 15 days to claim the salary payment.
|
||||||
|
type PayoutPeriod = ConstU32<{ 15 * DAYS }>;
|
||||||
|
// Total monthly salary budget.
|
||||||
|
type Budget = ConstU128<{ 100_000 * USDT_UNITS }>;
|
||||||
|
}
|
||||||
|
|||||||
+86
-28
@@ -34,32 +34,62 @@ pub mod pallet_origins {
|
|||||||
#[derive(PartialEq, Eq, Clone, MaxEncodedLen, Encode, Decode, TypeInfo, RuntimeDebug)]
|
#[derive(PartialEq, Eq, Clone, MaxEncodedLen, Encode, Decode, TypeInfo, RuntimeDebug)]
|
||||||
#[pallet::origin]
|
#[pallet::origin]
|
||||||
pub enum Origin {
|
pub enum Origin {
|
||||||
/// Origin commanded by any members of the Polkadot Fellowship (no Dan grade needed).
|
/// Origin aggregated through weighted votes of those with rank 1 or above; `Success` is 1.
|
||||||
FellowshipCandidates,
|
Members,
|
||||||
/// Origin commanded by Polkadot Fellows (3rd Dan fellows or greater).
|
/// Origin aggregated through weighted votes of those with rank 2 or above; `Success` is 2.
|
||||||
Fellows,
|
|
||||||
/// Origin commanded by Polkadot Experts (5th Dan fellows or greater).
|
|
||||||
FellowshipExperts,
|
|
||||||
/// Origin commanded by Polkadot Masters (7th Dan fellows of greater).
|
|
||||||
FellowshipMasters,
|
|
||||||
/// Origin commanded by rank 1 of the Polkadot Fellowship and with a success of 1.
|
|
||||||
Fellowship1Dan,
|
|
||||||
/// Origin commanded by rank 2 of the Polkadot Fellowship and with a success of 2.
|
|
||||||
Fellowship2Dan,
|
Fellowship2Dan,
|
||||||
/// Origin commanded by rank 3 of the Polkadot Fellowship and with a success of 3.
|
/// Origin aggregated through weighted votes of those with rank 3 or above; `Success` is 3.
|
||||||
Fellowship3Dan,
|
Fellows,
|
||||||
/// Origin commanded by rank 4 of the Polkadot Fellowship and with a success of 4.
|
/// Origin aggregated through weighted votes of those with rank 4 or above; `Success` is 4.
|
||||||
Fellowship4Dan,
|
Architects,
|
||||||
/// Origin commanded by rank 5 of the Polkadot Fellowship and with a success of 5.
|
/// Origin aggregated through weighted votes of those with rank 5 or above; `Success` is 5.
|
||||||
Fellowship5Dan,
|
Fellowship5Dan,
|
||||||
/// Origin commanded by rank 6 of the Polkadot Fellowship and with a success of 6.
|
/// Origin aggregated through weighted votes of those with rank 6 or above; `Success` is 6.
|
||||||
Fellowship6Dan,
|
Fellowship6Dan,
|
||||||
/// Origin commanded by rank 7 of the Polkadot Fellowship and with a success of 7.
|
/// Origin aggregated through weighted votes of those with rank 7 or above; `Success` is 7.
|
||||||
Fellowship7Dan,
|
Masters,
|
||||||
/// Origin commanded by rank 8 of the Polkadot Fellowship and with a success of 8.
|
/// Origin aggregated through weighted votes of those with rank 8 or above; `Success` is 8.
|
||||||
Fellowship8Dan,
|
Fellowship8Dan,
|
||||||
/// Origin commanded by rank 9 of the Polkadot Fellowship and with a success of 9.
|
/// Origin aggregated through weighted votes of those with rank 9 or above; `Success` is 9.
|
||||||
Fellowship9Dan,
|
Fellowship9Dan,
|
||||||
|
|
||||||
|
/// Origin aggregated through weighted votes of those with rank 3 or above when voting on
|
||||||
|
/// a fortnight-long track; `Success` is 1.
|
||||||
|
RetainAt1Dan,
|
||||||
|
/// Origin aggregated through weighted votes of those with rank 4 or above when voting on
|
||||||
|
/// a fortnight-long track; `Success` is 2.
|
||||||
|
RetainAt2Dan,
|
||||||
|
/// Origin aggregated through weighted votes of those with rank 5 or above when voting on
|
||||||
|
/// a fortnight-long track; `Success` is 3.
|
||||||
|
RetainAt3Dan,
|
||||||
|
/// Origin aggregated through weighted votes of those with rank 6 or above when voting on
|
||||||
|
/// a fortnight-long track; `Success` is 4.
|
||||||
|
RetainAt4Dan,
|
||||||
|
/// Origin aggregated through weighted votes of those with rank 7 or above when voting on
|
||||||
|
/// a fortnight-long track; `Success` is 5.
|
||||||
|
RetainAt5Dan,
|
||||||
|
/// Origin aggregated through weighted votes of those with rank 8 or above when voting on
|
||||||
|
/// a fortnight-long track; `Success` is 6.
|
||||||
|
RetainAt6Dan,
|
||||||
|
|
||||||
|
/// Origin aggregated through weighted votes of those with rank 3 or above when voting on
|
||||||
|
/// a month-long track; `Success` is 1.
|
||||||
|
PromoteTo1Dan,
|
||||||
|
/// Origin aggregated through weighted votes of those with rank 4 or above when voting on
|
||||||
|
/// a month-long track; `Success` is 2.
|
||||||
|
PromoteTo2Dan,
|
||||||
|
/// Origin aggregated through weighted votes of those with rank 5 or above when voting on
|
||||||
|
/// a month-long track; `Success` is 3.
|
||||||
|
PromoteTo3Dan,
|
||||||
|
/// Origin aggregated through weighted votes of those with rank 6 or above when voting on
|
||||||
|
/// a month-long track; `Success` is 4.
|
||||||
|
PromoteTo4Dan,
|
||||||
|
/// Origin aggregated through weighted votes of those with rank 7 or above when voting on
|
||||||
|
/// a month-long track; `Success` is 5.
|
||||||
|
PromoteTo5Dan,
|
||||||
|
/// Origin aggregated through weighted votes of those with rank 8 or above when voting on
|
||||||
|
/// a month-long track; `Success` is 6.
|
||||||
|
PromoteTo6Dan,
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! decl_unit_ensures {
|
macro_rules! decl_unit_ensures {
|
||||||
@@ -93,10 +123,10 @@ pub mod pallet_origins {
|
|||||||
() => {}
|
() => {}
|
||||||
}
|
}
|
||||||
decl_unit_ensures!(
|
decl_unit_ensures!(
|
||||||
FellowshipCandidates: Rank = ranks::CANDIDATES,
|
Members: Rank = ranks::DAN_1,
|
||||||
Fellows: Rank = ranks::DAN_3,
|
Fellows: Rank = ranks::DAN_3,
|
||||||
FellowshipExperts: Rank = ranks::DAN_5,
|
Architects: Rank = ranks::DAN_4,
|
||||||
FellowshipMasters: Rank = ranks::DAN_7,
|
Masters: Rank = ranks::DAN_7,
|
||||||
);
|
);
|
||||||
|
|
||||||
macro_rules! decl_ensure {
|
macro_rules! decl_ensure {
|
||||||
@@ -132,17 +162,45 @@ pub mod pallet_origins {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fellowship origin indicating weighted voting from at least the rank of `Success` on a
|
||||||
|
// week-long track.
|
||||||
decl_ensure! {
|
decl_ensure! {
|
||||||
pub type EnsureFellowship: EnsureOrigin<Success = Rank> {
|
pub type EnsureFellowship: EnsureOrigin<Success = Rank> {
|
||||||
Fellowship1Dan = ranks::DAN_1,
|
Members = ranks::DAN_1,
|
||||||
Fellowship2Dan = ranks::DAN_2,
|
Fellowship2Dan = ranks::DAN_2,
|
||||||
Fellowship3Dan = ranks::DAN_3,
|
Fellows = ranks::DAN_3,
|
||||||
Fellowship4Dan = ranks::DAN_4,
|
Architects = ranks::DAN_4,
|
||||||
Fellowship5Dan = ranks::DAN_5,
|
Fellowship5Dan = ranks::DAN_5,
|
||||||
Fellowship6Dan = ranks::DAN_6,
|
Fellowship6Dan = ranks::DAN_6,
|
||||||
Fellowship7Dan = ranks::DAN_7,
|
Masters = ranks::DAN_7,
|
||||||
Fellowship8Dan = ranks::DAN_8,
|
Fellowship8Dan = ranks::DAN_8,
|
||||||
Fellowship9Dan = ranks::DAN_9,
|
Fellowship9Dan = ranks::DAN_9,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fellowship origin indicating weighted voting from at least the rank of `Success + 2` on
|
||||||
|
// a fortnight-long track; needed for Fellowship retention voting.
|
||||||
|
decl_ensure! {
|
||||||
|
pub type EnsureCanRetainAt: EnsureOrigin<Success = Rank> {
|
||||||
|
RetainAt1Dan = ranks::DAN_1,
|
||||||
|
RetainAt2Dan = ranks::DAN_2,
|
||||||
|
RetainAt3Dan = ranks::DAN_3,
|
||||||
|
RetainAt4Dan = ranks::DAN_4,
|
||||||
|
RetainAt5Dan = ranks::DAN_5,
|
||||||
|
RetainAt6Dan = ranks::DAN_6,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fellowship origin indicating weighted voting from at least the rank of `Success + 2` on
|
||||||
|
// a month-long track; needed for Fellowship promotion voting.
|
||||||
|
decl_ensure! {
|
||||||
|
pub type EnsureCanPromoteTo: EnsureOrigin<Success = Rank> {
|
||||||
|
PromoteTo1Dan = ranks::DAN_1,
|
||||||
|
PromoteTo2Dan = ranks::DAN_2,
|
||||||
|
PromoteTo3Dan = ranks::DAN_3,
|
||||||
|
PromoteTo4Dan = ranks::DAN_4,
|
||||||
|
PromoteTo5Dan = ranks::DAN_5,
|
||||||
|
PromoteTo6Dan = ranks::DAN_6,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+305
-74
@@ -16,8 +16,9 @@
|
|||||||
|
|
||||||
//! Track configurations for Fellowship.
|
//! Track configurations for Fellowship.
|
||||||
|
|
||||||
use crate::{Balance, BlockNumber, RuntimeOrigin, DAYS, DOLLARS, MINUTES};
|
use crate::{Balance, BlockNumber, RuntimeOrigin, DAYS, DOLLARS, HOURS, MINUTES};
|
||||||
use sp_runtime::Perbill;
|
use pallet_ranked_collective::Rank;
|
||||||
|
use sp_runtime::{traits::Convert, Perbill};
|
||||||
|
|
||||||
/// Referendum `TrackId` type.
|
/// Referendum `TrackId` type.
|
||||||
pub type TrackId = u16;
|
pub type TrackId = u16;
|
||||||
@@ -26,57 +27,105 @@ pub type TrackId = u16;
|
|||||||
pub mod constants {
|
pub mod constants {
|
||||||
use super::TrackId;
|
use super::TrackId;
|
||||||
|
|
||||||
pub const CANDIDATES: TrackId = 0;
|
// Regular tracks (7 days) used for general operations. The required rank for voting is the
|
||||||
|
// same as that which is named (and also the track ID).
|
||||||
pub const MEMBERS: TrackId = 1;
|
pub const MEMBERS: TrackId = 1;
|
||||||
pub const PROFICIENTS: TrackId = 2;
|
pub const PROFICIENTS: TrackId = 2;
|
||||||
pub const FELLOWS: TrackId = 3;
|
pub const FELLOWS: TrackId = 3;
|
||||||
pub const SENIOR_FELLOWS: TrackId = 4;
|
pub const ARCHITECTS: TrackId = 4;
|
||||||
pub const EXPERTS: TrackId = 5;
|
pub const ARCHITECTS_ADEPT: TrackId = 5;
|
||||||
pub const SENIOR_EXPERTS: TrackId = 6;
|
pub const GRAND_ARCHITECTS: TrackId = 6;
|
||||||
pub const MASTERS: TrackId = 7;
|
pub const MASTERS: TrackId = 7;
|
||||||
pub const SENIOR_MASTERS: TrackId = 8;
|
pub const MASTERS_CONSTANT: TrackId = 8;
|
||||||
pub const GRAND_MASTERS: TrackId = 9;
|
pub const GRAND_MASTERS: TrackId = 9;
|
||||||
|
|
||||||
|
// Longer tracks (14 days) used for rank retention. These require a rank of two more than the
|
||||||
|
// grade at which they retain (as per the whitepaper). This works out as the track ID minus 8.
|
||||||
|
pub const RETAIN_AT_1DAN: TrackId = 11;
|
||||||
|
pub const RETAIN_AT_2DAN: TrackId = 12;
|
||||||
|
pub const RETAIN_AT_3DAN: TrackId = 13;
|
||||||
|
pub const RETAIN_AT_4DAN: TrackId = 14;
|
||||||
|
pub const RETAIN_AT_5DAN: TrackId = 15;
|
||||||
|
pub const RETAIN_AT_6DAN: TrackId = 16;
|
||||||
|
|
||||||
|
// Longest tracks (30 days) used for promotions. These require a rank of two more than the
|
||||||
|
// grade to which they promote (as per the whitepaper). This works out as the track ID minus 18.
|
||||||
|
pub const PROMOTE_TO_1DAN: TrackId = 21;
|
||||||
|
pub const PROMOTE_TO_2DAN: TrackId = 22;
|
||||||
|
pub const PROMOTE_TO_3DAN: TrackId = 23;
|
||||||
|
pub const PROMOTE_TO_4DAN: TrackId = 24;
|
||||||
|
pub const PROMOTE_TO_5DAN: TrackId = 25;
|
||||||
|
pub const PROMOTE_TO_6DAN: TrackId = 26;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Convert the track ID (defined above) into the minimum rank (i.e. fellowship Dan grade) required
|
||||||
|
/// to vote on the track.
|
||||||
|
pub struct MinRankOfClass;
|
||||||
|
impl Convert<TrackId, Rank> for MinRankOfClass {
|
||||||
|
fn convert(a: TrackId) -> Rank {
|
||||||
|
match a {
|
||||||
|
// Just a regular vote: the track ID is conveniently the same as the minimum rank.
|
||||||
|
regular @ 1..=9 => regular,
|
||||||
|
// A retention vote; the track ID turns out to be 8 more than the minimum required rank.
|
||||||
|
retention @ 11..=16 => retention - 8,
|
||||||
|
// A promotion vote; the track ID turns out to be 18 more than the minimum required rank.
|
||||||
|
promotion @ 21..=26 => promotion - 18,
|
||||||
|
_ => Rank::max_value(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const RETAIN_MAX_DECIDING: u32 = 25;
|
||||||
|
const RETAIN_DECISION_DEPOSIT: Balance = 5 * DOLLARS;
|
||||||
|
const RETAIN_PREPARE_PERIOD: BlockNumber = 0;
|
||||||
|
const RETAIN_DECISION_PERIOD: BlockNumber = 14 * DAYS;
|
||||||
|
const RETAIN_CONFIRM_PERIOD: BlockNumber = 1 * HOURS;
|
||||||
|
const RETAIN_MIN_ENACTMENT_PERIOD: BlockNumber = 0;
|
||||||
|
const RETAIN_MIN_APPROVAL: pallet_referenda::Curve = pallet_referenda::Curve::LinearDecreasing {
|
||||||
|
length: Perbill::from_percent(100),
|
||||||
|
floor: Perbill::from_percent(60),
|
||||||
|
ceil: Perbill::from_percent(100),
|
||||||
|
};
|
||||||
|
const RETAIN_MIN_SUPPORT: pallet_referenda::Curve = pallet_referenda::Curve::LinearDecreasing {
|
||||||
|
length: Perbill::from_percent(100),
|
||||||
|
floor: Perbill::from_percent(10),
|
||||||
|
ceil: Perbill::from_percent(100),
|
||||||
|
};
|
||||||
|
|
||||||
|
const PROMOTE_MAX_DECIDING: u32 = 10;
|
||||||
|
const PROMOTE_DECISION_DEPOSIT: Balance = 5 * DOLLARS;
|
||||||
|
const PROMOTE_PREPARE_PERIOD: BlockNumber = 0;
|
||||||
|
const PROMOTE_DECISION_PERIOD: BlockNumber = 30 * DAYS;
|
||||||
|
const PROMOTE_CONFIRM_PERIOD: BlockNumber = 1 * HOURS;
|
||||||
|
const PROMOTE_MIN_ENACTMENT_PERIOD: BlockNumber = 0;
|
||||||
|
const PROMOTE_MIN_APPROVAL: pallet_referenda::Curve = pallet_referenda::Curve::LinearDecreasing {
|
||||||
|
length: Perbill::from_percent(100),
|
||||||
|
floor: Perbill::from_percent(60),
|
||||||
|
ceil: Perbill::from_percent(100),
|
||||||
|
};
|
||||||
|
const PROMOTE_MIN_SUPPORT: pallet_referenda::Curve = pallet_referenda::Curve::LinearDecreasing {
|
||||||
|
length: Perbill::from_percent(100),
|
||||||
|
floor: Perbill::from_percent(10),
|
||||||
|
ceil: Perbill::from_percent(100),
|
||||||
|
};
|
||||||
|
|
||||||
pub struct TracksInfo;
|
pub struct TracksInfo;
|
||||||
impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
|
impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
|
||||||
type Id = TrackId;
|
type Id = TrackId;
|
||||||
type RuntimeOrigin = <RuntimeOrigin as frame_support::traits::OriginTrait>::PalletsOrigin;
|
type RuntimeOrigin = <RuntimeOrigin as frame_support::traits::OriginTrait>::PalletsOrigin;
|
||||||
fn tracks() -> &'static [(Self::Id, pallet_referenda::TrackInfo<Balance, BlockNumber>)] {
|
fn tracks() -> &'static [(Self::Id, pallet_referenda::TrackInfo<Balance, BlockNumber>)] {
|
||||||
use constants as tracks;
|
use constants as tracks;
|
||||||
static DATA: [(TrackId, pallet_referenda::TrackInfo<Balance, BlockNumber>); 10] = [
|
static DATA: [(TrackId, pallet_referenda::TrackInfo<Balance, BlockNumber>); 21] = [
|
||||||
(
|
|
||||||
tracks::CANDIDATES,
|
|
||||||
pallet_referenda::TrackInfo {
|
|
||||||
name: "candidates",
|
|
||||||
max_deciding: 10,
|
|
||||||
decision_deposit: 100 * DOLLARS,
|
|
||||||
prepare_period: 30 * MINUTES,
|
|
||||||
decision_period: 7 * DAYS,
|
|
||||||
confirm_period: 30 * MINUTES,
|
|
||||||
min_enactment_period: MINUTES,
|
|
||||||
min_approval: pallet_referenda::Curve::LinearDecreasing {
|
|
||||||
length: Perbill::from_percent(100),
|
|
||||||
floor: Perbill::from_percent(50),
|
|
||||||
ceil: Perbill::from_percent(100),
|
|
||||||
},
|
|
||||||
min_support: pallet_referenda::Curve::LinearDecreasing {
|
|
||||||
length: Perbill::from_percent(100),
|
|
||||||
floor: Perbill::from_percent(0),
|
|
||||||
ceil: Perbill::from_percent(50),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
(
|
||||||
tracks::MEMBERS,
|
tracks::MEMBERS,
|
||||||
pallet_referenda::TrackInfo {
|
pallet_referenda::TrackInfo {
|
||||||
name: "members",
|
name: "members",
|
||||||
max_deciding: 10,
|
max_deciding: 10,
|
||||||
decision_deposit: 10 * DOLLARS,
|
decision_deposit: 5 * DOLLARS,
|
||||||
prepare_period: 30 * MINUTES,
|
prepare_period: 30 * MINUTES,
|
||||||
decision_period: 7 * DAYS,
|
decision_period: 7 * DAYS,
|
||||||
confirm_period: 30 * MINUTES,
|
confirm_period: 30 * MINUTES,
|
||||||
min_enactment_period: MINUTES,
|
min_enactment_period: 5 * MINUTES,
|
||||||
min_approval: pallet_referenda::Curve::LinearDecreasing {
|
min_approval: pallet_referenda::Curve::LinearDecreasing {
|
||||||
length: Perbill::from_percent(100),
|
length: Perbill::from_percent(100),
|
||||||
floor: Perbill::from_percent(50),
|
floor: Perbill::from_percent(50),
|
||||||
@@ -85,20 +134,20 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
|
|||||||
min_support: pallet_referenda::Curve::LinearDecreasing {
|
min_support: pallet_referenda::Curve::LinearDecreasing {
|
||||||
length: Perbill::from_percent(100),
|
length: Perbill::from_percent(100),
|
||||||
floor: Perbill::from_percent(0),
|
floor: Perbill::from_percent(0),
|
||||||
ceil: Perbill::from_percent(50),
|
ceil: Perbill::from_percent(100),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
tracks::PROFICIENTS,
|
tracks::PROFICIENTS,
|
||||||
pallet_referenda::TrackInfo {
|
pallet_referenda::TrackInfo {
|
||||||
name: "proficients",
|
name: "proficient members",
|
||||||
max_deciding: 10,
|
max_deciding: 10,
|
||||||
decision_deposit: 10 * DOLLARS,
|
decision_deposit: 5 * DOLLARS,
|
||||||
prepare_period: 30 * MINUTES,
|
prepare_period: 30 * MINUTES,
|
||||||
decision_period: 7 * DAYS,
|
decision_period: 7 * DAYS,
|
||||||
confirm_period: 30 * MINUTES,
|
confirm_period: 30 * MINUTES,
|
||||||
min_enactment_period: MINUTES,
|
min_enactment_period: 5 * MINUTES,
|
||||||
min_approval: pallet_referenda::Curve::LinearDecreasing {
|
min_approval: pallet_referenda::Curve::LinearDecreasing {
|
||||||
length: Perbill::from_percent(100),
|
length: Perbill::from_percent(100),
|
||||||
floor: Perbill::from_percent(50),
|
floor: Perbill::from_percent(50),
|
||||||
@@ -107,7 +156,7 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
|
|||||||
min_support: pallet_referenda::Curve::LinearDecreasing {
|
min_support: pallet_referenda::Curve::LinearDecreasing {
|
||||||
length: Perbill::from_percent(100),
|
length: Perbill::from_percent(100),
|
||||||
floor: Perbill::from_percent(0),
|
floor: Perbill::from_percent(0),
|
||||||
ceil: Perbill::from_percent(50),
|
ceil: Perbill::from_percent(100),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -116,11 +165,11 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
|
|||||||
pallet_referenda::TrackInfo {
|
pallet_referenda::TrackInfo {
|
||||||
name: "fellows",
|
name: "fellows",
|
||||||
max_deciding: 10,
|
max_deciding: 10,
|
||||||
decision_deposit: 10 * DOLLARS,
|
decision_deposit: 5 * DOLLARS,
|
||||||
prepare_period: 30 * MINUTES,
|
prepare_period: 30 * MINUTES,
|
||||||
decision_period: 7 * DAYS,
|
decision_period: 7 * DAYS,
|
||||||
confirm_period: 30 * MINUTES,
|
confirm_period: 30 * MINUTES,
|
||||||
min_enactment_period: MINUTES,
|
min_enactment_period: 5 * MINUTES,
|
||||||
min_approval: pallet_referenda::Curve::LinearDecreasing {
|
min_approval: pallet_referenda::Curve::LinearDecreasing {
|
||||||
length: Perbill::from_percent(100),
|
length: Perbill::from_percent(100),
|
||||||
floor: Perbill::from_percent(50),
|
floor: Perbill::from_percent(50),
|
||||||
@@ -129,20 +178,20 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
|
|||||||
min_support: pallet_referenda::Curve::LinearDecreasing {
|
min_support: pallet_referenda::Curve::LinearDecreasing {
|
||||||
length: Perbill::from_percent(100),
|
length: Perbill::from_percent(100),
|
||||||
floor: Perbill::from_percent(0),
|
floor: Perbill::from_percent(0),
|
||||||
ceil: Perbill::from_percent(50),
|
ceil: Perbill::from_percent(100),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
tracks::SENIOR_FELLOWS,
|
tracks::ARCHITECTS,
|
||||||
pallet_referenda::TrackInfo {
|
pallet_referenda::TrackInfo {
|
||||||
name: "senior fellows",
|
name: "architects",
|
||||||
max_deciding: 10,
|
max_deciding: 10,
|
||||||
decision_deposit: 10 * DOLLARS,
|
decision_deposit: 5 * DOLLARS,
|
||||||
prepare_period: 30 * MINUTES,
|
prepare_period: 30 * MINUTES,
|
||||||
decision_period: 7 * DAYS,
|
decision_period: 7 * DAYS,
|
||||||
confirm_period: 30 * MINUTES,
|
confirm_period: 30 * MINUTES,
|
||||||
min_enactment_period: MINUTES,
|
min_enactment_period: 5 * MINUTES,
|
||||||
min_approval: pallet_referenda::Curve::LinearDecreasing {
|
min_approval: pallet_referenda::Curve::LinearDecreasing {
|
||||||
length: Perbill::from_percent(100),
|
length: Perbill::from_percent(100),
|
||||||
floor: Perbill::from_percent(50),
|
floor: Perbill::from_percent(50),
|
||||||
@@ -151,20 +200,20 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
|
|||||||
min_support: pallet_referenda::Curve::LinearDecreasing {
|
min_support: pallet_referenda::Curve::LinearDecreasing {
|
||||||
length: Perbill::from_percent(100),
|
length: Perbill::from_percent(100),
|
||||||
floor: Perbill::from_percent(0),
|
floor: Perbill::from_percent(0),
|
||||||
ceil: Perbill::from_percent(50),
|
ceil: Perbill::from_percent(100),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
tracks::EXPERTS,
|
tracks::ARCHITECTS_ADEPT,
|
||||||
pallet_referenda::TrackInfo {
|
pallet_referenda::TrackInfo {
|
||||||
name: "experts",
|
name: "architects adept",
|
||||||
max_deciding: 10,
|
max_deciding: 10,
|
||||||
decision_deposit: DOLLARS,
|
decision_deposit: 5 * DOLLARS,
|
||||||
prepare_period: 30 * MINUTES,
|
prepare_period: 30 * MINUTES,
|
||||||
decision_period: 7 * DAYS,
|
decision_period: 7 * DAYS,
|
||||||
confirm_period: 30 * MINUTES,
|
confirm_period: 30 * MINUTES,
|
||||||
min_enactment_period: MINUTES,
|
min_enactment_period: 5 * MINUTES,
|
||||||
min_approval: pallet_referenda::Curve::LinearDecreasing {
|
min_approval: pallet_referenda::Curve::LinearDecreasing {
|
||||||
length: Perbill::from_percent(100),
|
length: Perbill::from_percent(100),
|
||||||
floor: Perbill::from_percent(50),
|
floor: Perbill::from_percent(50),
|
||||||
@@ -173,20 +222,20 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
|
|||||||
min_support: pallet_referenda::Curve::LinearDecreasing {
|
min_support: pallet_referenda::Curve::LinearDecreasing {
|
||||||
length: Perbill::from_percent(100),
|
length: Perbill::from_percent(100),
|
||||||
floor: Perbill::from_percent(0),
|
floor: Perbill::from_percent(0),
|
||||||
ceil: Perbill::from_percent(50),
|
ceil: Perbill::from_percent(100),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
tracks::SENIOR_EXPERTS,
|
tracks::GRAND_ARCHITECTS,
|
||||||
pallet_referenda::TrackInfo {
|
pallet_referenda::TrackInfo {
|
||||||
name: "senior experts",
|
name: "grand architects",
|
||||||
max_deciding: 10,
|
max_deciding: 10,
|
||||||
decision_deposit: DOLLARS,
|
decision_deposit: 5 * DOLLARS,
|
||||||
prepare_period: 30 * MINUTES,
|
prepare_period: 30 * MINUTES,
|
||||||
decision_period: 7 * DAYS,
|
decision_period: 7 * DAYS,
|
||||||
confirm_period: 30 * MINUTES,
|
confirm_period: 30 * MINUTES,
|
||||||
min_enactment_period: MINUTES,
|
min_enactment_period: 5 * MINUTES,
|
||||||
min_approval: pallet_referenda::Curve::LinearDecreasing {
|
min_approval: pallet_referenda::Curve::LinearDecreasing {
|
||||||
length: Perbill::from_percent(100),
|
length: Perbill::from_percent(100),
|
||||||
floor: Perbill::from_percent(50),
|
floor: Perbill::from_percent(50),
|
||||||
@@ -195,7 +244,7 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
|
|||||||
min_support: pallet_referenda::Curve::LinearDecreasing {
|
min_support: pallet_referenda::Curve::LinearDecreasing {
|
||||||
length: Perbill::from_percent(100),
|
length: Perbill::from_percent(100),
|
||||||
floor: Perbill::from_percent(0),
|
floor: Perbill::from_percent(0),
|
||||||
ceil: Perbill::from_percent(50),
|
ceil: Perbill::from_percent(100),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -204,11 +253,11 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
|
|||||||
pallet_referenda::TrackInfo {
|
pallet_referenda::TrackInfo {
|
||||||
name: "masters",
|
name: "masters",
|
||||||
max_deciding: 10,
|
max_deciding: 10,
|
||||||
decision_deposit: DOLLARS,
|
decision_deposit: 5 * DOLLARS,
|
||||||
prepare_period: 30 * MINUTES,
|
prepare_period: 30 * MINUTES,
|
||||||
decision_period: 7 * DAYS,
|
decision_period: 7 * DAYS,
|
||||||
confirm_period: 30 * MINUTES,
|
confirm_period: 30 * MINUTES,
|
||||||
min_enactment_period: MINUTES,
|
min_enactment_period: 5 * MINUTES,
|
||||||
min_approval: pallet_referenda::Curve::LinearDecreasing {
|
min_approval: pallet_referenda::Curve::LinearDecreasing {
|
||||||
length: Perbill::from_percent(100),
|
length: Perbill::from_percent(100),
|
||||||
floor: Perbill::from_percent(50),
|
floor: Perbill::from_percent(50),
|
||||||
@@ -217,20 +266,20 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
|
|||||||
min_support: pallet_referenda::Curve::LinearDecreasing {
|
min_support: pallet_referenda::Curve::LinearDecreasing {
|
||||||
length: Perbill::from_percent(100),
|
length: Perbill::from_percent(100),
|
||||||
floor: Perbill::from_percent(0),
|
floor: Perbill::from_percent(0),
|
||||||
ceil: Perbill::from_percent(50),
|
ceil: Perbill::from_percent(100),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
tracks::SENIOR_MASTERS,
|
tracks::MASTERS_CONSTANT,
|
||||||
pallet_referenda::TrackInfo {
|
pallet_referenda::TrackInfo {
|
||||||
name: "senior masters",
|
name: "masters constant",
|
||||||
max_deciding: 10,
|
max_deciding: 10,
|
||||||
decision_deposit: DOLLARS,
|
decision_deposit: 5 * DOLLARS,
|
||||||
prepare_period: 30 * MINUTES,
|
prepare_period: 30 * MINUTES,
|
||||||
decision_period: 7 * DAYS,
|
decision_period: 7 * DAYS,
|
||||||
confirm_period: 30 * MINUTES,
|
confirm_period: 30 * MINUTES,
|
||||||
min_enactment_period: MINUTES,
|
min_enactment_period: 5 * MINUTES,
|
||||||
min_approval: pallet_referenda::Curve::LinearDecreasing {
|
min_approval: pallet_referenda::Curve::LinearDecreasing {
|
||||||
length: Perbill::from_percent(100),
|
length: Perbill::from_percent(100),
|
||||||
floor: Perbill::from_percent(50),
|
floor: Perbill::from_percent(50),
|
||||||
@@ -239,7 +288,7 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
|
|||||||
min_support: pallet_referenda::Curve::LinearDecreasing {
|
min_support: pallet_referenda::Curve::LinearDecreasing {
|
||||||
length: Perbill::from_percent(100),
|
length: Perbill::from_percent(100),
|
||||||
floor: Perbill::from_percent(0),
|
floor: Perbill::from_percent(0),
|
||||||
ceil: Perbill::from_percent(50),
|
ceil: Perbill::from_percent(100),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -248,11 +297,11 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
|
|||||||
pallet_referenda::TrackInfo {
|
pallet_referenda::TrackInfo {
|
||||||
name: "grand masters",
|
name: "grand masters",
|
||||||
max_deciding: 10,
|
max_deciding: 10,
|
||||||
decision_deposit: DOLLARS,
|
decision_deposit: 5 * DOLLARS,
|
||||||
prepare_period: 30 * MINUTES,
|
prepare_period: 30 * MINUTES,
|
||||||
decision_period: 7 * DAYS,
|
decision_period: 7 * DAYS,
|
||||||
confirm_period: 30 * MINUTES,
|
confirm_period: 30 * MINUTES,
|
||||||
min_enactment_period: MINUTES,
|
min_enactment_period: 5 * MINUTES,
|
||||||
min_approval: pallet_referenda::Curve::LinearDecreasing {
|
min_approval: pallet_referenda::Curve::LinearDecreasing {
|
||||||
length: Perbill::from_percent(100),
|
length: Perbill::from_percent(100),
|
||||||
floor: Perbill::from_percent(50),
|
floor: Perbill::from_percent(50),
|
||||||
@@ -261,10 +310,178 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
|
|||||||
min_support: pallet_referenda::Curve::LinearDecreasing {
|
min_support: pallet_referenda::Curve::LinearDecreasing {
|
||||||
length: Perbill::from_percent(100),
|
length: Perbill::from_percent(100),
|
||||||
floor: Perbill::from_percent(0),
|
floor: Perbill::from_percent(0),
|
||||||
ceil: Perbill::from_percent(50),
|
ceil: Perbill::from_percent(100),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
tracks::RETAIN_AT_1DAN,
|
||||||
|
pallet_referenda::TrackInfo {
|
||||||
|
name: "retain at I Dan",
|
||||||
|
max_deciding: RETAIN_MAX_DECIDING,
|
||||||
|
decision_deposit: RETAIN_DECISION_DEPOSIT,
|
||||||
|
prepare_period: RETAIN_PREPARE_PERIOD,
|
||||||
|
decision_period: RETAIN_DECISION_PERIOD,
|
||||||
|
confirm_period: RETAIN_CONFIRM_PERIOD,
|
||||||
|
min_enactment_period: RETAIN_MIN_ENACTMENT_PERIOD,
|
||||||
|
min_approval: RETAIN_MIN_APPROVAL,
|
||||||
|
min_support: RETAIN_MIN_SUPPORT,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
tracks::RETAIN_AT_2DAN,
|
||||||
|
pallet_referenda::TrackInfo {
|
||||||
|
name: "retain at II Dan",
|
||||||
|
max_deciding: RETAIN_MAX_DECIDING,
|
||||||
|
decision_deposit: RETAIN_DECISION_DEPOSIT,
|
||||||
|
prepare_period: RETAIN_PREPARE_PERIOD,
|
||||||
|
decision_period: RETAIN_DECISION_PERIOD,
|
||||||
|
confirm_period: RETAIN_CONFIRM_PERIOD,
|
||||||
|
min_enactment_period: RETAIN_MIN_ENACTMENT_PERIOD,
|
||||||
|
min_approval: RETAIN_MIN_APPROVAL,
|
||||||
|
min_support: RETAIN_MIN_SUPPORT,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
tracks::RETAIN_AT_3DAN,
|
||||||
|
pallet_referenda::TrackInfo {
|
||||||
|
name: "retain at III Dan",
|
||||||
|
max_deciding: RETAIN_MAX_DECIDING,
|
||||||
|
decision_deposit: RETAIN_DECISION_DEPOSIT,
|
||||||
|
prepare_period: RETAIN_PREPARE_PERIOD,
|
||||||
|
decision_period: RETAIN_DECISION_PERIOD,
|
||||||
|
confirm_period: RETAIN_CONFIRM_PERIOD,
|
||||||
|
min_enactment_period: RETAIN_MIN_ENACTMENT_PERIOD,
|
||||||
|
min_approval: RETAIN_MIN_APPROVAL,
|
||||||
|
min_support: RETAIN_MIN_SUPPORT,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
tracks::RETAIN_AT_4DAN,
|
||||||
|
pallet_referenda::TrackInfo {
|
||||||
|
name: "retain at IV Dan",
|
||||||
|
max_deciding: RETAIN_MAX_DECIDING,
|
||||||
|
decision_deposit: RETAIN_DECISION_DEPOSIT,
|
||||||
|
prepare_period: RETAIN_PREPARE_PERIOD,
|
||||||
|
decision_period: RETAIN_DECISION_PERIOD,
|
||||||
|
confirm_period: RETAIN_CONFIRM_PERIOD,
|
||||||
|
min_enactment_period: RETAIN_MIN_ENACTMENT_PERIOD,
|
||||||
|
min_approval: RETAIN_MIN_APPROVAL,
|
||||||
|
min_support: RETAIN_MIN_SUPPORT,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
tracks::RETAIN_AT_5DAN,
|
||||||
|
pallet_referenda::TrackInfo {
|
||||||
|
name: "retain at V Dan",
|
||||||
|
max_deciding: RETAIN_MAX_DECIDING,
|
||||||
|
decision_deposit: RETAIN_DECISION_DEPOSIT,
|
||||||
|
prepare_period: RETAIN_PREPARE_PERIOD,
|
||||||
|
decision_period: RETAIN_DECISION_PERIOD,
|
||||||
|
confirm_period: RETAIN_CONFIRM_PERIOD,
|
||||||
|
min_enactment_period: RETAIN_MIN_ENACTMENT_PERIOD,
|
||||||
|
min_approval: RETAIN_MIN_APPROVAL,
|
||||||
|
min_support: RETAIN_MIN_SUPPORT,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
tracks::RETAIN_AT_6DAN,
|
||||||
|
pallet_referenda::TrackInfo {
|
||||||
|
name: "retain at VI Dan",
|
||||||
|
max_deciding: RETAIN_MAX_DECIDING,
|
||||||
|
decision_deposit: RETAIN_DECISION_DEPOSIT,
|
||||||
|
prepare_period: RETAIN_PREPARE_PERIOD,
|
||||||
|
decision_period: RETAIN_DECISION_PERIOD,
|
||||||
|
confirm_period: RETAIN_CONFIRM_PERIOD,
|
||||||
|
min_enactment_period: RETAIN_MIN_ENACTMENT_PERIOD,
|
||||||
|
min_approval: RETAIN_MIN_APPROVAL,
|
||||||
|
min_support: RETAIN_MIN_SUPPORT,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
tracks::PROMOTE_TO_1DAN,
|
||||||
|
pallet_referenda::TrackInfo {
|
||||||
|
name: "promote to I Dan",
|
||||||
|
max_deciding: PROMOTE_MAX_DECIDING,
|
||||||
|
decision_deposit: PROMOTE_DECISION_DEPOSIT,
|
||||||
|
prepare_period: PROMOTE_PREPARE_PERIOD,
|
||||||
|
decision_period: PROMOTE_DECISION_PERIOD,
|
||||||
|
confirm_period: PROMOTE_CONFIRM_PERIOD,
|
||||||
|
min_enactment_period: PROMOTE_MIN_ENACTMENT_PERIOD,
|
||||||
|
min_approval: PROMOTE_MIN_APPROVAL,
|
||||||
|
min_support: PROMOTE_MIN_SUPPORT,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
tracks::PROMOTE_TO_2DAN,
|
||||||
|
pallet_referenda::TrackInfo {
|
||||||
|
name: "promote to II Dan",
|
||||||
|
max_deciding: PROMOTE_MAX_DECIDING,
|
||||||
|
decision_deposit: PROMOTE_DECISION_DEPOSIT,
|
||||||
|
prepare_period: PROMOTE_PREPARE_PERIOD,
|
||||||
|
decision_period: PROMOTE_DECISION_PERIOD,
|
||||||
|
confirm_period: PROMOTE_CONFIRM_PERIOD,
|
||||||
|
min_enactment_period: PROMOTE_MIN_ENACTMENT_PERIOD,
|
||||||
|
min_approval: PROMOTE_MIN_APPROVAL,
|
||||||
|
min_support: PROMOTE_MIN_SUPPORT,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
tracks::PROMOTE_TO_3DAN,
|
||||||
|
pallet_referenda::TrackInfo {
|
||||||
|
name: "promote to III Dan",
|
||||||
|
max_deciding: PROMOTE_MAX_DECIDING,
|
||||||
|
decision_deposit: PROMOTE_DECISION_DEPOSIT,
|
||||||
|
prepare_period: PROMOTE_PREPARE_PERIOD,
|
||||||
|
decision_period: PROMOTE_DECISION_PERIOD,
|
||||||
|
confirm_period: PROMOTE_CONFIRM_PERIOD,
|
||||||
|
min_enactment_period: PROMOTE_MIN_ENACTMENT_PERIOD,
|
||||||
|
min_approval: PROMOTE_MIN_APPROVAL,
|
||||||
|
min_support: PROMOTE_MIN_SUPPORT,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
tracks::PROMOTE_TO_4DAN,
|
||||||
|
pallet_referenda::TrackInfo {
|
||||||
|
name: "promote to IV Dan",
|
||||||
|
max_deciding: PROMOTE_MAX_DECIDING,
|
||||||
|
decision_deposit: PROMOTE_DECISION_DEPOSIT,
|
||||||
|
prepare_period: PROMOTE_PREPARE_PERIOD,
|
||||||
|
decision_period: PROMOTE_DECISION_PERIOD,
|
||||||
|
confirm_period: PROMOTE_CONFIRM_PERIOD,
|
||||||
|
min_enactment_period: PROMOTE_MIN_ENACTMENT_PERIOD,
|
||||||
|
min_approval: PROMOTE_MIN_APPROVAL,
|
||||||
|
min_support: PROMOTE_MIN_SUPPORT,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
tracks::PROMOTE_TO_5DAN,
|
||||||
|
pallet_referenda::TrackInfo {
|
||||||
|
name: "promote to V Dan",
|
||||||
|
max_deciding: PROMOTE_MAX_DECIDING,
|
||||||
|
decision_deposit: PROMOTE_DECISION_DEPOSIT,
|
||||||
|
prepare_period: PROMOTE_PREPARE_PERIOD,
|
||||||
|
decision_period: PROMOTE_DECISION_PERIOD,
|
||||||
|
confirm_period: PROMOTE_CONFIRM_PERIOD,
|
||||||
|
min_enactment_period: PROMOTE_MIN_ENACTMENT_PERIOD,
|
||||||
|
min_approval: PROMOTE_MIN_APPROVAL,
|
||||||
|
min_support: PROMOTE_MIN_SUPPORT,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
tracks::PROMOTE_TO_6DAN,
|
||||||
|
pallet_referenda::TrackInfo {
|
||||||
|
name: "promote to VI Dan",
|
||||||
|
max_deciding: PROMOTE_MAX_DECIDING,
|
||||||
|
decision_deposit: PROMOTE_DECISION_DEPOSIT,
|
||||||
|
prepare_period: PROMOTE_PREPARE_PERIOD,
|
||||||
|
decision_period: PROMOTE_DECISION_PERIOD,
|
||||||
|
confirm_period: PROMOTE_CONFIRM_PERIOD,
|
||||||
|
min_enactment_period: PROMOTE_MIN_ENACTMENT_PERIOD,
|
||||||
|
min_approval: PROMOTE_MIN_APPROVAL,
|
||||||
|
min_support: PROMOTE_MIN_SUPPORT,
|
||||||
|
},
|
||||||
|
),
|
||||||
];
|
];
|
||||||
&DATA[..]
|
&DATA[..]
|
||||||
}
|
}
|
||||||
@@ -283,16 +500,30 @@ impl pallet_referenda::TracksInfo<Balance, BlockNumber> for TracksInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
match Origin::try_from(id.clone()) {
|
match Origin::try_from(id.clone()) {
|
||||||
Ok(Origin::FellowshipCandidates) => Ok(tracks::CANDIDATES),
|
Ok(Origin::Members) => Ok(tracks::MEMBERS),
|
||||||
Ok(Origin::Fellowship1Dan) => Ok(tracks::MEMBERS),
|
|
||||||
Ok(Origin::Fellowship2Dan) => Ok(tracks::PROFICIENTS),
|
Ok(Origin::Fellowship2Dan) => Ok(tracks::PROFICIENTS),
|
||||||
Ok(Origin::Fellowship3Dan) | Ok(Origin::Fellows) => Ok(tracks::FELLOWS),
|
Ok(Origin::Fellows) => Ok(tracks::FELLOWS),
|
||||||
Ok(Origin::Fellowship4Dan) => Ok(tracks::SENIOR_FELLOWS),
|
Ok(Origin::Architects) => Ok(tracks::ARCHITECTS),
|
||||||
Ok(Origin::Fellowship5Dan) | Ok(Origin::FellowshipExperts) => Ok(tracks::EXPERTS),
|
Ok(Origin::Fellowship5Dan) => Ok(tracks::ARCHITECTS_ADEPT),
|
||||||
Ok(Origin::Fellowship6Dan) => Ok(tracks::SENIOR_EXPERTS),
|
Ok(Origin::Fellowship6Dan) => Ok(tracks::GRAND_ARCHITECTS),
|
||||||
Ok(Origin::Fellowship7Dan | Origin::FellowshipMasters) => Ok(tracks::MASTERS),
|
Ok(Origin::Masters) => Ok(tracks::MASTERS),
|
||||||
Ok(Origin::Fellowship8Dan) => Ok(tracks::SENIOR_MASTERS),
|
Ok(Origin::Fellowship8Dan) => Ok(tracks::MASTERS_CONSTANT),
|
||||||
Ok(Origin::Fellowship9Dan) => Ok(tracks::GRAND_MASTERS),
|
Ok(Origin::Fellowship9Dan) => Ok(tracks::GRAND_MASTERS),
|
||||||
|
|
||||||
|
Ok(Origin::RetainAt1Dan) => Ok(tracks::RETAIN_AT_1DAN),
|
||||||
|
Ok(Origin::RetainAt2Dan) => Ok(tracks::RETAIN_AT_2DAN),
|
||||||
|
Ok(Origin::RetainAt3Dan) => Ok(tracks::RETAIN_AT_3DAN),
|
||||||
|
Ok(Origin::RetainAt4Dan) => Ok(tracks::RETAIN_AT_4DAN),
|
||||||
|
Ok(Origin::RetainAt5Dan) => Ok(tracks::RETAIN_AT_5DAN),
|
||||||
|
Ok(Origin::RetainAt6Dan) => Ok(tracks::RETAIN_AT_6DAN),
|
||||||
|
|
||||||
|
Ok(Origin::PromoteTo1Dan) => Ok(tracks::PROMOTE_TO_1DAN),
|
||||||
|
Ok(Origin::PromoteTo2Dan) => Ok(tracks::PROMOTE_TO_2DAN),
|
||||||
|
Ok(Origin::PromoteTo3Dan) => Ok(tracks::PROMOTE_TO_3DAN),
|
||||||
|
Ok(Origin::PromoteTo4Dan) => Ok(tracks::PROMOTE_TO_4DAN),
|
||||||
|
Ok(Origin::PromoteTo5Dan) => Ok(tracks::PROMOTE_TO_5DAN),
|
||||||
|
Ok(Origin::PromoteTo6Dan) => Ok(tracks::PROMOTE_TO_6DAN),
|
||||||
|
|
||||||
_ => Err(()),
|
_ => Err(()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,3 +146,23 @@ impl PrivilegeCmp<OriginCaller> for EqualOrGreatestRootCmp {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "runtime-benchmarks")]
|
||||||
|
pub mod benchmarks {
|
||||||
|
use super::*;
|
||||||
|
use frame_support::traits::fungible;
|
||||||
|
use pallet_ranked_collective::Rank;
|
||||||
|
use parachains_common::{AccountId, Balance};
|
||||||
|
use sp_runtime::traits::Convert;
|
||||||
|
|
||||||
|
/// Rank to salary conversion helper type.`
|
||||||
|
pub struct RankToSalary<Fungible>(PhantomData<Fungible>);
|
||||||
|
impl<Fungible> Convert<Rank, Balance> for RankToSalary<Fungible>
|
||||||
|
where
|
||||||
|
Fungible: fungible::Inspect<AccountId, Balance = Balance>,
|
||||||
|
{
|
||||||
|
fn convert(r: Rank) -> Balance {
|
||||||
|
Balance::from(r).saturating_mul(Fungible::minimum_balance())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -477,7 +477,7 @@ parameter_types! {
|
|||||||
// The Alliance pallet account, used as a temporary place to deposit a slashed imbalance
|
// The Alliance pallet account, used as a temporary place to deposit a slashed imbalance
|
||||||
// before the teleport to the Treasury.
|
// before the teleport to the Treasury.
|
||||||
pub AlliancePalletAccount: AccountId = constants::account::ALLIANCE_PALLET_ID.into_account_truncating();
|
pub AlliancePalletAccount: AccountId = constants::account::ALLIANCE_PALLET_ID.into_account_truncating();
|
||||||
pub RelayTreasuryAccount: AccountId = constants::account::RELAY_TREASURY_PALLET_ID.into_account_truncating();
|
pub PolkadotTreasuryAccount: AccountId = constants::account::POLKADOT_TREASURY_PALLET_ID.into_account_truncating();
|
||||||
// The number of blocks a member must wait between giving a retirement notice and retiring.
|
// The number of blocks a member must wait between giving a retirement notice and retiring.
|
||||||
// Supposed to be greater than time required to `kick_member` with alliance motion.
|
// Supposed to be greater than time required to `kick_member` with alliance motion.
|
||||||
pub const AllianceRetirementPeriod: BlockNumber = (90 * DAYS) + ALLIANCE_MOTION_DURATION;
|
pub const AllianceRetirementPeriod: BlockNumber = (90 * DAYS) + ALLIANCE_MOTION_DURATION;
|
||||||
@@ -490,7 +490,7 @@ impl pallet_alliance::Config for Runtime {
|
|||||||
type MembershipManager = RootOrAllianceTwoThirdsMajority;
|
type MembershipManager = RootOrAllianceTwoThirdsMajority;
|
||||||
type AnnouncementOrigin = RootOrAllianceTwoThirdsMajority;
|
type AnnouncementOrigin = RootOrAllianceTwoThirdsMajority;
|
||||||
type Currency = Balances;
|
type Currency = Balances;
|
||||||
type Slashed = ToParentTreasury<RelayTreasuryAccount, AlliancePalletAccount, Runtime>;
|
type Slashed = ToParentTreasury<PolkadotTreasuryAccount, AlliancePalletAccount, Runtime>;
|
||||||
type InitializeMembers = AllianceMotion;
|
type InitializeMembers = AllianceMotion;
|
||||||
type MembershipChanged = AllianceMotion;
|
type MembershipChanged = AllianceMotion;
|
||||||
type RetirementPeriod = AllianceRetirementPeriod;
|
type RetirementPeriod = AllianceRetirementPeriod;
|
||||||
@@ -599,6 +599,10 @@ construct_runtime!(
|
|||||||
// pub type FellowshipReferendaInstance = pallet_referenda::Instance1;
|
// pub type FellowshipReferendaInstance = pallet_referenda::Instance1;
|
||||||
FellowshipReferenda: pallet_referenda::<Instance1>::{Pallet, Call, Storage, Event<T>} = 61,
|
FellowshipReferenda: pallet_referenda::<Instance1>::{Pallet, Call, Storage, Event<T>} = 61,
|
||||||
FellowshipOrigins: pallet_fellowship_origins::{Origin} = 62,
|
FellowshipOrigins: pallet_fellowship_origins::{Origin} = 62,
|
||||||
|
// pub type FellowshipCoreInstance = pallet_core_fellowship::Instance1;
|
||||||
|
FellowshipCore: pallet_core_fellowship::<Instance1>::{Pallet, Call, Storage, Event<T>} = 63,
|
||||||
|
// pub type FellowshipSalaryInstance = pallet_salary::Instance1;
|
||||||
|
FellowshipSalary: pallet_salary::<Instance1>::{Pallet, Call, Storage, Event<T>} = 64,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -667,6 +671,8 @@ mod benches {
|
|||||||
[pallet_scheduler, Scheduler]
|
[pallet_scheduler, Scheduler]
|
||||||
[pallet_referenda, FellowshipReferenda]
|
[pallet_referenda, FellowshipReferenda]
|
||||||
[pallet_ranked_collective, FellowshipCollective]
|
[pallet_ranked_collective, FellowshipCollective]
|
||||||
|
[pallet_core_fellowship, FellowshipCore]
|
||||||
|
[pallet_salary, FellowshipSalary]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,11 +6,13 @@ pub mod pallet_alliance;
|
|||||||
pub mod pallet_balances;
|
pub mod pallet_balances;
|
||||||
pub mod pallet_collator_selection;
|
pub mod pallet_collator_selection;
|
||||||
pub mod pallet_collective;
|
pub mod pallet_collective;
|
||||||
|
pub mod pallet_core_fellowship;
|
||||||
pub mod pallet_multisig;
|
pub mod pallet_multisig;
|
||||||
pub mod pallet_preimage;
|
pub mod pallet_preimage;
|
||||||
pub mod pallet_proxy;
|
pub mod pallet_proxy;
|
||||||
pub mod pallet_ranked_collective;
|
pub mod pallet_ranked_collective;
|
||||||
pub mod pallet_referenda;
|
pub mod pallet_referenda;
|
||||||
|
pub mod pallet_salary;
|
||||||
pub mod pallet_scheduler;
|
pub mod pallet_scheduler;
|
||||||
pub mod pallet_session;
|
pub mod pallet_session;
|
||||||
pub mod pallet_timestamp;
|
pub mod pallet_timestamp;
|
||||||
|
|||||||
+222
@@ -0,0 +1,222 @@
|
|||||||
|
// Copyright Parity Technologies (UK) Ltd.
|
||||||
|
// This file is part of Cumulus.
|
||||||
|
|
||||||
|
// Cumulus 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.
|
||||||
|
|
||||||
|
// Cumulus 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 Cumulus. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
//! Autogenerated weights for `pallet_core_fellowship`
|
||||||
|
//!
|
||||||
|
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
|
||||||
|
//! DATE: 2023-05-19, STEPS: `2`, REPEAT: `1`, LOW RANGE: `[]`, HIGH RANGE: `[]`
|
||||||
|
//! WORST CASE MAP SIZE: `1000000`
|
||||||
|
//! HOSTNAME: `cob`, CPU: `<UNKNOWN>`
|
||||||
|
//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: Some("collectives-polkadot-dev"), DB CACHE: 1024
|
||||||
|
|
||||||
|
// Executed Command:
|
||||||
|
// ./target/debug/polkadot-parachain
|
||||||
|
// benchmark
|
||||||
|
// pallet
|
||||||
|
// --chain=collectives-polkadot-dev
|
||||||
|
// --steps=2
|
||||||
|
// --repeat=1
|
||||||
|
// --pallet=pallet_core_fellowship
|
||||||
|
// --extrinsic=*
|
||||||
|
// --wasm-execution=compiled
|
||||||
|
// --heap-pages=4096
|
||||||
|
// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/
|
||||||
|
|
||||||
|
#![cfg_attr(rustfmt, rustfmt_skip)]
|
||||||
|
#![allow(unused_parens)]
|
||||||
|
#![allow(unused_imports)]
|
||||||
|
#![allow(missing_docs)]
|
||||||
|
|
||||||
|
use frame_support::{traits::Get, weights::Weight};
|
||||||
|
use core::marker::PhantomData;
|
||||||
|
|
||||||
|
/// Weight functions for `pallet_core_fellowship`.
|
||||||
|
pub struct WeightInfo<T>(PhantomData<T>);
|
||||||
|
impl<T: frame_system::Config> pallet_core_fellowship::WeightInfo for WeightInfo<T> {
|
||||||
|
/// Storage: FellowshipCore Params (r:0 w:1)
|
||||||
|
/// Proof: FellowshipCore Params (max_values: Some(1), max_size: Some(364), added: 859, mode: MaxEncodedLen)
|
||||||
|
fn set_params() -> Weight {
|
||||||
|
// Proof Size summary in bytes:
|
||||||
|
// Measured: `0`
|
||||||
|
// Estimated: `0`
|
||||||
|
// Minimum execution time: 65_000_000 picoseconds.
|
||||||
|
Weight::from_parts(65_000_000, 0)
|
||||||
|
.saturating_add(Weight::from_parts(0, 0))
|
||||||
|
.saturating_add(T::DbWeight::get().writes(1))
|
||||||
|
}
|
||||||
|
/// Storage: FellowshipCore Member (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCore Member (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCollective Members (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCollective Members (max_values: None, max_size: Some(42), added: 2517, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCore Params (r:1 w:0)
|
||||||
|
/// Proof: FellowshipCore Params (max_values: Some(1), max_size: Some(364), added: 859, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCollective MemberCount (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCollective IdToIndex (r:1 w:0)
|
||||||
|
/// Proof: FellowshipCollective IdToIndex (max_values: None, max_size: Some(54), added: 2529, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCore MemberEvidence (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCore MemberEvidence (max_values: None, max_size: Some(1067), added: 3542, mode: MaxEncodedLen)
|
||||||
|
fn bump_offboard() -> Weight {
|
||||||
|
// Proof Size summary in bytes:
|
||||||
|
// Measured: `1562`
|
||||||
|
// Estimated: `4532`
|
||||||
|
// Minimum execution time: 300_000_000 picoseconds.
|
||||||
|
Weight::from_parts(300_000_000, 0)
|
||||||
|
.saturating_add(Weight::from_parts(0, 4532))
|
||||||
|
.saturating_add(T::DbWeight::get().reads(6))
|
||||||
|
.saturating_add(T::DbWeight::get().writes(4))
|
||||||
|
}
|
||||||
|
/// Storage: FellowshipCore Member (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCore Member (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCollective Members (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCollective Members (max_values: None, max_size: Some(42), added: 2517, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCore Params (r:1 w:0)
|
||||||
|
/// Proof: FellowshipCore Params (max_values: Some(1), max_size: Some(364), added: 859, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCollective MemberCount (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCollective IdToIndex (r:1 w:0)
|
||||||
|
/// Proof: FellowshipCollective IdToIndex (max_values: None, max_size: Some(54), added: 2529, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCore MemberEvidence (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCore MemberEvidence (max_values: None, max_size: Some(1067), added: 3542, mode: MaxEncodedLen)
|
||||||
|
fn bump_demote() -> Weight {
|
||||||
|
// Proof Size summary in bytes:
|
||||||
|
// Measured: `1672`
|
||||||
|
// Estimated: `4532`
|
||||||
|
// Minimum execution time: 339_000_000 picoseconds.
|
||||||
|
Weight::from_parts(339_000_000, 0)
|
||||||
|
.saturating_add(Weight::from_parts(0, 4532))
|
||||||
|
.saturating_add(T::DbWeight::get().reads(6))
|
||||||
|
.saturating_add(T::DbWeight::get().writes(4))
|
||||||
|
}
|
||||||
|
/// Storage: FellowshipCollective Members (r:1 w:0)
|
||||||
|
/// Proof: FellowshipCollective Members (max_values: None, max_size: Some(42), added: 2517, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCore Member (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCore Member (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen)
|
||||||
|
fn set_active() -> Weight {
|
||||||
|
// Proof Size summary in bytes:
|
||||||
|
// Measured: `427`
|
||||||
|
// Estimated: `3514`
|
||||||
|
// Minimum execution time: 150_000_000 picoseconds.
|
||||||
|
Weight::from_parts(150_000_000, 0)
|
||||||
|
.saturating_add(Weight::from_parts(0, 3514))
|
||||||
|
.saturating_add(T::DbWeight::get().reads(2))
|
||||||
|
.saturating_add(T::DbWeight::get().writes(1))
|
||||||
|
}
|
||||||
|
/// Storage: FellowshipCore Member (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCore Member (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCollective Members (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCollective Members (max_values: None, max_size: Some(42), added: 2517, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCollective MemberCount (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCollective IndexToId (r:0 w:1)
|
||||||
|
/// Proof: FellowshipCollective IndexToId (max_values: None, max_size: Some(54), added: 2529, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCollective IdToIndex (r:0 w:1)
|
||||||
|
/// Proof: FellowshipCollective IdToIndex (max_values: None, max_size: Some(54), added: 2529, mode: MaxEncodedLen)
|
||||||
|
fn induct() -> Weight {
|
||||||
|
// Proof Size summary in bytes:
|
||||||
|
// Measured: `185`
|
||||||
|
// Estimated: `3514`
|
||||||
|
// Minimum execution time: 166_000_000 picoseconds.
|
||||||
|
Weight::from_parts(166_000_000, 0)
|
||||||
|
.saturating_add(Weight::from_parts(0, 3514))
|
||||||
|
.saturating_add(T::DbWeight::get().reads(3))
|
||||||
|
.saturating_add(T::DbWeight::get().writes(5))
|
||||||
|
}
|
||||||
|
/// Storage: FellowshipCollective Members (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCollective Members (max_values: None, max_size: Some(42), added: 2517, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCore Member (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCore Member (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCore Params (r:1 w:0)
|
||||||
|
/// Proof: FellowshipCore Params (max_values: Some(1), max_size: Some(364), added: 859, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCollective MemberCount (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCollective MemberCount (max_values: None, max_size: Some(14), added: 2489, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCore MemberEvidence (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCore MemberEvidence (max_values: None, max_size: Some(1067), added: 3542, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCollective IndexToId (r:0 w:1)
|
||||||
|
/// Proof: FellowshipCollective IndexToId (max_values: None, max_size: Some(54), added: 2529, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCollective IdToIndex (r:0 w:1)
|
||||||
|
/// Proof: FellowshipCollective IdToIndex (max_values: None, max_size: Some(54), added: 2529, mode: MaxEncodedLen)
|
||||||
|
fn promote() -> Weight {
|
||||||
|
// Proof Size summary in bytes:
|
||||||
|
// Measured: `1540`
|
||||||
|
// Estimated: `4532`
|
||||||
|
// Minimum execution time: 308_000_000 picoseconds.
|
||||||
|
Weight::from_parts(308_000_000, 0)
|
||||||
|
.saturating_add(Weight::from_parts(0, 4532))
|
||||||
|
.saturating_add(T::DbWeight::get().reads(5))
|
||||||
|
.saturating_add(T::DbWeight::get().writes(6))
|
||||||
|
}
|
||||||
|
/// Storage: FellowshipCollective Members (r:1 w:0)
|
||||||
|
/// Proof: FellowshipCollective Members (max_values: None, max_size: Some(42), added: 2517, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCore Member (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCore Member (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCore MemberEvidence (r:0 w:1)
|
||||||
|
/// Proof: FellowshipCore MemberEvidence (max_values: None, max_size: Some(1067), added: 3542, mode: MaxEncodedLen)
|
||||||
|
fn offboard() -> Weight {
|
||||||
|
// Proof Size summary in bytes:
|
||||||
|
// Measured: `398`
|
||||||
|
// Estimated: `3514`
|
||||||
|
// Minimum execution time: 141_000_000 picoseconds.
|
||||||
|
Weight::from_parts(141_000_000, 0)
|
||||||
|
.saturating_add(Weight::from_parts(0, 3514))
|
||||||
|
.saturating_add(T::DbWeight::get().reads(2))
|
||||||
|
.saturating_add(T::DbWeight::get().writes(2))
|
||||||
|
}
|
||||||
|
/// Storage: FellowshipCore Member (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCore Member (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCollective Members (r:1 w:0)
|
||||||
|
/// Proof: FellowshipCollective Members (max_values: None, max_size: Some(42), added: 2517, mode: MaxEncodedLen)
|
||||||
|
fn import() -> Weight {
|
||||||
|
// Proof Size summary in bytes:
|
||||||
|
// Measured: `352`
|
||||||
|
// Estimated: `3514`
|
||||||
|
// Minimum execution time: 131_000_000 picoseconds.
|
||||||
|
Weight::from_parts(131_000_000, 0)
|
||||||
|
.saturating_add(Weight::from_parts(0, 3514))
|
||||||
|
.saturating_add(T::DbWeight::get().reads(2))
|
||||||
|
.saturating_add(T::DbWeight::get().writes(1))
|
||||||
|
}
|
||||||
|
/// Storage: FellowshipCollective Members (r:1 w:0)
|
||||||
|
/// Proof: FellowshipCollective Members (max_values: None, max_size: Some(42), added: 2517, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCore Member (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCore Member (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCore MemberEvidence (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCore MemberEvidence (max_values: None, max_size: Some(1067), added: 3542, mode: MaxEncodedLen)
|
||||||
|
fn approve() -> Weight {
|
||||||
|
// Proof Size summary in bytes:
|
||||||
|
// Measured: `1518`
|
||||||
|
// Estimated: `4532`
|
||||||
|
// Minimum execution time: 198_000_000 picoseconds.
|
||||||
|
Weight::from_parts(198_000_000, 0)
|
||||||
|
.saturating_add(Weight::from_parts(0, 4532))
|
||||||
|
.saturating_add(T::DbWeight::get().reads(3))
|
||||||
|
.saturating_add(T::DbWeight::get().writes(2))
|
||||||
|
}
|
||||||
|
/// Storage: FellowshipCore Member (r:1 w:0)
|
||||||
|
/// Proof: FellowshipCore Member (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCore MemberEvidence (r:1 w:1)
|
||||||
|
/// Proof: FellowshipCore MemberEvidence (max_values: None, max_size: Some(1067), added: 3542, mode: MaxEncodedLen)
|
||||||
|
fn submit_evidence() -> Weight {
|
||||||
|
// Proof Size summary in bytes:
|
||||||
|
// Measured: `151`
|
||||||
|
// Estimated: `4532`
|
||||||
|
// Minimum execution time: 99_000_000 picoseconds.
|
||||||
|
Weight::from_parts(99_000_000, 0)
|
||||||
|
.saturating_add(Weight::from_parts(0, 4532))
|
||||||
|
.saturating_add(T::DbWeight::get().reads(2))
|
||||||
|
.saturating_add(T::DbWeight::get().writes(1))
|
||||||
|
}
|
||||||
|
}
|
||||||
+140
@@ -0,0 +1,140 @@
|
|||||||
|
|
||||||
|
//! Autogenerated weights for `pallet_salary`
|
||||||
|
//!
|
||||||
|
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
|
||||||
|
//! DATE: 2023-05-20, STEPS: `2`, REPEAT: `1`, LOW RANGE: `[]`, HIGH RANGE: `[]`
|
||||||
|
//! WORST CASE MAP SIZE: `1000000`
|
||||||
|
//! HOSTNAME: `cob`, CPU: `<UNKNOWN>`
|
||||||
|
//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: Some("collectives-polkadot-dev"), DB CACHE: 1024
|
||||||
|
|
||||||
|
// Executed Command:
|
||||||
|
// ./target/debug/polkadot-parachain
|
||||||
|
// benchmark
|
||||||
|
// pallet
|
||||||
|
// --chain=collectives-polkadot-dev
|
||||||
|
// --steps=2
|
||||||
|
// --repeat=1
|
||||||
|
// --pallet=pallet_salary
|
||||||
|
// --extrinsic=*
|
||||||
|
// --wasm-execution=compiled
|
||||||
|
// --heap-pages=4096
|
||||||
|
// --output=./parachains/runtimes/collectives/collectives-polkadot/src/weights/
|
||||||
|
|
||||||
|
#![cfg_attr(rustfmt, rustfmt_skip)]
|
||||||
|
#![allow(unused_parens)]
|
||||||
|
#![allow(unused_imports)]
|
||||||
|
#![allow(missing_docs)]
|
||||||
|
|
||||||
|
use frame_support::{traits::Get, weights::Weight};
|
||||||
|
use core::marker::PhantomData;
|
||||||
|
|
||||||
|
/// Weight functions for `pallet_salary`.
|
||||||
|
pub struct WeightInfo<T>(PhantomData<T>);
|
||||||
|
impl<T: frame_system::Config> pallet_salary::WeightInfo for WeightInfo<T> {
|
||||||
|
/// Storage: FellowshipSalary Status (r:1 w:1)
|
||||||
|
/// Proof: FellowshipSalary Status (max_values: Some(1), max_size: Some(56), added: 551, mode: MaxEncodedLen)
|
||||||
|
fn init() -> Weight {
|
||||||
|
// Proof Size summary in bytes:
|
||||||
|
// Measured: `142`
|
||||||
|
// Estimated: `1541`
|
||||||
|
// Minimum execution time: 127_000_000 picoseconds.
|
||||||
|
Weight::from_parts(127_000_000, 0)
|
||||||
|
.saturating_add(Weight::from_parts(0, 1541))
|
||||||
|
.saturating_add(T::DbWeight::get().reads(1))
|
||||||
|
.saturating_add(T::DbWeight::get().writes(1))
|
||||||
|
}
|
||||||
|
/// Storage: FellowshipSalary Status (r:1 w:1)
|
||||||
|
/// Proof: FellowshipSalary Status (max_values: Some(1), max_size: Some(56), added: 551, mode: MaxEncodedLen)
|
||||||
|
fn bump() -> Weight {
|
||||||
|
// Proof Size summary in bytes:
|
||||||
|
// Measured: `224`
|
||||||
|
// Estimated: `1541`
|
||||||
|
// Minimum execution time: 133_000_000 picoseconds.
|
||||||
|
Weight::from_parts(133_000_000, 0)
|
||||||
|
.saturating_add(Weight::from_parts(0, 1541))
|
||||||
|
.saturating_add(T::DbWeight::get().reads(1))
|
||||||
|
.saturating_add(T::DbWeight::get().writes(1))
|
||||||
|
}
|
||||||
|
/// Storage: FellowshipSalary Status (r:1 w:0)
|
||||||
|
/// Proof: FellowshipSalary Status (max_values: Some(1), max_size: Some(56), added: 551, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCollective Members (r:1 w:0)
|
||||||
|
/// Proof: FellowshipCollective Members (max_values: None, max_size: Some(42), added: 2517, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipSalary Claimant (r:1 w:1)
|
||||||
|
/// Proof: FellowshipSalary Claimant (max_values: None, max_size: Some(78), added: 2553, mode: MaxEncodedLen)
|
||||||
|
fn induct() -> Weight {
|
||||||
|
// Proof Size summary in bytes:
|
||||||
|
// Measured: `395`
|
||||||
|
// Estimated: `3543`
|
||||||
|
// Minimum execution time: 186_000_000 picoseconds.
|
||||||
|
Weight::from_parts(186_000_000, 0)
|
||||||
|
.saturating_add(Weight::from_parts(0, 3543))
|
||||||
|
.saturating_add(T::DbWeight::get().reads(3))
|
||||||
|
.saturating_add(T::DbWeight::get().writes(1))
|
||||||
|
}
|
||||||
|
/// Storage: FellowshipCollective Members (r:1 w:0)
|
||||||
|
/// Proof: FellowshipCollective Members (max_values: None, max_size: Some(42), added: 2517, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipSalary Status (r:1 w:1)
|
||||||
|
/// Proof: FellowshipSalary Status (max_values: Some(1), max_size: Some(56), added: 551, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipSalary Claimant (r:1 w:1)
|
||||||
|
/// Proof: FellowshipSalary Claimant (max_values: None, max_size: Some(78), added: 2553, mode: MaxEncodedLen)
|
||||||
|
fn register() -> Weight {
|
||||||
|
// Proof Size summary in bytes:
|
||||||
|
// Measured: `462`
|
||||||
|
// Estimated: `3543`
|
||||||
|
// Minimum execution time: 183_000_000 picoseconds.
|
||||||
|
Weight::from_parts(183_000_000, 0)
|
||||||
|
.saturating_add(Weight::from_parts(0, 3543))
|
||||||
|
.saturating_add(T::DbWeight::get().reads(3))
|
||||||
|
.saturating_add(T::DbWeight::get().writes(2))
|
||||||
|
}
|
||||||
|
/// Storage: FellowshipSalary Status (r:1 w:1)
|
||||||
|
/// Proof: FellowshipSalary Status (max_values: Some(1), max_size: Some(56), added: 551, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipSalary Claimant (r:1 w:1)
|
||||||
|
/// Proof: FellowshipSalary Claimant (max_values: None, max_size: Some(78), added: 2553, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCollective Members (r:1 w:0)
|
||||||
|
/// Proof: FellowshipCollective Members (max_values: None, max_size: Some(42), added: 2517, mode: MaxEncodedLen)
|
||||||
|
/// Storage: System Account (r:1 w:1)
|
||||||
|
/// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen)
|
||||||
|
fn payout() -> Weight {
|
||||||
|
// Proof Size summary in bytes:
|
||||||
|
// Measured: `565`
|
||||||
|
// Estimated: `3593`
|
||||||
|
// Minimum execution time: 628_000_000 picoseconds.
|
||||||
|
Weight::from_parts(628_000_000, 0)
|
||||||
|
.saturating_add(Weight::from_parts(0, 3593))
|
||||||
|
.saturating_add(T::DbWeight::get().reads(4))
|
||||||
|
.saturating_add(T::DbWeight::get().writes(3))
|
||||||
|
}
|
||||||
|
/// Storage: FellowshipSalary Status (r:1 w:1)
|
||||||
|
/// Proof: FellowshipSalary Status (max_values: Some(1), max_size: Some(56), added: 551, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipSalary Claimant (r:1 w:1)
|
||||||
|
/// Proof: FellowshipSalary Claimant (max_values: None, max_size: Some(78), added: 2553, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipCollective Members (r:1 w:0)
|
||||||
|
/// Proof: FellowshipCollective Members (max_values: None, max_size: Some(42), added: 2517, mode: MaxEncodedLen)
|
||||||
|
/// Storage: System Account (r:2 w:2)
|
||||||
|
/// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen)
|
||||||
|
fn payout_other() -> Weight {
|
||||||
|
// Proof Size summary in bytes:
|
||||||
|
// Measured: `565`
|
||||||
|
// Estimated: `6196`
|
||||||
|
// Minimum execution time: 607_000_000 picoseconds.
|
||||||
|
Weight::from_parts(607_000_000, 0)
|
||||||
|
.saturating_add(Weight::from_parts(0, 6196))
|
||||||
|
.saturating_add(T::DbWeight::get().reads(5))
|
||||||
|
.saturating_add(T::DbWeight::get().writes(4))
|
||||||
|
}
|
||||||
|
/// Storage: FellowshipSalary Status (r:1 w:1)
|
||||||
|
/// Proof: FellowshipSalary Status (max_values: Some(1), max_size: Some(56), added: 551, mode: MaxEncodedLen)
|
||||||
|
/// Storage: FellowshipSalary Claimant (r:1 w:1)
|
||||||
|
/// Proof: FellowshipSalary Claimant (max_values: None, max_size: Some(78), added: 2553, mode: MaxEncodedLen)
|
||||||
|
fn check_payment() -> Weight {
|
||||||
|
// Proof Size summary in bytes:
|
||||||
|
// Measured: `308`
|
||||||
|
// Estimated: `3543`
|
||||||
|
// Minimum execution time: 100_000_000 picoseconds.
|
||||||
|
Weight::from_parts(100_000_000, 0)
|
||||||
|
.saturating_add(Weight::from_parts(0, 3543))
|
||||||
|
.saturating_add(T::DbWeight::get().reads(2))
|
||||||
|
.saturating_add(T::DbWeight::get().writes(2))
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -187,6 +187,16 @@ impl Contains<RuntimeCall> for SafeCallFilter {
|
|||||||
pallet_ranked_collective::Call::promote_member { .. } |
|
pallet_ranked_collective::Call::promote_member { .. } |
|
||||||
pallet_ranked_collective::Call::demote_member { .. } |
|
pallet_ranked_collective::Call::demote_member { .. } |
|
||||||
pallet_ranked_collective::Call::remove_member { .. },
|
pallet_ranked_collective::Call::remove_member { .. },
|
||||||
|
) | RuntimeCall::FellowshipCore(
|
||||||
|
pallet_core_fellowship::Call::bump { .. } |
|
||||||
|
pallet_core_fellowship::Call::set_params { .. } |
|
||||||
|
pallet_core_fellowship::Call::set_active { .. } |
|
||||||
|
pallet_core_fellowship::Call::approve { .. } |
|
||||||
|
pallet_core_fellowship::Call::induct { .. } |
|
||||||
|
pallet_core_fellowship::Call::promote { .. } |
|
||||||
|
pallet_core_fellowship::Call::offboard { .. } |
|
||||||
|
pallet_core_fellowship::Call::submit_evidence { .. } |
|
||||||
|
pallet_core_fellowship::Call::import { .. },
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user