From 7a2dbeac9ec6646b42d606fe3f34b2bc475031b7 Mon Sep 17 00:00:00 2001 From: PraetorP Date: Mon, 01 Aug 2022 09:53:32 +0000 Subject: [PATCH] fix: disbaled pallets Rmrk, RFT, Scheduler for Quartz RFT, Scheduler for Unique Added the logic of checking the availability of pallets necessary for their execution in tests --- --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -32,6 +32,8 @@ 'frame-support/runtime-benchmarks', 'frame-system/runtime-benchmarks', ] +unique-runtime = ['std'] +quartz-runtime = ['std'] [dependencies.sp-core] default-features = false --- a/runtime/common/src/dispatch.rs +++ b/runtime/common/src/dispatch.rs @@ -64,7 +64,12 @@ ); >::init_collection(sender, data)? } + #[cfg(all(not(feature = "unique-runtime"), not(feature = "quartz-runtime")))] CollectionMode::ReFungible => >::init_collection(sender, data)?, + + CollectionMode::ReFungible => { + return Err(DispatchError::Other("Refunginle pallet is not supported")) + } }; Ok(id) } --- a/runtime/common/src/weights.rs +++ b/runtime/common/src/weights.rs @@ -25,6 +25,7 @@ }; use up_data_structs::{CreateItemExData, CreateItemData}; +#[cfg(not(any(feature = "unique-runtime", feature = "quartz-runtime")))] macro_rules! max_weight_of { ($method:ident ( $($args:tt)* )) => { >::$method($($args)*) @@ -33,9 +34,21 @@ }; } +#[cfg(any(feature = "unique-runtime", feature = "quartz-runtime"))] +macro_rules! max_weight_of { + ($method:ident ( $($args:tt)* )) => { + >::$method($($args)*) + .max(>::$method($($args)*)) + + }; +} + +#[cfg(not(any(feature = "unique-runtime", feature = "quartz-runtime")))] pub struct CommonWeights(PhantomData) where T: FungibleConfig + NonfungibleConfig + RefungibleConfig; + +#[cfg(not(any(feature = "unique-runtime", feature = "quartz-runtime")))] impl CommonWeightInfo for CommonWeights where T: FungibleConfig + NonfungibleConfig + RefungibleConfig, @@ -101,6 +114,7 @@ } } +#[cfg(not(any(feature = "unique-runtime", feature = "quartz-runtime")))] impl RefungibleExtensionsWeightInfo for CommonWeights where T: FungibleConfig + NonfungibleConfig + RefungibleConfig, @@ -109,3 +123,84 @@ dispatch_weight::() + <::WeightInfo>::repartition_item() } } + +#[cfg(any(feature = "unique-runtime", feature = "quartz-runtime"))] +pub struct CommonWeights(PhantomData) +where + T: FungibleConfig + NonfungibleConfig; + +#[cfg(any(feature = "unique-runtime", feature = "quartz-runtime"))] +impl CommonWeightInfo for CommonWeights +where + T: FungibleConfig + NonfungibleConfig, +{ + fn create_item() -> Weight { + dispatch_weight::() + max_weight_of!(create_item()) + } + + fn create_multiple_items(data: &[CreateItemData]) -> Weight { + dispatch_weight::() + max_weight_of!(create_multiple_items(data)) + } + + fn create_multiple_items_ex(data: &CreateItemExData) -> Weight { + dispatch_weight::() + max_weight_of!(create_multiple_items_ex(data)) + } + + fn burn_item() -> Weight { + dispatch_weight::() + max_weight_of!(burn_item()) + } + + fn set_collection_properties(amount: u32) -> Weight { + dispatch_weight::() + max_weight_of!(set_collection_properties(amount)) + } + + fn delete_collection_properties(amount: u32) -> Weight { + dispatch_weight::() + max_weight_of!(delete_collection_properties(amount)) + } + + fn set_token_properties(amount: u32) -> Weight { + dispatch_weight::() + max_weight_of!(set_token_properties(amount)) + } + + fn delete_token_properties(amount: u32) -> Weight { + dispatch_weight::() + max_weight_of!(delete_token_properties(amount)) + } + + fn set_token_property_permissions(amount: u32) -> Weight { + dispatch_weight::() + max_weight_of!(set_token_property_permissions(amount)) + } + + fn transfer() -> Weight { + dispatch_weight::() + max_weight_of!(transfer()) + } + + fn approve() -> Weight { + dispatch_weight::() + max_weight_of!(approve()) + } + + fn transfer_from() -> Weight { + dispatch_weight::() + max_weight_of!(transfer_from()) + } + + fn burn_from() -> Weight { + dispatch_weight::() + max_weight_of!(burn_from()) + } + + fn burn_recursively_self_raw() -> Weight { + max_weight_of!(burn_recursively_self_raw()) + } + + fn burn_recursively_breadth_raw(amount: u32) -> Weight { + max_weight_of!(burn_recursively_breadth_raw(amount)) + } +} + +#[cfg(any(feature = "unique-runtime", feature = "quartz-runtime"))] +impl RefungibleExtensionsWeightInfo for CommonWeights +where + T: FungibleConfig + NonfungibleConfig, +{ + fn repartition() -> Weight { + dispatch_weight::() + } +} --- a/runtime/quartz/src/lib.rs +++ b/runtime/quartz/src/lib.rs @@ -909,15 +909,15 @@ type WeightInfo = pallet_nonfungible::weights::SubstrateWeight; } -impl pallet_proxy_rmrk_core::Config for Runtime { - type WeightInfo = pallet_proxy_rmrk_core::weights::SubstrateWeight; - type Event = Event; -} +// impl pallet_proxy_rmrk_core::Config for Runtime { +// type WeightInfo = pallet_proxy_rmrk_core::weights::SubstrateWeight; +// type Event = Event; +// } -impl pallet_proxy_rmrk_equip::Config for Runtime { - type WeightInfo = pallet_proxy_rmrk_equip::weights::SubstrateWeight; - type Event = Event; -} +// impl pallet_proxy_rmrk_equip::Config for Runtime { +// type WeightInfo = pallet_proxy_rmrk_equip::weights::SubstrateWeight; +// type Event = Event; +// } impl pallet_unique::Config for Runtime { type Event = Event; @@ -961,92 +961,92 @@ ) } -pub struct SchedulerPaymentExecutor; -impl - DispatchCall for SchedulerPaymentExecutor -where - ::Call: Member - + Dispatchable - + SelfContainedCall - + GetDispatchInfo - + From>, - SelfContainedSignedInfo: Send + Sync + 'static, - Call: From<::Call> - + From<::Call> - + SelfContainedCall, - sp_runtime::AccountId32: From<::AccountId>, -{ - fn dispatch_call( - signer: ::AccountId, - call: ::Call, - ) -> Result< - Result>, - TransactionValidityError, - > { - let dispatch_info = call.get_dispatch_info(); - let extrinsic = fp_self_contained::CheckedExtrinsic::< - AccountId, - Call, - SignedExtraScheduler, - SelfContainedSignedInfo, - > { - signed: - CheckedSignature::::Signed( - signer.clone().into(), - get_signed_extras(signer.into()), - ), - function: call.into(), - }; +// pub struct SchedulerPaymentExecutor; +// impl +// DispatchCall for SchedulerPaymentExecutor +// where +// ::Call: Member +// + Dispatchable +// + SelfContainedCall +// + GetDispatchInfo +// + From>, +// SelfContainedSignedInfo: Send + Sync + 'static, +// Call: From<::Call> +// + From<::Call> +// + SelfContainedCall, +// sp_runtime::AccountId32: From<::AccountId>, +// { +// fn dispatch_call( +// signer: ::AccountId, +// call: ::Call, +// ) -> Result< +// Result>, +// TransactionValidityError, +// > { +// let dispatch_info = call.get_dispatch_info(); +// let extrinsic = fp_self_contained::CheckedExtrinsic::< +// AccountId, +// Call, +// SignedExtraScheduler, +// SelfContainedSignedInfo, +// > { +// signed: +// CheckedSignature::::Signed( +// signer.clone().into(), +// get_signed_extras(signer.into()), +// ), +// function: call.into(), +// }; - extrinsic.apply::(&dispatch_info, 0) - } +// extrinsic.apply::(&dispatch_info, 0) +// } - fn reserve_balance( - id: [u8; 16], - sponsor: ::AccountId, - call: ::Call, - count: u32, - ) -> Result<(), DispatchError> { - let dispatch_info = call.get_dispatch_info(); - let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0) - .saturating_mul(count.into()); +// fn reserve_balance( +// id: [u8; 16], +// sponsor: ::AccountId, +// call: ::Call, +// count: u32, +// ) -> Result<(), DispatchError> { +// let dispatch_info = call.get_dispatch_info(); +// let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0) +// .saturating_mul(count.into()); - >::reserve_named( - &id, - &(sponsor.into()), - weight.into(), - ) - } +// >::reserve_named( +// &id, +// &(sponsor.into()), +// weight.into(), +// ) +// } - fn pay_for_call( - id: [u8; 16], - sponsor: ::AccountId, - call: ::Call, - ) -> Result { - let dispatch_info = call.get_dispatch_info(); - let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0); - Ok( - >::unreserve_named( - &id, - &(sponsor.into()), - weight.into(), - ), - ) - } +// fn pay_for_call( +// id: [u8; 16], +// sponsor: ::AccountId, +// call: ::Call, +// ) -> Result { +// let dispatch_info = call.get_dispatch_info(); +// let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0); +// Ok( +// >::unreserve_named( +// &id, +// &(sponsor.into()), +// weight.into(), +// ), +// ) +// } - fn cancel_reserve( - id: [u8; 16], - sponsor: ::AccountId, - ) -> Result { - Ok( - >::unreserve_named( - &id, - &(sponsor.into()), - u128::MAX, - ), - ) - } -} +// fn cancel_reserve( +// id: [u8; 16], +// sponsor: ::AccountId, +// ) -> Result { +// Ok( +// >::unreserve_named( +// &id, +// &(sponsor.into()), +// u128::MAX, +// ), +// ) +// } +// } parameter_types! { pub const NoPreimagePostponement: Option = Some(10); @@ -1062,21 +1062,21 @@ } } -impl pallet_unique_scheduler::Config for Runtime { - type Event = Event; - type Origin = Origin; - type Currency = Balances; - type PalletsOrigin = OriginCaller; - type Call = Call; - type MaximumWeight = MaximumSchedulerWeight; - type ScheduleOrigin = EnsureSigned; - type MaxScheduledPerBlock = MaxScheduledPerBlock; - type WeightInfo = (); - type CallExecutor = SchedulerPaymentExecutor; - type OriginPrivilegeCmp = OriginPrivilegeCmp; - type PreimageProvider = (); - type NoPreimagePostponement = NoPreimagePostponement; -} +// impl pallet_unique_scheduler::Config for Runtime { +// type Event = Event; +// type Origin = Origin; +// type Currency = Balances; +// type PalletsOrigin = OriginCaller; +// type Call = Call; +// type MaximumWeight = MaximumSchedulerWeight; +// type ScheduleOrigin = EnsureSigned; +// type MaxScheduledPerBlock = MaxScheduledPerBlock; +// type WeightInfo = (); +// type CallExecutor = SchedulerPaymentExecutor; +// type OriginPrivilegeCmp = OriginPrivilegeCmp; +// type PreimageProvider = (); +// type NoPreimagePostponement = NoPreimagePostponement; +// } type EvmSponsorshipHandler = ( UniqueEthSponsorshipHandler, @@ -1150,17 +1150,17 @@ // Unique Pallets Inflation: pallet_inflation::{Pallet, Call, Storage} = 60, Unique: pallet_unique::{Pallet, Call, Storage, Event} = 61, - Scheduler: pallet_unique_scheduler::{Pallet, Call, Storage, Event} = 62, + // Scheduler: pallet_unique_scheduler::{Pallet, Call, Storage, Event} = 62, // free = 63 Charging: pallet_charge_transaction::{Pallet, Call, Storage } = 64, // ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65, Common: pallet_common::{Pallet, Storage, Event} = 66, Fungible: pallet_fungible::{Pallet, Storage} = 67, - Refungible: pallet_refungible::{Pallet, Storage} = 68, + // Refungible: pallet_refungible::{Pallet, Storage} = 68, Nonfungible: pallet_nonfungible::{Pallet, Storage} = 69, Structure: pallet_structure::{Pallet, Call, Storage, Event} = 70, - RmrkCore: pallet_proxy_rmrk_core::{Pallet, Call, Storage, Event} = 71, - RmrkEquip: pallet_proxy_rmrk_equip::{Pallet, Call, Storage, Event} = 72, + // RmrkCore: pallet_proxy_rmrk_core::{Pallet, Call, Storage, Event} = 71, + // RmrkEquip: pallet_proxy_rmrk_equip::{Pallet, Call, Storage, Event} = 72, // Frontier EVM: pallet_evm::{Pallet, Config, Call, Storage, Event} = 100, @@ -1323,57 +1323,112 @@ RmrkPartType, RmrkTheme > for Runtime { + + // fn last_collection_idx() -> Result { + // pallet_proxy_rmrk_core::rpc::last_collection_idx::() + // } + + // fn collection_by_id(collection_id: RmrkCollectionId) -> Result>, DispatchError> { + // pallet_proxy_rmrk_core::rpc::collection_by_id::(collection_id) + // } + + // fn nft_by_id(collection_id: RmrkCollectionId, nft_by_id: RmrkNftId) -> Result>, DispatchError> { + // pallet_proxy_rmrk_core::rpc::nft_by_id::(collection_id, nft_by_id) + // } + + // fn account_tokens(account_id: AccountId, collection_id: RmrkCollectionId) -> Result, DispatchError> { + // pallet_proxy_rmrk_core::rpc::account_tokens::(account_id, collection_id) + // } + + // fn nft_children(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result, DispatchError> { + // pallet_proxy_rmrk_core::rpc::nft_children::(collection_id, nft_id) + // } + + // fn collection_properties(collection_id: RmrkCollectionId, filter_keys: Option>) -> Result, DispatchError> { + // pallet_proxy_rmrk_core::rpc::collection_properties::(collection_id, filter_keys) + // } + + // fn nft_properties(collection_id: RmrkCollectionId, nft_id: RmrkNftId, filter_keys: Option>) -> Result, DispatchError> { + // pallet_proxy_rmrk_core::rpc::nft_properties::(collection_id, nft_id, filter_keys) + // } + + // fn nft_resources(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result, DispatchError> { + // pallet_proxy_rmrk_core::rpc::nft_resources::(collection_id, nft_id) + // } + + // fn nft_resource_priority(collection_id: RmrkCollectionId, nft_id: RmrkNftId, resource_id: RmrkResourceId) -> Result, DispatchError> { + // pallet_proxy_rmrk_core::rpc::nft_resource_priority::(collection_id, nft_id, resource_id) + // } + + // fn base(base_id: RmrkBaseId) -> Result>, DispatchError> { + // pallet_proxy_rmrk_equip::rpc::base::(base_id) + // } + + // fn base_parts(base_id: RmrkBaseId) -> Result, DispatchError> { + // pallet_proxy_rmrk_equip::rpc::base_parts::(base_id) + // } + + // fn theme_names(base_id: RmrkBaseId) -> Result, DispatchError> { + // pallet_proxy_rmrk_equip::rpc::theme_names::(base_id) + // } + + // fn theme(base_id: RmrkBaseId, theme_name: RmrkThemeName, filter_keys: Option>) -> Result, DispatchError> { + // pallet_proxy_rmrk_equip::rpc::theme::(base_id, theme_name, filter_keys) + // } + fn last_collection_idx() -> Result { - pallet_proxy_rmrk_core::rpc::last_collection_idx::() + Ok(Default::default()) } - fn collection_by_id(collection_id: RmrkCollectionId) -> Result>, DispatchError> { - pallet_proxy_rmrk_core::rpc::collection_by_id::(collection_id) + fn collection_by_id(_collection_id: RmrkCollectionId) -> Result>, DispatchError> { + Ok(Default::default()) } - fn nft_by_id(collection_id: RmrkCollectionId, nft_by_id: RmrkNftId) -> Result>, DispatchError> { - pallet_proxy_rmrk_core::rpc::nft_by_id::(collection_id, nft_by_id) + fn nft_by_id(_collection_id: RmrkCollectionId, _nft_by_id: RmrkNftId) -> Result>, DispatchError> { + Ok(Default::default()) } - fn account_tokens(account_id: AccountId, collection_id: RmrkCollectionId) -> Result, DispatchError> { - pallet_proxy_rmrk_core::rpc::account_tokens::(account_id, collection_id) + fn account_tokens(_account_id: AccountId, _collection_id: RmrkCollectionId) -> Result, DispatchError> { + Ok(Default::default()) } - fn nft_children(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result, DispatchError> { - pallet_proxy_rmrk_core::rpc::nft_children::(collection_id, nft_id) + fn nft_children(_collection_id: RmrkCollectionId, _nft_id: RmrkNftId) -> Result, DispatchError> { + Ok(Default::default()) } - fn collection_properties(collection_id: RmrkCollectionId, filter_keys: Option>) -> Result, DispatchError> { - pallet_proxy_rmrk_core::rpc::collection_properties::(collection_id, filter_keys) + fn collection_properties(_collection_id: RmrkCollectionId, _filter_keys: Option>) -> Result, DispatchError> { + Ok(Default::default()) } - fn nft_properties(collection_id: RmrkCollectionId, nft_id: RmrkNftId, filter_keys: Option>) -> Result, DispatchError> { - pallet_proxy_rmrk_core::rpc::nft_properties::(collection_id, nft_id, filter_keys) + fn nft_properties(_collection_id: RmrkCollectionId, _nft_id: RmrkNftId, _filter_keys: Option>) -> Result, DispatchError> { + Ok(Default::default()) } - fn nft_resources(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result, DispatchError> { - pallet_proxy_rmrk_core::rpc::nft_resources::(collection_id, nft_id) + fn nft_resources(_collection_id: RmrkCollectionId, _nft_id: RmrkNftId) -> Result, DispatchError> { + Ok(Default::default()) } - fn nft_resource_priority(collection_id: RmrkCollectionId, nft_id: RmrkNftId, resource_id: RmrkResourceId) -> Result, DispatchError> { - pallet_proxy_rmrk_core::rpc::nft_resource_priority::(collection_id, nft_id, resource_id) + fn nft_resource_priority(_collection_id: RmrkCollectionId, _nft_id: RmrkNftId, _resource_id: RmrkResourceId) -> Result, DispatchError> { + Ok(Default::default()) } - fn base(base_id: RmrkBaseId) -> Result>, DispatchError> { - pallet_proxy_rmrk_equip::rpc::base::(base_id) + fn base(_base_id: RmrkBaseId) -> Result>, DispatchError> { + Ok(Default::default()) } - fn base_parts(base_id: RmrkBaseId) -> Result, DispatchError> { - pallet_proxy_rmrk_equip::rpc::base_parts::(base_id) + fn base_parts(_base_id: RmrkBaseId) -> Result, DispatchError> { + Ok(Default::default()) } - fn theme_names(base_id: RmrkBaseId) -> Result, DispatchError> { - pallet_proxy_rmrk_equip::rpc::theme_names::(base_id) + fn theme_names(_base_id: RmrkBaseId) -> Result, DispatchError> { + Ok(Default::default()) } - fn theme(base_id: RmrkBaseId, theme_name: RmrkThemeName, filter_keys: Option>) -> Result, DispatchError> { - pallet_proxy_rmrk_equip::rpc::theme::(base_id, theme_name, filter_keys) + fn theme(_base_id: RmrkBaseId, _theme_name: RmrkThemeName, _filter_keys: Option>) -> Result, DispatchError> { + Ok(Default::default()) } + + } } --- a/runtime/unique/src/lib.rs +++ b/runtime/unique/src/lib.rs @@ -901,9 +901,11 @@ impl pallet_fungible::Config for Runtime { type WeightInfo = pallet_fungible::weights::SubstrateWeight; } + impl pallet_refungible::Config for Runtime { type WeightInfo = pallet_refungible::weights::SubstrateWeight; } + impl pallet_nonfungible::Config for Runtime { type WeightInfo = pallet_nonfungible::weights::SubstrateWeight; } @@ -950,92 +952,92 @@ ) } -pub struct SchedulerPaymentExecutor; -impl - DispatchCall for SchedulerPaymentExecutor -where - ::Call: Member - + Dispatchable - + SelfContainedCall - + GetDispatchInfo - + From>, - SelfContainedSignedInfo: Send + Sync + 'static, - Call: From<::Call> - + From<::Call> - + SelfContainedCall, - sp_runtime::AccountId32: From<::AccountId>, -{ - fn dispatch_call( - signer: ::AccountId, - call: ::Call, - ) -> Result< - Result>, - TransactionValidityError, - > { - let dispatch_info = call.get_dispatch_info(); - let extrinsic = fp_self_contained::CheckedExtrinsic::< - AccountId, - Call, - SignedExtraScheduler, - SelfContainedSignedInfo, - > { - signed: - CheckedSignature::::Signed( - signer.clone().into(), - get_signed_extras(signer.into()), - ), - function: call.into(), - }; +// pub struct SchedulerPaymentExecutor; +// impl +// DispatchCall for SchedulerPaymentExecutor +// where +// ::Call: Member +// + Dispatchable +// + SelfContainedCall +// + GetDispatchInfo +// + From>, +// SelfContainedSignedInfo: Send + Sync + 'static, +// Call: From<::Call> +// + From<::Call> +// + SelfContainedCall, +// sp_runtime::AccountId32: From<::AccountId>, +// { +// fn dispatch_call( +// signer: ::AccountId, +// call: ::Call, +// ) -> Result< +// Result>, +// TransactionValidityError, +// > { +// let dispatch_info = call.get_dispatch_info(); +// let extrinsic = fp_self_contained::CheckedExtrinsic::< +// AccountId, +// Call, +// SignedExtraScheduler, +// SelfContainedSignedInfo, +// > { +// signed: +// CheckedSignature::::Signed( +// signer.clone().into(), +// get_signed_extras(signer.into()), +// ), +// function: call.into(), +// }; - extrinsic.apply::(&dispatch_info, 0) - } +// extrinsic.apply::(&dispatch_info, 0) +// } - fn reserve_balance( - id: [u8; 16], - sponsor: ::AccountId, - call: ::Call, - count: u32, - ) -> Result<(), DispatchError> { - let dispatch_info = call.get_dispatch_info(); - let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0) - .saturating_mul(count.into()); +// fn reserve_balance( +// id: [u8; 16], +// sponsor: ::AccountId, +// call: ::Call, +// count: u32, +// ) -> Result<(), DispatchError> { +// let dispatch_info = call.get_dispatch_info(); +// let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0) +// .saturating_mul(count.into()); - >::reserve_named( - &id, - &(sponsor.into()), - weight, - ) - } +// >::reserve_named( +// &id, +// &(sponsor.into()), +// weight, +// ) +// } - fn pay_for_call( - id: [u8; 16], - sponsor: ::AccountId, - call: ::Call, - ) -> Result { - let dispatch_info = call.get_dispatch_info(); - let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0); - Ok( - >::unreserve_named( - &id, - &(sponsor.into()), - weight, - ), - ) - } +// fn pay_for_call( +// id: [u8; 16], +// sponsor: ::AccountId, +// call: ::Call, +// ) -> Result { +// let dispatch_info = call.get_dispatch_info(); +// let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0); +// Ok( +// >::unreserve_named( +// &id, +// &(sponsor.into()), +// weight, +// ), +// ) +// } - fn cancel_reserve( - id: [u8; 16], - sponsor: ::AccountId, - ) -> Result { - Ok( - >::unreserve_named( - &id, - &(sponsor.into()), - u128::MAX, - ), - ) - } -} +// fn cancel_reserve( +// id: [u8; 16], +// sponsor: ::AccountId, +// ) -> Result { +// Ok( +// >::unreserve_named( +// &id, +// &(sponsor.into()), +// u128::MAX, +// ), +// ) +// } +// } parameter_types! { pub const NoPreimagePostponement: Option = Some(10); @@ -1051,21 +1053,21 @@ } } -impl pallet_unique_scheduler::Config for Runtime { - type Event = Event; - type Origin = Origin; - type Currency = Balances; - type PalletsOrigin = OriginCaller; - type Call = Call; - type MaximumWeight = MaximumSchedulerWeight; - type ScheduleOrigin = EnsureSigned; - type MaxScheduledPerBlock = MaxScheduledPerBlock; - type WeightInfo = (); - type CallExecutor = SchedulerPaymentExecutor; - type OriginPrivilegeCmp = OriginPrivilegeCmp; - type PreimageProvider = (); - type NoPreimagePostponement = NoPreimagePostponement; -} +// impl pallet_unique_scheduler::Config for Runtime { +// type Event = Event; +// type Origin = Origin; +// type Currency = Balances; +// type PalletsOrigin = OriginCaller; +// type Call = Call; +// type MaximumWeight = MaximumSchedulerWeight; +// type ScheduleOrigin = EnsureSigned; +// type MaxScheduledPerBlock = MaxScheduledPerBlock; +// type WeightInfo = (); +// type CallExecutor = SchedulerPaymentExecutor; +// type OriginPrivilegeCmp = OriginPrivilegeCmp; +// type PreimageProvider = (); +// type NoPreimagePostponement = NoPreimagePostponement; +// } type EvmSponsorshipHandler = ( UniqueEthSponsorshipHandler, @@ -1139,13 +1141,13 @@ // Unique Pallets Inflation: pallet_inflation::{Pallet, Call, Storage} = 60, Unique: pallet_unique::{Pallet, Call, Storage, Event} = 61, - Scheduler: pallet_unique_scheduler::{Pallet, Call, Storage, Event} = 62, + // Scheduler: pallet_unique_scheduler::{Pallet, Call, Storage, Event} = 62, // free = 63 Charging: pallet_charge_transaction::{Pallet, Call, Storage } = 64, // ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65, Common: pallet_common::{Pallet, Storage, Event} = 66, Fungible: pallet_fungible::{Pallet, Storage} = 67, - Refungible: pallet_refungible::{Pallet, Storage} = 68, + // Refungible: pallet_refungible::{Pallet, Storage} = 68, Nonfungible: pallet_nonfungible::{Pallet, Storage} = 69, Structure: pallet_structure::{Pallet, Call, Storage, Event} = 70, --- a/tests/src/refungible.test.ts +++ b/tests/src/refungible.test.ts @@ -36,6 +36,8 @@ CrossAccountId, getCreateItemsResult, getDestroyItemsResult, + getModuleNames, + Pallets, } from './util/helpers'; import chai from 'chai'; @@ -46,14 +48,18 @@ let alice: IKeyringPair; let bob: IKeyringPair; -describe('integration test: Refungible functionality:', () => { - before(async () => { + + +describe('integration test: Refungible functionality:', async () => { + before(async function() { await usingApi(async (api, privateKeyWrapper) => { alice = privateKeyWrapper('//Alice'); bob = privateKeyWrapper('//Bob'); + if (!getModuleNames(api).includes(Pallets.ReFungible)) this.skip(); }); + }); - + it('Create refungible collection and token', async () => { await usingApi(async api => { const createCollectionResult = await createCollection(api, alice, {mode: {type: 'ReFungible'}}); @@ -268,15 +274,6 @@ ]); }); }); -}); - -describe('Test Refungible properties:', () => { - before(async () => { - await usingApi(async (api, privateKeyWrapper) => { - alice = privateKeyWrapper('//Alice'); - bob = privateKeyWrapper('//Bob'); - }); - }); it('Сreate new collection with properties', async () => { await usingApi(async api => { @@ -292,3 +289,4 @@ }); }); }); + --- a/tests/src/rmrk/acceptNft.test.ts +++ b/tests/src/rmrk/acceptNft.test.ts @@ -8,14 +8,19 @@ } from './util/tx'; import {NftIdTuple} from './util/fetch'; import {isNftChildOfAnother, expectTxFailure} from './util/helpers'; +import { getModuleNames, Pallets } from '../util/helpers'; describe('integration test: accept NFT', () => { let api: any; - before(async () => { api = await getApiConnection(); }); - + before(async function() { + api = await getApiConnection(); + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); + }); + + const alice = '//Alice'; const bob = '//Bob'; - + const createTestCollection = async (issuerUri: string) => { return await createCollection( api, --- a/tests/src/rmrk/addResource.test.ts +++ b/tests/src/rmrk/addResource.test.ts @@ -12,6 +12,7 @@ addNftComposableResource, } from './util/tx'; import {RmrkTraitsResourceResourceInfo as ResourceInfo} from '@polkadot/types/lookup'; +import { getModuleNames, Pallets } from '../util/helpers'; describe('integration test: add NFT resource', () => { const Alice = '//Alice'; @@ -24,8 +25,9 @@ const nonexistentId = 99999; let api: any; - before(async () => { + before(async function() { api = await getApiConnection(); + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); }); it('add resource', async () => { --- a/tests/src/rmrk/addTheme.test.ts +++ b/tests/src/rmrk/addTheme.test.ts @@ -3,10 +3,14 @@ import {createBase, addTheme} from './util/tx'; import {expectTxFailure} from './util/helpers'; import {getThemeNames} from './util/fetch'; +import { getModuleNames, Pallets } from '../util/helpers'; describe('integration test: add Theme to Base', () => { let api: any; - before(async () => { api = await getApiConnection(); }); + before(async function() { + api = await getApiConnection(); + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); + }); const alice = '//Alice'; const bob = '//Bob'; --- a/tests/src/rmrk/burnNft.test.ts +++ b/tests/src/rmrk/burnNft.test.ts @@ -5,6 +5,7 @@ import chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; +import { getModuleNames, Pallets } from '../util/helpers'; chai.use(chaiAsPromised); const expect = chai.expect; @@ -14,10 +15,12 @@ const Bob = '//Bob'; let api: any; - before(async () => { + before(async function() { api = await getApiConnection(); + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); }); + it('burn nft', async () => { await createCollection( api, --- a/tests/src/rmrk/changeCollectionIssuer.test.ts +++ b/tests/src/rmrk/changeCollectionIssuer.test.ts @@ -1,4 +1,5 @@ import {getApiConnection} from '../substrate/substrate-api'; +import { getModuleNames, Pallets } from '../util/helpers'; import {expectTxFailure} from './util/helpers'; import { changeIssuer, @@ -10,10 +11,13 @@ const Bob = '//Bob'; let api: any; - before(async () => { + before(async function() { api = await getApiConnection(); + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); }); + + it('change collection issuer', async () => { await createCollection( api, --- a/tests/src/rmrk/createBase.test.ts +++ b/tests/src/rmrk/createBase.test.ts @@ -1,9 +1,13 @@ import {getApiConnection} from '../substrate/substrate-api'; +import { getModuleNames, Pallets } from '../util/helpers'; import {createCollection, createBase} from './util/tx'; describe('integration test: create new Base', () => { let api: any; - before(async () => { api = await getApiConnection(); }); + before(async function() { + api = await getApiConnection(); + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); + }); const alice = '//Alice'; --- a/tests/src/rmrk/createCollection.test.ts +++ b/tests/src/rmrk/createCollection.test.ts @@ -1,9 +1,15 @@ import {getApiConnection} from '../substrate/substrate-api'; +import {getModuleNames, Pallets} from '../util/helpers'; import {createCollection} from './util/tx'; describe('Integration test: create new collection', () => { let api: any; - before(async () => { api = await getApiConnection(); }); + before(async function () { + api = await getApiConnection(); + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); + }); + + const alice = '//Alice'; --- a/tests/src/rmrk/deleteCollection.test.ts +++ b/tests/src/rmrk/deleteCollection.test.ts @@ -1,11 +1,13 @@ import {getApiConnection} from '../substrate/substrate-api'; +import { getModuleNames, Pallets } from '../util/helpers'; import {expectTxFailure} from './util/helpers'; import {createCollection, deleteCollection} from './util/tx'; describe('integration test: delete collection', () => { let api: any; - before(async () => { + before(async function () { api = await getApiConnection(); + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); }); const Alice = '//Alice'; --- a/tests/src/rmrk/equipNft.test.ts +++ b/tests/src/rmrk/equipNft.test.ts @@ -1,6 +1,7 @@ import {ApiPromise} from '@polkadot/api'; import {expect} from 'chai'; import {getApiConnection} from '../substrate/substrate-api'; +import {getModuleNames, Pallets} from '../util/helpers'; import {getNft, getParts, NftIdTuple} from './util/fetch'; import {expectTxFailure} from './util/helpers'; import { @@ -122,8 +123,10 @@ describe.skip('integration test: Equip NFT', () => { let api: any; - before(async () => { + + before(async function () { api = await getApiConnection(); + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); }); it('equip nft', async () => { --- a/tests/src/rmrk/getOwnedNfts.test.ts +++ b/tests/src/rmrk/getOwnedNfts.test.ts @@ -1,11 +1,17 @@ import {expect} from 'chai'; import {getApiConnection} from '../substrate/substrate-api'; +import { getModuleNames, Pallets } from '../util/helpers'; import {getOwnedNfts} from './util/fetch'; import {mintNft, createCollection} from './util/tx'; describe('integration test: get owned NFTs', () => { let api: any; - before(async () => { api = await getApiConnection(); }); + + before(async function () { + api = await getApiConnection(); + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); + }); + const alice = '//Alice'; --- a/tests/src/rmrk/lockCollection.test.ts +++ b/tests/src/rmrk/lockCollection.test.ts @@ -1,4 +1,5 @@ import {getApiConnection} from '../substrate/substrate-api'; +import { getModuleNames, Pallets } from '../util/helpers'; import {expectTxFailure} from './util/helpers'; import {createCollection, lockCollection, mintNft} from './util/tx'; @@ -8,8 +9,9 @@ const Max = 5; let api: any; - before(async () => { + before(async function () { api = await getApiConnection(); + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); }); it('lock collection', async () => { --- a/tests/src/rmrk/mintNft.test.ts +++ b/tests/src/rmrk/mintNft.test.ts @@ -1,12 +1,18 @@ import {expect} from 'chai'; import {getApiConnection} from '../substrate/substrate-api'; +import { getModuleNames, Pallets } from '../util/helpers'; import {getNft} from './util/fetch'; import {expectTxFailure} from './util/helpers'; import {createCollection, mintNft} from './util/tx'; describe('integration test: mint new NFT', () => { let api: any; - before(async () => { api = await getApiConnection(); }); + + before(async function () { + api = await getApiConnection(); + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); + }); + const alice = '//Alice'; const bob = '//Bob'; --- a/tests/src/rmrk/rejectNft.test.ts +++ b/tests/src/rmrk/rejectNft.test.ts @@ -8,10 +8,16 @@ } from './util/tx'; import {getChildren, NftIdTuple} from './util/fetch'; import {isNftChildOfAnother, expectTxFailure} from './util/helpers'; +import { getModuleNames, Pallets } from '../util/helpers'; describe('integration test: reject NFT', () => { let api: any; - before(async () => { api = await getApiConnection(); }); + before(async function () { + api = await getApiConnection(); + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); + }); + + const alice = '//Alice'; const bob = '//Bob'; --- a/tests/src/rmrk/removeResource.test.ts +++ b/tests/src/rmrk/removeResource.test.ts @@ -1,6 +1,7 @@ import {expect} from 'chai'; import privateKey from '../substrate/privateKey'; import {executeTransaction, getApiConnection} from '../substrate/substrate-api'; +import { getModuleNames, Pallets } from '../util/helpers'; import {getNft, NftIdTuple} from './util/fetch'; import {expectTxFailure} from './util/helpers'; import { @@ -16,9 +17,10 @@ describe('Integration test: remove nft resource', () => { let api: any; let ss58Format: string; - before(async () => { + before(async function() { api = await getApiConnection(); ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format; + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); }); const Alice = '//Alice'; --- a/tests/src/rmrk/rmrkIsolation.test.ts +++ b/tests/src/rmrk/rmrkIsolation.test.ts @@ -6,7 +6,9 @@ getCreateCollectionResult, getDetailedCollectionInfo, getGenericResult, + getModuleNames, normalizeAccountId, + Pallets, } from '../util/helpers'; import {IKeyringPair} from '@polkadot/types/types'; import {ApiPromise} from '@polkadot/api'; @@ -59,11 +61,10 @@ describe('RMRK External Integration Test', async () => { const it_rmrk = (await isUnique() ? it : it.skip); - before(async () => { + before(async function() { await usingApi(async (api, privateKeyWrapper) => { alice = privateKeyWrapper('//Alice'); - - + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); }); }); --- a/tests/src/rmrk/sendNft.test.ts +++ b/tests/src/rmrk/sendNft.test.ts @@ -3,10 +3,14 @@ import {createCollection, mintNft, sendNft} from './util/tx'; import {NftIdTuple} from './util/fetch'; import {isNftChildOfAnother, expectTxFailure} from './util/helpers'; +import { getModuleNames, Pallets } from '../util/helpers'; describe('integration test: send NFT', () => { let api: any; - before(async () => { api = await getApiConnection(); }); + before(async function () { + api = await getApiConnection(); + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); + }); const maxNftId = 0xFFFFFFFF; --- a/tests/src/rmrk/setCollectionProperty.test.ts +++ b/tests/src/rmrk/setCollectionProperty.test.ts @@ -1,4 +1,5 @@ import {getApiConnection} from '../substrate/substrate-api'; +import { getModuleNames, Pallets } from '../util/helpers'; import {expectTxFailure} from './util/helpers'; import {createCollection, setPropertyCollection} from './util/tx'; @@ -7,8 +8,9 @@ const Bob = '//Bob'; let api: any; - before(async () => { + before(async function () { api = await getApiConnection(); + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); }); it('set collection property', async () => { --- a/tests/src/rmrk/setEquippableList.test.ts +++ b/tests/src/rmrk/setEquippableList.test.ts @@ -1,10 +1,14 @@ import {getApiConnection} from '../substrate/substrate-api'; +import { getModuleNames, Pallets } from '../util/helpers'; import {expectTxFailure} from './util/helpers'; import {createCollection, createBase, setEquippableList} from './util/tx'; describe("integration test: set slot's Equippable List", () => { let api: any; - before(async () => { api = await getApiConnection(); }); + before(async function () { + api = await getApiConnection(); + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); + }); const alice = '//Alice'; const bob = '//Bob'; --- a/tests/src/rmrk/setNftProperty.test.ts +++ b/tests/src/rmrk/setNftProperty.test.ts @@ -1,11 +1,15 @@ import {getApiConnection} from '../substrate/substrate-api'; +import { getModuleNames, Pallets } from '../util/helpers'; import {NftIdTuple} from './util/fetch'; import {expectTxFailure} from './util/helpers'; import {createCollection, mintNft, sendNft, setNftProperty} from './util/tx'; describe('integration test: set NFT property', () => { let api: any; - before(async () => { api = await getApiConnection(); }); + before(async function () { + api = await getApiConnection(); + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); + }); const alice = '//Alice'; const bob = '//Bob'; --- a/tests/src/rmrk/setResourcePriorities.test.ts +++ b/tests/src/rmrk/setResourcePriorities.test.ts @@ -1,10 +1,14 @@ import {getApiConnection} from '../substrate/substrate-api'; +import { getModuleNames, Pallets } from '../util/helpers'; import {expectTxFailure} from './util/helpers'; import {mintNft, createCollection, setResourcePriorities} from './util/tx'; describe('integration test: set NFT resource priorities', () => { let api: any; - before(async () => { api = await getApiConnection(); }); + before(async function () { + api = await getApiConnection(); + if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip(); + }); const alice = '//Alice'; const bob = '//Bob'; --- a/tests/src/util/helpers.ts +++ b/tests/src/util/helpers.ts @@ -38,6 +38,38 @@ Ethereum: string, }; + +export enum Pallets { + Inflation = 'inflation', + RmrkCore = 'rmrkcore', + ReFungible = 'refungible', + Fungible = 'fungible', + NFT = 'nonfungible', +} + +export async function isUnique(): Promise { + return usingApi(async api => { + const chain = await api.rpc.system.chain(); + + return chain.eq('UNIQUE'); + }); +} + +export async function isQuartz(): Promise { + return usingApi(async api => { + const chain = await api.rpc.system.chain(); + + return chain.eq('QUARTZ'); + }); +} + +let modulesNames: any; +export function getModuleNames(api: ApiPromise): string[] { + if (typeof modulesNames === 'undefined') + modulesNames = api.runtimeMetadata.asLatest.pallets.map(m => m.name.toString().toLowerCase()); + return modulesNames; +} + export function normalizeAccountId(input: string | AccountId | CrossAccountId | IKeyringPair): CrossAccountId { if (typeof input === 'string') { if (input.length >= 47) { -- gitstuff