From 8c72832dd59d7910717e60f7068ff05adc8050fd Mon Sep 17 00:00:00 2001 From: Liam Aharon <liam.aharon@hotmail.com> Date: Wed, 17 Apr 2024 15:34:11 +0400 Subject: [PATCH] make admin Option --- substrate/frame/asset-rewards/src/lib.rs | 25 ++++++++++++---------- substrate/frame/asset-rewards/src/tests.rs | 24 ++++++++++----------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/substrate/frame/asset-rewards/src/lib.rs b/substrate/frame/asset-rewards/src/lib.rs index 472bf9869e4..d15abb28d46 100644 --- a/substrate/frame/asset-rewards/src/lib.rs +++ b/substrate/frame/asset-rewards/src/lib.rs @@ -145,7 +145,10 @@ pub struct PoolInfo<AccountId, AssetId, Balance, BlockNumber> { /// The block the pool will cease distributing rewards. expiry_block: BlockNumber, /// The permissioned account that can manage this pool. - admin: AccountId, + /// + /// This is currently always `Some`, and only an `Option` so in the future permissionless + /// pools may be enabled without storage migration. + admin: Option<AccountId>, /// The total amount of tokens staked in this pool. total_tokens_staked: Balance, /// Total rewards accumulated per token, up to the `last_update_block`. @@ -273,7 +276,7 @@ pub mod pallet { /// The block the pool will cease to accumulate rewards. expiry_block: BlockNumberFor<T>, /// The account allowed to modify the pool. - admin: T::AccountId, + admin: Option<T::AccountId>, }, /// A pool reward rate was modified by the admin. PoolRewardRateModified { @@ -287,7 +290,7 @@ pub mod pallet { /// The modified pool. pool_id: PoolId, /// The new admin. - new_admin: T::AccountId, + new_admin: Option<T::AccountId>, }, /// A pool expiry block was modified by the admin. PoolExpiryBlockModified { @@ -360,7 +363,7 @@ pub mod pallet { reward_per_token_stored: 0u32.into(), last_update_block: 0u32.into(), expiry_block, - admin: admin.clone(), + admin: Some(admin.clone()), }; // Insert it into storage. @@ -376,7 +379,7 @@ pub mod pallet { reward_asset_id: *reward_asset_id, reward_rate_per_block, expiry_block, - admin, + admin: Some(admin), }); Ok(()) @@ -508,7 +511,7 @@ pub mod pallet { .or_else(|_| ensure_signed(origin))?; let pool_info = Pools::<T>::get(pool_id).ok_or(Error::<T>::NonExistentPool)?; - ensure!(caller == pool_info.admin, BadOrigin); + ensure!(Some(caller) == pool_info.admin, BadOrigin); // Always start by updating the pool rewards. let rewards_per_token = Self::reward_per_token(&pool_info)?; @@ -538,11 +541,11 @@ pub mod pallet { .or_else(|_| ensure_signed(origin))?; let mut pool_info = Pools::<T>::get(pool_id).ok_or(Error::<T>::NonExistentPool)?; - ensure!(pool_info.admin == caller, BadOrigin); - pool_info.admin = new_admin.clone(); + ensure!(pool_info.admin == Some(caller), BadOrigin); + pool_info.admin = Some(new_admin.clone()); Pools::<T>::insert(pool_id, pool_info); - Self::deposit_event(Event::PoolAdminModified { pool_id, new_admin }); + Self::deposit_event(Event::PoolAdminModified { pool_id, new_admin: Some(new_admin) }); Ok(()) } @@ -565,7 +568,7 @@ pub mod pallet { ); let pool_info = Pools::<T>::get(pool_id).ok_or(Error::<T>::NonExistentPool)?; - ensure!(pool_info.admin == caller, BadOrigin); + ensure!(pool_info.admin == Some(caller), BadOrigin); // Always start by updating the pool rewards. let reward_per_token = Self::reward_per_token(&pool_info)?; @@ -617,7 +620,7 @@ pub mod pallet { .or_else(|_| ensure_signed(origin))?; let pool_info = Pools::<T>::get(pool_id).ok_or(Error::<T>::NonExistentPool)?; - ensure!(pool_info.admin == caller, BadOrigin); + ensure!(pool_info.admin == Some(caller), BadOrigin); T::Assets::transfer( pool_info.reward_asset_id, diff --git a/substrate/frame/asset-rewards/src/tests.rs b/substrate/frame/asset-rewards/src/tests.rs index 906ee8d75e7..583581a8df8 100644 --- a/substrate/frame/asset-rewards/src/tests.rs +++ b/substrate/frame/asset-rewards/src/tests.rs @@ -132,7 +132,7 @@ mod create_pool { reward_asset_id: DEFAULT_REWARD_ASSET_ID, reward_rate_per_block: DEFAULT_REWARD_RATE_PER_BLOCK, expiry_block: DEFAULT_EXPIRY_BLOCK, - admin: PermissionedAccountId::get(), + admin: Some(PermissionedAccountId::get()), }] ); @@ -147,7 +147,7 @@ mod create_pool { reward_asset_id: DEFAULT_REWARD_ASSET_ID, reward_rate_per_block: DEFAULT_REWARD_RATE_PER_BLOCK, expiry_block: DEFAULT_EXPIRY_BLOCK, - admin: PermissionedAccountId::get(), + admin: Some(PermissionedAccountId::get()), total_tokens_staked: 0, reward_per_token_stored: 0, last_update_block: 0 @@ -179,7 +179,7 @@ mod create_pool { staked_asset_id: staked_asset_id.clone(), reward_asset_id: reward_asset_id.clone(), reward_rate_per_block, - admin, + admin: Some(admin), expiry_block, }] ); @@ -195,7 +195,7 @@ mod create_pool { staked_asset_id: DEFAULT_STAKED_ASSET_ID, reward_asset_id: DEFAULT_REWARD_ASSET_ID, reward_rate_per_block: DEFAULT_REWARD_RATE_PER_BLOCK, - admin: PermissionedAccountId::get(), + admin: Some(PermissionedAccountId::get()), expiry_block: DEFAULT_EXPIRY_BLOCK, total_tokens_staked: 0, reward_per_token_stored: 0, @@ -208,7 +208,7 @@ mod create_pool { staked_asset_id, reward_asset_id, reward_rate_per_block, - admin, + admin: Some(admin), total_tokens_staked: 0, expiry_block, reward_per_token_stored: 0, @@ -246,7 +246,7 @@ mod create_pool { reward_asset_id: asset.clone(), reward_rate_per_block: DEFAULT_REWARD_RATE_PER_BLOCK, expiry_block: DEFAULT_EXPIRY_BLOCK, - admin: PermissionedAccountId::get(), + admin: Some(PermissionedAccountId::get()), }] ); @@ -261,7 +261,7 @@ mod create_pool { reward_asset_id: asset, reward_rate_per_block: DEFAULT_REWARD_RATE_PER_BLOCK, expiry_block: DEFAULT_EXPIRY_BLOCK, - admin: PermissionedAccountId::get(), + admin: Some(PermissionedAccountId::get()), total_tokens_staked: 0, reward_per_token_stored: 0, last_update_block: 0 @@ -637,9 +637,9 @@ mod set_pool_admin { // Check state assert_eq!( *events().last().unwrap(), - Event::<MockRuntime>::PoolAdminModified { pool_id, new_admin } + Event::<MockRuntime>::PoolAdminModified { pool_id, new_admin: Some(new_admin) } ); - assert_eq!(Pools::<MockRuntime>::get(pool_id).unwrap().admin, new_admin); + assert_eq!(Pools::<MockRuntime>::get(pool_id).unwrap().admin, Some(new_admin)); }); } @@ -656,9 +656,9 @@ mod set_pool_admin { // Check state assert_eq!( *events().last().unwrap(), - Event::<MockRuntime>::PoolAdminModified { pool_id, new_admin } + Event::<MockRuntime>::PoolAdminModified { pool_id, new_admin: Some(new_admin) } ); - assert_eq!(Pools::<MockRuntime>::get(pool_id).unwrap().admin, new_admin); + assert_eq!(Pools::<MockRuntime>::get(pool_id).unwrap().admin, Some(new_admin)); }); } @@ -1373,7 +1373,7 @@ fn integration() { reward_asset_id, reward_rate_per_block: 100, expiry_block: 25, - admin + admin: Some(admin) }, Event::Staked { who: staker1, pool_id, amount: 100 }, Event::Staked { who: staker2, pool_id, amount: 100 }, -- GitLab