123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893 |
- #![recursion_limit = "256"]
- #![cfg_attr(not(feature = "std"), no_std)]
- #![allow(clippy::too_many_arguments)]
- mod types;
- #[cfg(test)]
- mod tests;
- mod benchmarking;
- use frame_support::dispatch::DispatchResult;
- use frame_support::traits::Get;
- use frame_support::weights::Weight;
- use frame_support::{decl_error, decl_event, decl_module, decl_storage, ensure};
- use sp_arithmetic::traits::Zero;
- use sp_runtime::SaturatedConversion;
- use sp_std::clone::Clone;
- use sp_std::collections::btree_set::BTreeSet;
- use common::membership::MemberOriginValidator;
- use common::MemberId;
- use proposals_discussion::ThreadMode;
- use proposals_engine::{
- BalanceOf, ProposalCreationParameters, ProposalObserver, ProposalParameters,
- };
- pub use types::{
- CreateOpeningParameters, FillOpeningParameters, GeneralProposalParams, ProposalDetails,
- ProposalDetailsOf, ProposalEncoder, TerminateRoleParameters,
- };
- const MAX_SPENDING_PROPOSAL_VALUE: u32 = 50_000_000_u32;
- const MAX_VALIDATOR_COUNT: u32 = 300;
- const MAX_FUNDING_REQUEST_ACCOUNTS: usize = 100;
- pub trait WeightInfo {
- fn create_proposal_signal(i: u32, t: u32, d: u32) -> Weight;
- fn create_proposal_runtime_upgrade(i: u32, t: u32, d: u32) -> Weight;
- fn create_proposal_funding_request(i: u32, d: u32) -> Weight;
- fn create_proposal_set_max_validator_count(t: u32, d: u32) -> Weight;
- fn create_proposal_create_working_group_lead_opening(i: u32, t: u32, d: u32) -> Weight;
- fn create_proposal_fill_working_group_lead_opening(t: u32, d: u32) -> Weight;
- fn create_proposal_update_working_group_budget(t: u32, d: u32) -> Weight;
- fn create_proposal_decrease_working_group_lead_stake(t: u32, d: u32) -> Weight;
- fn create_proposal_slash_working_group_lead(d: u32) -> Weight;
- fn create_proposal_set_working_group_lead_reward(t: u32, d: u32) -> Weight;
- fn create_proposal_terminate_working_group_lead(t: u32, d: u32) -> Weight;
- fn create_proposal_amend_constitution(i: u32, d: u32) -> Weight;
- fn create_proposal_cancel_working_group_lead_opening(d: u32) -> Weight;
- fn create_proposal_set_membership_price(t: u32, d: u32) -> Weight;
- fn create_proposal_set_council_budget_increment(t: u32, d: u32) -> Weight;
- fn create_proposal_set_councilor_reward(t: u32, d: u32) -> Weight;
- fn create_proposal_set_initial_invitation_balance(t: u32, d: u32) -> Weight;
- fn create_proposal_set_initial_invitation_count(t: u32, d: u32) -> Weight;
- fn create_proposal_set_membership_lead_invitation_quota(d: u32) -> Weight;
- fn create_proposal_set_referral_cut(t: u32, d: u32) -> Weight;
- fn create_proposal_create_blog_post(t: u32, d: u32, h: u32, b: u32) -> Weight;
- fn create_proposal_edit_blog_post(t: u32, d: u32, h: u32, b: u32) -> Weight;
- fn create_proposal_lock_blog_post(t: u32, d: u32) -> Weight;
- fn create_proposal_unlock_blog_post(t: u32, d: u32) -> Weight;
- fn create_proposal_veto_proposal(t: u32, d: u32) -> Weight;
- }
- type WeightInfoCodex<T> = <T as Trait>::WeightInfo;
- pub trait Trait:
- frame_system::Trait
- + proposals_engine::Trait
- + proposals_discussion::Trait
- + common::membership::MembershipTypes
- + staking::Trait
- + proposals_engine::Trait
- {
-
- type Event: From<Event<Self>> + Into<<Self as frame_system::Trait>::Event>;
-
- type MembershipOriginValidator: MemberOriginValidator<
- Self::Origin,
- MemberId<Self>,
- Self::AccountId,
- >;
-
- type ProposalEncoder: ProposalEncoder<Self>;
-
- type WeightInfo: WeightInfo;
-
- type SetMaxValidatorCountProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type RuntimeUpgradeProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type SignalProposalParameters: Get<ProposalParameters<Self::BlockNumber, BalanceOf<Self>>>;
-
- type FundingRequestProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type CreateWorkingGroupLeadOpeningProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type FillWorkingGroupLeadOpeningProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type UpdateWorkingGroupBudgetProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type DecreaseWorkingGroupLeadStakeProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type SlashWorkingGroupLeadProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type SetWorkingGroupLeadRewardProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type TerminateWorkingGroupLeadProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type AmendConstitutionProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type CancelWorkingGroupLeadOpeningProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type SetMembershipPriceProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type SetCouncilBudgetIncrementProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type SetCouncilorRewardProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type SetInitialInvitationBalanceProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type SetInvitationCountProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type SetMembershipLeadInvitationQuotaProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type SetReferralCutProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type CreateBlogPostProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type EditBlogPostProoposalParamters: Get<ProposalParameters<Self::BlockNumber, BalanceOf<Self>>>;
-
- type LockBlogPostProposalParameters: Get<ProposalParameters<Self::BlockNumber, BalanceOf<Self>>>;
-
- type UnlockBlogPostProposalParameters: Get<
- ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
- >;
-
- type VetoProposalProposalParameters: Get<ProposalParameters<Self::BlockNumber, BalanceOf<Self>>>;
- }
- pub type GeneralProposalParameters<T> = GeneralProposalParams<
- MemberId<T>,
- <T as frame_system::Trait>::AccountId,
- <T as frame_system::Trait>::BlockNumber,
- >;
- decl_event! {
- pub enum Event<T> where
- GeneralProposalParameters = GeneralProposalParameters<T>,
- ProposalDetailsOf = ProposalDetailsOf<T>,
- <T as proposals_engine::Trait>::ProposalId,
- {
-
-
-
-
-
- ProposalCreated(ProposalId, GeneralProposalParameters, ProposalDetailsOf),
- }
- }
- decl_error! {
-
- pub enum Error for Module<T: Trait> {
-
- SignalProposalIsEmpty,
-
- RuntimeProposalIsEmpty,
-
- InvalidFundingRequestProposalBalance,
-
- InvalidValidatorCount,
-
- RequireRootOrigin,
-
- InvalidCouncilElectionParameterCouncilSize,
-
- InvalidCouncilElectionParameterCandidacyLimit,
-
- InvalidCouncilElectionParameterMinVotingStake,
-
- InvalidCouncilElectionParameterNewTermDuration,
-
- InvalidCouncilElectionParameterMinCouncilStake,
-
- InvalidCouncilElectionParameterRevealingPeriod,
-
- InvalidCouncilElectionParameterVotingPeriod,
-
- InvalidCouncilElectionParameterAnnouncingPeriod,
-
- InvalidWorkingGroupBudgetCapacity,
-
- InvalidSetLeadParameterCannotBeCouncilor,
-
- SlashingStakeIsZero,
-
- DecreasingStakeIsZero,
-
- InsufficientFundsForBudgetUpdate,
-
- InvalidFundingRequestProposalNumberOfAccount,
-
- InvalidFundingRequestProposalRepeatedAccount,
- }
- }
- decl_storage! {
- pub trait Store for Module<T: Trait> as ProposalCodex {
-
- pub ThreadIdByProposalId get(fn thread_id_by_proposal_id):
- map hasher(blake2_128_concat) T::ProposalId => T::ThreadId;
- }
- }
- decl_module! {
-
- pub struct Module<T: Trait> for enum Call where origin: T::Origin {
-
- type Error = Error<T>;
- fn deposit_event() = default;
-
- const SetMaxValidatorCountProposalParameters: ProposalParameters<T::BlockNumber, BalanceOf<T>>
- = T::SetMaxValidatorCountProposalParameters::get();
-
- const RuntimeUpgradeProposalParameters: ProposalParameters<T::BlockNumber, BalanceOf<T>>
- = T::RuntimeUpgradeProposalParameters::get();
-
- const SignalProposalParameters: ProposalParameters<T::BlockNumber, BalanceOf<T>>
- = T::SignalProposalParameters::get();
-
- const FundingRequestProposalParameters: ProposalParameters<T::BlockNumber, BalanceOf<T>>
- = T::FundingRequestProposalParameters::get();
-
- const CreateWorkingGroupLeadOpeningProposalParameters: ProposalParameters<T::BlockNumber, BalanceOf<T>>
- = T::CreateWorkingGroupLeadOpeningProposalParameters::get();
-
- const FillWorkingGroupOpeningProposalParameters: ProposalParameters<T::BlockNumber, BalanceOf<T>>
- = T::FillWorkingGroupLeadOpeningProposalParameters::get();
-
- const UpdateWorkingGroupBudgetProposalParameters: ProposalParameters<T::BlockNumber, BalanceOf<T>>
- = T::UpdateWorkingGroupBudgetProposalParameters::get();
-
- const DecreaseWorkingGroupLeadStakeProposalParameters: ProposalParameters<T::BlockNumber, BalanceOf<T>>
- = T::DecreaseWorkingGroupLeadStakeProposalParameters::get();
-
- const SlashWorkingGroupLeadProposalParameters: ProposalParameters<T::BlockNumber, BalanceOf<T>>
- = T::SlashWorkingGroupLeadProposalParameters::get();
-
- const SetWorkingGroupLeadRewardProposalParameters: ProposalParameters<T::BlockNumber, BalanceOf<T>>
- = T::SetWorkingGroupLeadRewardProposalParameters::get();
-
- const TerminateWorkingGroupLeadProposalParameters: ProposalParameters<T::BlockNumber, BalanceOf<T>>
- = T::TerminateWorkingGroupLeadProposalParameters::get();
-
- const AmendConstitutionProposalParameters: ProposalParameters<T::BlockNumber, BalanceOf<T>>
- = T::AmendConstitutionProposalParameters::get();
-
- const CancelWorkingGroupLeadOpeningProposalParameters: ProposalParameters<T::BlockNumber, BalanceOf<T>>
- = T::CancelWorkingGroupLeadOpeningProposalParameters::get();
-
- const SetMembershipPriceProposalParameters: ProposalParameters<T::BlockNumber, BalanceOf<T>>
- = T::SetMembershipPriceProposalParameters::get();
-
- const SetCouncilBudgetIncrementProposalParameters:
- ProposalParameters<T::BlockNumber, BalanceOf<T>> = T::SetCouncilBudgetIncrementProposalParameters::get();
-
- const SetCouncilorRewardProposalParameters:
- ProposalParameters<T::BlockNumber, BalanceOf<T>> = T::SetCouncilorRewardProposalParameters::get();
-
- const SetInitialInvitationBalanceProposalParameters:
- ProposalParameters<T::BlockNumber, BalanceOf<T>> = T::SetInitialInvitationBalanceProposalParameters::get();
- const SetInvitationCountProposalParameters:
- ProposalParameters<T::BlockNumber, BalanceOf<T>> = T::SetInvitationCountProposalParameters::get();
- const SetMembershipLeadInvitationQuotaProposalParameters:
- ProposalParameters<T::BlockNumber, BalanceOf<T>> = T::SetMembershipLeadInvitationQuotaProposalParameters::get();
- const SetReferralCutProposalParameters:
- ProposalParameters<T::BlockNumber, BalanceOf<T>> = T::SetReferralCutProposalParameters::get();
- const CreateBlogPostProposalParameters:
- ProposalParameters<T::BlockNumber, BalanceOf<T>> = T::CreateBlogPostProposalParameters::get();
- const EditBlogPostProoposalParamters:
- ProposalParameters<T::BlockNumber, BalanceOf<T>> = T::EditBlogPostProoposalParamters::get();
- const LockBlogPostProposalParameters:
- ProposalParameters<T::BlockNumber, BalanceOf<T>> = T::LockBlogPostProposalParameters::get();
- const UnlockBlogPostProposalParameters:
- ProposalParameters<T::BlockNumber, BalanceOf<T>> = T::UnlockBlogPostProposalParameters::get();
- const VetoProposalProposalParameters:
- ProposalParameters<T::BlockNumber, BalanceOf<T>> = T::VetoProposalProposalParameters::get();
-
-
-
-
-
-
-
-
-
-
-
-
- #[weight = Module::<T>::get_create_proposal_weight(
- &general_proposal_parameters,
- &proposal_details
- )
- ]
- pub fn create_proposal(
- origin,
- general_proposal_parameters: GeneralProposalParameters<T>,
- proposal_details: ProposalDetailsOf<T>,
- ) {
- Self::ensure_details_checks(&proposal_details)?;
- let proposal_parameters = Self::get_proposal_parameters(&proposal_details);
-
-
-
-
- let proposal_code = T::ProposalEncoder::encode_proposal(proposal_details.clone());
- let account_id =
- T::MembershipOriginValidator::ensure_member_controller_account_origin(
- origin,
- general_proposal_parameters.member_id
- )?;
- <proposals_engine::Module<T>>::ensure_create_proposal_parameters_are_valid(
- &proposal_parameters,
- &general_proposal_parameters.title,
- &general_proposal_parameters.description,
- general_proposal_parameters.staking_account_id.clone(),
- general_proposal_parameters.exact_execution_block,
- general_proposal_parameters.member_id,
- )?;
- let initial_thread_mode = ThreadMode::Open;
- <proposals_discussion::Module<T>>::ensure_can_create_thread(&initial_thread_mode)?;
- let discussion_thread_id = <proposals_discussion::Module<T>>::create_thread(
- general_proposal_parameters.member_id,
- initial_thread_mode,
- )?;
- let proposal_creation_params = ProposalCreationParameters {
- account_id,
- proposer_id: general_proposal_parameters.member_id,
- proposal_parameters,
- title: general_proposal_parameters.title.clone(),
- description: general_proposal_parameters.description.clone(),
- staking_account_id: general_proposal_parameters.staking_account_id.clone(),
- encoded_dispatchable_call_code: proposal_code,
- exact_execution_block: general_proposal_parameters.exact_execution_block,
- };
- let proposal_id =
- <proposals_engine::Module<T>>::create_proposal(proposal_creation_params)?;
- <ThreadIdByProposalId<T>>::insert(proposal_id, discussion_thread_id);
- Self::deposit_event(RawEvent::ProposalCreated(proposal_id, general_proposal_parameters, proposal_details));
- }
- }
- }
- impl<T: Trait> Module<T> {
-
- fn ensure_details_checks(details: &ProposalDetailsOf<T>) -> DispatchResult {
- match details {
- ProposalDetails::Signal(ref signal) => {
- ensure!(!signal.is_empty(), Error::<T>::SignalProposalIsEmpty);
- }
- ProposalDetails::RuntimeUpgrade(ref blob) => {
- ensure!(!blob.is_empty(), Error::<T>::RuntimeProposalIsEmpty);
- }
- ProposalDetails::FundingRequest(ref funding_requests) => {
- ensure!(
- !funding_requests.is_empty(),
- Error::<T>::InvalidFundingRequestProposalNumberOfAccount
- );
- ensure!(
- funding_requests.len() <= MAX_FUNDING_REQUEST_ACCOUNTS,
- Error::<T>::InvalidFundingRequestProposalNumberOfAccount
- );
-
- let mut visited_accounts = BTreeSet::new();
- for funding_request in funding_requests {
- let account = &funding_request.account;
- ensure!(
- !visited_accounts.contains(&account),
- Error::<T>::InvalidFundingRequestProposalRepeatedAccount
- );
- ensure!(
- funding_request.amount != Zero::zero(),
- Error::<T>::InvalidFundingRequestProposalBalance
- );
- ensure!(
- funding_request.amount <= <BalanceOf<T>>::from(MAX_SPENDING_PROPOSAL_VALUE),
- Error::<T>::InvalidFundingRequestProposalBalance
- );
- visited_accounts.insert(account);
- }
- }
- ProposalDetails::SetMaxValidatorCount(ref new_validator_count) => {
-
-
-
-
- ensure!(
- *new_validator_count >= <staking::Module<T>>::minimum_validator_count(),
- Error::<T>::InvalidValidatorCount
- );
- ensure!(
- *new_validator_count <= MAX_VALIDATOR_COUNT,
- Error::<T>::InvalidValidatorCount
- );
- }
- ProposalDetails::CreateWorkingGroupLeadOpening(..) => {
-
- }
- ProposalDetails::FillWorkingGroupLeadOpening(..) => {
-
- }
- ProposalDetails::UpdateWorkingGroupBudget(..) => {
-
- }
- ProposalDetails::DecreaseWorkingGroupLeadStake(_, ref stake_amount, _) => {
- ensure!(
- *stake_amount != Zero::zero(),
- Error::<T>::DecreasingStakeIsZero
- );
- }
- ProposalDetails::SlashWorkingGroupLead(..) => {
-
- }
- ProposalDetails::SetWorkingGroupLeadReward(..) => {
-
- }
- ProposalDetails::TerminateWorkingGroupLead(..) => {
-
- }
- ProposalDetails::AmendConstitution(..) => {
-
- }
- ProposalDetails::CancelWorkingGroupLeadOpening(..) => {
-
- }
- ProposalDetails::SetMembershipPrice(..) => {
-
- }
- ProposalDetails::SetCouncilBudgetIncrement(..) => {
-
- }
- ProposalDetails::SetCouncilorReward(..) => {
-
- }
- ProposalDetails::SetInitialInvitationBalance(..) => {
-
- }
- ProposalDetails::SetInitialInvitationCount(..) => {
-
- }
- ProposalDetails::SetMembershipLeadInvitationQuota(..) => {
-
- }
- ProposalDetails::SetReferralCut(..) => {
-
- }
- ProposalDetails::CreateBlogPost(..) => {
-
- }
- ProposalDetails::EditBlogPost(..) => {
-
- }
- ProposalDetails::LockBlogPost(..) => {
-
- }
- ProposalDetails::UnlockBlogPost(..) => {
-
- }
- ProposalDetails::VetoProposal(..) => {
-
- }
- }
- Ok(())
- }
-
- fn get_proposal_parameters(
- details: &ProposalDetailsOf<T>,
- ) -> ProposalParameters<T::BlockNumber, BalanceOf<T>> {
- match details {
- ProposalDetails::Signal(..) => T::SignalProposalParameters::get(),
- ProposalDetails::RuntimeUpgrade(..) => T::RuntimeUpgradeProposalParameters::get(),
- ProposalDetails::FundingRequest(..) => T::FundingRequestProposalParameters::get(),
- ProposalDetails::SetMaxValidatorCount(..) => {
- T::SetMaxValidatorCountProposalParameters::get()
- }
- ProposalDetails::FillWorkingGroupLeadOpening(..) => {
- T::FillWorkingGroupLeadOpeningProposalParameters::get()
- }
- ProposalDetails::UpdateWorkingGroupBudget(..) => {
- T::UpdateWorkingGroupBudgetProposalParameters::get()
- }
- ProposalDetails::DecreaseWorkingGroupLeadStake(..) => {
- T::DecreaseWorkingGroupLeadStakeProposalParameters::get()
- }
- ProposalDetails::SlashWorkingGroupLead(..) => {
- T::SlashWorkingGroupLeadProposalParameters::get()
- }
- ProposalDetails::SetWorkingGroupLeadReward(..) => {
- T::SetWorkingGroupLeadRewardProposalParameters::get()
- }
- ProposalDetails::TerminateWorkingGroupLead(..) => {
- T::TerminateWorkingGroupLeadProposalParameters::get()
- }
- ProposalDetails::CreateWorkingGroupLeadOpening(..) => {
- T::CreateWorkingGroupLeadOpeningProposalParameters::get()
- }
- ProposalDetails::AmendConstitution(..) => T::AmendConstitutionProposalParameters::get(),
- ProposalDetails::SetMembershipPrice(..) => {
- T::SetMembershipPriceProposalParameters::get()
- }
- ProposalDetails::CancelWorkingGroupLeadOpening(..) => {
- T::CancelWorkingGroupLeadOpeningProposalParameters::get()
- }
- ProposalDetails::SetCouncilBudgetIncrement(..) => {
- T::SetCouncilBudgetIncrementProposalParameters::get()
- }
- ProposalDetails::SetCouncilorReward(..) => {
- T::SetCouncilorRewardProposalParameters::get()
- }
- ProposalDetails::SetInitialInvitationBalance(..) => {
- T::SetInitialInvitationBalanceProposalParameters::get()
- }
- ProposalDetails::SetInitialInvitationCount(..) => {
- T::SetInvitationCountProposalParameters::get()
- }
- ProposalDetails::SetMembershipLeadInvitationQuota(..) => {
- T::SetMembershipLeadInvitationQuotaProposalParameters::get()
- }
- ProposalDetails::SetReferralCut(..) => T::SetReferralCutProposalParameters::get(),
- ProposalDetails::CreateBlogPost(..) => T::CreateBlogPostProposalParameters::get(),
- ProposalDetails::EditBlogPost(..) => T::EditBlogPostProoposalParamters::get(),
- ProposalDetails::LockBlogPost(..) => T::LockBlogPostProposalParameters::get(),
- ProposalDetails::UnlockBlogPost(..) => T::UnlockBlogPostProposalParameters::get(),
- ProposalDetails::VetoProposal(..) => T::VetoProposalProposalParameters::get(),
- }
- }
-
- fn get_create_proposal_weight(
- general: &GeneralProposalParameters<T>,
- details: &ProposalDetailsOf<T>,
- ) -> Weight {
- let title_length = general.title.len();
- let description_length = general.description.len();
- match details {
- ProposalDetails::Signal(signal) => WeightInfoCodex::<T>::create_proposal_signal(
- signal.len().saturated_into(),
- title_length.saturated_into(),
- description_length.saturated_into(),
- ),
- ProposalDetails::RuntimeUpgrade(blob) => {
- WeightInfoCodex::<T>::create_proposal_runtime_upgrade(
- blob.len().saturated_into(),
- title_length.saturated_into(),
- description_length.saturated_into(),
- )
- }
- ProposalDetails::FundingRequest(params) => {
- WeightInfoCodex::<T>::create_proposal_funding_request(
- params.len().saturated_into(),
- description_length.saturated_into(),
- )
- }
- ProposalDetails::SetMaxValidatorCount(..) => {
- WeightInfoCodex::<T>::create_proposal_set_max_validator_count(
- title_length.saturated_into(),
- description_length.saturated_into(),
- )
- }
- ProposalDetails::CreateWorkingGroupLeadOpening(opening_params) => {
- WeightInfoCodex::<T>::create_proposal_create_working_group_lead_opening(
- opening_params.description.len().saturated_into(),
- title_length.saturated_into(),
- description_length.saturated_into(),
- )
- }
- ProposalDetails::FillWorkingGroupLeadOpening(..) => {
- WeightInfoCodex::<T>::create_proposal_fill_working_group_lead_opening(
- title_length.saturated_into(),
- description_length.saturated_into(),
- )
- }
- ProposalDetails::UpdateWorkingGroupBudget(..) => {
- WeightInfoCodex::<T>::create_proposal_update_working_group_budget(
- title_length.saturated_into(),
- description_length.saturated_into(),
- )
- }
- ProposalDetails::DecreaseWorkingGroupLeadStake(..) => {
- WeightInfoCodex::<T>::create_proposal_decrease_working_group_lead_stake(
- title_length.saturated_into(),
- description_length.saturated_into(),
- )
- }
- ProposalDetails::SlashWorkingGroupLead(..) => {
- WeightInfoCodex::<T>::create_proposal_slash_working_group_lead(
- description_length.saturated_into(),
- )
- }
- ProposalDetails::SetWorkingGroupLeadReward(..) => {
- WeightInfoCodex::<T>::create_proposal_set_working_group_lead_reward(
- title_length.saturated_into(),
- description_length.saturated_into(),
- )
- }
- ProposalDetails::TerminateWorkingGroupLead(..) => {
- WeightInfoCodex::<T>::create_proposal_terminate_working_group_lead(
- title_length.saturated_into(),
- description_length.saturated_into(),
- )
- }
- ProposalDetails::AmendConstitution(new_constitution) => {
- WeightInfoCodex::<T>::create_proposal_amend_constitution(
- new_constitution.len().saturated_into(),
- description_length.saturated_into(),
- )
- }
- ProposalDetails::SetMembershipPrice(..) => {
- WeightInfoCodex::<T>::create_proposal_set_membership_price(
- title_length.saturated_into(),
- description_length.saturated_into(),
- )
- }
- ProposalDetails::CancelWorkingGroupLeadOpening(..) => {
- WeightInfoCodex::<T>::create_proposal_cancel_working_group_lead_opening(
- description_length.saturated_into(),
- )
- }
- ProposalDetails::SetCouncilBudgetIncrement(..) => {
- WeightInfoCodex::<T>::create_proposal_set_council_budget_increment(
- title_length.saturated_into(),
- description_length.saturated_into(),
- )
- }
- ProposalDetails::SetCouncilorReward(..) => {
- WeightInfoCodex::<T>::create_proposal_set_councilor_reward(
- title_length.saturated_into(),
- description_length.saturated_into(),
- )
- }
- ProposalDetails::SetInitialInvitationBalance(..) => {
- WeightInfoCodex::<T>::create_proposal_set_initial_invitation_balance(
- title_length.saturated_into(),
- description_length.saturated_into(),
- )
- }
- ProposalDetails::SetInitialInvitationCount(..) => {
- WeightInfoCodex::<T>::create_proposal_set_initial_invitation_count(
- title_length.saturated_into(),
- description_length.saturated_into(),
- )
- }
- ProposalDetails::SetMembershipLeadInvitationQuota(..) => {
- WeightInfoCodex::<T>::create_proposal_set_membership_lead_invitation_quota(
- description_length.saturated_into(),
- )
- }
- ProposalDetails::SetReferralCut(..) => {
- WeightInfoCodex::<T>::create_proposal_set_referral_cut(
- title_length.saturated_into(),
- description_length.saturated_into(),
- )
- }
- ProposalDetails::CreateBlogPost(header, body) => {
- WeightInfoCodex::<T>::create_proposal_create_blog_post(
- title_length.saturated_into(),
- description_length.saturated_into(),
- header.len().saturated_into(),
- body.len().saturated_into(),
- )
- }
- ProposalDetails::EditBlogPost(_, header, body) => {
- let header_len = header.as_ref().map_or(0, |h| h.len());
- let body_len = body.as_ref().map_or(0, |b| b.len());
- WeightInfoCodex::<T>::create_proposal_edit_blog_post(
- title_length.saturated_into(),
- description_length.saturated_into(),
- header_len.saturated_into(),
- body_len.saturated_into(),
- )
- }
- ProposalDetails::LockBlogPost(..) => {
- WeightInfoCodex::<T>::create_proposal_lock_blog_post(
- title_length.saturated_into(),
- description_length.saturated_into(),
- )
- }
- ProposalDetails::UnlockBlogPost(..) => {
- WeightInfoCodex::<T>::create_proposal_unlock_blog_post(
- title_length.saturated_into(),
- description_length.saturated_into(),
- )
- .saturated_into()
- }
- ProposalDetails::VetoProposal(..) => {
- WeightInfoCodex::<T>::create_proposal_veto_proposal(
- title_length.saturated_into(),
- description_length.saturated_into(),
- )
- .saturated_into()
- }
- }
- }
- }
- impl<T: Trait> ProposalObserver<T> for Module<T> {
- fn proposal_removed(proposal_id: &<T as proposals_engine::Trait>::ProposalId) {
- <ThreadIdByProposalId<T>>::remove(proposal_id);
- let thread_id = Self::thread_id_by_proposal_id(proposal_id);
- proposals_discussion::ThreadById::<T>::remove(thread_id);
- }
- }
|