git.delta.rocks / unique-network / refs/commits / d83ab4fde4e8

difftreelog

fix appPromotion RPC diasbling, refactor benchmarks, fix `WithdrawReasons`, rename `get_sponsor` to `sponsor` in hadlers traits + change their behavior in impl's blocks

PraetorP2022-09-07parent: #0102052.patch.diff
in: master

11 files changed

modifiednode/rpc/src/lib.rsdiffbeforeafterboth
before · node/rpc/src/lib.rs
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617use sp_runtime::traits::BlakeTwo256;18use fc_rpc::{19	EthBlockDataCacheTask, OverrideHandle, RuntimeApiStorageOverride, SchemaV1Override,20	StorageOverride, SchemaV2Override, SchemaV3Override,21};22use jsonrpsee::RpcModule;23use fc_rpc_core::types::{FilterPool, FeeHistoryCache};24use fp_storage::EthereumStorageSchema;25use sc_client_api::{26	backend::{AuxStore, StorageProvider},27	client::BlockchainEvents,28	StateBackend, Backend,29};30use sc_finality_grandpa::{31	FinalityProofProvider, GrandpaJustificationStream, SharedAuthoritySet, SharedVoterState,32};33use sc_network::NetworkService;34use sc_rpc::SubscriptionTaskExecutor;35pub use sc_rpc_api::DenyUnsafe;36use sc_transaction_pool::{ChainApi, Pool};37use sp_api::ProvideRuntimeApi;38use sp_block_builder::BlockBuilder;39use sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata};40use sc_service::TransactionPool;41use std::{collections::BTreeMap, sync::Arc};4243use up_common::types::opaque::{Hash, AccountId, RuntimeInstance, Index, Block, BlockNumber, Balance};4445// RMRK46use up_data_structs::{47	RmrkCollectionInfo, RmrkInstanceInfo, RmrkResourceInfo, RmrkPropertyInfo, RmrkBaseInfo,48	RmrkPartType, RmrkTheme,49};5051/// Extra dependencies for GRANDPA52pub struct GrandpaDeps<B> {53	/// Voting round info.54	pub shared_voter_state: SharedVoterState,55	/// Authority set info.56	pub shared_authority_set: SharedAuthoritySet<Hash, BlockNumber>,57	/// Receives notifications about justification events from Grandpa.58	pub justification_stream: GrandpaJustificationStream<Block>,59	/// Executor to drive the subscription manager in the Grandpa RPC handler.60	pub subscription_executor: SubscriptionTaskExecutor,61	/// Finality proof provider.62	pub finality_provider: Arc<FinalityProofProvider<B, Block>>,63}6465/// Full client dependencies.66pub struct FullDeps<C, P, SC, CA: ChainApi> {67	/// The client instance to use.68	pub client: Arc<C>,69	/// Transaction pool instance.70	pub pool: Arc<P>,71	/// Graph pool instance.72	pub graph: Arc<Pool<CA>>,73	/// The SelectChain Strategy74	pub select_chain: SC,75	/// The Node authority flag76	pub is_authority: bool,77	/// Whether to enable dev signer78	pub enable_dev_signer: bool,79	/// Network service80	pub network: Arc<NetworkService<Block, Hash>>,81	/// Whether to deny unsafe calls82	pub deny_unsafe: DenyUnsafe,83	/// EthFilterApi pool.84	pub filter_pool: Option<FilterPool>,85	/// Backend.86	pub backend: Arc<fc_db::Backend<Block>>,87	/// Maximum number of logs in a query.88	pub max_past_logs: u32,89	/// Maximum fee history cache size.90	pub fee_history_limit: u64,91	/// Fee history cache.92	pub fee_history_cache: FeeHistoryCache,93	/// Cache for Ethereum block data.94	pub block_data_cache: Arc<EthBlockDataCacheTask<Block>>,95}9697pub fn overrides_handle<C, BE, R>(client: Arc<C>) -> Arc<OverrideHandle<Block>>98where99	C: ProvideRuntimeApi<Block> + StorageProvider<Block, BE> + AuxStore,100	C: HeaderBackend<Block> + HeaderMetadata<Block, Error = BlockChainError>,101	C: Send + Sync + 'static,102	C::Api: fp_rpc::EthereumRuntimeRPCApi<Block>,103	C::Api: up_rpc::UniqueApi<Block, <R as RuntimeInstance>::CrossAccountId, AccountId>,104	BE: Backend<Block> + 'static,105	BE::State: StateBackend<BlakeTwo256>,106	R: RuntimeInstance + Send + Sync + 'static,107{108	let mut overrides_map = BTreeMap::new();109	overrides_map.insert(110		EthereumStorageSchema::V1,111		Box::new(SchemaV1Override::new(client.clone()))112			as Box<dyn StorageOverride<_> + Send + Sync>,113	);114	overrides_map.insert(115		EthereumStorageSchema::V2,116		Box::new(SchemaV2Override::new(client.clone()))117			as Box<dyn StorageOverride<_> + Send + Sync>,118	);119	overrides_map.insert(120		EthereumStorageSchema::V3,121		Box::new(SchemaV3Override::new(client.clone()))122			as Box<dyn StorageOverride<_> + Send + Sync>,123	);124125	Arc::new(OverrideHandle {126		schemas: overrides_map,127		fallback: Box::new(RuntimeApiStorageOverride::new(client)),128	})129}130131/// Instantiate all Full RPC extensions.132pub fn create_full<C, P, SC, CA, R, A, B>(133	deps: FullDeps<C, P, SC, CA>,134	subscription_task_executor: SubscriptionTaskExecutor,135) -> Result<RpcModule<()>, Box<dyn std::error::Error + Send + Sync>>136where137	C: ProvideRuntimeApi<Block> + StorageProvider<Block, B> + AuxStore,138	C: HeaderBackend<Block> + HeaderMetadata<Block, Error = BlockChainError> + 'static,139	C: Send + Sync + 'static,140	C: BlockchainEvents<Block>,141	C::Api: substrate_frame_rpc_system::AccountNonceApi<Block, AccountId, Index>,142	C::Api: BlockBuilder<Block>,143	// C::Api: pallet_contracts_rpc::ContractsRuntimeApi<Block, AccountId, Balance, BlockNumber, Hash>,144	C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi<Block, Balance>,145	C::Api: fp_rpc::EthereumRuntimeRPCApi<Block>,146	C::Api: fp_rpc::ConvertTransactionRuntimeApi<Block>,147	C::Api: up_rpc::UniqueApi<Block, <R as RuntimeInstance>::CrossAccountId, AccountId>,148	C::Api: app_promotion_rpc::AppPromotionApi<149		Block,150		BlockNumber,151		<R as RuntimeInstance>::CrossAccountId,152		AccountId,153	>,154	C::Api: rmrk_rpc::RmrkApi<155		Block,156		AccountId,157		RmrkCollectionInfo<AccountId>,158		RmrkInstanceInfo<AccountId>,159		RmrkResourceInfo,160		RmrkPropertyInfo,161		RmrkBaseInfo<AccountId>,162		RmrkPartType,163		RmrkTheme,164	>,165	B: sc_client_api::Backend<Block> + Send + Sync + 'static,166	B::State: sc_client_api::backend::StateBackend<sp_runtime::traits::HashFor<Block>>,167	P: TransactionPool<Block = Block> + 'static,168	CA: ChainApi<Block = Block> + 'static,169	R: RuntimeInstance + Send + Sync + 'static,170	<R as RuntimeInstance>::CrossAccountId: serde::Serialize,171	for<'de> <R as RuntimeInstance>::CrossAccountId: serde::Deserialize<'de>,172{173	use fc_rpc::{174		Eth, EthApiServer, EthDevSigner, EthFilter, EthFilterApiServer, EthPubSub,175		EthPubSubApiServer, EthSigner, Net, NetApiServer, Web3, Web3ApiServer,176	};177	use uc_rpc::{UniqueApiServer, Unique};178	use uc_rpc::{AppPromotionApiServer, AppPromotion};179180	#[cfg(not(feature = "unique-runtime"))]181	use uc_rpc::{RmrkApiServer, Rmrk};182183	// use pallet_contracts_rpc::{Contracts, ContractsApi};184	use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer};185	use substrate_frame_rpc_system::{System, SystemApiServer};186187	let mut io = RpcModule::new(());188	let FullDeps {189		client,190		pool,191		graph,192		select_chain: _,193		fee_history_limit,194		fee_history_cache,195		block_data_cache,196		enable_dev_signer,197		is_authority,198		network,199		deny_unsafe,200		filter_pool,201		backend,202		max_past_logs,203	} = deps;204205	io.merge(System::new(Arc::clone(&client), Arc::clone(&pool), deny_unsafe).into_rpc())?;206	io.merge(TransactionPayment::new(Arc::clone(&client)).into_rpc())?;207208	// io.extend_with(ContractsApi::to_delegate(Contracts::new(client.clone())));209210	let mut signers = Vec::new();211	if enable_dev_signer {212		signers.push(Box::new(EthDevSigner::new()) as Box<dyn EthSigner>);213	}214215	let overrides = overrides_handle::<_, _, R>(client.clone());216217	io.merge(218		Eth::new(219			client.clone(),220			pool.clone(),221			graph,222			Some(<R as RuntimeInstance>::get_transaction_converter()),223			network.clone(),224			signers,225			overrides.clone(),226			backend.clone(),227			is_authority,228			block_data_cache.clone(),229			fee_history_cache,230			fee_history_limit,231		)232		.into_rpc(),233	)?;234235	io.merge(Unique::new(client.clone()).into_rpc())?;236237	#[cfg(any(feature = "opal-runtime"))]238	io.merge(AppPromotion::new(client.clone()).into_rpc())?;239240	#[cfg(not(feature = "unique-runtime"))]241	io.merge(Rmrk::new(client.clone()).into_rpc())?;242243	if let Some(filter_pool) = filter_pool {244		io.merge(245			EthFilter::new(246				client.clone(),247				backend,248				filter_pool,249				500_usize, // max stored filters250				max_past_logs,251				block_data_cache,252			)253			.into_rpc(),254		)?;255	}256257	io.merge(258		Net::new(259			client.clone(),260			network.clone(),261			// Whether to format the `peer_count` response as Hex (default) or not.262			true,263		)264		.into_rpc(),265	)?;266267	io.merge(Web3::new(client.clone()).into_rpc())?;268269	io.merge(270		EthPubSub::new(pool, client, network, subscription_task_executor, overrides).into_rpc(),271	)?;272273	Ok(io)274}
modifiedpallets/app-promotion/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/app-promotion/src/benchmarking.rs
+++ b/pallets/app-promotion/src/benchmarking.rs
@@ -30,7 +30,7 @@
 
 const SEED: u32 = 0;
 
