From 894b95bd59005548f7634071c7cf4768b9161d38 Mon Sep 17 00:00:00 2001
From: librelois <c@elo.tf>
Date: Tue, 12 Jul 2022 22:49:08 +0200
Subject: [PATCH] =?UTF-8?q?mod(cert):=C2=A0remove=20rule=20CertRenewablePe?=
 =?UTF-8?q?riod?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 end2end-tests/cucumber-genesis/default.json |   2 -
 end2end-tests/cucumber-genesis/wot.json     |   2 -
 node/src/chain_spec/gdev.rs                 |   2 -
 pallets/certification/src/lib.rs            |  40 ++------------------
 pallets/certification/src/mock.rs           |   2 -
 pallets/certification/src/tests.rs          |  33 ----------------
 pallets/certification/src/types.rs          |   1 -
 pallets/duniter-test-parameters/src/lib.rs  |   2 -
 pallets/duniter-wot/src/mock.rs             |   4 --
 resources/gdev.json                         |   2 -
 resources/metadata.scale                    | Bin 115699 -> 120450 bytes
 runtime/common/src/pallets_config.rs        |   2 -
 runtime/g1/src/parameters.rs                |   1 -
 runtime/gdev/src/lib.rs                     |   3 --
 runtime/gdev/tests/common/mod.rs            |   2 -
 runtime/gtest/src/parameters.rs             |   1 -
 16 files changed, 3 insertions(+), 96 deletions(-)

diff --git a/end2end-tests/cucumber-genesis/default.json b/end2end-tests/cucumber-genesis/default.json
index 7a9780910..b23ed7e91 100644
--- a/end2end-tests/cucumber-genesis/default.json
+++ b/end2end-tests/cucumber-genesis/default.json
@@ -23,7 +23,6 @@
     "cert_period": 15,
     "cert_max_by_issuer": 10,
     "cert_min_received_cert_to_issue_cert": 2,
-    "cert_renewable_period": 50,
     "cert_validity_period": 1000,
     "idty_confirm_period": 40,
     "idty_creation_period": 50,
@@ -35,7 +34,6 @@
     "smith_cert_period": 15,
     "smith_cert_max_by_issuer": 8,
     "smith_cert_min_received_cert_to_issue_cert": 2,
-    "smith_cert_renewable_period": 50,
     "smith_cert_validity_period": 1000,
     "smith_membership_period": 1000,
     "smith_membership_renewable_period": 20,
diff --git a/end2end-tests/cucumber-genesis/wot.json b/end2end-tests/cucumber-genesis/wot.json
index 988e6857f..72e61ebcd 100644
--- a/end2end-tests/cucumber-genesis/wot.json
+++ b/end2end-tests/cucumber-genesis/wot.json
@@ -28,7 +28,6 @@
     "cert_period": 15,
     "cert_max_by_issuer": 10,
     "cert_min_received_cert_to_issue_cert": 2,
-    "cert_renewable_period": 50,
     "cert_validity_period": 1000,
     "idty_confirm_period": 40,
     "idty_creation_period": 50,
@@ -40,7 +39,6 @@
     "smith_cert_period": 15,
     "smith_cert_max_by_issuer": 8,
     "smith_cert_min_received_cert_to_issue_cert": 2,
-    "smith_cert_renewable_period": 50,
     "smith_cert_validity_period": 1000,
     "smith_membership_period": 1000,
     "smith_membership_renewable_period": 20,
diff --git a/node/src/chain_spec/gdev.rs b/node/src/chain_spec/gdev.rs
index b31c4f7da..9d44f49c1 100644
--- a/node/src/chain_spec/gdev.rs
+++ b/node/src/chain_spec/gdev.rs
@@ -309,7 +309,6 @@ fn gen_genesis_for_local_chain(
                 cert_period: 15,
                 cert_max_by_issuer: 10,
                 cert_min_received_cert_to_issue_cert: 2,
-                cert_renewable_period: 50,
                 cert_validity_period,
                 idty_confirm_period: 40,
                 idty_creation_period: 50,
@@ -321,7 +320,6 @@ fn gen_genesis_for_local_chain(
                 smith_cert_period: 15,
                 smith_cert_max_by_issuer: 8,
                 smith_cert_min_received_cert_to_issue_cert: 2,
-                smith_cert_renewable_period: 50,
                 smith_cert_validity_period: 1_000,
                 smith_membership_period,
                 smith_membership_renewable_period: 50,
diff --git a/pallets/certification/src/lib.rs b/pallets/certification/src/lib.rs
index cc577701f..5d333e7be 100644
--- a/pallets/certification/src/lib.rs
+++ b/pallets/certification/src/lib.rs
@@ -83,9 +83,6 @@ pub mod pallet {
         /// Handler for Removed event
         type OnRemovedCert: OnRemovedCert<Self::IdtyIndex>;
         #[pallet::constant]
-        /// Duration after which a certification is renewable
-        type CertRenewablePeriod: Get<Self::BlockNumber>;
-        #[pallet::constant]
         /// Duration of validity of a certification
         type ValidityPeriod: Get<Self::BlockNumber>;
     }
@@ -169,15 +166,11 @@ pub mod pallet {
                             }
                         }
                     }
