Browse Source

Add proposals codex config parametrs to the migration

- change runtime migration
- change proposals default values on genesis config creation
- add a test
Shamil Gadelshin 4 years ago
parent
commit
1e7fd05714

+ 31 - 18
node/src/chain_spec.rs

@@ -180,6 +180,9 @@ pub fn testnet_genesis(
     const STASH: Balance = 20 * DOLLARS;
     const ENDOWMENT: Balance = 100_000 * DOLLARS;
 
+    // default codex proposals config parameters
+    let cpcp = node_runtime::ProposalsConfigParameters::default();
+
     GenesisConfig {
         system: Some(SystemConfig {
             code: WASM_BINARY.to_vec(),
@@ -298,24 +301,34 @@ pub fn testnet_genesis(
             channel_title_constraint: crate::forum_config::new_validation(5, 1024),
         }),
         proposals_codex: Some(ProposalsCodexConfig {
-            set_validator_count_proposal_voting_period: 43200u32,
-            set_validator_count_proposal_grace_period: 0u32,
-            runtime_upgrade_proposal_voting_period: 72000u32,
-            runtime_upgrade_proposal_grace_period: 72000u32,
-            text_proposal_voting_period: 72000u32,
-            text_proposal_grace_period: 0u32,
-            set_election_parameters_proposal_voting_period: 72000u32,
-            set_election_parameters_proposal_grace_period: 201601u32,
-            set_content_working_group_mint_capacity_proposal_voting_period: 43200u32,
-            set_content_working_group_mint_capacity_proposal_grace_period: 0u32,
-            set_lead_proposal_voting_period: 43200u32,
-            set_lead_proposal_grace_period: 0u32,
-            spending_proposal_voting_period: 72000u32,
-            spending_proposal_grace_period: 14400u32,
-            evict_storage_provider_proposal_voting_period: 43200u32,
-            evict_storage_provider_proposal_grace_period: 0u32,
-            set_storage_role_parameters_proposal_voting_period: 43200u32,
-            set_storage_role_parameters_proposal_grace_period: 14400u32,
+            set_validator_count_proposal_voting_period: cpcp
+                .set_validator_count_proposal_voting_period,
+            set_validator_count_proposal_grace_period: cpcp
+                .set_validator_count_proposal_grace_period,
+            runtime_upgrade_proposal_voting_period: cpcp.runtime_upgrade_proposal_voting_period,
+            runtime_upgrade_proposal_grace_period: cpcp.runtime_upgrade_proposal_grace_period,
+            text_proposal_voting_period: cpcp.text_proposal_voting_period,
+            text_proposal_grace_period: cpcp.text_proposal_grace_period,
+            set_election_parameters_proposal_voting_period: cpcp
+                .set_election_parameters_proposal_voting_period,
+            set_election_parameters_proposal_grace_period: cpcp
+                .set_election_parameters_proposal_grace_period,
+            set_content_working_group_mint_capacity_proposal_voting_period: cpcp
+                .set_content_working_group_mint_capacity_proposal_voting_period,
+            set_content_working_group_mint_capacity_proposal_grace_period: cpcp
+                .set_content_working_group_mint_capacity_proposal_grace_period,
+            set_lead_proposal_voting_period: cpcp.set_lead_proposal_voting_period,
+            set_lead_proposal_grace_period: cpcp.set_lead_proposal_voting_period,
+            spending_proposal_voting_period: cpcp.spending_proposal_voting_period,
+            spending_proposal_grace_period: cpcp.spending_proposal_grace_period,
+            evict_storage_provider_proposal_voting_period: cpcp
+                .evict_storage_provider_proposal_voting_period,
+            evict_storage_provider_proposal_grace_period: cpcp
+                .evict_storage_provider_proposal_grace_period,
+            set_storage_role_parameters_proposal_voting_period: cpcp
+                .set_storage_role_parameters_proposal_voting_period,
+            set_storage_role_parameters_proposal_grace_period: cpcp
+                .set_storage_role_parameters_proposal_grace_period,
         }),
     }
 }

+ 58 - 0
runtime-modules/proposals/codex/src/lib.rs

@@ -66,6 +66,7 @@ use srml_support::traits::{Currency, Get};
 use srml_support::{decl_error, decl_module, decl_storage, ensure, print};
 use system::{ensure_root, RawOrigin};
 
+pub use crate::proposal_types::ProposalsConfigParameters;
 pub use proposal_types::{ProposalDetails, ProposalDetailsOf, ProposalEncoder};
 
 // Percentage of the total token issue as max mint balance value. Shared with spending
@@ -938,6 +939,63 @@ impl<T: Trait> Module<T> {
 
         Ok(())
     }
+
+    /// Sets default config values for the proposals.
+    /// Should be called on the migration to the new runtime version.
+    pub fn set_default_config_values() {
+        let p = ProposalsConfigParameters::default();
+
+        <SetValidatorCountProposalVotingPeriod<T>>::put(T::BlockNumber::from(
+            p.set_validator_count_proposal_voting_period,
+        ));
+        <SetValidatorCountProposalGracePeriod<T>>::put(T::BlockNumber::from(
+            p.set_validator_count_proposal_grace_period,
+        ));
+        <RuntimeUpgradeProposalVotingPeriod<T>>::put(T::BlockNumber::from(
+            p.runtime_upgrade_proposal_voting_period,
+        ));
+        <RuntimeUpgradeProposalGracePeriod<T>>::put(T::BlockNumber::from(
+            p.runtime_upgrade_proposal_grace_period,
+        ));
+        <TextProposalVotingPeriod<T>>::put(T::BlockNumber::from(p.text_proposal_voting_period));
+        <TextProposalGracePeriod<T>>::put(T::BlockNumber::from(p.text_proposal_grace_period));
+        <SetElectionParametersProposalVotingPeriod<T>>::put(T::BlockNumber::from(
+            p.set_election_parameters_proposal_voting_period,
+        ));
+        <SetElectionParametersProposalGracePeriod<T>>::put(T::BlockNumber::from(
+            p.set_election_parameters_proposal_grace_period,
+        ));
+        <SetContentWorkingGroupMintCapacityProposalVotingPeriod<T>>::put(T::BlockNumber::from(
+            p.set_content_working_group_mint_capacity_proposal_voting_period,
+        ));
+        <SetContentWorkingGroupMintCapacityProposalGracePeriod<T>>::put(T::BlockNumber::from(
+            p.set_content_working_group_mint_capacity_proposal_grace_period,
+        ));
+        <SetLeadProposalVotingPeriod<T>>::put(T::BlockNumber::from(
+            p.set_lead_proposal_voting_period,
+        ));
+        <SetLeadProposalGracePeriod<T>>::put(T::BlockNumber::from(
+            p.set_lead_proposal_grace_period,
+        ));
+        <SpendingProposalVotingPeriod<T>>::put(T::BlockNumber::from(
+            p.spending_proposal_voting_period,
+        ));
+        <SpendingProposalGracePeriod<T>>::put(T::BlockNumber::from(
+            p.spending_proposal_grace_period,
+        ));
+        <EvictStorageProviderProposalVotingPeriod<T>>::put(T::BlockNumber::from(
+            p.evict_storage_provider_proposal_voting_period,
+        ));
+        <EvictStorageProviderProposalGracePeriod<T>>::put(T::BlockNumber::from(
+            p.evict_storage_provider_proposal_grace_period,
+        ));
+        <SetStorageRoleParametersProposalVotingPeriod<T>>::put(T::BlockNumber::from(
+            p.set_storage_role_parameters_proposal_voting_period,
+        ));
+        <SetStorageRoleParametersProposalGracePeriod<T>>::put(T::BlockNumber::from(
+            p.set_storage_role_parameters_proposal_grace_period,
+        ));
+    }
 }
 
 // calculates required stake value using total issuance value and stake percentage. Truncates to