-fn set_admin<T>() -> DispatchResult
+fn set_admin<T>() -> Result<T::AccountId, sp_runtime::DispatchError>
 where
 	T: Config + pallet_unique::Config + pallet_evm_migration::Config,
 	T::BlockNumber: From<u32> + Into<u32>,
@@ -46,7 +46,9 @@
 	PromototionPallet::<T>::set_admin_address(
 		RawOrigin::Root.into(),
 		T::CrossAccountId::from_sub(pallet_admin.clone()),
-	)
+	)?;
+
+	Ok(pallet_admin)
 }
 
 benchmarks! {
@@ -73,12 +75,12 @@
 	set_admin_address {
 		let pallet_admin = account::<T::AccountId>("admin", 0, SEED);
 		let _ = <T as Config>::Currency::make_free_balance_be(&pallet_admin,  Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());
-	} : {PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin))?}
+	} : _(RawOrigin::Root, T::CrossAccountId::from_sub(pallet_admin))
 
 	payout_stakers{
 		let b in 1..101;
 
-		let pallet_admin = account::<T::AccountId>("admin", 0, SEED);
+		let pallet_admin = account::<T::AccountId>("admin", 1, SEED);
 		let share = Perbill::from_rational(1u32, 20);
 		PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin.clone()))?;
 		<T as Config>::Currency::make_free_balance_be(&pallet_admin,  Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());
