diff --git a/gradually-update/src/lib.rs b/gradually-update/src/lib.rs index 9391d9dec6d403a5702e1dac8a427c294cc2d941..883dfefc3e4812b0b9b89e78ea990c8fc703c50e 100644 --- a/gradually-update/src/lib.rs +++ b/gradually-update/src/lib.rs @@ -7,12 +7,12 @@ //! //! ## Overview //! -//! This module exposes capabilities for scheduling updates to stroage values gradually. +//! This module exposes capabilities for scheduling updates to storage values gradually. //! This is useful to change parameter values gradually to ensure a smooth transition. //! It is also possible to cancel an update before it reaches to target value. //! -//! NOTE: Only unsigned integer value up to 128 bits are supported. But structs that -//! only use an unsigned integer field could works too such as `Permill` and `FixedU128`. +//! NOTE: Only unsigned integer value up to 128 bits are supported. But a "newtype" pattern struct +//! that wraps an unsigned integer works too such as `Permill` and `FixedU128`. #![cfg_attr(not(feature = "std"), no_std)] // Disable the following two lints since they originate from an external macro (namely decl_storage) @@ -35,7 +35,7 @@ type StorageKey = Vec<u8>; type StorageValue = Vec<u8>; /// Gradually update a value stored at `key` to `target_value`, -/// change `per_block` * `UpdateFrequency` per `UpdateFrequency` blocks. +/// change `per_block` * `T::UpdateFrequency` per `T::UpdateFrequency` blocks. #[derive(Encode, Decode, Clone, Eq, PartialEq, RuntimeDebug)] pub struct GraduallyUpdate { /// The storage key of the value to update @@ -59,7 +59,7 @@ decl_storage! { /// All the on-going updates pub GraduallyUpdates get(fn gradually_updates): Vec<GraduallyUpdate>; /// The last updated block number - pub GraduallyUpdateBlockNumber get(fn gradually_update_block_number): T::BlockNumber; + pub LastUpdatedAt get(fn last_updated_at): T::BlockNumber; } } @@ -68,12 +68,12 @@ decl_event!( pub enum Event<T> where <T as frame_system::Trait>::BlockNumber, { - /// Add gradually_update success (key, per_block, target_value) - GraduallyUpdate(StorageKey, StorageValue, StorageValue), - /// Cancel gradually_update success (key) - CancelGraduallyUpdate(StorageKey), - /// Update gradually_update success (blocknum, key, target_value) - GraduallyUpdateBlockNumber(BlockNumber, StorageKey, StorageValue), + /// Gradually update added (key, per_block, target_value) + GraduallyUpdateAdded(StorageKey, StorageValue, StorageValue), + /// Gradually update cancelled (key) + GraduallyUpdateCancelled(StorageKey), + /// Gradually update applied (block_number, key, target_value) + Updated(BlockNumber, StorageKey, StorageValue), } ); @@ -87,7 +87,7 @@ decl_error! { /// Another update is already been scheduled for this key. GraduallyUpdateHasExisted, /// No update exists to cancel. - CancelGradullyUpdateNotExisted, + GraduallyUpdateNotFound, } } @@ -120,7 +120,7 @@ decl_module! { Ok(()) })?; - Self::deposit_event(RawEvent::GraduallyUpdate(update.key, update.per_block, update.target_value)); + Self::deposit_event(RawEvent::GraduallyUpdateAdded(update.key, update.per_block, update.target_value)); } /// Cancel gradually_update to adjust numeric parameter. @@ -132,12 +132,12 @@ decl_module! { let old_len = gradually_updates.len(); gradually_updates.retain(|item| item.key != key); - ensure!(gradually_updates.len() != old_len, Error::<T>::CancelGradullyUpdateNotExisted); + ensure!(gradually_updates.len() != old_len, Error::<T>::GraduallyUpdateNotFound); Ok(()) })?; - Self::deposit_event(RawEvent::CancelGraduallyUpdate(key)); + Self::deposit_event(RawEvent::GraduallyUpdateCancelled(key)); } /// Update gradually_update to adjust numeric parameter. @@ -149,7 +149,7 @@ decl_module! { impl<T: Trait> Module<T> { fn _on_finalize(now: T::BlockNumber) { - if now < GraduallyUpdateBlockNumber::<T>::get() + T::UpdateFrequency::get() { + if now < Self::last_updated_at() + T::UpdateFrequency::get() { return; } @@ -184,7 +184,7 @@ impl<T: Trait> Module<T> { storage::unhashed::put(&update.key, &value); - Self::deposit_event(RawEvent::GraduallyUpdateBlockNumber(now, update.key.clone(), value)); + Self::deposit_event(RawEvent::Updated(now, update.key.clone(), value)); keep }); @@ -194,7 +194,7 @@ impl<T: Trait> Module<T> { GraduallyUpdates::put(gradually_updates); } - GraduallyUpdateBlockNumber::<T>::put(now); + LastUpdatedAt::<T>::put(now); } #[allow(clippy::ptr_arg)] diff --git a/gradually-update/src/tests.rs b/gradually-update/src/tests.rs index ea721d1ddb027cba608d63756ee69e1b0d9b2e58..7717934873d97f5d5206feb0de6bf4e6d48d4472 100644 --- a/gradually-update/src/tests.rs +++ b/gradually-update/src/tests.rs @@ -27,7 +27,7 @@ fn gradually_update_should_work() { }; assert_ok!(GraduallyUpdateModule::gradually_update(Origin::root(), update.clone())); - let gradually_update_event = TestEvent::gradually_update(RawEvent::GraduallyUpdate( + let gradually_update_event = TestEvent::gradually_update(RawEvent::GraduallyUpdateAdded( update.key, update.per_block, update.target_value, @@ -88,7 +88,7 @@ fn cancel_gradually_update_should_work() { per_block: vec![1], }; assert_ok!(GraduallyUpdateModule::gradually_update(Origin::root(), update.clone())); - let gradually_update_event = TestEvent::gradually_update(RawEvent::GraduallyUpdate( + let gradually_update_event = TestEvent::gradually_update(RawEvent::GraduallyUpdateAdded( update.key.clone(), update.per_block, update.target_value, @@ -101,7 +101,7 @@ fn cancel_gradually_update_should_work() { Origin::root(), update.key.clone() )); - let cancel_gradually_update_event = TestEvent::gradually_update(RawEvent::CancelGraduallyUpdate(update.key)); + let cancel_gradually_update_event = TestEvent::gradually_update(RawEvent::GraduallyUpdateCancelled(update.key)); assert!(System::events() .iter() .any(|record| record.event == cancel_gradually_update_event)); @@ -118,7 +118,7 @@ fn cancel_gradually_update_should_fail() { }; assert_noop!( GraduallyUpdateModule::cancel_gradually_update(Origin::root(), update.key.clone()), - Error::<Runtime>::CancelGradullyUpdateNotExisted + Error::<Runtime>::GraduallyUpdateNotFound ); assert_ok!(GraduallyUpdateModule::gradually_update(Origin::root(), update.clone())); @@ -146,7 +146,7 @@ fn add_on_finalize_should_work() { GraduallyUpdateModule::on_finalize(10); assert_eq!(storage_get(&update.key), vec![10]); let gradually_update_blocknumber_event = - TestEvent::gradually_update(RawEvent::GraduallyUpdateBlockNumber(10, update.key.clone(), vec![10])); + TestEvent::gradually_update(RawEvent::Updated(10, update.key.clone(), vec![10])); assert!(System::events() .iter() .any(|record| record.event == gradually_update_blocknumber_event)); @@ -159,7 +159,7 @@ fn add_on_finalize_should_work() { GraduallyUpdateModule::on_finalize(20); assert_eq!(storage_get(&update.key), vec![20]); let gradually_update_blocknumber_event = - TestEvent::gradually_update(RawEvent::GraduallyUpdateBlockNumber(20, update.key.clone(), vec![20])); + TestEvent::gradually_update(RawEvent::Updated(20, update.key.clone(), vec![20])); assert!(System::events() .iter() .any(|record| record.event == gradually_update_blocknumber_event)); @@ -168,7 +168,7 @@ fn add_on_finalize_should_work() { GraduallyUpdateModule::on_finalize(40); assert_eq!(storage_get(&update.key), vec![30]); let gradually_update_blocknumber_event = - TestEvent::gradually_update(RawEvent::GraduallyUpdateBlockNumber(40, update.key.clone(), vec![30])); + TestEvent::gradually_update(RawEvent::Updated(40, update.key.clone(), vec![30])); assert!(System::events() .iter() .any(|record| record.event == gradually_update_blocknumber_event)); @@ -193,7 +193,7 @@ fn sub_on_finalize_should_work() { GraduallyUpdateModule::on_finalize(10); assert_eq!(storage_get(&update.key), vec![20]); let gradually_update_blocknumber_event = - TestEvent::gradually_update(RawEvent::GraduallyUpdateBlockNumber(10, update.key.clone(), vec![20])); + TestEvent::gradually_update(RawEvent::Updated(10, update.key.clone(), vec![20])); assert!(System::events() .iter() .any(|record| record.event == gradually_update_blocknumber_event)); @@ -206,7 +206,7 @@ fn sub_on_finalize_should_work() { GraduallyUpdateModule::on_finalize(20); assert_eq!(storage_get(&update.key), vec![10]); let gradually_update_blocknumber_event = - TestEvent::gradually_update(RawEvent::GraduallyUpdateBlockNumber(20, update.key.clone(), vec![10])); + TestEvent::gradually_update(RawEvent::Updated(20, update.key.clone(), vec![10])); assert!(System::events() .iter() .any(|record| record.event == gradually_update_blocknumber_event)); @@ -215,7 +215,7 @@ fn sub_on_finalize_should_work() { GraduallyUpdateModule::on_finalize(40); assert_eq!(storage_get(&update.key), vec![5]); let gradually_update_blocknumber_event = - TestEvent::gradually_update(RawEvent::GraduallyUpdateBlockNumber(40, update.key.clone(), vec![5])); + TestEvent::gradually_update(RawEvent::Updated(40, update.key.clone(), vec![5])); assert!(System::events() .iter() .any(|record| record.event == gradually_update_blocknumber_event));