-                    let renewable_on = removable_on.saturating_sub(
-                        T::ValidityPeriod::get().saturating_sub(T::CertRenewablePeriod::get()),
-                    );
 
                     <StorageCertsByIssuer<T, I>>::insert(
                         issuer,
                         receiver,
                         CertValue {
-                            renewable_on,
                             removable_on: *removable_on,
                         },
                     );
@@ -274,8 +267,6 @@ pub mod pallet {
         NotEnoughCertReceived,
         /// This identity has already issued a certification too recently
         NotRespectCertPeriod,
-        /// This certification has already been issued or renewed recently
-        NotRespectRenewablePeriod,
         /// Receiver not found
         ReceiverNotFound,
     }
@@ -302,7 +293,7 @@ pub mod pallet {
 
             let block_number = frame_system::pallet::Pallet::<T>::block_number();
 
-            let create = if verify_rules {
+            if verify_rules {
                 let issuer_idty_cert_meta = <StorageIdtyCertMeta<T, I>>::get(issuer);
                 if issuer_idty_cert_meta.received_count == 0 {
                     return Err(Error::<T, I>::IdtyMustReceiveCertsBeforeCanIssue.into());
@@ -317,22 +308,9 @@ pub mod pallet {
                 } else if issuer_idty_cert_meta.issued_count >= T::MaxByIssuer::get() {
                     return Err(Error::<T, I>::IssuedTooManyCert.into());
                 }
-
-                // Verify rule CertRenewablePeriod
-                if let Ok(CertValue { renewable_on, .. }) =
-                    <StorageCertsByIssuer<T, I>>::try_get(issuer, receiver)
-                {
-                    if renewable_on > block_number {
-                        return Err(Error::<T, I>::NotRespectRenewablePeriod.into());
-                    }
-                    false
-                } else {
-                    true
-                }
-            } else {
-                !StorageCertsByIssuer::<T, I>::contains_key(issuer, receiver)
             };
 
+            let create = !StorageCertsByIssuer::<T, I>::contains_key(issuer, receiver);
             Self::do_add_cert(block_number, create, issuer, receiver)
         }
         /// Add a new certification or renew an existing one
@@ -370,18 +348,7 @@ pub mod pallet {
                 return Err(Error::<T, I>::IssuedTooManyCert.into());
             }
 
-            // Verify rule CertRenewablePeriod
-            let create = if let Ok(CertValue { renewable_on, .. }) =
-                <StorageCertsByIssuer<T, I>>::try_get(issuer, receiver)
-            {
-                if renewable_on > block_number {
-                    return Err(Error::<T, I>::NotRespectRenewablePeriod.into());
-                }
-                false
-            } else {
-                true
-            };
-
+            let create = !StorageCertsByIssuer::<T, I>::contains_key(issuer, receiver);
             Self::do_add_cert(block_number, create, issuer, receiver)
         }
 
@@ -439,7 +406,6 @@ pub mod pallet {
 
             // Write StorageCertsRemovableOn and StorageCertsByIssuer
             let cert_value = CertValue {
-                renewable_on: block_number + T::CertRenewablePeriod::get(),
                 removable_on: block_number + T::ValidityPeriod::get(),
             };
             <StorageCertsRemovableOn<T, I>>::append(cert_value.removable_on, (issuer, receiver));
diff --git a/pallets/certification/src/mock.rs b/pallets/certification/src/mock.rs
index b33804637..96a467257 100644
--- a/pallets/certification/src/mock.rs
+++ b/pallets/certification/src/mock.rs
@@ -94,7 +94,6 @@ impl frame_support::traits::EnsureOrigin<(Origin, IdtyIndex, IdtyIndex)> for Ens
 parameter_types! {
     pub const MaxByIssuer: u32 = 3;
     pub const MinReceivedCertToBeAbleToIssueCert: u32 = 2;
-    pub const RenewablePeriod: BlockNumber = 4;
     pub const CertPeriod: u64 = 2;
     pub const ValidityPeriod: u64 = 10;
 }
@@ -109,7 +108,6 @@ impl pallet_certification::Config for Test {
     type MinReceivedCertToBeAbleToIssueCert = MinReceivedCertToBeAbleToIssueCert;
     type OnNewcert = ();
     type OnRemovedCert = ();
-    type CertRenewablePeriod = RenewablePeriod;
     type ValidityPeriod = ValidityPeriod;
 }
 
diff --git a/pallets/certification/src/tests.rs b/pallets/certification/src/tests.rs
index 64b77fb2a..25998c16b 100644
--- a/pallets/certification/src/tests.rs
+++ b/pallets/certification/src/tests.rs
@@ -115,11 +115,6 @@ fn test_genesis_build() {
             DefaultCertification::certs_removable_on(3),
             Some(vec![(2, 1)]),
         );
-        // Cert 2->0 cannot be renewed before #5
-        assert_eq!(
-            DefaultCertification::add_cert(Origin::signed(2), 0),
-            Err(Error::<Test, _>::NotRespectRenewablePeriod.into())
-        );
 
         run_to_block(3);
         // Cert 2->1 must have expired
@@ -162,31 +157,3 @@ fn test_cert_period() {
         assert_ok!(DefaultCertification::add_cert(Origin::signed(0), 3));
     });
 }
