--- a/client/rpc/src/lib.rs +++ b/client/rpc/src/lib.rs @@ -528,7 +528,7 @@ |r: sc_service::Result< up_data_structs::TokenDataVersion1, sp_runtime::DispatchError, - >| r.and_then(|value| Ok(value.into())), + >| r.map(|value| value.into()), ) .or_else(|_| { Ok(api --- a/node/cli/src/chain_spec.rs +++ b/node/cli/src/chain_spec.rs @@ -297,7 +297,7 @@ default_runtime, // Sudo account get_account_id_from_seed::("Alice"), - vec![ + [ ( get_account_id_from_seed::("Alice"), get_from_seed::("Alice"), @@ -371,7 +371,7 @@ default_runtime, // Sudo account get_account_id_from_seed::("Alice"), - vec![ + [ ( get_account_id_from_seed::("Alice"), get_from_seed::("Alice"), --- a/pallets/common/src/benchmarking.rs +++ b/pallets/common/src/benchmarking.rs @@ -63,7 +63,7 @@ } let bytes = id.to_string(); let len = data.len(); - data[len - bytes.len()..].copy_from_slice(&bytes.as_bytes()); + data[len - bytes.len()..].copy_from_slice(bytes.as_bytes()); data } pub fn property_value() -> PropertyValue { @@ -80,7 +80,7 @@ cast: impl FnOnce(CollectionHandle) -> R, ) -> Result { let imbalance = ::Currency::deposit( - &owner.as_sub(), + owner.as_sub(), T::CollectionCreationPrice::get(), Precision::Exact, )?; --- a/pallets/common/src/lib.rs +++ b/pallets/common/src/lib.rs @@ -2420,7 +2420,8 @@ } } -#[cfg(feature = "tests")] +#[cfg(any(feature = "tests", test))] +#[allow(missing_docs)] pub mod tests { use crate::{DispatchResult, DispatchError, LazyValue, Config}; @@ -2456,7 +2457,7 @@ } #[rustfmt::skip] - pub const table: [TestCase; 16] = [ + pub const TABLE: [TestCase; 16] = [ // ┌╴collection_admin // │ ┌╴is_collection_admin // │ │ ┌╴token_owner --- a/pallets/evm-coder-substrate/src/lib.rs +++ b/pallets/evm-coder-substrate/src/lib.rs @@ -286,7 +286,14 @@ { let call = C::parse_full(input)?; if call.is_none() { - return Err("unrecognized selector".into()); + let selector = if input.len() >= 4 { + let mut selector = [0; 4]; + selector.copy_from_slice(&input[..4]); + u32::from_be_bytes(selector) + } else { + 0 + }; + return Err(format!("unrecognized selector: 0x{selector:0>8x}").into()); } let call = call.unwrap(); @@ -329,7 +336,7 @@ ERC165Call(ERC165Call, PhantomData T>), OtherCall(ERC165Call), - #[weight(Weight::from_ref_time(a + b))] + #[weight(Weight::from_parts(a + b, 0))] Example { a: u64, b: u64, --- a/pallets/fungible/src/benchmarking.rs +++ b/pallets/fungible/src/benchmarking.rs @@ -53,7 +53,7 @@ let data = (0..b).map(|i| { bench_init!(to: cross_sub(i);); (to, 200) - }).collect::>().try_into().unwrap(); + }).collect::>(); }: {>::create_multiple_items(&collection, &sender, data, &Unlimited)?} burn_item { --- a/pallets/identity/src/benchmarking.rs +++ b/pallets/identity/src/benchmarking.rs @@ -35,6 +35,7 @@ //! Identity pallet benchmarking. #![cfg(feature = "runtime-benchmarks")] +#![allow(clippy::no_effect)] use super::*; --- a/pallets/identity/src/tests.rs +++ b/pallets/identity/src/tests.rs @@ -67,7 +67,7 @@ parameter_types! { pub BlockWeights: frame_system::limits::BlockWeights = - frame_system::limits::BlockWeights::simple_max(frame_support::weights::Weight::from_ref_time(1024)); + frame_system::limits::BlockWeights::simple_max(frame_support::weights::Weight::from_parts(1024, 0)); } impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; --- a/pallets/identity/src/types.rs +++ b/pallets/identity/src/types.rs @@ -481,7 +481,7 @@ let mut registry = scale_info::Registry::new(); let type_id = registry.register_type(&scale_info::meta_type::()); let registry: scale_info::PortableRegistry = registry.into(); - let type_info = registry.resolve(type_id.id()).unwrap(); + let type_info = registry.resolve(type_id.id).unwrap(); let check_type_info = |data: &Data| { let variant_name = match data { @@ -492,20 +492,20 @@ Data::ShaThree256(_) => "ShaThree256".to_string(), Data::Raw(bytes) => format!("Raw{}", bytes.len()), }; - if let scale_info::TypeDef::Variant(variant) = type_info.type_def() { + if let scale_info::TypeDef::Variant(variant) = &type_info.type_def { let variant = variant - .variants() + .variants .iter() - .find(|v| v.name() == &variant_name) + .find(|v| v.name == variant_name) .expect(&format!("Expected to find variant {}", variant_name)); let field_arr_len = variant - .fields() + .fields .first() - .and_then(|f| registry.resolve(f.ty().id())) + .and_then(|f| registry.resolve(f.ty.id)) .map(|ty| { - if let scale_info::TypeDef::Array(arr) = ty.type_def() { - arr.len() + if let scale_info::TypeDef::Array(arr) = &ty.type_def { + arr.len } else { panic!("Should be an array type") } @@ -513,7 +513,7 @@ .unwrap_or(0); let encoded = data.encode(); - assert_eq!(encoded[0], variant.index()); + assert_eq!(encoded[0], variant.index); assert_eq!(encoded.len() as u32 - 1, field_arr_len); } else { panic!("Should be a variant type") --- a/pallets/inflation/src/tests.rs +++ b/pallets/inflation/src/tests.rs @@ -78,7 +78,7 @@ parameter_types! { pub const BlockHashCount: u64 = 250; pub BlockWeights: frame_system::limits::BlockWeights = - frame_system::limits::BlockWeights::simple_max(Weight::from_ref_time(1024)); + frame_system::limits::BlockWeights::simple_max(Weight::from_parts(1024, 0)); pub const SS58Prefix: u8 = 42; } --- a/pallets/nonfungible/src/benchmarking.rs +++ b/pallets/nonfungible/src/benchmarking.rs @@ -43,12 +43,12 @@ owner: T::CrossAccountId, ) -> Result { >::create_item( - &collection, + collection, sender, create_max_item_data::(owner), &Unlimited, )?; - Ok(TokenId(>::get(&collection.id))) + Ok(TokenId(>::get(collection.id))) } fn create_collection( --- a/pallets/refungible/src/benchmarking.rs +++ b/pallets/refungible/src/benchmarking.rs @@ -51,8 +51,8 @@ users: impl IntoIterator, ) -> Result { let data: CreateItemData = create_max_item_data::(users); - >::create_item(&collection, sender, data, &Unlimited)?; - Ok(TokenId(>::get(&collection.id))) + >::create_item(collection, sender, data, &Unlimited)?; + Ok(TokenId(>::get(collection.id))) } fn create_collection( @@ -104,7 +104,7 @@ let data = vec![create_max_item_data::((0..b).map(|u| { bench_init!(to: cross_sub(u);); (to, 200) - }))].try_into().unwrap(); + }))]; }: {>::create_multiple_items(&collection, &sender, data, &Unlimited)?} // Other user left, token data is kept --- a/pallets/scheduler-v2/src/benchmarking.rs +++ b/pallets/scheduler-v2/src/benchmarking.rs @@ -83,11 +83,11 @@ /// /// # Arguments /// * `periodic` - makes the task periodic. -/// Sets the task's period and repetition count to `100`. +/// Sets the task's period and repetition count to `100`. /// * `named` - gives a name to the task: `u32_to_name(0)`. /// * `signed` - determines the origin of the task. -/// If true, it will have the Signed origin. Otherwise it will have the Root origin. -/// See [`make_origin`] for details. +/// If true, it will have the Signed origin. Otherwise it will have the Root origin. +/// See [`make_origin`] for details. /// * maybe_lookup_len - sets optional lookup length. It is used to benchmark task fetching from the `Preimages` store. /// * priority - the task's priority. fn make_task( @@ -155,12 +155,10 @@ } if maybe_lookup_len.is_some() { len += 1; + } else if len > 0 { + len -= 1; } else { - if len > 0 { - len -= 1; - } else { - break c; - } + break c; } } } --- a/pallets/scheduler-v2/src/mock.rs +++ b/pallets/scheduler-v2/src/mock.rs @@ -33,6 +33,7 @@ // limitations under the License. //! # Scheduler test environment. +#![allow(deprecated)] use super::*; @@ -229,6 +230,10 @@ r => Err(O::from(r)), }) } + #[cfg(feature = "runtime-benchmarks")] + fn try_successful_origin() -> Result { + Ok(O::from(RawOrigin::Root)) + } } pub struct Executor; --- a/pallets/scheduler-v2/src/tests.rs +++ b/pallets/scheduler-v2/src/tests.rs @@ -33,6 +33,7 @@ // limitations under the License. //! # Scheduler tests. +#![allow(deprecated)] use super::*; use crate::mock::{ --- a/pallets/structure/src/benchmarking.rs +++ b/pallets/structure/src/benchmarking.rs @@ -19,8 +19,7 @@ use frame_benchmarking::{benchmarks, account}; use frame_support::traits::{fungible::Balanced, Get, tokens::Precision}; use up_data_structs::{ - CreateCollectionData, CollectionMode, CreateItemData, CollectionFlags, CreateNftData, - budget::Unlimited, + CreateCollectionData, CollectionMode, CreateItemData, CreateNftData, budget::Unlimited, }; use pallet_common::Config as CommonConfig; use pallet_evm::account::CrossAccountId; --- a/runtime/common/config/pallets/mod.rs +++ b/runtime/common/config/pallets/mod.rs @@ -24,8 +24,7 @@ weights::CommonWeights, RelayChainBlockNumberProvider, }, - Runtime, RuntimeEvent, RuntimeCall, RUNTIME_NAME, TOKEN_SYMBOL, DECIMALS, - Balances, + Runtime, RuntimeEvent, RuntimeCall, RUNTIME_NAME, TOKEN_SYMBOL, DECIMALS, Balances, }; use frame_support::traits::{ConstU32, ConstU64, Currency}; use up_common::{ --- a/runtime/common/ethereum/sponsoring.rs +++ b/runtime/common/ethereum/sponsoring.rs @@ -161,7 +161,8 @@ } } CollectionMode::ReFungible => { - let call = >::parse_full(&call_context.input).ok()??; + let call = + >::parse_full(&call_context.input).ok()??; refungible::call_sponsor(call, collection, who).map(|()| sponsor) } CollectionMode::Fungible(_) => { --- a/runtime/common/tests/mod.rs +++ b/runtime/common/tests/mod.rs @@ -16,7 +16,6 @@ use sp_runtime::{BuildStorage, Storage}; use sp_core::{Public, Pair}; -use sp_std::vec; use up_common::types::AuraId; use crate::{Runtime, GenesisConfig, ParachainInfoConfig, RuntimeEvent, System}; @@ -76,7 +75,7 @@ AccountPublic::from(get_from_seed::(seed)).into_account() } - let accounts = vec!["Alice", "Bob"]; + let accounts = ["Alice", "Bob"]; let keys = accounts .iter() .map(|&acc| { @@ -104,7 +103,7 @@ ..GenesisConfig::default() }; - cfg.build_storage().unwrap().into() + cfg.build_storage().unwrap() } #[cfg(not(feature = "collator-selection"))] --- a/runtime/common/tests/xcm.rs +++ b/runtime/common/tests/xcm.rs @@ -26,7 +26,7 @@ const ALICE: AccountId = AccountId::new([0u8; 32]); const BOB: AccountId = AccountId::new([1u8; 32]); -const INITIAL_BALANCE: u128 = 1000000000000000000_0000; // 1000 UNQ +const INITIAL_BALANCE: u128 = 10_000_000_000_000_000_000_000; // 10_000 UNQ #[test] pub fn xcm_transact_is_forbidden() { --- a/runtime/tests/Cargo.toml +++ b/runtime/tests/Cargo.toml @@ -5,7 +5,6 @@ [features] default = ['refungible'] -tests = ['pallet-common/tests'] refungible = [] @@ -44,3 +43,6 @@ evm-coder = { workspace = true } up-sponsorship = { workspace = true } xcm = { workspace = true } + +[dev-dependencies] +pallet-common = { workspace = true, features = ["tests"] } --- a/runtime/tests/src/tests.rs +++ b/runtime/tests/src/tests.rs @@ -99,7 +99,7 @@ .try_into() .unwrap(); - let data: CreateCollectionData = CreateCollectionData { + let data = CreateCollectionData { name: col_name1.try_into().unwrap(), description: col_desc1.try_into().unwrap(), token_prefix: token_prefix1.try_into().unwrap(), @@ -204,14 +204,13 @@ let description: Vec = "TestDescription1\0".encode_utf16().collect::>(); let token_prefix: Vec = b"token_prefix1\0".to_vec(); - let data: CreateCollectionData<::AccountId> = - CreateCollectionData { - name: name.try_into().unwrap(), - description: description.try_into().unwrap(), - token_prefix: token_prefix.try_into().unwrap(), - mode: CollectionMode::NFT, - ..Default::default() - }; + let data = CreateCollectionData { + name: name.try_into().unwrap(), + description: description.try_into().unwrap(), + token_prefix: token_prefix.try_into().unwrap(), + mode: CollectionMode::NFT, + ..Default::default() + }; let result = Unique::create_collection_ex(RuntimeOrigin::signed(acc), data); assert_err!(result, >::NotSufficientFounds); @@ -225,7 +224,7 @@ let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); let token_prefix1: Vec = b"token_prefix1\0".to_vec(); - let data: CreateCollectionData = CreateCollectionData { + let data = CreateCollectionData { name: col_name1.try_into().unwrap(), description: col_desc1.try_into().unwrap(), token_prefix: token_prefix1.try_into().unwrap(), @@ -2364,7 +2363,7 @@ let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); let token_prefix1: Vec = b"token_prefix1\0".to_vec(); - let data: CreateCollectionData = CreateCollectionData { + let data = CreateCollectionData { name: col_name1.try_into().unwrap(), description: col_desc1.try_into().unwrap(), token_prefix: token_prefix1.try_into().unwrap(), @@ -2618,9 +2617,7 @@ mod check_token_permissions { use super::*; - use frame_support::once_cell::sync::Lazy; use pallet_common::LazyValue; - use sp_runtime::DispatchError; fn test bool>( i: usize, @@ -2662,7 +2659,7 @@ fn no_permission_only() { new_test_ext().execute_with(|| { let mut check_token_existence = LazyValue::new(|| true); - for (i, row) in pallet_common::tests::table.iter().enumerate() { + for (i, row) in pallet_common::tests::TABLE.iter().enumerate() { test(i, row, &mut check_token_existence); } }); @@ -2671,7 +2668,7 @@ #[test] fn no_permission_and_token_not_found() { new_test_ext().execute_with(|| { - for (i, row) in pallet_common::tests::table.iter().enumerate() { + for (i, row) in pallet_common::tests::TABLE.iter().enumerate() { // This is inside the loop to keep track of whether the lambda was called let mut check_token_existence = LazyValue::new(|| false); test(i, row, &mut check_token_existence); --- a/tests/src/createCollection.test.ts +++ b/tests/src/createCollection.test.ts @@ -106,15 +106,17 @@ flags: [CollectionFlag.Erc721metadata], }, 'nft'); - await mintCollectionHelper(helper, alice, { + // User can not set Foreign flag itself + + await expect(mintCollectionHelper(helper, alice, { name: 'name', description: 'descr', tokenPrefix: 'COL', flags: [CollectionFlag.Foreign], - }, 'nft'); + }, 'nft')).to.be.rejectedWith(/common.NoPermission/); - await mintCollectionHelper(helper, alice, { + await expect(mintCollectionHelper(helper, alice, { name: 'name', description: 'descr', tokenPrefix: 'COL', flags: [CollectionFlag.Erc721metadata, CollectionFlag.Foreign], - }, 'nft'); + }, 'nft')).to.be.rejectedWith(/common.NoPermission/); }); itSub('Create new collection with extra fields', async ({helper}) => { --- a/tests/src/eth/collectionLimits.test.ts +++ b/tests/src/eth/collectionLimits.test.ts @@ -106,7 +106,7 @@ // Cannot disable limits await expect(collectionEvm.methods - .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, value: {status: false, value: 200}}) + .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, value: {status: false, value: 0}}) .call()).to.be.rejectedWith('user can\'t disable limits'); await expect(collectionEvm.methods --- a/tests/src/util/playgrounds/unique.dev.ts +++ b/tests/src/util/playgrounds/unique.dev.ts @@ -41,7 +41,7 @@ for(const arg of args) { if(typeof arg !== 'string') continue; - const skippedWarnings = ['1000:: Normal connection closure', 'Not decorating unknown runtime apis:', 'RPC methods not decorated:', 'Not decorating runtime apis']; + const skippedWarnings = ['1000:: Normal connection closure', 'Not decorating unknown runtime apis:', 'RPC methods not decorated:', 'Not decorating runtime apis', 'Bad input data provided to validate_transaction', 'account balance too low', '1006:: Abnormal Closure']; const needToSkip = skippedWarnings.reduce((a, b) => a || arg.includes(b), false); if(needToSkip || arg === 'Normal connection closure') return;