@@ -92,22 +94,18 @@
 		(0..10).try_for_each(|_| {
 			stakers.iter()
 				.map(|staker| {
-
 					PromototionPallet::<T>::stake(RawOrigin::Signed(staker.clone()).into(), Into::<BalanceOf<T>>::into(100u128) * T::Nominal::get())
 				}).collect::<Result<Vec<_>, _>>()?;
 			<frame_system::Pallet<T>>::finalize();
 			Result::<(), sp_runtime::DispatchError>::Ok(())
 		})?;
-
-		// let _ = <T as Config>::Currency::make_free_balance_be(&staker,  Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());
-		// let _ = PromototionPallet::<T>::stake(RawOrigin::Signed(staker.clone()).into(), share * <T as Config>::Currency::total_balance(&staker))?;
-	} : {PromototionPallet::<T>::payout_stakers(RawOrigin::Signed(pallet_admin.clone()).into(), Some(b as u8))?}
+	} : _(RawOrigin::Signed(pallet_admin.clone()), Some(b as u8))
 
 	stake {
 		let caller = account::<T::AccountId>("caller", 0, SEED);
 		let share = Perbill::from_rational(1u32, 10);
 		let _ = <T as Config>::Currency::make_free_balance_be(&caller,  Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());
-	} : {PromototionPallet::<T>::stake(RawOrigin::Signed(caller.clone()).into(), share * <T as Config>::Currency::total_balance(&caller))?}
+	} : _(RawOrigin::Signed(caller.clone()), share * <T as Config>::Currency::total_balance(&caller))
 
 	unstake {
 		let caller = account::<T::AccountId>("caller", 0, SEED);
@@ -117,17 +115,8 @@
 			<frame_system::Pallet<T>>::finalize();
 			PromototionPallet::<T>::stake(RawOrigin::Signed(caller.clone()).into(), share * <T as Config>::Currency::total_balance(&caller))
 		}).collect::<Result<Vec<_>, _>>()?;
-
-	} : {PromototionPallet::<T>::unstake(RawOrigin::Signed(caller.clone()).into())?}
 
