From 8d0476b0b1edae2c8e67d52d1ac641a08471ee66 Mon Sep 17 00:00:00 2001
From: Liam Aharon <liam.aharon@hotmail.com>
Date: Wed, 10 Apr 2024 16:14:39 +0400
Subject: [PATCH] update pallet benchmarks

---
 .../frame/asset-rewards/src/benchmarking.rs   | 134 +++++++++++-------
 substrate/frame/asset-rewards/src/mock.rs     |   2 +-
 2 files changed, 83 insertions(+), 53 deletions(-)

diff --git a/substrate/frame/asset-rewards/src/benchmarking.rs b/substrate/frame/asset-rewards/src/benchmarking.rs
index 3b50e718d34..290306aa24b 100644
--- a/substrate/frame/asset-rewards/src/benchmarking.rs
+++ b/substrate/frame/asset-rewards/src/benchmarking.rs
@@ -25,6 +25,7 @@ use frame_support::{
 	traits::{
 		fungible::NativeOrWithId,
 		fungibles::{Create, Inspect, Mutate},
+		EnsureOrigin,
 	},
 };
 use frame_system::RawOrigin;
@@ -37,8 +38,6 @@ pub trait BenchmarkHelper<AssetId, AccountId> {
 	fn to_asset_id(seed: NativeOrWithId<u32>) -> AssetId;
 	/// Convert a u32 to an AccountId
 	fn to_account_id(seed: u32) -> AccountId;
-	/// Get the permissioned pool creator
-	fn permissioned_pool_creator() -> AccountId;
 }
 
 impl<AssetId, AccountId> BenchmarkHelper<AssetId, AccountId> for ()
@@ -52,9 +51,6 @@ where
 	fn to_account_id(seed: u32) -> AccountId {
 		seed.into()
 	}
-	fn permissioned_pool_creator() -> AccountId {
-		1u32.into()
-	}
 }
 
 /// Create the `asset` and mint the `amount` for the `caller`.