+ 84 - 0
runtime-modules/proposals/codex/src/proposal_types/mod.rs

@@ -1,3 +1,5 @@
+#![warn(missing_docs)]
+
 pub(crate) mod parameters;
 
 use codec::{Decode, Encode};
@@ -62,3 +64,85 @@ impl<MintedBalance, CurrencyBalance, BlockNumber, AccountId, MemberId> Default
         ProposalDetails::Text(b"invalid proposal details".to_vec())
     }
 }
+
+/// Contains proposal config parameters. Default values are used by migration and genesis config.
+pub struct ProposalsConfigParameters {
+    /// 'Set validator count' proposal voting period
+    pub set_validator_count_proposal_voting_period: u32,
+
+    /// 'Set validator count' proposal grace period
+    pub set_validator_count_proposal_grace_period: u32,
+
+    /// 'Runtime upgrade' proposal voting period
+    pub runtime_upgrade_proposal_voting_period: u32,
+
+    /// 'Runtime upgrade' proposal grace period
+    pub runtime_upgrade_proposal_grace_period: u32,
+
+    /// 'Text' proposal voting period
+    pub text_proposal_voting_period: u32,
+
+    /// 'Text' proposal grace period
+    pub text_proposal_grace_period: u32,
+
+    /// 'Set election parameters' proposal voting period
+    pub set_election_parameters_proposal_voting_period: u32,
+
+    /// 'Set election parameters' proposal grace period
+    pub set_election_parameters_proposal_grace_period: u32,
+
+    /// 'Set content working group mint capacity' proposal voting period
+    pub set_content_working_group_mint_capacity_proposal_voting_period: u32,
+
+    /// 'Set content working group mint capacity' proposal grace period
+    pub set_content_working_group_mint_capacity_proposal_grace_period: u32,
+
+    /// 'Set lead' proposal voting period
+    pub set_lead_proposal_voting_period: u32,
+
+    /// 'Set lead' proposal grace period
+    pub set_lead_proposal_grace_period: u32,
+
+    /// 'Spending' proposal voting period
+    pub spending_proposal_voting_period: u32,
+
+    /// 'Spending' proposal grace period
+    pub spending_proposal_grace_period: u32,
+
+    /// 'Evict storage provider' proposal voting period
+    pub evict_storage_provider_proposal_voting_period: u32,
+
+    /// 'Evict storage provider' proposal grace period
+    pub evict_storage_provider_proposal_grace_period: u32,
+
+    /// 'Set storage role parameters' proposal voting period
+    pub set_storage_role_parameters_proposal_voting_period: u32,
+
+    /// 'Set storage role parameters' proposal grace period
+    pub set_storage_role_parameters_proposal_grace_period: u32,
+}
+
+impl Default for ProposalsConfigParameters {
+    fn default() -> Self {
+        ProposalsConfigParameters {
+            set_validator_count_proposal_voting_period: 43200u32,
+            set_validator_count_proposal_grace_period: 0u32,
+            runtime_upgrade_proposal_voting_period: 72000u32,
+            runtime_upgrade_proposal_grace_period: 72000u32,
+            text_proposal_voting_period: 72000u32,
+            text_proposal_grace_period: 0u32,
+            set_election_parameters_proposal_voting_period: 72000u32,
+            set_election_parameters_proposal_grace_period: 201601u32,
+            set_content_working_group_mint_capacity_proposal_voting_period: 43200u32,
+            set_content_working_group_mint_capacity_proposal_grace_period: 0u32,
+            set_lead_proposal_voting_period: 43200u32,
+            set_lead_proposal_grace_period: 0u32,
+            spending_proposal_voting_period: 72000u32,
+            spending_proposal_grace_period: 14400u32,
+            evict_storage_provider_proposal_voting_period: 43200u32,
+            evict_storage_provider_proposal_grace_period: 0u32,
+            set_storage_role_parameters_proposal_voting_period: 43200u32,
+            set_storage_role_parameters_proposal_grace_period: 14400u32,
+        }
+    }
+}