-	// recalculate_and_insert_stake{
-	// 	let caller = account::<T::AccountId>("caller", 0, SEED);
-	// 	let share = Perbill::from_rational(1u32, 10);
-	// 	let _ = <T as Config>::Currency::make_free_balance_be(&caller,  Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());
-	// 	let _ = PromototionPallet::<T>::stake(RawOrigin::Signed(caller.clone()).into(), share * <T as Config>::Currency::total_balance(&caller))?;
-	// 	let block = <T::RelayBlockNumberProvider as BlockNumberProvider>::current_block_number();
-	// 	let mut acc = <BalanceOf<T>>::default();
-	// } : {PromototionPallet::<T>::recalculate_and_insert_stake(&caller, block, share * <T as Config>::Currency::total_balance(&caller), &mut acc)}
+	} : _(RawOrigin::Signed(caller.clone()))
 
 	sponsor_collection {
 		let pallet_admin = account::<T::AccountId>("admin", 0, SEED);
@@ -136,7 +125,7 @@
 		let caller: T::AccountId = account("caller", 0, SEED);
 		let _ = <T as Config>::Currency::make_free_balance_be(&caller,  Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());
 		let collection = create_nft_collection::<T>(caller.clone())?;
-	} : {PromototionPallet::<T>::sponsor_collection(RawOrigin::Signed(pallet_admin.clone()).into(), collection)?}
+	} : _(RawOrigin::Signed(pallet_admin.clone()), collection)
 
 	stop_sponsoring_collection {
 		let pallet_admin = account::<T::AccountId>("admin", 0, SEED);
@@ -146,7 +135,7 @@
 		let _ = <T as Config>::Currency::make_free_balance_be(&caller,  Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());
 		let collection = create_nft_collection::<T>(caller.clone())?;
 		PromototionPallet::<T>::sponsor_collection(RawOrigin::Signed(pallet_admin.clone()).into(), collection)?;
-	} : {PromototionPallet::<T>::stop_sponsoring_collection(RawOrigin::Signed(pallet_admin.clone()).into(), collection)?}
+	} : _(RawOrigin::Signed(pallet_admin.clone()), collection)
 
 	sponsor_contract {
 		let pallet_admin = account::<T::AccountId>("admin", 0, SEED);
@@ -157,7 +146,7 @@
 		let data: Vec<u8> = (0..20 as u8).collect();
 		<EvmMigrationPallet<T>>::begin(RawOrigin::Root.into(), address)?;
 		<EvmMigrationPallet<T>>::finish(RawOrigin::Root.into(), address, data)?;
-	} : {PromototionPallet::<T>::sponsor_conract(RawOrigin::Signed(pallet_admin.clone()).into(), address)?}
+	} : _(RawOrigin::Signed(pallet_admin.clone()), address)
 
 	stop_sponsoring_contract {
 		let pallet_admin = account::<T::AccountId>("admin", 0, SEED);
@@ -168,6 +157,6 @@
 		let data: Vec<u8> = (0..20 as u8).collect();
 		<EvmMigrationPallet<T>>::begin(RawOrigin::Root.into(), address)?;
 		<EvmMigrationPallet<T>>::finish(RawOrigin::Root.into(), address, data)?;
-		PromototionPallet::<T>::sponsor_conract(RawOrigin::Signed(pallet_admin.clone()).into(), address)?;
-	} : {PromototionPallet::<T>::stop_sponsoring_contract(RawOrigin::Signed(pallet_admin.clone()).into(), address)?}
+		PromototionPallet::<T>::sponsor_contract(RawOrigin::Signed(pallet_admin.clone()).into(), address)?;
+	} : _(RawOrigin::Signed(pallet_admin.clone()), address)
 }
modifiedpallets/app-promotion/src/lib.rsdiffbeforeafterboth
--- a/pallets/app-promotion/src/lib.rs
+++ b/pallets/app-promotion/src/lib.rs
@@ -226,12 +226,6 @@
 		where
 			<T as frame_system::Config>::BlockNumber: From<u32>,
 		{
-			// let mut consumed_weight = 0;
-			// let mut add_weight = |reads, writes, weight| {
-			// 	consumed_weight += T::DbWeight::get().reads_writes(reads, writes);
-			// 	consumed_weight += weight;
-			// };
-
 			let block_pending = PendingUnstake::<T>::take(current_block_number);
 			let counter = block_pending.len() as u32;
 			// add_weight(0, 1, 0);
@@ -243,7 +237,6 @@
 			}
 
 			T::WeightInfo::on_initialize(counter)
-			// consumed_weight
 		}
 	}
 
@@ -286,7 +279,7 @@
 			<<T as Config>::Currency as Currency<T::AccountId>>::ensure_can_withdraw(
 				&staker_id,
 				amount,
-				WithdrawReasons::RESERVE,
+				WithdrawReasons::all(),
 				balance - amount,
 			)?;
 