@@ -88,15 +84,16 @@ mod benchmarks {
 	fn create_pool() {
 		use super::*;
 
-		let admin = T::BenchmarkHelper::permissioned_pool_creator();
+		let origin = T::PermissionedOrigin::try_successful_origin().unwrap();
+		let acc = T::PermissionedOrigin::ensure_origin(origin.clone()).unwrap();
 		let staked_asset = T::BenchmarkHelper::to_asset_id(NativeOrWithId::WithId(1));
 		let reward_asset = T::BenchmarkHelper::to_asset_id(NativeOrWithId::Native);
-		create_asset::<T>(&admin, &staked_asset, T::Assets::minimum_balance(staked_asset.clone()));
-		create_asset::<T>(&admin, &reward_asset, T::Assets::minimum_balance(reward_asset.clone()));
+		create_asset::<T>(&acc, &staked_asset, T::Assets::minimum_balance(staked_asset.clone()));
+		create_asset::<T>(&acc, &reward_asset, T::Assets::minimum_balance(reward_asset.clone()));
 
 		#[extrinsic_call]
 		_(
-			RawOrigin::Signed(admin.clone()),
+			origin as T::RuntimeOrigin,
 			Box::new(staked_asset.clone()),
 			Box::new(reward_asset.clone()),
 			100u32.into(),
@@ -106,8 +103,8 @@ mod benchmarks {
 
 		assert_last_event::<T>(
 			Event::PoolCreated {
-				creator: admin.clone(),
-				admin,
+				creator: acc.clone(),
+				admin: acc,
 				staked_asset_id: staked_asset,
 				reward_asset_id: reward_asset,
 				reward_rate_per_block: 100u32.into(),
@@ -122,15 +119,15 @@ mod benchmarks {
 	fn stake() {
 		use super::*;
 
-		let admin = T::BenchmarkHelper::permissioned_pool_creator();
+		let permissioned = T::PermissionedOrigin::try_successful_origin().unwrap();
 		let staker = T::BenchmarkHelper::to_account_id(2);
 		let staked_asset = T::BenchmarkHelper::to_asset_id(NativeOrWithId::WithId(1));
 		let reward_asset = T::BenchmarkHelper::to_asset_id(NativeOrWithId::Native);
 		create_asset::<T>(&staker, &staked_asset, T::Assets::minimum_balance(staked_asset.clone()));
-		create_asset::<T>(&admin, &reward_asset, T::Assets::minimum_balance(reward_asset.clone()));
+		create_asset::<T>(&staker, &reward_asset, T::Assets::minimum_balance(reward_asset.clone()));
 
 		assert_ok!(AssetRewards::<T>::create_pool(
-			RawOrigin::Signed(admin.clone()).into(),
+			permissioned as T::RuntimeOrigin,
 			Box::new(staked_asset.clone()),
 			Box::new(reward_asset.clone()),
 			100u32.into(),
@@ -150,15 +147,15 @@ mod benchmarks {
 	fn unstake() {
 		use super::*;
 
-		let admin = T::BenchmarkHelper::permissioned_pool_creator();
+		let permissioned = T::PermissionedOrigin::try_successful_origin().unwrap();
 		let staker = T::BenchmarkHelper::to_account_id(2);
 		let staked_asset = T::BenchmarkHelper::to_asset_id(NativeOrWithId::WithId(1));
 		let reward_asset = T::BenchmarkHelper::to_asset_id(NativeOrWithId::Native);
 		create_asset::<T>(&staker, &staked_asset, T::Assets::minimum_balance(staked_asset.clone()));
-		create_asset::<T>(&admin, &reward_asset, T::Assets::minimum_balance(reward_asset.clone()));
+		create_asset::<T>(&staker, &reward_asset, T::Assets::minimum_balance(reward_asset.clone()));
 
 		assert_ok!(AssetRewards::<T>::create_pool(
-			RawOrigin::Signed(admin.clone()).into(),
+			permissioned as T::RuntimeOrigin,
 			Box::new(staked_asset.clone()),
 			Box::new(reward_asset.clone()),
 			100u32.into(),
@@ -184,15 +181,15 @@ mod benchmarks {
 	fn harvest_rewards() {
 		use super::*;
 
-		let admin = T::BenchmarkHelper::permissioned_pool_creator();
+		let permissioned = T::PermissionedOrigin::try_successful_origin().unwrap();
 		let staker = T::BenchmarkHelper::to_account_id(2);
 		let staked_asset = T::BenchmarkHelper::to_asset_id(NativeOrWithId::WithId(1));
 		let reward_asset = T::BenchmarkHelper::to_asset_id(NativeOrWithId::Native);
 		create_asset::<T>(&staker, &staked_asset, T::Assets::minimum_balance(staked_asset.clone()));
-		create_asset::<T>(&admin, &reward_asset, T::Assets::minimum_balance(reward_asset.clone()));
+		create_asset::<T>(&staker, &reward_asset, T::Assets::minimum_balance(reward_asset.clone()));
 
 		assert_ok!(AssetRewards::<T>::create_pool(
-			RawOrigin::Signed(admin.clone()).into(),
+			permissioned,
 			Box::new(staked_asset.clone()),
 			Box::new(reward_asset.clone()),
 			100u32.into(),
@@ -224,14 +221,15 @@ mod benchmarks {
 	fn set_pool_reward_rate_per_block() {
 		use super::*;
 
-		let admin = T::BenchmarkHelper::permissioned_pool_creator();
+		let permissioned = T::PermissionedOrigin::try_successful_origin().unwrap();
+		let acc = T::BenchmarkHelper::to_account_id(1);
 		let staked_asset = T::BenchmarkHelper::to_asset_id(NativeOrWithId::WithId(1));
 		let reward_asset = T::BenchmarkHelper::to_asset_id(NativeOrWithId::Native);
-		create_asset::<T>(&admin, &staked_asset, T::Assets::minimum_balance(staked_asset.clone()));
-		create_asset::<T>(&admin, &reward_asset, T::Assets::minimum_balance(reward_asset.clone()));
+		create_asset::<T>(&acc, &staked_asset, T::Assets::minimum_balance(staked_asset.clone()));
+		create_asset::<T>(&acc, &reward_asset, T::Assets::minimum_balance(reward_asset.clone()));
 
 		assert_ok!(AssetRewards::<T>::create_pool(
-			RawOrigin::Signed(admin.clone()).into(),
+			permissioned.clone() as T::RuntimeOrigin,
 			Box::new(staked_asset.clone()),
 			Box::new(reward_asset.clone()),
 			100u32.into(),
@@ -240,7 +238,7 @@ mod benchmarks {
 		));
 
 		#[extrinsic_call]
-		_(RawOrigin::Signed(admin.clone()), 0u32.into(), 5u32.into());
+		_(permissioned as T::RuntimeOrigin, 0u32.into(), 5u32.into());
 
 		assert_last_event::<T>(
 			Event::PoolRewardRateModified {
@@ -255,15 +253,23 @@ mod benchmarks {
 	fn set_pool_admin() {
 		use super::*;
 
-		let admin = T::BenchmarkHelper::permissioned_pool_creator();
+		let permissioned = T::PermissionedOrigin::try_successful_origin().unwrap();
 		let new_admin = T::BenchmarkHelper::to_account_id(2);
 		let staked_asset = T::BenchmarkHelper::to_asset_id(NativeOrWithId::WithId(1));
 		let reward_asset = T::BenchmarkHelper::to_asset_id(NativeOrWithId::Native);
-		create_asset::<T>(&admin, &staked_asset, T::Assets::minimum_balance(staked_asset.clone()));
-		create_asset::<T>(&admin, &reward_asset, T::Assets::minimum_balance(reward_asset.clone()));
+		create_asset::<T>(
+			&new_admin,
+			&staked_asset,
+			T::Assets::minimum_balance(staked_asset.clone()),
+		);
+		create_asset::<T>(
+			&new_admin,
+			&reward_asset,
+			T::Assets::minimum_balance(reward_asset.clone()),
+		);
 
 		assert_ok!(AssetRewards::<T>::create_pool(
-			RawOrigin::Signed(admin.clone()).into(),
+			permissioned.clone() as T::RuntimeOrigin,
 			Box::new(staked_asset.clone()),
 			Box::new(reward_asset.clone()),
 			100u32.into(),
@@ -272,7 +278,7 @@ mod benchmarks {
 		));
 
 		#[extrinsic_call]
-		_(RawOrigin::Signed(admin.clone()), 0u32.into(), new_admin.clone());
+		_(permissioned as T::RuntimeOrigin, 0u32.into(), new_admin.clone());
 
 		assert_last_event::<T>(Event::PoolAdminModified { pool_id: 0u32.into(), new_admin }.into());
 	}
@@ -281,14 +287,15 @@ mod benchmarks {
 	fn set_pool_expiry_block() {
 		use super::*;
 
-		let admin = T::BenchmarkHelper::permissioned_pool_creator();
+		let permissioned = T::PermissionedOrigin::try_successful_origin().unwrap();
 		let staked_asset = T::BenchmarkHelper::to_asset_id(NativeOrWithId::WithId(1));
 		let reward_asset = T::BenchmarkHelper::to_asset_id(NativeOrWithId::Native);
-		create_asset::<T>(&admin, &staked_asset, T::Assets::minimum_balance(staked_asset.clone()));
-		create_asset::<T>(&admin, &reward_asset, T::Assets::minimum_balance(reward_asset.clone()));
+		let acc = T::BenchmarkHelper::to_account_id(1);
+		create_asset::<T>(&acc, &staked_asset, T::Assets::minimum_balance(staked_asset.clone()));
+		create_asset::<T>(&acc, &reward_asset, T::Assets::minimum_balance(reward_asset.clone()));
 
 		assert_ok!(AssetRewards::<T>::create_pool(
-			RawOrigin::Signed(admin.clone()).into(),
+			permissioned.clone() as T::RuntimeOrigin,
 			Box::new(staked_asset.clone()),
 			Box::new(reward_asset.clone()),
 			100u32.into(),
@@ -297,7 +304,7 @@ mod benchmarks {
 		));
 
 		#[extrinsic_call]
-		_(RawOrigin::Signed(admin.clone()), 0u32.into(), 1000u32.into());
+		_(permissioned as T::RuntimeOrigin, 0u32.into(), 1000u32.into());
 
 		assert_last_event::<T>(
 			Event::PoolExpiryBlockModified {
@@ -312,15 +319,24 @@ mod benchmarks {
 	fn deposit_reward_tokens() {
 		use super::*;
 
-		let admin = T::BenchmarkHelper::permissioned_pool_creator();
+		let permissioned = T::PermissionedOrigin::try_successful_origin().unwrap();
+		let permissioned_acc = T::PermissionedOrigin::ensure_origin(permissioned.clone()).unwrap();
 		let staked_asset = T::BenchmarkHelper::to_asset_id(NativeOrWithId::WithId(1));
 		let reward_asset = T::BenchmarkHelper::to_asset_id(NativeOrWithId::Native);
-		create_asset::<T>(&admin, &staked_asset, T::Assets::minimum_balance(staked_asset.clone()));
-		create_asset::<T>(&admin, &reward_asset, T::Assets::minimum_balance(reward_asset.clone()));
+		create_asset::<T>(
+			&permissioned_acc,
+			&staked_asset,
+			T::Assets::minimum_balance(staked_asset.clone()),
+		);
+		create_asset::<T>(
+			&permissioned_acc,
+			&reward_asset,
+			T::Assets::minimum_balance(reward_asset.clone()),
+		);
 
-		T::Assets::set_balance(reward_asset.clone(), &admin, 100000u32.into());
+		T::Assets::set_balance(reward_asset.clone(), &permissioned_acc, 100000u32.into());
 		assert_ok!(AssetRewards::<T>::create_pool(
-			RawOrigin::Signed(admin.clone()).into(),
+			permissioned.clone() as T::RuntimeOrigin,
 			Box::new(staked_asset.clone()),
 			Box::new(reward_asset.clone()),
 			100u32.into(),
@@ -328,12 +344,12 @@ mod benchmarks {
 			None,
 		));
 
-		let balance_before = T::Assets::balance(reward_asset.clone(), &admin);
+		let balance_before = T::Assets::balance(reward_asset.clone(), &permissioned_acc);
 
 		#[extrinsic_call]
-		_(RawOrigin::Signed(admin.clone()), 0u32.into(), 10u32.into());
+		_(RawOrigin::Signed(permissioned_acc.clone()), 0u32.into(), 10u32.into());
 
-		let balance_after = T::Assets::balance(reward_asset.clone(), &admin);
+		let balance_after = T::Assets::balance(reward_asset.clone(), &permissioned_acc);
 
 		assert_eq!(balance_after, balance_before - 10u32.into());
 	}
@@ -342,15 +358,24 @@ mod benchmarks {
 	fn withdraw_reward_tokens() {
 		use super::*;
 
-		let admin = T::BenchmarkHelper::permissioned_pool_creator();
+		let permissioned = T::PermissionedOrigin::try_successful_origin().unwrap();
+		let permissioned_acc = T::PermissionedOrigin::ensure_origin(permissioned.clone()).unwrap();
 		let staked_asset = T::BenchmarkHelper::to_asset_id(NativeOrWithId::WithId(1));
 		let reward_asset = T::BenchmarkHelper::to_asset_id(NativeOrWithId::Native);
-		create_asset::<T>(&admin, &staked_asset, T::Assets::minimum_balance(staked_asset.clone()));
-		create_asset::<T>(&admin, &reward_asset, T::Assets::minimum_balance(reward_asset.clone()));
+		create_asset::<T>(
+			&permissioned_acc,
+			&staked_asset,
+			T::Assets::minimum_balance(staked_asset.clone()),
+		);
+		create_asset::<T>(
+			&permissioned_acc,
+			&reward_asset,
+			T::Assets::minimum_balance(reward_asset.clone()),
+		);
 
-		T::Assets::set_balance(reward_asset.clone(), &admin, 100000u32.into());
+		T::Assets::set_balance(reward_asset.clone(), &permissioned_acc, 100000u32.into());
 		assert_ok!(AssetRewards::<T>::create_pool(
-			RawOrigin::Signed(admin.clone()).into(),
+			permissioned.clone() as T::RuntimeOrigin,
 			Box::new(staked_asset.clone()),
 			Box::new(reward_asset.clone()),
 			100u32.into(),
@@ -358,18 +383,23 @@ mod benchmarks {
 			None,
 		));
 
-		let balance_before = T::Assets::balance(reward_asset.clone(), &admin);
+		let balance_before = T::Assets::balance(reward_asset.clone(), &permissioned_acc);
 
 		assert_ok!(AssetRewards::<T>::deposit_reward_tokens(
-			RawOrigin::Signed(admin.clone()).into(),
+			RawOrigin::Signed(permissioned_acc.clone()).into(),
 			0u32.into(),
 			10u32.into()
 		));
 
 		#[extrinsic_call]
-		_(RawOrigin::Signed(admin.clone()), 0u32.into(), 5u32.into());
+		_(
+			RawOrigin::Signed(permissioned_acc.clone()),
+			0u32.into(),
+			5u32.into(),
+			permissioned_acc.clone(),
+		);
 
-		let balance_after = T::Assets::balance(reward_asset.clone(), &admin);
+		let balance_after = T::Assets::balance(reward_asset.clone(), &permissioned_acc);
 
 		// Deposited 10, withdrew 5
 		assert_eq!(balance_after, balance_before - 5u32.into());
diff --git a/substrate/frame/asset-rewards/src/mock.rs b/substrate/frame/asset-rewards/src/mock.rs
index 431e71b84f7..dad428c4d44 100644
--- a/substrate/frame/asset-rewards/src/mock.rs
+++ b/substrate/frame/asset-rewards/src/mock.rs
@@ -113,7 +113,7 @@ impl EnsureOrigin<RuntimeOrigin> for MockPermissionedOrigin {
 
 	#[cfg(feature = "runtime-benchmarks")]
 	fn try_successful_origin() -> Result<RuntimeOrigin, ()> {
-		todo!()
+		Ok(RuntimeOrigin::root())
 	}
 }
 
-- 
GitLab