+ 87 - 0
runtime-modules/proposals/codex/src/tests/mod.rs

@@ -5,11 +5,13 @@ use srml_support::traits::Currency;
 use srml_support::StorageMap;
 use system::RawOrigin;
 
+use crate::*;
 use crate::{BalanceOf, Error, ProposalDetails};
 use proposal_engine::ProposalParameters;
 use roles::actors::RoleParameters;
 use srml_support::dispatch::DispatchResult;
 
+use crate::proposal_types::ProposalsConfigParameters;
 pub use mock::*;
 
 pub(crate) fn increase_total_balance_issuance(balance: u64) {
@@ -1051,3 +1053,88 @@ fn create_set_storage_role_parameters_proposal_fails_with_invalid_parameters() {
         );
     });
 }
+
+#[test]
+fn set_default_proposal_parameters_succeeded() {
+    initial_test_ext().execute_with(|| {
+        let p = ProposalsConfigParameters::default();
+
+        // nothing is set
+        assert_eq!(<SetValidatorCountProposalVotingPeriod<Test>>::get(), 0);
+
+        ProposalCodex::set_default_config_values();
+
+        assert_eq!(
+            <SetValidatorCountProposalVotingPeriod<Test>>::get(),
+            p.set_validator_count_proposal_voting_period as u64
+        );
+        assert_eq!(
+            <SetValidatorCountProposalGracePeriod<Test>>::get(),
+            p.set_validator_count_proposal_grace_period as u64
+        );
+        assert_eq!(
+            <RuntimeUpgradeProposalVotingPeriod<Test>>::get(),
+            p.runtime_upgrade_proposal_voting_period as u64
+        );
+        assert_eq!(
+            <RuntimeUpgradeProposalGracePeriod<Test>>::get(),
+            p.runtime_upgrade_proposal_grace_period as u64
+        );
+        assert_eq!(
+            <TextProposalVotingPeriod<Test>>::get(),
+            p.text_proposal_voting_period as u64
+        );
+        assert_eq!(
+            <TextProposalGracePeriod<Test>>::get(),
+            p.text_proposal_grace_period as u64
+        );
+        assert_eq!(
+            <SetElectionParametersProposalVotingPeriod<Test>>::get(),
+            p.set_election_parameters_proposal_voting_period as u64
+        );
+        assert_eq!(
+            <SetElectionParametersProposalGracePeriod<Test>>::get(),
+            p.set_election_parameters_proposal_grace_period as u64
+        );
+        assert_eq!(
+            <SetContentWorkingGroupMintCapacityProposalVotingPeriod<Test>>::get(),
+            p.set_content_working_group_mint_capacity_proposal_voting_period as u64
+        );
+        assert_eq!(
+            <SetContentWorkingGroupMintCapacityProposalGracePeriod<Test>>::get(),
+            p.set_content_working_group_mint_capacity_proposal_grace_period as u64
+        );
+        assert_eq!(
+            <SetLeadProposalVotingPeriod<Test>>::get(),
+            p.set_lead_proposal_voting_period as u64
+        );
+        assert_eq!(
+            <SetLeadProposalGracePeriod<Test>>::get(),
+            p.set_lead_proposal_grace_period as u64
+        );
+        assert_eq!(
+            <SpendingProposalVotingPeriod<Test>>::get(),
+            p.spending_proposal_voting_period as u64
+        );
+        assert_eq!(
+            <SpendingProposalGracePeriod<Test>>::get(),
+            p.spending_proposal_grace_period as u64
+        );
+        assert_eq!(
+            <EvictStorageProviderProposalVotingPeriod<Test>>::get(),
+            p.evict_storage_provider_proposal_voting_period as u64
+        );
+        assert_eq!(
+            <EvictStorageProviderProposalGracePeriod<Test>>::get(),
+            p.evict_storage_provider_proposal_grace_period as u64
+        );
+        assert_eq!(
+            <SetStorageRoleParametersProposalVotingPeriod<Test>>::get(),
+            p.set_storage_role_parameters_proposal_voting_period as u64
+        );
+        assert_eq!(
+            <SetStorageRoleParametersProposalGracePeriod<Test>>::get(),
+            p.set_storage_role_parameters_proposal_grace_period as u64
+        );
+    });
+}

+ 1 - 0
runtime/src/lib.rs

@@ -60,6 +60,7 @@ pub use staking::StakerStatus;
 pub use timestamp::Call as TimestampCall;
 
 use integration::proposals::{CouncilManager, ExtrinsicProposalEncoder, MembershipOriginValidator};
+pub use proposals_codex::ProposalsConfigParameters;
 
 /// An index to a block.
 pub type BlockNumber = u32;

+ 3 - 0
runtime/src/migration.rs

@@ -19,6 +19,8 @@ impl<T: Trait> Module<T> {
             minting::BalanceOf::<T>::zero(),
         );
 
+        proposals_codex::Module::<T>::set_default_config_values();
+
         Self::deposit_event(RawEvent::Migrated(
             <system::Module<T>>::block_number(),
             VERSION.spec_version,
@@ -33,6 +35,7 @@ pub trait Trait:
     + forum::Trait
     + sudo::Trait
     + governance::council::Trait
+    + proposals_codex::Trait
 {
     type Event: From<Event<Self>> + Into<<Self as system::Trait>::Event>;
 }