@@ -398,8 +391,7 @@
 			);
 
 			ensure!(
-				T::CollectionHandler::get_sponsor(collection_id)?
-					.ok_or(<Error<T>>::InvalidArgument)?
+				T::CollectionHandler::sponsor(collection_id)?.ok_or(<Error<T>>::InvalidArgument)?
 					== Self::account_id(),
 				<Error<T>>::NoPermission
 			);
@@ -407,7 +399,7 @@
 		}
 
 		#[pallet::weight(T::WeightInfo::sponsor_contract())]
-		pub fn sponsor_conract(admin: OriginFor<T>, contract_id: H160) -> DispatchResult {
+		pub fn sponsor_contract(admin: OriginFor<T>, contract_id: H160) -> DispatchResult {
 			let admin_id = ensure_signed(admin)?;
 
 			ensure!(
@@ -431,7 +423,7 @@
 			);
 
 			ensure!(
-				T::ContractHandler::get_sponsor(contract_id)?.ok_or(<Error<T>>::InvalidArgument)?
+				T::ContractHandler::sponsor(contract_id)?.ok_or(<Error<T>>::InvalidArgument)?
 					== T::CrossAccountId::from_sub(Self::account_id()),
 				<Error<T>>::NoPermission
 			);
@@ -673,7 +665,7 @@
 				LOCK_IDENTIFIER,
 				staker,
 				amount,
-				WithdrawReasons::RESERVE,
+				WithdrawReasons::all(),
 			)
 		}
 	}
modifiedpallets/app-promotion/src/types.rsdiffbeforeafterboth
--- a/pallets/app-promotion/src/types.rs
+++ b/pallets/app-promotion/src/types.rs
@@ -37,9 +37,8 @@
 
 	fn remove_collection_sponsor(collection_id: Self::CollectionId) -> DispatchResult;
 
-	fn get_sponsor(
-		collection_id: Self::CollectionId,
-	) -> Result<Option<Self::AccountId>, DispatchError>;
+	fn sponsor(collection_id: Self::CollectionId)
+		-> Result<Option<Self::AccountId>, DispatchError>;
 }
 
 impl<T: pallet_unique::Config> CollectionHandler for pallet_unique::Pallet<T> {
@@ -58,12 +57,12 @@
 		Self::force_remove_collection_sponsor(collection_id)
 	}
 
-	fn get_sponsor(
+	fn sponsor(
 		collection_id: Self::CollectionId,
 	) -> Result<Option<Self::AccountId>, DispatchError> {
 		Ok(<CollectionHandle<T>>::try_get(collection_id)?
 			.sponsorship
-			.pending_sponsor()
+			.sponsor()
 			.map(|acc| acc.to_owned()))
 	}
 }
@@ -79,7 +78,7 @@
 
 	fn remove_contract_sponsor(contract_address: Self::ContractId) -> DispatchResult;
 
-	fn get_sponsor(
+	fn sponsor(
 		contract_address: Self::ContractId,
 	) -> Result<Option<Self::AccountId>, DispatchError>;
 }
@@ -100,7 +99,7 @@
 		Self::force_remove_sponsor(contract_address)
 	}
 