-
-#[test]
-fn test_renewable_period() {
-    new_test_ext(DefaultCertificationConfig {
-        apply_cert_period_at_genesis: true,
-        certs_by_issuer: btreemap![
-            0 => btreemap![1 => 10],
-            2 => btreemap![0 => 10],
-            3 => btreemap![0 => 10],
-        ],
-    })
-    .execute_with(|| {
-        run_to_block(CertPeriod::get());
-        assert_eq!(
-            DefaultCertification::add_cert(Origin::signed(0), 1),
-            Err(Error::<Test, _>::NotRespectRenewablePeriod.into())
-        );
-        run_to_block(RenewablePeriod::get());
-        assert_ok!(DefaultCertification::add_cert(Origin::signed(0), 1));
-        run_to_block(RenewablePeriod::get() + CertPeriod::get());
-        assert_eq!(
-            DefaultCertification::add_cert(Origin::signed(0), 1),
-            Err(Error::<Test, _>::NotRespectRenewablePeriod.into())
-        );
-        run_to_block((2 * RenewablePeriod::get()) + 1);
-        assert_ok!(DefaultCertification::add_cert(Origin::signed(0), 1));
-    });
-}
diff --git a/pallets/certification/src/types.rs b/pallets/certification/src/types.rs
index d1b858f9f..4d2534c57 100644
--- a/pallets/certification/src/types.rs
+++ b/pallets/certification/src/types.rs
@@ -22,7 +22,6 @@ use scale_info::TypeInfo;
 
 #[derive(Encode, Decode, Clone, Copy, PartialEq, Eq, RuntimeDebug, TypeInfo)]
 pub struct CertValue<BlockNumber> {
-    pub renewable_on: BlockNumber,
     pub removable_on: BlockNumber,
 }
 