-	fn get_sponsor(
+	fn sponsor(
 		contract_address: Self::ContractId,
 	) -> Result<Option<Self::AccountId>, DispatchError> {
 		Ok(Self::get_sponsor(contract_address))
modifiedpallets/app-promotion/src/weights.rsdiffbeforeafterboth
--- a/pallets/app-promotion/src/weights.rs
+++ b/pallets/app-promotion/src/weights.rs
@@ -3,7 +3,7 @@
 //! Autogenerated weights for pallet_app_promotion
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-09-06, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-09-07, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
 
 // Executed Command:
@@ -51,16 +51,16 @@
 	// Storage: AppPromotion PendingUnstake (r:1 w:0)
 	// Storage: System Account (r:1 w:1)
 	fn on_initialize(b: u32, ) -> Weight {
-		(2_461_000 as Weight)
-			// Standard Error: 87_000
-			.saturating_add((6_006_000 as Weight).saturating_mul(b as Weight))
+		(2_651_000 as Weight)
+			// Standard Error: 103_000
+			.saturating_add((6_024_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(b as Weight)))
 	}
 	// Storage: AppPromotion Admin (r:0 w:1)
 	fn set_admin_address() -> Weight {
-		(5_467_000 as Weight)
+		(7_117_000 as Weight)
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: AppPromotion Admin (r:1 w:0)
@@ -68,21 +68,21 @@
 	// Storage: AppPromotion NextCalculatedRecord (r:1 w:1)
 	// Storage: AppPromotion Staked (r:2 w:0)
 	fn payout_stakers(b: u32, ) -> Weight {
-		(4_946_000 as Weight)
-			// Standard Error: 5_000
-			.saturating_add((4_599_000 as Weight).saturating_mul(b as Weight))
+		(9_958_000 as Weight)
+			// Standard Error: 8_000
+			.saturating_add((4_406_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
+	// Storage: AppPromotion StakesPerAccount (r:1 w:1)
 	// Storage: System Account (r:1 w:1)
-	// Storage: AppPromotion StakesPerAccount (r:1 w:1)
 	// Storage: Balances Locks (r:1 w:1)
 	// Storage: ParachainSystem ValidationData (r:1 w:0)
 	// Storage: AppPromotion Staked (r:1 w:1)
 	// Storage: AppPromotion TotalStaked (r:1 w:1)
 	fn stake() -> Weight {
-		(17_766_000 as Weight)
+		(20_574_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(6 as Weight))
 			.saturating_add(T::DbWeight::get().writes(5 as Weight))
 	}
@@ -93,35 +93,35 @@
 	// Storage: AppPromotion TotalStaked (r:1 w:1)
 	// Storage: AppPromotion StakesPerAccount (r:0 w:1)
 	fn unstake() -> Weight {
-		(27_250_000 as Weight)
+		(31_703_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(6 as Weight))
 			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 	}
 	// Storage: AppPromotion Admin (r:1 w:0)
 	// Storage: Common CollectionById (r:1 w:1)
 	fn sponsor_collection() -> Weight {
-		(11_014_000 as Weight)
+		(12_932_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: AppPromotion Admin (r:1 w:0)
 	// Storage: Common CollectionById (r:1 w:1)
 	fn stop_sponsoring_collection() -> Weight {
-		(10_494_000 as Weight)
+		(12_453_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: AppPromotion Admin (r:1 w:0)
 	// Storage: EvmContractHelpers Sponsoring (r:0 w:1)
 	fn sponsor_contract() -> Weight {
-		(9_754_000 as Weight)
+		(11_952_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: AppPromotion Admin (r:1 w:0)
 	// Storage: EvmContractHelpers Sponsoring (r:1 w:1)
 	fn stop_sponsoring_contract() -> Weight {
-		(10_063_000 as Weight)
+		(12_538_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -132,16 +132,16 @@
 	// Storage: AppPromotion PendingUnstake (r:1 w:0)
 	// Storage: System Account (r:1 w:1)
 	fn on_initialize(b: u32, ) -> Weight {
-		(2_461_000 as Weight)
-			// Standard Error: 87_000
-			.saturating_add((6_006_000 as Weight).saturating_mul(b as Weight))
+		(2_651_000 as Weight)
+			// Standard Error: 103_000
+			.saturating_add((6_024_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(b as Weight)))
 	}
 	// Storage: AppPromotion Admin (r:0 w:1)
 	fn set_admin_address() -> Weight {
-		(5_467_000 as Weight)
+		(7_117_000 as Weight)
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: AppPromotion Admin (r:1 w:0)
@@ -149,21 +149,21 @@
 	// Storage: AppPromotion NextCalculatedRecord (r:1 w:1)
 	// Storage: AppPromotion Staked (r:2 w:0)
 	fn payout_stakers(b: u32, ) -> Weight {
-		(4_946_000 as Weight)
-			// Standard Error: 5_000
-			.saturating_add((4_599_000 as Weight).saturating_mul(b as Weight))
+		(9_958_000 as Weight)
+			// Standard Error: 8_000
+			.saturating_add((4_406_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
+	// Storage: AppPromotion StakesPerAccount (r:1 w:1)
 	// Storage: System Account (r:1 w:1)
-	// Storage: AppPromotion StakesPerAccount (r:1 w:1)
 	// Storage: Balances Locks (r:1 w:1)
 	// Storage: ParachainSystem ValidationData (r:1 w:0)
 	// Storage: AppPromotion Staked (r:1 w:1)
 	// Storage: AppPromotion TotalStaked (r:1 w:1)
 	fn stake() -> Weight {
-		(17_766_000 as Weight)
+		(20_574_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(6 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
 	}
@@ -174,35 +174,35 @@
 	// Storage: AppPromotion TotalStaked (r:1 w:1)
 	// Storage: AppPromotion StakesPerAccount (r:0 w:1)
 	fn unstake() -> Weight {
-		(27_250_000 as Weight)
+		(31_703_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(6 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
 	}
 	// Storage: AppPromotion Admin (r:1 w:0)
 	// Storage: Common CollectionById (r:1 w:1)
 	fn sponsor_collection() -> Weight {
-		(11_014_000 as Weight)
+		(12_932_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: AppPromotion Admin (r:1 w:0)
 	// Storage: Common CollectionById (r:1 w:1)
 	fn stop_sponsoring_collection() -> Weight {
-		(10_494_000 as Weight)
+		(12_453_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: AppPromotion Admin (r:1 w:0)
 	// Storage: EvmContractHelpers Sponsoring (r:0 w:1)
 	fn sponsor_contract() -> Weight {
-		(9_754_000 as Weight)
+		(11_952_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: AppPromotion Admin (r:1 w:0)
 	// Storage: EvmContractHelpers Sponsoring (r:1 w:1)
 	fn stop_sponsoring_contract() -> Weight {
-		(10_063_000 as Weight)
+		(12_538_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
modifiedtests/src/app-promotion.test.tsdiffbeforeafterboth
--- a/tests/src/app-promotion.test.ts
+++ b/tests/src/app-promotion.test.ts
@@ -460,7 +460,7 @@
       const flipper = await deployFlipper(web3, contractOwner);
       const contractMethods = contractHelpers(web3, contractOwner);
 
-      await helper.signTransaction(palletAdmin, api.tx.appPromotion.sponsorConract(flipper.options.address));
+      await helper.signTransaction(palletAdmin, api.tx.appPromotion.sponsorContract(flipper.options.address));
       
       expect(await contractMethods.methods.hasSponsor(flipper.options.address).call()).to.be.true;  
       expect((await api.query.evmContractHelpers.owner(flipper.options.address)).toJSON()).to.be.equal(contractOwner);  
@@ -488,7 +488,7 @@
       });
 
       // set promotion sponsoring
-      await helper.signTransaction(palletAdmin, api.tx.appPromotion.sponsorConract(flipper.options.address));
+      await helper.signTransaction(palletAdmin, api.tx.appPromotion.sponsorContract(flipper.options.address));
 
       // new sponsor is pallet address
       expect(await contractMethods.methods.hasSponsor(flipper.options.address).call()).to.be.true;  
@@ -508,7 +508,7 @@
       const contractMethods = contractHelpers(web3, contractOwner);
 
       // contract sponsored by pallet
-      await helper.signTransaction(palletAdmin, api.tx.appPromotion.sponsorConract(flipper.options.address));
+      await helper.signTransaction(palletAdmin, api.tx.appPromotion.sponsorContract(flipper.options.address));
 
       // owner sets self sponsoring
       await expect(contractMethods.methods.selfSponsoredEnable(flipper.options.address).send()).to.be.not.rejected;
@@ -532,8 +532,8 @@
 
       await expect(contractMethods.methods.selfSponsoredEnable(flipper.options.address).send()).to.be.not.rejected;
 
-      // nonAdmin calls sponsorConract
-      await expect(helper.signTransaction(nonAdmin, api.tx.appPromotion.sponsorConract(flipper.options.address))).to.be.rejected;
+      // nonAdmin calls sponsorContract
+      await expect(helper.signTransaction(nonAdmin, api.tx.appPromotion.sponsorContract(flipper.options.address))).to.be.rejected;
 
       // contract still self-sponsored 
       expect((await api.query.evmContractHelpers.sponsoring(flipper.options.address)).toJSON()).to.deep.equal({
@@ -560,7 +560,7 @@
       await contractHelper.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Generous).send({from: contractOwner});
       await transferBalanceToEth(api, alice, flipper.options.address, 1000n);
 
-      await helper.signTransaction(palletAdmin, api.tx.appPromotion.sponsorConract(flipper.options.address));
+      await helper.signTransaction(palletAdmin, api.tx.appPromotion.sponsorContract(flipper.options.address));
       await flipper.methods.flip().send({from: caller});
       expect(await flipper.methods.getValue().call()).to.be.true;
 
@@ -582,7 +582,7 @@
       await transferBalanceToEth(api, alice, flipper.options.address);
       const contractHelper = contractHelpers(web3, contractOwner);
       await contractHelper.methods.setSponsoringMode(flipper.options.address, SponsoringMode.Generous).send({from: contractOwner});
-      await helper.signTransaction(palletAdmin, api.tx.appPromotion.sponsorConract(flipper.options.address));
+      await helper.signTransaction(palletAdmin, api.tx.appPromotion.sponsorContract(flipper.options.address));
       await helper.signTransaction(palletAdmin, api.tx.appPromotion.stopSponsoringContract(flipper.options.address));
 
       expect(await contractHelper.methods.hasSponsor(flipper.options.address).call()).to.be.false;  
@@ -609,7 +609,7 @@
       const contractOwner = (await createEthAccountWithBalance(api, web3, privateKeyWrapper)).toLowerCase();
       const flipper = await deployFlipper(web3, contractOwner);
 
-      await helper.signTransaction(palletAdmin, api.tx.appPromotion.sponsorConract(flipper.options.address));
+      await helper.signTransaction(palletAdmin, api.tx.appPromotion.sponsorContract(flipper.options.address));
       await expect(helper.signTransaction(nonAdmin, api.tx.appPromotion.stopSponsoringContract(flipper.options.address))).to.be.rejected;
     });
   });
modifiedtests/src/interfaces/augment-api-tx.tsdiffbeforeafterboth
--- a/tests/src/interfaces/augment-api-tx.ts
+++ b/tests/src/interfaces/augment-api-tx.ts
@@ -21,7 +21,7 @@
       payoutStakers: AugmentedSubmittable<(stakersNumber: Option<u8> | null | Uint8Array | u8 | AnyNumber) => SubmittableExtrinsic<ApiType>, [Option<u8>]>;
       setAdminAddress: AugmentedSubmittable<(admin: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [PalletEvmAccountBasicCrossAccountIdRepr]>;
       sponsorCollection: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32]>;
-      sponsorConract: AugmentedSubmittable<(contractId: H160 | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [H160]>;
+      sponsorContract: AugmentedSubmittable<(contractId: H160 | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [H160]>;
       stake: AugmentedSubmittable<(amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u128]>;
       stopSponsoringCollection: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32]>;
       stopSponsoringContract: AugmentedSubmittable<(contractId: H160 | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [H160]>;
modifiedtests/src/interfaces/default/types.tsdiffbeforeafterboth
--- a/tests/src/interfaces/default/types.ts
+++ b/tests/src/interfaces/default/types.ts
@@ -825,8 +825,8 @@
   readonly asStopSponsoringCollection: {
     readonly collectionId: u32;
   } & Struct;
-  readonly isSponsorConract: boolean;
-  readonly asSponsorConract: {
+  readonly isSponsorContract: boolean;
+  readonly asSponsorContract: {
     readonly contractId: H160;
   } & Struct;
   readonly isStopSponsoringContract: boolean;
@@ -837,7 +837,7 @@
   readonly asPayoutStakers: {
     readonly stakersNumber: Option<u8>;
   } & Struct;
-  readonly type: 'SetAdminAddress' | 'Stake' | 'Unstake' | 'SponsorCollection' | 'StopSponsoringCollection' | 'SponsorConract' | 'StopSponsoringContract' | 'PayoutStakers';
+  readonly type: 'SetAdminAddress' | 'Stake' | 'Unstake' | 'SponsorCollection' | 'StopSponsoringCollection' | 'SponsorContract' | 'StopSponsoringContract' | 'PayoutStakers';
 }
 
 /** @name PalletAppPromotionError */
modifiedtests/src/interfaces/lookup.tsdiffbeforeafterboth
--- a/tests/src/interfaces/lookup.ts
+++ b/tests/src/interfaces/lookup.ts
@@ -2483,7 +2483,7 @@
       stop_sponsoring_collection: {
         collectionId: 'u32',
       },
-      sponsor_conract: {
+      sponsor_contract: {
         contractId: 'H160',
       },
       stop_sponsoring_contract: {
modifiedtests/src/interfaces/types-lookup.tsdiffbeforeafterboth
--- a/tests/src/interfaces/types-lookup.ts
+++ b/tests/src/interfaces/types-lookup.ts
@@ -2695,8 +2695,8 @@
     readonly asStopSponsoringCollection: {
       readonly collectionId: u32;
     } & Struct;
-    readonly isSponsorConract: boolean;
-    readonly asSponsorConract: {
+    readonly isSponsorContract: boolean;
+    readonly asSponsorContract: {
       readonly contractId: H160;
     } & Struct;
     readonly isStopSponsoringContract: boolean;
@@ -2707,7 +2707,7 @@
     readonly asPayoutStakers: {
       readonly stakersNumber: Option<u8>;
     } & Struct;
-    readonly type: 'SetAdminAddress' | 'Stake' | 'Unstake' | 'SponsorCollection' | 'StopSponsoringCollection' | 'SponsorConract' | 'StopSponsoringContract' | 'PayoutStakers';
+    readonly type: 'SetAdminAddress' | 'Stake' | 'Unstake' | 'SponsorCollection' | 'StopSponsoringCollection' | 'SponsorContract' | 'StopSponsoringContract' | 'PayoutStakers';
   }
 
   /** @name PalletEvmCall (307) */
modifiedtests/src/pallet-presence.test.tsdiffbeforeafterboth
--- a/tests/src/pallet-presence.test.ts
+++ b/tests/src/pallet-presence.test.ts
@@ -68,7 +68,7 @@
       const refungible = 'refungible';
       const scheduler = 'scheduler';
       const rmrkPallets = ['rmrkcore', 'rmrkequip'];
-      const appPromotion = 'promotion';
+      const appPromotion = 'apppromotion';
 
       if (chain.eq('OPAL by UNIQUE')) {
         requiredPallets.push(refungible, scheduler, appPromotion, ...rmrkPallets);