diff --git a/pallets/duniter-test-parameters/src/lib.rs b/pallets/duniter-test-parameters/src/lib.rs
index b72c11341..9a3a6f402 100644
--- a/pallets/duniter-test-parameters/src/lib.rs
+++ b/pallets/duniter-test-parameters/src/lib.rs
@@ -40,7 +40,6 @@ pub mod types {
         pub cert_period: BlockNumber,
         pub cert_max_by_issuer: CertCount,
         pub cert_min_received_cert_to_issue_cert: CertCount,
-        pub cert_renewable_period: BlockNumber,
         pub cert_validity_period: BlockNumber,
         pub idty_confirm_period: BlockNumber,
         pub idty_creation_period: BlockNumber,
@@ -52,7 +51,6 @@ pub mod types {
         pub smith_cert_period: BlockNumber,
         pub smith_cert_max_by_issuer: CertCount,
         pub smith_cert_min_received_cert_to_issue_cert: CertCount,
-        pub smith_cert_renewable_period: BlockNumber,
         pub smith_cert_validity_period: BlockNumber,
         pub smith_membership_period: BlockNumber,
         pub smith_membership_renewable_period: BlockNumber,
diff --git a/pallets/duniter-wot/src/mock.rs b/pallets/duniter-wot/src/mock.rs
index 9a8be5817..5e7ac0454 100644
--- a/pallets/duniter-wot/src/mock.rs
+++ b/pallets/duniter-wot/src/mock.rs
@@ -154,7 +154,6 @@ impl pallet_membership::Config<Instance1> for Test {
 parameter_types! {
     pub const MaxByIssuer: u8 = 8;
     pub const MinReceivedCertToBeAbleToIssueCert: u32 = 2;
-    pub const CertRenewablePeriod: u64 = 4;
     pub const CertPeriod: u64 = 2;
     pub const ValidityPeriod: u64 = 20;
 }
@@ -169,7 +168,6 @@ impl pallet_certification::Config<Instance1> for Test {
     type MinReceivedCertToBeAbleToIssueCert = MinReceivedCertToBeAbleToIssueCert;
     type OnNewcert = DuniterWot;
     type OnRemovedCert = DuniterWot;
-    type CertRenewablePeriod = CertRenewablePeriod;
     type ValidityPeriod = ValidityPeriod;
 }
 
@@ -213,7 +211,6 @@ impl pallet_membership::Config<Instance2> for Test {
 parameter_types! {
     pub const SmithsMaxByIssuer: u8 = 8;
     pub const SmithsMinReceivedCertToBeAbleToIssueCert: u32 = 2;
-    pub const SmithsCertRenewablePeriod: u64 = 4;
     pub const SmithsCertPeriod: u64 = 2;
     pub const SmithsValidityPeriod: u64 = 10;
 }
@@ -228,7 +225,6 @@ impl pallet_certification::Config<Instance2> for Test {
     type MinReceivedCertToBeAbleToIssueCert = SmithsMinReceivedCertToBeAbleToIssueCert;
     type OnNewcert = SmithsSubWot;
     type OnRemovedCert = SmithsSubWot;
-    type CertRenewablePeriod = SmithsCertRenewablePeriod;
     type ValidityPeriod = SmithsValidityPeriod;
 }
 
diff --git a/resources/gdev.json b/resources/gdev.json
index aba51b912..f0be34c7e 100644
--- a/resources/gdev.json
+++ b/resources/gdev.json
@@ -137,7 +137,6 @@
     "cert_period": 14400,
     "cert_max_by_issuer": 100,
     "cert_min_received_cert_to_issue_cert": 5,
-    "cert_renewable_period": 172800,
     "cert_validity_period": 2102400,
     "idty_confirm_period": 14400,
     "idty_creation_period": 14400,
@@ -149,7 +148,6 @@
     "smith_cert_period": 14400,
     "smith_cert_max_by_issuer": 12,
     "smith_cert_min_received_cert_to_issue_cert": 3,
-    "smith_cert_renewable_period": 172800,
     "smith_cert_validity_period": 2102400,
     "smith_membership_period": 1051200,
     "smith_membership_renewable_period": 172800,
diff --git a/resources/metadata.scale b/resources/metadata.scale
index 1f01cc4a16551841453d80d1d36da2e23037db3f..03a32f390272d496544efb76a0d62d77f0ffc50a 100644
GIT binary patch
delta 12066
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

delta 8284
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

diff --git a/runtime/common/src/pallets_config.rs b/runtime/common/src/pallets_config.rs
index 510c6e237..93050373d 100644
--- a/runtime/common/src/pallets_config.rs
+++ b/runtime/common/src/pallets_config.rs
@@ -461,7 +461,6 @@ macro_rules! pallets_config {
             type MinReceivedCertToBeAbleToIssueCert = MinReceivedCertToBeAbleToIssueCert;
             type OnNewcert = Wot;
             type OnRemovedCert = Wot;
-            type CertRenewablePeriod = CertRenewablePeriod;
             type ValidityPeriod = ValidityPeriod;
         }
 
@@ -499,7 +498,6 @@ macro_rules! pallets_config {
             type MinReceivedCertToBeAbleToIssueCert = SmithMinReceivedCertToBeAbleToIssueCert;
             type OnNewcert = SmithsSubWot;
             type OnRemovedCert = SmithsSubWot;
-            type CertRenewablePeriod = SmithCertRenewablePeriod;
             type ValidityPeriod = SmithValidityPeriod;
         }
 
diff --git a/runtime/g1/src/parameters.rs b/runtime/g1/src/parameters.rs
index 44e8ced87..62ba9ada4 100644
--- a/runtime/g1/src/parameters.rs
+++ b/runtime/g1/src/parameters.rs
@@ -119,7 +119,6 @@ parameter_types! {
     pub const CertPeriod: BlockNumber = 5 * DAYS;
     pub const MaxByIssuer: u32 = 100;
     pub const MinReceivedCertToBeAbleToIssueCert: u32 = 5;
-    pub const CertRenewablePeriod: BlockNumber = 6 * MONTHS;
     pub const ValidityPeriod: BlockNumber = 2 * YEARS;
 }
 
diff --git a/runtime/gdev/src/lib.rs b/runtime/gdev/src/lib.rs
index 99f886d16..80c84ed22 100644
--- a/runtime/gdev/src/lib.rs
+++ b/runtime/gdev/src/lib.rs
@@ -227,7 +227,6 @@ common_runtime::pallets_config! {
     pub type MaxByIssuer = pallet_duniter_test_parameters::CertMaxByIssuer<Runtime>;
     pub type MinReceivedCertToBeAbleToIssueCert =
         pallet_duniter_test_parameters::CertMinReceivedCertToIssueCert<Runtime>;
-    pub type CertRenewablePeriod = pallet_duniter_test_parameters::CertRenewablePeriod<Runtime>;
     pub type ValidityPeriod = pallet_duniter_test_parameters::CertValidityPeriod<Runtime>;
     pub type ConfirmPeriod = pallet_duniter_test_parameters::IdtyConfirmPeriod<Runtime>;
     pub type IdtyCreationPeriod = pallet_duniter_test_parameters::IdtyCreationPeriod<Runtime>;
@@ -247,8 +246,6 @@ common_runtime::pallets_config! {
     pub type SmithMaxByIssuer = pallet_duniter_test_parameters::SmithCertMaxByIssuer<Runtime>;
     pub type SmithMinReceivedCertToBeAbleToIssueCert =
         pallet_duniter_test_parameters::SmithCertMinReceivedCertToIssueCert<Runtime>;
-    pub type SmithCertRenewablePeriod =
-        pallet_duniter_test_parameters::SmithCertRenewablePeriod<Runtime>;
     pub type SmithValidityPeriod = pallet_duniter_test_parameters::SmithCertValidityPeriod<Runtime>;
     pub type SmithMembershipPeriod = pallet_duniter_test_parameters::SmithMembershipPeriod<Runtime>;
     pub type SmithPendingMembershipPeriod =
diff --git a/runtime/gdev/tests/common/mod.rs b/runtime/gdev/tests/common/mod.rs
index 4bcb9d45a..16bd159b3 100644
--- a/runtime/gdev/tests/common/mod.rs
+++ b/runtime/gdev/tests/common/mod.rs
@@ -99,7 +99,6 @@ impl ExtBuilder {
                 cert_period: 15,
                 cert_max_by_issuer: 10,
                 cert_min_received_cert_to_issue_cert: 2,
-                cert_renewable_period: 50,
                 cert_validity_period: 10_000,
                 idty_confirm_period: 40,
                 idty_creation_period: 50,
@@ -111,7 +110,6 @@ impl ExtBuilder {
                 smith_cert_period: 15,
                 smith_cert_max_by_issuer: 8,
                 smith_cert_min_received_cert_to_issue_cert: 2,
-                smith_cert_renewable_period: 50,
                 smith_cert_validity_period: 1_000,
                 smith_membership_period: 1_000,
                 smith_membership_renewable_period: 50,
diff --git a/runtime/gtest/src/parameters.rs b/runtime/gtest/src/parameters.rs
index 8193b10c4..8b9fbd05f 100644
--- a/runtime/gtest/src/parameters.rs
+++ b/runtime/gtest/src/parameters.rs
@@ -119,7 +119,6 @@ parameter_types! {
 parameter_types! {
     pub const CertPeriod: BlockNumber = DAYS;
     pub const MaxByIssuer: u32 = 100;
-    pub const CertRenewablePeriod: BlockNumber = 12 * DAYS;
     pub const ValidityPeriod: BlockNumber = 146 * DAYS;
 }
 
-- 
GitLab