From a64769ff6bff476597daecb73268349426e161d7 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Mon, 02 Oct 2023 22:07:25 +0000 Subject: [PATCH] refactor: upgrade code for new substrate --- --- a/node/cli/src/chain_spec.rs +++ b/node/cli/src/chain_spec.rs @@ -153,11 +153,12 @@ ) => {{ use $runtime::*; - GenesisConfig { + RuntimeGenesisConfig { system: SystemConfig { code: WASM_BINARY .expect("WASM binary was not build, please build it!") .to_vec(), + ..Default::default() }, balances: BalancesConfig { balances: $endowed_accounts @@ -167,10 +168,6 @@ .map(|k| (k, 1 << 100)) .collect(), }, - common: Default::default(), - configuration: Default::default(), - nonfungible: Default::default(), - treasury: Default::default(), tokens: TokensConfig { balances: vec![] }, sudo: SudoConfig { key: Some($root_key), @@ -179,8 +176,8 @@ vesting: VestingConfig { vesting: vec![] }, parachain_info: ParachainInfoConfig { parachain_id: $id.into(), + ..Default::default() }, - parachain_system: Default::default(), collator_selection: CollatorSelectionConfig { invulnerables: $initial_invulnerables .iter() @@ -200,14 +197,10 @@ }) .collect(), }, - aura: Default::default(), - aura_ext: Default::default(), evm: EVMConfig { accounts: BTreeMap::new(), + ..Default::default() }, - ethereum: EthereumConfig {}, - polkadot_xcm: Default::default(), - transaction_payment: Default::default(), ..Default::default() } }}; @@ -224,15 +217,13 @@ ) => {{ use $runtime::*; - GenesisConfig { + RuntimeGenesisConfig { system: SystemConfig { code: WASM_BINARY .expect("WASM binary was not build, please build it!") .to_vec(), + ..Default::default() }, - common: Default::default(), - configuration: Default::default(), - nonfungible: Default::default(), balances: BalancesConfig { balances: $endowed_accounts .iter() @@ -241,7 +232,6 @@ .map(|k| (k, 1 << 100)) .collect(), }, - treasury: Default::default(), tokens: TokensConfig { balances: vec![] }, sudo: SudoConfig { key: Some($root_key), @@ -249,21 +239,19 @@ vesting: VestingConfig { vesting: vec![] }, parachain_info: ParachainInfoConfig { parachain_id: $id.into(), + Default::default() }, - parachain_system: Default::default(), aura: AuraConfig { authorities: $initial_invulnerables .into_iter() .map(|(_, aura)| aura) .collect(), }, - aura_ext: Default::default(), evm: EVMConfig { accounts: BTreeMap::new(), + ..Default::default() }, - ethereum: EthereumConfig {}, - polkadot_xcm: Default::default(), - transaction_payment: Default::default(), + ..Default::default() } }}; } --- a/node/cli/src/command.rs +++ b/node/cli/src/command.rs @@ -135,19 +135,6 @@ fn load_spec(&self, id: &str) -> std::result::Result, String> { load_spec(id) } - - fn native_runtime_version(chain_spec: &Box) -> &'static RuntimeVersion { - match chain_spec.runtime_id() { - #[cfg(feature = "unique-runtime")] - RuntimeId::Unique => &unique_runtime::VERSION, - - #[cfg(feature = "quartz-runtime")] - RuntimeId::Quartz => &quartz_runtime::VERSION, - - RuntimeId::Opal => &opal_runtime::VERSION, - runtime_id => panic!("{}", no_runtime_err!(runtime_id)), - } - } } impl SubstrateCli for RelayChainCli { @@ -184,25 +171,21 @@ fn load_spec(&self, id: &str) -> std::result::Result, String> { polkadot_cli::Cli::from_iter([RelayChainCli::executable_name()].iter()).load_spec(id) - } - - fn native_runtime_version(chain_spec: &Box) -> &'static RuntimeVersion { - polkadot_cli::Cli::native_runtime_version(chain_spec) } } macro_rules! async_run_with_runtime { ( - $runtime_api:path, $executor:path, + $runtime:path, $runtime_api:path, $executor:path, $runner:ident, $components:ident, $cli:ident, $cmd:ident, $config:ident, $( $code:tt )* ) => { $runner.async_run(|$config| { let $components = new_partial::< - $runtime_api, $executor, _ + $runtime, $runtime_api, $executor, _ >( &$config, - crate::service::parachain_build_import_queue, + crate::service::parachain_build_import_queue::<$runtime, _, _>, )?; let task_manager = $components.task_manager; @@ -218,18 +201,18 @@ match runner.config().chain_spec.runtime_id() { #[cfg(feature = "unique-runtime")] RuntimeId::Unique => async_run_with_runtime!( - unique_runtime::RuntimeApi, UniqueRuntimeExecutor, + unique_runtime::Runtime, unique_runtime::RuntimeApi, UniqueRuntimeExecutor, runner, $components, $cli, $cmd, $config, $( $code )* ), #[cfg(feature = "quartz-runtime")] RuntimeId::Quartz => async_run_with_runtime!( - quartz_runtime::RuntimeApi, QuartzRuntimeExecutor, + quartz_runtime::Runtime, quartz_runtime::RuntimeApi, QuartzRuntimeExecutor, runner, $components, $cli, $cmd, $config, $( $code )* ), RuntimeId::Opal => async_run_with_runtime!( - opal_runtime::RuntimeApi, OpalRuntimeExecutor, + opal_runtime::Runtime, opal_runtime::RuntimeApi, OpalRuntimeExecutor, runner, $components, $cli, $cmd, $config, $( $code )* ), @@ -240,11 +223,18 @@ macro_rules! sync_run_with_runtime { ( - $runtime_api:path, $executor:path, + $runtime:path, $runtime_api:path, $executor:path, $runner:ident, $components:ident, $cli:ident, $cmd:ident, $config:ident, $( $code:tt )* ) => { $runner.sync_run(|$config| { + let $components = new_partial::< + $runtime, $runtime_api, $executor, _ + >( + &$config, + crate::service::parachain_build_import_queue::<$runtime, _, _>, + )?; + $( $code )* }) }; @@ -257,18 +247,18 @@ match runner.config().chain_spec.runtime_id() { #[cfg(feature = "unique-runtime")] RuntimeId::Unique => sync_run_with_runtime!( - unique_runtime::RuntimeApi, UniqueRuntimeExecutor, + unique_runtime::Runtime, unique_runtime::RuntimeApi, UniqueRuntimeExecutor, runner, $components, $cli, $cmd, $config, $( $code )* ), #[cfg(feature = "quartz-runtime")] RuntimeId::Quartz => sync_run_with_runtime!( - quartz_runtime::RuntimeApi, QuartzRuntimeExecutor, + quartz_runtime::Runtime, quartz_runtime::RuntimeApi, QuartzRuntimeExecutor, runner, $components, $cli, $cmd, $config, $( $code )* ), RuntimeId::Opal => sync_run_with_runtime!( - opal_runtime::RuntimeApi, OpalRuntimeExecutor, + opal_runtime::Runtime, opal_runtime::RuntimeApi, OpalRuntimeExecutor, runner, $components, $cli, $cmd, $config, $( $code )* ), @@ -362,12 +352,11 @@ Some(Subcommand::ExportGenesisState(cmd)) => { construct_sync_run!(|components, cli, cmd, _config| { let spec = cli.load_spec(&cmd.shared_params.chain.clone().unwrap_or_default())?; - let state_version = Cli::native_runtime_version(&spec).state_version(); - cmd.run::(&*spec, state_version) + cmd.run(&*spec, &*components.client) }) } Some(Subcommand::ExportGenesisWasm(cmd)) => { - construct_sync_run!(|components, cli, cmd, _config| { + construct_sync_run!(|_components, cli, cmd, _config| { let spec = cli.load_spec(&cmd.shared_params.chain.clone().unwrap_or_default())?; cmd.run(&*spec) }) @@ -411,6 +400,7 @@ #[cfg(feature = "try-runtime")] Some(Subcommand::TryRuntime(cmd)) => { use std::{future::Future, pin::Pin}; + use sc_executor::{sp_wasm_interface::ExtendedHostFunctions, NativeExecutionDispatch}; use try_runtime_cli::block_building_info::timestamp_with_aura_info; @@ -506,12 +496,6 @@ AccountIdConversion::::into_account_truncating( ¶_id, ); - - let state_version = Cli::native_runtime_version(&config.chain_spec).state_version(); - let block: Block = generate_genesis_block(&*config.chain_spec, state_version) - .map_err(|e| format!("{e:?}"))?; - let genesis_state = format!("0x{:?}", HexDisplay::from(&block.header().encode())); - let genesis_hash = format!("0x{:?}", HexDisplay::from(&block.header().hash().0)); let polkadot_config = SubstrateCli::create_configuration( &polkadot_cli, @@ -522,9 +506,6 @@ info!("Parachain id: {:?}", para_id); info!("Parachain Account: {}", parachain_account); - info!("Parachain genesis state: {}", genesis_state); - info!("Parachain genesis hash: {}", genesis_hash); - debug!("Parachain genesis block: {:?}", block); info!( "Is collating: {}", if config.role.is_authority() { --- a/node/cli/src/service.rs +++ b/node/cli/src/service.rs @@ -185,7 +185,7 @@ } } -pub fn open_frontier_backend>( +pub fn open_frontier_backend>( client: Arc, config: &Configuration, ) -> Result>, String> { @@ -210,12 +210,42 @@ type ParachainBlockImport = TParachainBlockImport>, FullBackend>; +/// Generate a supertrait based on bounds, and blanket impl for it. +macro_rules! ez_bounds { + ($vis:vis trait $name:ident$(<$($gen:ident $(: $($(+)? $bound:path)*)?),* $(,)?>)? $(:)? $($(+)? $super:path)* {}) => { + $vis trait $name $(<$($gen $(: $($bound+)*)?,)*>)?: $($super +)* {} + impl $name$(<$($gen,)*>)? for T + where T: $($super +)* {} + } +} +ez_bounds!( + pub trait RuntimeApiDep: + sp_transaction_pool::runtime_api::TaggedTransactionQueue + + sp_consensus_aura::AuraApi + + fp_rpc::EthereumRuntimeRPCApi + + sp_session::SessionKeys + + sp_block_builder::BlockBuilder + + pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi + + sp_api::ApiExt + + up_rpc::UniqueApi + + app_promotion_rpc::AppPromotionApi + + up_pov_estimate_rpc::PovEstimateApi + + substrate_frame_rpc_system::AccountNonceApi + + sp_api::Metadata + + sp_offchain::OffchainWorkerApi + + cumulus_primitives_core::CollectCollationInfo + // Deprecated, not used. + + fp_rpc::ConvertTransactionRuntimeApi + { + } +); + /// Starts a `ServiceBuilder` for a full service. /// /// Use this macro if you don't actually need the full service, but just the builder in order to /// be able to perform chain operations. #[allow(clippy::type_complexity)] -pub fn new_partial( +pub fn new_partial( config: &Configuration, build_import_queue: BIQ, ) -> Result< @@ -223,7 +253,7 @@ FullClient, FullBackend, FullSelectChain, - sc_consensus::DefaultImportQueue>, + sc_consensus::DefaultImportQueue, sc_transaction_pool::FullPool>, OtherPartial, >, @@ -235,7 +265,8 @@ + Send + Sync + 'static, - RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue, + RuntimeApi::RuntimeApi: RuntimeApiDep + 'static, + Runtime: RuntimeInstance, ExecutorDispatch: NativeExecutionDispatch + 'static, BIQ: FnOnce( Arc>, @@ -243,10 +274,7 @@ &Configuration, Option, &TaskManager, - ) -> Result< - sc_consensus::DefaultImportQueue>, - sc_service::Error, - >, + ) -> Result, sc_service::Error>, { let telemetry = config .telemetry_endpoints @@ -317,35 +345,6 @@ }; Ok(params) -} - -async fn build_relay_chain_interface( - polkadot_config: Configuration, - parachain_config: &Configuration, - telemetry_worker_handle: Option, - task_manager: &mut TaskManager, - collator_options: CollatorOptions, - hwbench: Option, -) -> RelayChainResult<( - Arc<(dyn RelayChainInterface + 'static)>, - Option, -)> { - if collator_options.relay_chain_rpc_urls.is_empty() { - build_inprocess_relay_chain( - polkadot_config, - parachain_config, - telemetry_worker_handle, - task_manager, - hwbench, - ) - } else { - build_minimal_relay_chain_node( - polkadot_config, - task_manager, - collator_options.relay_chain_rpc_urls, - ) - .await - } } macro_rules! clone { @@ -360,13 +359,11 @@ /// /// This is the actual implementation that is abstract over the executor and the runtime api. #[sc_tracing::logging::prefix_logs_with("Parachain")] -async fn start_node_impl( +pub async fn start_node( parachain_config: Configuration, polkadot_config: Configuration, collator_options: CollatorOptions, - id: ParaId, - build_import_queue: BIQ, - build_consensus: BIC, + para_id: ParaId, hwbench: Option, ) -> sc_service::error::Result<(TaskManager, Arc>)> where @@ -378,48 +375,16 @@ + Send + Sync + 'static, - RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue - + fp_rpc::EthereumRuntimeRPCApi - + fp_rpc::ConvertTransactionRuntimeApi - + sp_session::SessionKeys - + sp_block_builder::BlockBuilder - + pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi - + sp_api::ApiExt> - + up_rpc::UniqueApi - + app_promotion_rpc::AppPromotionApi - + up_pov_estimate_rpc::PovEstimateApi - + substrate_frame_rpc_system::AccountNonceApi - + sp_api::Metadata - + sp_offchain::OffchainWorkerApi - + cumulus_primitives_core::CollectCollationInfo, + RuntimeApi::RuntimeApi: RuntimeApiDep + 'static, + Runtime: RuntimeInstance, ExecutorDispatch: NativeExecutionDispatch + 'static, - BIQ: FnOnce( - Arc>, - Arc, - &Configuration, - Option, - &TaskManager, - ) -> Result< - sc_consensus::DefaultImportQueue>, - sc_service::Error, - >, - BIC: FnOnce( - Arc>, - Arc, - Option<&Registry>, - Option, - &TaskManager, - Arc, - Arc>>, - Arc>, - KeystorePtr, - bool, - ) -> Result>, sc_service::Error>, { let parachain_config = prepare_node_config(parachain_config); - let params = - new_partial::(¶chain_config, build_import_queue)?; + let params = new_partial::( + ¶chain_config, + parachain_build_import_queue, + )?; let OtherPartial { mut telemetry, telemetry_worker_handle, @@ -443,9 +408,9 @@ .await .map_err(|e| sc_service::Error::Application(Box::new(e) as Box<_>))?; - let block_announce_validator = BlockAnnounceValidator::new(relay_chain_interface.clone(), id); + let block_announce_validator = + RequireSecondedInBlockAnnounce::new(relay_chain_interface.clone(), para_id); - let force_authoring = parachain_config.force_authoring; let validator = parachain_config.role.is_authority(); let prometheus_registry = parachain_config.prometheus_registry().cloned(); let transaction_pool = params.transaction_pool.clone(); @@ -531,7 +496,7 @@ let mut rpc_handle = RpcModule::new(()); - let full_deps = unique_rpc::FullDeps { + let full_deps = FullDeps { client: client.clone(), runtime_id, @@ -551,9 +516,9 @@ select_chain, }; - unique_rpc::create_full::<_, _, _, Runtime, RuntimeApi, _>(&mut rpc_handle, full_deps)?; + create_full::<_, _, _, Runtime, RuntimeApi, _>(&mut rpc_handle, full_deps)?; - let eth_deps = unique_rpc::EthDeps { + let eth_deps = EthDeps { client, graph: transaction_pool.pool().clone(), pool: transaction_pool, @@ -571,9 +536,18 @@ eth_pubsub_notification_sinks, overrides, sync: sync_service.clone(), + pending_create_inherent_data_providers: |_, ()| async move { Ok(()) }, }; - unique_rpc::create_eth( + create_eth::< + _, + _, + _, + _, + _, + _, + DefaultEthConfig>, + >( &mut rpc_handle, eth_deps, subscription_task_executor.clone(), @@ -624,8 +598,25 @@ .overseer_handle() .map_err(|e| sc_service::Error::Application(Box::new(e)))?; + start_relay_chain_tasks(StartRelayChainTasksParams { + client: client.clone(), + announce_block: announce_block.clone(), + para_id, + relay_chain_interface: relay_chain_interface.clone(), + task_manager: &mut task_manager, + da_recovery_profile: if validator { + DARecoveryProfile::Collator + } else { + DARecoveryProfile::FullNode + }, + import_queue: import_queue_service, + relay_chain_slot_duration, + recovery_handle: Box::new(overseer_handle.clone()), + sync_service: sync_service.clone(), + })?; + if validator { - let parachain_consensus = build_consensus( + start_consensus( client.clone(), backend.clone(), prometheus_registry.as_ref(), @@ -635,42 +626,12 @@ transaction_pool, sync_service.clone(), params.keystore_container.keystore(), - force_authoring, - )?; - - let spawner = task_manager.spawn_handle(); - - let params = StartCollatorParams { - para_id: id, - block_status: client.clone(), - announce_block, - client: client.clone(), - task_manager: &mut task_manager, - spawner, - parachain_consensus, - import_queue: import_queue_service, - collator_key: collator_key.expect("Command line arguments do not allow this. qed"), - relay_chain_interface, + overseer_handle, relay_chain_slot_duration, - recovery_handle: Box::new(overseer_handle), - sync_service, - }; - - start_collator(params).await?; - } else { - let params = StartFullNodeParams { - client: client.clone(), + para_id, + collator_key.expect("cli args do not allow this"), announce_block, - task_manager: &mut task_manager, - para_id: id, - import_queue: import_queue_service, - relay_chain_interface, - relay_chain_slot_duration, - recovery_handle: Box::new(overseer_handle), - sync_service, - }; - - start_full_node(params)?; + )?; } start_network.start_network(); @@ -679,25 +640,20 @@ } /// Build the import queue for the the parachain runtime. -pub fn parachain_build_import_queue( +pub fn parachain_build_import_queue( client: Arc>, backend: Arc, config: &Configuration, telemetry: Option, task_manager: &TaskManager, -) -> Result< - sc_consensus::DefaultImportQueue>, - sc_service::Error, -> +) -> Result, sc_service::Error> where RuntimeApi: sp_api::ConstructRuntimeApi> + Send + Sync + 'static, - RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue - + sp_block_builder::BlockBuilder - + sp_consensus_aura::AuraApi - + sp_api::ApiExt>, + RuntimeApi::RuntimeApi: RuntimeApiDep + 'static, + Runtime: RuntimeInstance, ExecutorDispatch: NativeExecutionDispatch + 'static, { let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; @@ -732,120 +688,81 @@ .map_err(Into::into) } -/// Start a normal parachain node. -pub async fn start_node( - parachain_config: Configuration, - polkadot_config: Configuration, - collator_options: CollatorOptions, - id: ParaId, - hwbench: Option, -) -> sc_service::error::Result<(TaskManager, Arc>)> +pub fn start_consensus( + client: Arc>, + backend: Arc, + prometheus_registry: Option<&Registry>, + telemetry: Option, + task_manager: &TaskManager, + relay_chain_interface: Arc, + transaction_pool: Arc< + sc_transaction_pool::FullPool>, + >, + sync_oracle: Arc>, + keystore: KeystorePtr, + overseer_handle: OverseerHandle, + relay_chain_slot_duration: Duration, + para_id: ParaId, + collator_key: CollatorPair, + announce_block: Arc>) + Send + Sync>, +) -> Result<(), sc_service::Error> where - Runtime: RuntimeInstance + Send + Sync + 'static, - ::CrossAccountId: Serialize, - for<'de> ::CrossAccountId: Deserialize<'de>, + ExecutorDispatch: NativeExecutionDispatch + 'static, RuntimeApi: sp_api::ConstructRuntimeApi> + Send + Sync + 'static, - RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue - + fp_rpc::EthereumRuntimeRPCApi - + fp_rpc::ConvertTransactionRuntimeApi - + sp_session::SessionKeys - + sp_block_builder::BlockBuilder - + pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi - + sp_api::ApiExt> - + up_rpc::UniqueApi - + app_promotion_rpc::AppPromotionApi - + up_pov_estimate_rpc::PovEstimateApi - + substrate_frame_rpc_system::AccountNonceApi - + sp_api::Metadata - + sp_offchain::OffchainWorkerApi - + cumulus_primitives_core::CollectCollationInfo - + sp_consensus_aura::AuraApi, - ExecutorDispatch: NativeExecutionDispatch + 'static, + RuntimeApi::RuntimeApi: RuntimeApiDep + 'static, + Runtime: RuntimeInstance, { - start_node_impl::( - parachain_config, - polkadot_config, - collator_options, - id, - parachain_build_import_queue, - |client, - backend, - prometheus_registry, - telemetry, - task_manager, - relay_chain_interface, - transaction_pool, - sync_oracle, - keystore, - force_authoring| { - let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; + let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; - let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording( - task_manager.spawn_handle(), - client.clone(), - transaction_pool, - prometheus_registry, - telemetry.clone(), - ); + let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording( + task_manager.spawn_handle(), + client.clone(), + transaction_pool, + prometheus_registry, + telemetry.clone(), + ); + let proposer = Proposer::new(proposer_factory); - let block_import = ParachainBlockImport::new(client.clone(), backend); + let collator_service = CollatorService::new( + client.clone(), + Arc::new(task_manager.spawn_handle()), + announce_block, + client.clone(), + ); - Ok(AuraConsensus::build::< - sp_consensus_aura::sr25519::AuthorityPair, - _, - _, - _, - _, - _, - _, - >(BuildAuraConsensusParams { - proposer_factory, - create_inherent_data_providers: move |_, (relay_parent, validation_data)| { - let relay_chain_interface = relay_chain_interface.clone(); - async move { - let parachain_inherent = - cumulus_primitives_parachain_inherent::ParachainInherentData::create_at( - relay_parent, - &relay_chain_interface, - &validation_data, - id, - ).await; + let block_import = ParachainBlockImport::new(client.clone(), backend); - let time = sp_timestamp::InherentDataProvider::from_system_time(); + let params = BuildAuraConsensusParams { + create_inherent_data_providers: move |_, ()| async move { Ok(()) }, + block_import, + para_client: client, + #[cfg(feature = "lookahead")] + para_backend: backend, + para_id, + relay_client: relay_chain_interface, + sync_oracle, + keystore, + slot_duration, + proposer, + collator_service, + // With async-baking, we allowed to be both slower (longer authoring) and faster (multiple para blocks per relay block) + authoring_duration: Duration::from_millis(500), + overseer_handle, + #[cfg(feature = "lookahead")] + code_hash_provider: || {}, + collator_key, + relay_chain_slot_duration, + }; - let slot = - sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( - *time, - slot_duration, - ); - - let parachain_inherent = parachain_inherent.ok_or_else(|| { - Box::::from( - "Failed to create parachain inherent", - ) - })?; - Ok((slot, time, parachain_inherent)) - } - }, - block_import, - para_client: client, - backoff_authoring_blocks: Option::<()>::None, - sync_oracle, - keystore, - force_authoring, - slot_duration, - // We got around 500ms for proposing - block_proposal_slot_portion: SlotProportion::new(1f32 / 24f32), - telemetry, - max_block_proposal_slot_portion: None, - })) - }, - hwbench, - ) - .await + task_manager.spawn_essential_handle().spawn( + "aura", + None, + run_aura::<_, AuraAuthorityPair, _, _, _, _, _, _, _>(params), + ); + Ok(()) } fn dev_build_import_queue( @@ -854,17 +771,14 @@ config: &Configuration, _: Option, task_manager: &TaskManager, -) -> Result< - sc_consensus::DefaultImportQueue>, - sc_service::Error, -> +) -> Result, sc_service::Error> where RuntimeApi: sp_api::ConstructRuntimeApi> + Send + Sync + 'static, - RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue - + sp_api::ApiExt>, + RuntimeApi::RuntimeApi: + sp_transaction_pool::runtime_api::TaggedTransactionQueue + sp_api::ApiExt, ExecutorDispatch: NativeExecutionDispatch + 'static, { Ok(sc_consensus_manual_seal::import_queue( @@ -881,6 +795,15 @@ pub eth_backend: Arc>, } +struct DefaultEthConfig(PhantomData); +impl EthConfig for DefaultEthConfig +where + C: StorageProvider + Sync + Send + 'static, +{ + type EstimateGasAdapter = (); + type RuntimeStorageOverride = SystemAccountId32StorageOverride; +} + /// Builds a new development service. This service uses instant seal, and mocks /// the parachain inherent pub fn start_dev_node( @@ -897,28 +820,14 @@ + Send + Sync + 'static, - RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue - + fp_rpc::EthereumRuntimeRPCApi - + fp_rpc::ConvertTransactionRuntimeApi - + sp_session::SessionKeys - + sp_block_builder::BlockBuilder - + pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi - + sp_api::ApiExt> - + up_rpc::UniqueApi - + app_promotion_rpc::AppPromotionApi - + up_pov_estimate_rpc::PovEstimateApi - + substrate_frame_rpc_system::AccountNonceApi - + sp_api::Metadata - + sp_offchain::OffchainWorkerApi - + cumulus_primitives_core::CollectCollationInfo - + sp_consensus_aura::AuraApi, + RuntimeApi::RuntimeApi: RuntimeApiDep + 'static, ExecutorDispatch: NativeExecutionDispatch + 'static, { + use fc_consensus::FrontierBlockImport; use sc_consensus_manual_seal::{ run_manual_seal, run_delayed_finalize, EngineCommand, ManualSealParams, DelayedFinalizeParams, }; - use fc_consensus::FrontierBlockImport; let sc_service::PartialComponents { client, @@ -935,7 +844,7 @@ eth_backend, telemetry_worker_handle: _, }, - } = new_partial::( + } = new_partial::( &config, dev_build_import_queue::, )?; @@ -953,15 +862,6 @@ block_announce_validator_builder: None, warp_sync_params: None, })?; - - if config.offchain_worker.enabled { - sc_service::build_offchain_workers( - &config, - task_manager.spawn_handle(), - client.clone(), - network.clone(), - ); - } let collator = config.role.is_authority(); @@ -1141,7 +1041,7 @@ let mut rpc_module = RpcModule::new(()); - let full_deps = unique_rpc::FullDeps { + let full_deps = FullDeps { runtime_id, #[cfg(feature = "pov-estimate")] @@ -1161,9 +1061,9 @@ select_chain, }; - unique_rpc::create_full::<_, _, _, Runtime, RuntimeApi, _>(&mut rpc_module, full_deps)?; + create_full::<_, _, _, Runtime, RuntimeApi, _>(&mut rpc_module, full_deps)?; - let eth_deps = unique_rpc::EthDeps { + let eth_deps = EthDeps { client, graph: transaction_pool.pool().clone(), pool: transaction_pool, @@ -1181,9 +1081,19 @@ eth_pubsub_notification_sinks, overrides, sync: sync_service.clone(), + // We don't have any inherents except parachain built-ins, which we can't even extract from inside `run_aura`. + pending_create_inherent_data_providers: |_, ()| async move { Ok(()) }, }; - unique_rpc::create_eth( + create_eth::< + _, + _, + _, + _, + _, + _, + DefaultEthConfig>, + >( &mut rpc_module, eth_deps, subscription_task_executor.clone(), @@ -1241,37 +1151,35 @@ }) } -pub struct FrontierTaskParams<'a, B: BlockT, C, BE> { +pub struct FrontierTaskParams<'a, C, B> { pub task_manager: &'a TaskManager, pub client: Arc, - pub substrate_backend: Arc, - pub eth_backend: Arc>, + pub substrate_backend: Arc, + pub eth_backend: Arc>, pub eth_filter_pool: Option, - pub overrides: Arc>, + pub overrides: Arc>, pub fee_history_limit: u64, pub fee_history_cache: FeeHistoryCache, pub sync_strategy: SyncStrategy, pub prometheus_registry: Option, } -pub fn spawn_frontier_tasks( - params: FrontierTaskParams, - sync: Arc>, +pub fn spawn_frontier_tasks( + params: FrontierTaskParams, + sync: Arc>, pubsub_notification_sinks: Arc< - EthereumBlockNotificationSinks>, + EthereumBlockNotificationSinks>, >, -) -> Arc> +) -> Arc> where - C: ProvideRuntimeApi + BlockOf, - C: HeaderBackend + HeaderMetadata + 'static, - C: BlockchainEvents + StorageProvider, + C: ProvideRuntimeApi + BlockOf, + C: HeaderBackend + HeaderMetadata + 'static, + C: BlockchainEvents + StorageProvider, C: Send + Sync + 'static, - C::Api: EthereumRuntimeRPCApi, - C::Api: BlockBuilder, - B: BlockT + Send + Sync + 'static, - B::Header: HeaderT, - BE: Backend + 'static, - BE::State: StateBackend, + C::Api: EthereumRuntimeRPCApi, + C::Api: BlockBuilder, + B: Backend + 'static, + B::State: StateBackend, { let FrontierTaskParams { task_manager, --- a/pallets/app-promotion/src/benchmarking.rs +++ b/pallets/app-promotion/src/benchmarking.rs @@ -32,7 +32,7 @@ fn set_admin() -> Result where T: Config + pallet_unique::Config + pallet_evm_migration::Config, - T::BlockNumber: From + Into, + BlockNumberFor: From + Into, BalanceOf: Sum + From, { let pallet_admin = account::("admin", 0, SEED); @@ -53,7 +53,7 @@ benchmarks! { where_clause{ where T: Config + pallet_unique::Config + pallet_evm_migration::Config , - T::BlockNumber: From + Into, + BlockNumberFor: From + Into, BalanceOf: Sum + From } --- a/pallets/app-promotion/src/lib.rs +++ b/pallets/app-promotion/src/lib.rs @@ -125,11 +125,11 @@ /// In relay blocks. #[pallet::constant] - type RecalculationInterval: Get; + type RecalculationInterval: Get>; /// In parachain blocks. #[pallet::constant] - type PendingInterval: Get; + type PendingInterval: Get>; /// Rate of return for interval in blocks defined in `RecalculationInterval`. #[pallet::constant] @@ -146,7 +146,7 @@ type WeightInfo: WeightInfo; // The relay block number provider - type RelayBlockNumberProvider: BlockNumberProvider; + type RelayBlockNumberProvider: BlockNumberProvider>; /// Events compatible with [`frame_system::Config::Event`]. type RuntimeEvent: IsType<::RuntimeEvent> + From>; @@ -230,9 +230,9 @@ pub type Staked = StorageNMap< Key = ( Key, - Key, + Key>, ), - Value = (BalanceOf, T::BlockNumber), + Value = (BalanceOf, BlockNumberFor), QueryKind = ValueQuery, >; @@ -252,7 +252,7 @@ pub type PendingUnstake = StorageMap< _, Twox64Concat, - T::BlockNumber, + BlockNumberFor, BoundedVec<(T::AccountId, BalanceOf), ConstU32>, ValueQuery, >; @@ -262,16 +262,16 @@ #[pallet::storage] #[pallet::getter(fn get_next_calculated_record)] pub type PreviousCalculatedRecord = - StorageValue; + StorageValue), QueryKind = OptionQuery>; #[pallet::hooks] impl Hooks> for Pallet { /// Block overflow is impossible due to the fact that the unstake algorithm in on_initialize /// implies the execution of a strictly limited number of relatively lightweight operations. /// A separate benchmark has been implemented to scale the weight depending on the number of pendings. - fn on_initialize(current_block_number: T::BlockNumber) -> Weight + fn on_initialize(current_block_number: BlockNumberFor) -> Weight where - ::BlockNumber: From, + BlockNumberFor: From, { if T::IsMaintenanceModeEnabled::get() { return T::DbWeight::get().reads_writes(1, 0); @@ -302,7 +302,7 @@ #[pallet::call] impl Pallet where - T::BlockNumber: From + Into, + BlockNumberFor: From + Into, <::Currency as Inspect>::Balance: Sum + From, { /// Sets an address as the the admin. @@ -369,7 +369,7 @@ // Calculation of the number of recalculation periods, // after how much the first interest calculation should be performed for the stake - let recalculate_after_interval: T::BlockNumber = + let recalculate_after_interval: BlockNumberFor = if block_number % config.recalculation_interval == 0u32.into() { 1u32.into() } else { @@ -705,7 +705,7 @@ #[pallet::weight(::WeightInfo::on_initialize(PENDING_LIMIT_PER_BLOCK*pending_blocks.len() as u32))] pub fn force_unstake( origin: OriginFor, - pending_blocks: Vec, + pending_blocks: Vec>, ) -> DispatchResult { ensure_root(origin)?; @@ -917,7 +917,7 @@ /// - `staker`: staker account. pub fn total_staked_by_id_per_block( staker: impl EncodeLike, - ) -> Option)>> { + ) -> Option, BalanceOf)>> { let mut staked = Staked::::iter_prefix((staker,)) .map(|(block, (amount, _))| (block, amount)) .collect::>(); @@ -944,14 +944,14 @@ /// - `staker`: staker account. pub fn cross_id_total_staked_per_block( staker: T::CrossAccountId, - ) -> Vec<(T::BlockNumber, BalanceOf)> { + ) -> Vec<(BlockNumberFor, BalanceOf)> { Self::total_staked_by_id_per_block(staker.as_sub()).unwrap_or_default() } fn recalculate_and_insert_stake( staker: &T::AccountId, - staked_block: T::BlockNumber, - next_recalc_block: T::BlockNumber, + staked_block: BlockNumberFor, + next_recalc_block: BlockNumberFor, base: BalanceOf, iters: u32, income_acc: &mut BalanceOf, @@ -979,9 +979,9 @@ /// Get relay block number rounded down to multiples of config.recalculation_interval. /// We need it to reward stakers in integer parts of recalculation_interval fn get_current_recalc_block( - current_relay_block: T::BlockNumber, + current_relay_block: BlockNumberFor, config: &PalletConfiguration, - ) -> T::BlockNumber { + ) -> BlockNumberFor { (current_relay_block / config.recalculation_interval) * config.recalculation_interval } @@ -1028,7 +1028,7 @@ /// - `staker`: staker account. pub fn cross_id_pending_unstake_per_block( staker: T::CrossAccountId, - ) -> Vec<(T::BlockNumber, BalanceOf)> { + ) -> Vec<(BlockNumberFor, BalanceOf)> { let mut unsorted_res = vec![]; PendingUnstake::::iter().for_each(|(block, pendings)| { pendings.into_iter().for_each(|(id, amount)| { --- a/pallets/app-promotion/src/types.rs +++ b/pallets/app-promotion/src/types.rs @@ -114,9 +114,9 @@ } pub(crate) struct PalletConfiguration { /// In relay blocks. - pub recalculation_interval: T::BlockNumber, + pub recalculation_interval: BlockNumberFor, /// In parachain blocks. - pub pending_interval: T::BlockNumber, + pub pending_interval: BlockNumberFor, /// Value for `RecalculationInterval` based on 0.05% per 24h. pub interval_income: Perbill, /// Maximum allowable number of stakers calculated per call of the `app-promotion::PayoutStakers` extrinsic. --- a/pallets/collator-selection/src/benchmarking.rs +++ b/pallets/collator-selection/src/benchmarking.rs @@ -51,6 +51,10 @@ use pallet_session::{self as session, SessionManager}; use sp_std::prelude::*; +use super::*; +#[allow(unused)] +use crate::{BalanceOf, Pallet as CollatorSelection}; + const SEED: u32 = 0; // TODO: remove if this is given in substrate commit. @@ -317,7 +321,7 @@ balance_unit::() * 4u32.into(), ); let author = account("author", 0, SEED); - let new_block: T::BlockNumber = 10u32.into(); + let new_block: BlockNumberFor= 10u32.into(); frame_system::Pallet::::set_block_number(new_block); assert!(T::Currency::balance(&author) == 0u32.into()); @@ -338,7 +342,7 @@ register_validators::(c); register_candidates::(c); - let new_block: T::BlockNumber = 1800u32.into(); + let new_block: BlockNumberFor= 1800u32.into(); let zero_block: T::BlockNumber = 0u32.into(); let candidates = >::get(); --- a/pallets/collator-selection/src/lib.rs +++ b/pallets/collator-selection/src/lib.rs @@ -131,8 +131,11 @@ pub trait Config: frame_system::Config { /// Overarching event type. type RuntimeEvent: From> + IsType<::RuntimeEvent>; + /// Overarching hold reason. + type RuntimeHoldReason: From; + type Currency: Mutate - + MutateHold + + MutateHold + BalancedHold; /// Origin that can dictate updating parameters of this pallet. @@ -164,14 +167,17 @@ /// The weight information of this pallet. type WeightInfo: WeightInfo; - #[pallet::constant] - type LicenceBondIdentifier: Get<>::Reason>; - type DesiredCollators: Get; type LicenseBond: Get>; - type KickThreshold: Get; + type KickThreshold: Get>; + } + + #[pallet::composite_enum] + pub enum HoldReason { + /// The funds are held as the license bond. + LicenseBond, } #[pallet::pallet] @@ -199,14 +205,13 @@ #[pallet::storage] #[pallet::getter(fn last_authored_block)] pub type LastAuthoredBlock = - StorageMap<_, Twox64Concat, T::AccountId, T::BlockNumber, ValueQuery>; + StorageMap<_, Twox64Concat, T::AccountId, BlockNumberFor, ValueQuery>; #[pallet::genesis_config] pub struct GenesisConfig { pub invulnerables: Vec, } - #[cfg(feature = "std")] impl Default for GenesisConfig { fn default() -> Self { Self { @@ -216,12 +221,11 @@ } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { - let duplicate_invulnerables = self - .invulnerables - .iter() - .collect::>(); + use sp_std::collections::btree_set::BTreeSet; + + let duplicate_invulnerables = self.invulnerables.iter().collect::>(); assert!( duplicate_invulnerables.len() == self.invulnerables.len(), "duplicate invulnerables in genesis." @@ -375,7 +379,7 @@ let deposit = T::LicenseBond::get(); - T::Currency::hold(&T::LicenceBondIdentifier::get(), &who, deposit)?; + T::Currency::hold(&HoldReason::LicenseBond.into(), &who, deposit)?; LicenseDepositOf::::insert(who.clone(), deposit); Self::deposit_event(Event::LicenseObtained { @@ -538,7 +542,7 @@ let remaining = deposit - slashed; let (imbalance, _) = - T::Currency::slash(&T::LicenceBondIdentifier::get(), who, slashed); + T::Currency::slash(&HoldReason::LicenseBond.into(), who, slashed); deposit_returned = remaining; T::Currency::resolve(&T::TreasuryAccountId::get(), imbalance) @@ -548,7 +552,7 @@ } T::Currency::release( - &T::LicenceBondIdentifier::get(), + &HoldReason::LicenseBond.into(), who, deposit_returned, Precision::Exact, @@ -608,7 +612,7 @@ /// Keep track of number of authored blocks per authority, uncles are counted as well since /// they're a valid proof of being online. impl - pallet_authorship::EventHandler for Pallet + pallet_authorship::EventHandler> for Pallet { fn note_author(author: T::AccountId) { let pot = Self::account_id(); --- a/pallets/collator-selection/src/mock.rs +++ b/pallets/collator-selection/src/mock.rs @@ -51,18 +51,14 @@ // Configure a mock runtime to test the pallet. frame_support::construct_runtime!( - pub enum Test where - Block = Block, - NodeBlock = Block, - UncheckedExtrinsic = UncheckedExtrinsic, - { - System: frame_system::{Pallet, Call, Config, Storage, Event}, - Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent}, - Session: pallet_session::{Pallet, Call, Storage, Event, Config}, - Aura: pallet_aura::{Pallet, Storage, Config}, - Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, - CollatorSelection: collator_selection::{Pallet, Call, Storage, Event}, - Authorship: pallet_authorship::{Pallet, Storage}, + pub enum Test { + System: frame_system, + Timestamp: pallet_timestamp, + Session: pallet_session, + Aura: pallet_aura, + Balances: pallet_balances, + CollatorSelection: collator_selection, + Authorship: pallet_authorship, } ); @@ -78,13 +74,11 @@ type DbWeight = (); type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; - type Index = u64; - type BlockNumber = u64; + type Nonce = u64; type Hash = H256; type Hashing = BlakeTwo256; type AccountId = u64; type Lookup = IdentityLookup; - type Header = Header; type RuntimeEvent = RuntimeEvent; type BlockHashCount = BlockHashCount; type Version = (); @@ -115,7 +109,6 @@ type MaxLocks = (); type MaxReserves = MaxReserves; type ReserveIdentifier = [u8; 8]; - type HoldIdentifier = [u8; 16]; type FreezeIdentifier = [u8; 16]; type MaxHolds = MaxHolds; type MaxFreezes = MaxFreezes; --- a/pallets/common/src/lib.rs +++ b/pallets/common/src/lib.rs @@ -463,7 +463,6 @@ #[pallet::genesis_config] pub struct GenesisConfig(PhantomData); - #[cfg(feature = "std")] impl Default for GenesisConfig { fn default() -> Self { Self(Default::default()) @@ -471,7 +470,7 @@ } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { StorageVersion::new(1).put::>(); } --- a/pallets/configuration/src/benchmarking.rs +++ b/pallets/configuration/src/benchmarking.rs @@ -52,7 +52,7 @@ } set_app_promotion_configuration_override { - let configuration: AppPromotionConfiguration = Default::default(); + let configuration: AppPromotionConfiguration> = Default::default(); }: { assert_ok!( >::set_app_promotion_configuration_override(RawOrigin::Root.into(), configuration) @@ -82,7 +82,7 @@ } set_collator_selection_kick_threshold { - let threshold: Option = Some(900u32.into()); + let threshold: Option> = Some(900u32.into()); }: { assert_ok!( >::set_collator_selection_kick_threshold(RawOrigin::Root.into(), threshold) --- a/pallets/configuration/src/lib.rs +++ b/pallets/configuration/src/lib.rs @@ -80,14 +80,14 @@ #[pallet::constant] type AppPromotionDailyRate: Get; #[pallet::constant] - type DayRelayBlocks: Get; + type DayRelayBlocks: Get>; #[pallet::constant] type DefaultCollatorSelectionMaxCollators: Get; #[pallet::constant] type DefaultCollatorSelectionLicenseBond: Get; #[pallet::constant] - type DefaultCollatorSelectionKickThreshold: Get; + type DefaultCollatorSelectionKickThreshold: Get>; /// The weight information of this pallet. type WeightInfo: WeightInfo; @@ -103,7 +103,7 @@ bond_cost: Option, }, NewCollatorKickThreshold { - length_in_blocks: Option, + length_in_blocks: Option>, }, } @@ -134,7 +134,6 @@ #[pallet::genesis_config] pub struct GenesisConfig(PhantomData); - #[cfg(feature = "std")] impl Default for GenesisConfig { fn default() -> Self { Self(Default::default()) @@ -142,7 +141,7 @@ } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { update_base_fee::(); } @@ -166,7 +165,7 @@ #[pallet::storage] pub type AppPromomotionConfigurationOverride = - StorageValue, QueryKind = ValueQuery>; + StorageValue>, QueryKind = ValueQuery>; #[pallet::storage] pub type CollatorSelectionDesiredCollatorsOverride = StorageValue< @@ -184,7 +183,7 @@ #[pallet::storage] pub type CollatorSelectionKickThresholdOverride = StorageValue< - Value = T::BlockNumber, + Value = BlockNumberFor, QueryKind = ValueQuery, OnEmpty = T::DefaultCollatorSelectionKickThreshold, >; @@ -228,7 +227,7 @@ #[pallet::weight(T::WeightInfo::set_app_promotion_configuration_override())] pub fn set_app_promotion_configuration_override( origin: OriginFor, - mut configuration: AppPromotionConfiguration, + mut configuration: AppPromotionConfiguration>, ) -> DispatchResult { ensure_root(origin)?; if configuration.interval_income.is_some() { @@ -287,7 +286,7 @@ #[pallet::weight(T::WeightInfo::set_collator_selection_kick_threshold())] pub fn set_collator_selection_kick_threshold( origin: OriginFor, - threshold: Option, + threshold: Option>, ) -> DispatchResult { ensure_root(origin)?; if let Some(threshold) = threshold { --- a/pallets/evm-contract-helpers/src/eth.rs +++ b/pallets/evm-contract-helpers/src/eth.rs @@ -422,7 +422,7 @@ { return None; } - let block_number = >::block_number() as T::BlockNumber; + let block_number = >::block_number() as BlockNumberFor; if let Some(last_tx_block) = >::get(contract_address, who.as_eth()) { let limit = >::get(contract_address); --- a/pallets/evm-contract-helpers/src/lib.rs +++ b/pallets/evm-contract-helpers/src/lib.rs @@ -53,7 +53,7 @@ /// In case of enabled sponsoring, but no sponsoring rate limit set, /// this value will be used implicitly - type DefaultSponsoringRateLimit: Get; + type DefaultSponsoringRateLimit: Get>; } #[pallet::error] @@ -115,7 +115,7 @@ pub(super) type SponsoringRateLimit = StorageMap< Hasher = Twox128, Key = H160, - Value = T::BlockNumber, + Value = BlockNumberFor, QueryKind = ValueQuery, OnEmpty = T::DefaultSponsoringRateLimit, >; @@ -139,7 +139,7 @@ Key1 = H160, Hasher2 = Twox128, Key2 = H160, - Value = T::BlockNumber, + Value = BlockNumberFor, QueryKind = OptionQuery, >; @@ -393,7 +393,7 @@ } /// Set duration between two sponsored contract calls - pub fn set_sponsoring_rate_limit(contract: H160, rate_limit: T::BlockNumber) { + pub fn set_sponsoring_rate_limit(contract: H160, rate_limit: BlockNumberFor) { >::insert(contract, rate_limit); } --- a/pallets/evm-migration/src/benchmarking.rs +++ b/pallets/evm-migration/src/benchmarking.rs @@ -23,7 +23,7 @@ use sp_std::{vec::Vec, vec}; benchmarks! { - where_clause { where ::RuntimeEvent: codec::Encode } + where_clause { where ::RuntimeEvent: parity_scale_codec::Encode } begin { }: _(RawOrigin::Root, H160::default()) @@ -59,7 +59,7 @@ insert_events { let b in 0..200; - use codec::Encode; + use parity_scale_codec::Encode; let logs = (0..b).map(|_| ::RuntimeEvent::from(crate::Event::::TestEvent).encode()).collect::>(); }: _(RawOrigin::Root, logs) } --- a/pallets/foreign-assets/src/impl_fungibles.rs +++ b/pallets/foreign-assets/src/impl_fungibles.rs @@ -30,30 +30,30 @@ impl fungibles::Inspect<::AccountId> for Pallet where - T: orml_tokens::Config, + T: orml_tokens::Config, BalanceOf: From<::Balance>, BalanceOf: From<::Balance>, ::Balance: From>, ::Balance: From>, { - type AssetId = AssetIds; + type AssetId = AssetId; type Balance = BalanceOf; fn total_issuance(asset: Self::AssetId) -> Self::Balance { log::trace!(target: "fassets::impl_foreign_assets", "impl_fungible total_issuance"); match asset { - AssetIds::NativeAssetId(NativeCurrency::Here) => { + AssetId::NativeAssetId(NativeCurrency::Here) => { as fungible::Inspect>::total_issuance() .into() } - AssetIds::NativeAssetId(NativeCurrency::Parent) => { + AssetId::NativeAssetId(NativeCurrency::Parent) => { as fungibles::Inspect>::total_issuance( - AssetIds::NativeAssetId(NativeCurrency::Parent), + AssetId::NativeAssetId(NativeCurrency::Parent), ) .into() } - AssetIds::ForeignAssetId(fid) => { + AssetId::ForeignAssetId(fid) => { let target_collection_id = match >::get(fid) { Some(v) => v, None => return Zero::zero(), @@ -71,38 +71,36 @@ fn minimum_balance(asset: Self::AssetId) -> Self::Balance { log::trace!(target: "fassets::impl_foreign_assets", "impl_fungible minimum_balance"); match asset { - AssetIds::NativeAssetId(NativeCurrency::Here) => { + AssetId::NativeAssetId(NativeCurrency::Here) => { as fungible::Inspect>::minimum_balance() .into() } - AssetIds::NativeAssetId(NativeCurrency::Parent) => { + AssetId::NativeAssetId(NativeCurrency::Parent) => { as fungibles::Inspect>::minimum_balance( - AssetIds::NativeAssetId(NativeCurrency::Parent), + AssetId::NativeAssetId(NativeCurrency::Parent), ) .into() } - AssetIds::ForeignAssetId(fid) => { - AssetMetadatas::::get(AssetIds::ForeignAssetId(fid)) - .map(|x| x.minimal_balance) - .unwrap_or_else(Zero::zero) - } + AssetId::ForeignAssetId(fid) => AssetMetadatas::::get(AssetId::ForeignAssetId(fid)) + .map(|x| x.minimal_balance) + .unwrap_or_else(Zero::zero), } } fn balance(asset: Self::AssetId, who: &::AccountId) -> Self::Balance { log::trace!(target: "fassets::impl_foreign_assets", "impl_fungible balance"); match asset { - AssetIds::NativeAssetId(NativeCurrency::Here) => { + AssetId::NativeAssetId(NativeCurrency::Here) => { as fungible::Inspect>::balance(who).into() } - AssetIds::NativeAssetId(NativeCurrency::Parent) => { + AssetId::NativeAssetId(NativeCurrency::Parent) => { as fungibles::Inspect>::balance( - AssetIds::NativeAssetId(NativeCurrency::Parent), + AssetId::NativeAssetId(NativeCurrency::Parent), who, ) .into() } - AssetIds::ForeignAssetId(fid) => { + AssetId::ForeignAssetId(fid) => { let target_collection_id = match >::get(fid) { Some(v) => v, None => return Zero::zero(), @@ -133,7 +131,7 @@ log::trace!(target: "fassets::impl_foreign_assets", "impl_fungible reducible_balance"); match asset { - AssetIds::NativeAssetId(NativeCurrency::Here) => { + AssetId::NativeAssetId(NativeCurrency::Here) => { as fungible::Inspect>::reducible_balance( who, preservation, @@ -141,9 +139,9 @@ ) .into() } - AssetIds::NativeAssetId(NativeCurrency::Parent) => { + AssetId::NativeAssetId(NativeCurrency::Parent) => { as fungibles::Inspect>::reducible_balance( - AssetIds::NativeAssetId(NativeCurrency::Parent), + AssetId::NativeAssetId(NativeCurrency::Parent), who, preservation, fortitude, @@ -163,16 +161,16 @@ log::trace!(target: "fassets::impl_foreign_assets", "impl_fungible can_deposit"); match asset { - AssetIds::NativeAssetId(NativeCurrency::Here) => { + AssetId::NativeAssetId(NativeCurrency::Here) => { as fungible::Inspect>::can_deposit( who, amount.into(), provenance, ) } - AssetIds::NativeAssetId(NativeCurrency::Parent) => { + AssetId::NativeAssetId(NativeCurrency::Parent) => { as fungibles::Inspect>::can_deposit( - AssetIds::NativeAssetId(NativeCurrency::Parent), + AssetId::NativeAssetId(NativeCurrency::Parent), who, amount.into(), provenance, @@ -219,7 +217,7 @@ }; match asset { - AssetIds::NativeAssetId(NativeCurrency::Here) => { + AssetId::NativeAssetId(NativeCurrency::Here) => { let this_amount: ::Balance = match value.try_into() { Ok(val) => val, Err(_) => { @@ -240,7 +238,7 @@ _ => WithdrawConsequence::BalanceLow, } } - AssetIds::NativeAssetId(NativeCurrency::Parent) => { + AssetId::NativeAssetId(NativeCurrency::Parent) => { let parent_amount: ::Balance = match value.try_into() { Ok(val) => val, Err(_) => { @@ -248,7 +246,7 @@ } }; match as fungibles::Inspect>::can_withdraw( - AssetIds::NativeAssetId(NativeCurrency::Parent), + AssetId::NativeAssetId(NativeCurrency::Parent), who, parent_amount, ) { @@ -269,17 +267,17 @@ } } - fn asset_exists(asset: AssetIds) -> bool { + fn asset_exists(asset: AssetId) -> bool { match asset { - AssetIds::NativeAssetId(_) => true, - AssetIds::ForeignAssetId(fid) => >::contains_key(fid), + AssetId::NativeAssetId(_) => true, + AssetId::ForeignAssetId(fid) => >::contains_key(fid), } } } impl fungibles::Mutate<::AccountId> for Pallet where - T: orml_tokens::Config, + T: orml_tokens::Config, BalanceOf: From<::Balance>, BalanceOf: From<::Balance>, ::Balance: From>, @@ -295,22 +293,22 @@ log::trace!(target: "fassets::impl_foreign_assets", "impl_fungible mint_into {:?}", asset); match asset { - AssetIds::NativeAssetId(NativeCurrency::Here) => { + AssetId::NativeAssetId(NativeCurrency::Here) => { as fungible::Mutate>::mint_into( who, amount.into(), ) .map(Into::into) } - AssetIds::NativeAssetId(NativeCurrency::Parent) => { + AssetId::NativeAssetId(NativeCurrency::Parent) => { as fungibles::Mutate>::mint_into( - AssetIds::NativeAssetId(NativeCurrency::Parent), + AssetId::NativeAssetId(NativeCurrency::Parent), who, amount.into(), ) .map(Into::into) } - AssetIds::ForeignAssetId(fid) => { + AssetId::ForeignAssetId(fid) => { let target_collection_id = match >::get(fid) { Some(v) => v, None => { @@ -349,7 +347,7 @@ log::trace!(target: "fassets::impl_foreign_assets", "impl_fungible burn_from"); match asset { - AssetIds::NativeAssetId(NativeCurrency::Here) => { + AssetId::NativeAssetId(NativeCurrency::Here) => { as fungible::Mutate>::burn_from( who, amount.into(), @@ -358,9 +356,9 @@ ) .map(Into::into) } - AssetIds::NativeAssetId(NativeCurrency::Parent) => { + AssetId::NativeAssetId(NativeCurrency::Parent) => { as fungibles::Mutate>::burn_from( - AssetIds::NativeAssetId(NativeCurrency::Parent), + AssetId::NativeAssetId(NativeCurrency::Parent), who, amount.into(), precision, @@ -368,7 +366,7 @@ ) .map(Into::into) } - AssetIds::ForeignAssetId(fid) => { + AssetId::ForeignAssetId(fid) => { let target_collection_id = match >::get(fid) { Some(v) => v, None => { @@ -401,7 +399,7 @@ log::trace!(target: "fassets::impl_foreign_assets", "impl_fungible transfer"); match asset { - AssetIds::NativeAssetId(NativeCurrency::Here) => { + AssetId::NativeAssetId(NativeCurrency::Here) => { match as fungible::Mutate>::transfer( source, dest, @@ -414,9 +412,9 @@ )), } } - AssetIds::NativeAssetId(NativeCurrency::Parent) => { + AssetId::NativeAssetId(NativeCurrency::Parent) => { match as fungibles::Mutate>::transfer( - AssetIds::NativeAssetId(NativeCurrency::Parent), + AssetId::NativeAssetId(NativeCurrency::Parent), source, dest, amount.into(), @@ -426,7 +424,7 @@ Err(e) => Err(e), } } - AssetIds::ForeignAssetId(fid) => { + AssetId::ForeignAssetId(fid) => { let target_collection_id = match >::get(fid) { Some(v) => v, None => { @@ -479,7 +477,7 @@ impl fungibles::Unbalanced<::AccountId> for Pallet where - T: orml_tokens::Config, + T: orml_tokens::Config, BalanceOf: From<::Balance>, BalanceOf: From<::Balance>, ::Balance: From>, --- a/pallets/foreign-assets/src/lib.rs +++ b/pallets/foreign-assets/src/lib.rs @@ -79,8 +79,9 @@ Encode, Decode, TypeInfo, + Serialize, + Deserialize, )] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] pub enum NativeCurrency { Here = 0, Parent = 1, @@ -98,9 +99,10 @@ Encode, Decode, TypeInfo, + Serialize, + Deserialize, )] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub enum AssetIds { +pub enum AssetId { ForeignAssetId(ForeignAssetId), NativeAssetId(NativeCurrency), } @@ -109,17 +111,17 @@ fn try_as_foreign(asset: T) -> Option; } -impl TryAsForeign for AssetIds { - fn try_as_foreign(asset: AssetIds) -> Option { +impl TryAsForeign for AssetId { + fn try_as_foreign(asset: AssetId) -> Option { match asset { - AssetIds::ForeignAssetId(id) => Some(id), + Self::ForeignAssetId(id) => Some(id), _ => None, } } } pub type ForeignAssetId = u32; -pub type CurrencyId = AssetIds; +pub type CurrencyId = AssetId; mod impl_fungibles; pub mod weights; @@ -151,7 +153,7 @@ { fn get_asset_metadata(foreign_asset_id: ForeignAssetId) -> Option>> { log::trace!(target: "fassets::asset_metadatas", "call"); - Pallet::::asset_metadatas(AssetIds::ForeignAssetId(foreign_asset_id)) + Pallet::::asset_metadatas(AssetId::ForeignAssetId(foreign_asset_id)) } fn get_multi_location(foreign_asset_id: ForeignAssetId) -> Option { @@ -161,7 +163,7 @@ fn get_currency_id(multi_location: MultiLocation) -> Option { log::trace!(target: "fassets::get_currency_id", "call"); - Pallet::::location_to_currency_ids(multi_location).map(AssetIds::ForeignAssetId) + Pallet::::location_to_currency_ids(multi_location).map(AssetId::ForeignAssetId) } } @@ -231,12 +233,12 @@ }, /// The asset registered. AssetRegistered { - asset_id: AssetIds, + asset_id: AssetId, metadata: AssetMetadata>, }, /// The asset updated. AssetUpdated { - asset_id: AssetIds, + asset_id: AssetId, metadata: AssetMetadata>, }, } @@ -253,7 +255,7 @@ #[pallet::storage] #[pallet::getter(fn foreign_asset_locations)] pub type ForeignAssetLocations = - StorageMap<_, Twox64Concat, ForeignAssetId, xcm::v3::MultiLocation, OptionQuery>; + StorageMap<_, Twox64Concat, ForeignAssetId, staging_xcm::v3::MultiLocation, OptionQuery>; /// The storages for CurrencyIds. /// @@ -261,7 +263,7 @@ #[pallet::storage] #[pallet::getter(fn location_to_currency_ids)] pub type LocationToCurrencyIds = - StorageMap<_, Twox64Concat, xcm::v3::MultiLocation, ForeignAssetId, OptionQuery>; + StorageMap<_, Twox64Concat, staging_xcm::v3::MultiLocation, ForeignAssetId, OptionQuery>; /// The storages for AssetMetadatas. /// @@ -269,7 +271,7 @@ #[pallet::storage] #[pallet::getter(fn asset_metadatas)] pub type AssetMetadatas = - StorageMap<_, Twox64Concat, AssetIds, AssetMetadata>, OptionQuery>; + StorageMap<_, Twox64Concat, AssetId, AssetMetadata>, OptionQuery>; /// The storages for assets to fungible collection binding /// @@ -381,7 +383,7 @@ *maybe_location = Some(*location); AssetMetadatas::::try_mutate( - AssetIds::ForeignAssetId(foreign_asset_id), + AssetId::ForeignAssetId(foreign_asset_id), |maybe_asset_metadatas| -> DispatchResult { ensure!(maybe_asset_metadatas.is_none(), Error::::AssetIdExisted); *maybe_asset_metadatas = Some(metadata.clone()); @@ -413,7 +415,7 @@ .ok_or(Error::::AssetIdNotExists)?; AssetMetadatas::::try_mutate( - AssetIds::ForeignAssetId(foreign_asset_id), + AssetId::ForeignAssetId(foreign_asset_id), |maybe_asset_metadatas| -> DispatchResult { ensure!( maybe_asset_metadatas.is_some(), @@ -450,7 +452,7 @@ traits::{ fungibles::Balanced, tokens::currency::Currency as CurrencyT, OnUnbalanced as OnUnbalancedT, }, - weights::{WeightToFeePolynomial, WeightToFee}, + weights::{WeightToFee, WeightToFeePolynomial}, }; pub struct FreeForAll< @@ -477,7 +479,12 @@ Self(Weight::default(), Zero::zero(), PhantomData) } - fn buy_weight(&mut self, weight: Weight, payment: Assets) -> Result { + fn buy_weight( + &mut self, + weight: Weight, + payment: Assets, + _xcm: &XcmContext, + ) -> Result { log::trace!(target: "fassets::weight", "buy_weight weight: {:?}, payment: {:?}", weight, payment); Ok(payment) } --- a/pallets/identity/src/tests.rs +++ b/pallets/identity/src/tests.rs @@ -54,14 +54,10 @@ type Block = frame_system::mocking::MockBlock; frame_support::construct_runtime!( - pub enum Test where - Block = Block, - NodeBlock = Block, - UncheckedExtrinsic = UncheckedExtrinsic, - { - System: frame_system::{Pallet, Call, Config, Storage, Event}, - Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, - Identity: pallet_identity::{Pallet, Call, Storage, Event}, + pub enum Test { + System: frame_system, + Balances: pallet_balances, + Identity: pallet_identity, } ); @@ -71,17 +67,16 @@ } impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; + type Block = Block; type BlockWeights = (); type BlockLength = (); type RuntimeOrigin = RuntimeOrigin; - type Index = u64; - type BlockNumber = u64; + type Nonce = u64; type Hash = H256; type RuntimeCall = RuntimeCall; type Hashing = BlakeTwo256; type AccountId = u64; type Lookup = IdentityLookup; - type Header = Header; type RuntimeEvent = RuntimeEvent; type BlockHashCount = ConstU64<250>; type DbWeight = (); @@ -106,7 +101,7 @@ type MaxReserves = (); type ReserveIdentifier = [u8; 8]; type WeightInfo = (); - type HoldIdentifier = (); + type RuntimeHoldReason = RuntimeHoldReason; type FreezeIdentifier = (); type MaxHolds = (); type MaxFreezes = (); @@ -139,8 +134,8 @@ } pub fn new_test_ext() -> sp_io::TestExternalities { - let mut t = frame_system::GenesisConfig::default() - .build_storage::() + let mut t = >::default() + .build_storage() .unwrap(); pallet_balances::GenesisConfig:: { balances: vec![(1, 10), (2, 10), (3, 10), (10, 100), (20, 100), (30, 100)], --- a/pallets/identity/src/types.rs +++ b/pallets/identity/src/types.rs @@ -77,7 +77,9 @@ } impl Decode for Data { - fn decode(input: &mut I) -> sp_std::result::Result { + fn decode( + input: &mut I, + ) -> sp_std::result::Result { let b = input.read_byte()?; Ok(match b { 0 => Data::None, @@ -92,7 +94,7 @@ 35 => Data::Sha256(<[u8; 32]>::decode(input)?), 36 => Data::Keccak256(<[u8; 32]>::decode(input)?), 37 => Data::ShaThree256(<[u8; 32]>::decode(input)?), - _ => return Err(codec::Error::from("invalid leading byte")), + _ => return Err(parity_scale_codec::Error::from("invalid leading byte")), }) } } @@ -114,7 +116,7 @@ } } } -impl codec::EncodeLike for Data {} +impl parity_scale_codec::EncodeLike for Data {} /// Add a Raw variant with the given index and a fixed sized byte array macro_rules! data_raw_variants { @@ -284,7 +286,9 @@ } } impl Decode for IdentityFields { - fn decode(input: &mut I) -> sp_std::result::Result { + fn decode( + input: &mut I, + ) -> sp_std::result::Result { let field = u64::decode(input)?; Ok(Self( >::from_bits(field).map_err(|_| "invalid value")?, @@ -445,7 +449,9 @@ MaxAdditionalFields: Get, > Decode for Registration { - fn decode(input: &mut I) -> sp_std::result::Result { + fn decode( + input: &mut I, + ) -> sp_std::result::Result { let (judgements, deposit, info) = Decode::decode(&mut AppendZerosInput::new(input))?; Ok(Self { judgements, --- a/pallets/inflation/src/lib.rs +++ b/pallets/inflation/src/lib.rs @@ -73,11 +73,11 @@ type TreasuryAccountId: Get; // The block number provider - type BlockNumberProvider: BlockNumberProvider; + type BlockNumberProvider: BlockNumberProvider>; /// Number of blocks that pass between treasury balance updates due to inflation #[pallet::constant] - type InflationBlockInterval: Get; + type InflationBlockInterval: Get>; } #[pallet::pallet] @@ -95,22 +95,23 @@ /// Next target (relay) block when inflation will be applied #[pallet::storage] pub type NextInflationBlock = - StorageValue; + StorageValue, QueryKind = ValueQuery>; /// Next target (relay) block when inflation is recalculated #[pallet::storage] pub type NextRecalculationBlock = - StorageValue; + StorageValue, QueryKind = ValueQuery>; /// Relay block when inflation has started #[pallet::storage] - pub type StartBlock = StorageValue; + pub type StartBlock = + StorageValue, QueryKind = ValueQuery>; #[pallet::hooks] impl Hooks> for Pallet { - fn on_initialize(_: T::BlockNumber) -> Weight + fn on_initialize(_: BlockNumberFor) -> Weight where - ::BlockNumber: From, + BlockNumberFor: From, { let mut consumed_weight = Weight::zero(); let mut add_weight = |reads, writes, weight| { @@ -120,7 +121,7 @@ let block_interval: u32 = T::InflationBlockInterval::get().try_into().unwrap_or(0); let current_relay_block = T::BlockNumberProvider::current_block_number(); - let next_inflation: T::BlockNumber = >::get(); + let next_inflation: BlockNumberFor = >::get(); add_weight(1, 0, Weight::from_parts(5_000_000, 0)); // Apply inflation every InflationBlockInterval blocks @@ -129,7 +130,7 @@ // Recalculate inflation on the first block of the year (or if it is not initialized yet) // Do the "current_relay_block >= next_recalculation" check in the "current_relay_block >= next_inflation" // block because it saves InflationBlockInterval DB reads for NextRecalculationBlock. - let next_recalculation: T::BlockNumber = >::get(); + let next_recalculation: BlockNumberFor = >::get(); add_weight(1, 0, Weight::zero()); if current_relay_block >= next_recalculation { Self::recalculate_inflation(next_recalculation); @@ -169,10 +170,10 @@ #[pallet::weight(Weight::from_parts(0, 0))] pub fn start_inflation( origin: OriginFor, - inflation_start_relay_block: T::BlockNumber, + inflation_start_relay_block: BlockNumberFor, ) -> DispatchResult where - ::BlockNumber: From, + BlockNumberFor: From, { ensure_root(origin)?; @@ -200,9 +201,9 @@ } impl Pallet { - pub fn recalculate_inflation(recalculation_block: T::BlockNumber) { + pub fn recalculate_inflation(recalculation_block: BlockNumberFor) { let current_year: u32 = ((recalculation_block - >::get()) - / T::BlockNumber::from(YEAR)) + / BlockNumberFor::::from(YEAR)) .try_into() .unwrap_or(0); let block_interval: u32 = T::InflationBlockInterval::get().try_into().unwrap_or(0); --- a/pallets/inflation/src/tests.rs +++ b/pallets/inflation/src/tests.rs @@ -57,21 +57,16 @@ type MaxLocks = MaxLocks; type MaxReserves = (); type ReserveIdentifier = (); - type HoldIdentifier = (); type FreezeIdentifier = (); type MaxHolds = (); type MaxFreezes = (); } frame_support::construct_runtime!( - pub enum Test where - Block = Block, - NodeBlock = Block, - UncheckedExtrinsic = UncheckedExtrinsic, - { - Balances: pallet_balances::{Pallet, Call, Storage}, - System: frame_system::{Pallet, Call, Config, Storage, Event}, - Inflation: pallet_inflation::{Pallet, Call, Storage}, + pub enum Test { + Balances: pallet_balances, + System: frame_system, + Inflation: pallet_inflation, } ); @@ -89,13 +84,11 @@ type DbWeight = (); type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; - type Index = u64; - type BlockNumber = u64; + type Nonce = u64; type Hash = H256; type Hashing = BlakeTwo256; type AccountId = u64; type Lookup = IdentityLookup; - type Header = Header; type RuntimeEvent = (); type BlockHashCount = BlockHashCount; type Version = (); @@ -112,11 +105,11 @@ parameter_types! { pub TreasuryAccountId: u64 = 1234; pub const InflationBlockInterval: u32 = 100; // every time per how many blocks inflation is applied - pub static MockBlockNumberProvider: u64 = 0; + pub static MockBlockNumberProvider: u32 = 0; } impl BlockNumberProvider for MockBlockNumberProvider { - type BlockNumber = u64; + type BlockNumber = u32; fn current_block_number() -> Self::BlockNumber { Self::get() @@ -131,8 +124,8 @@ } pub fn new_test_ext() -> sp_io::TestExternalities { - frame_system::GenesisConfig::default() - .build_storage::() + >::default() + .build_storage() .unwrap() .into() } --- a/pallets/nonfungible/src/lib.rs +++ b/pallets/nonfungible/src/lib.rs @@ -90,37 +90,37 @@ #![cfg_attr(not(feature = "std"), no_std)] +use core::ops::Deref; + use erc::ERC721Events; use evm_coder::ToLog; use frame_support::{ - BoundedVec, ensure, fail, transactional, + dispatch::{Pays, PostDispatchInfo}, + ensure, fail, + pallet_prelude::*, storage::with_transaction, - pallet_prelude::DispatchResultWithPostInfo, - pallet_prelude::Weight, - dispatch::{PostDispatchInfo, Pays}, -}; -use up_data_structs::{ - AccessMode, CollectionId, CustomDataLimit, TokenId, CreateCollectionData, CreateNftExData, - mapping::TokenAddressMapping, budget::Budget, Property, PropertyKey, PropertyValue, - PropertyKeyPermission, PropertyScope, TokenChild, AuxPropertyValue, PropertiesPermissionMap, - TokenProperties as TokenPropertiesT, + transactional, BoundedVec, }; -use pallet_evm::{account::CrossAccountId, Pallet as PalletEvm}; +pub use pallet::*; use pallet_common::{ Error as CommonError, Pallet as PalletCommon, Event as CommonEvent, CollectionHandle, eth::collection_id_to_address, SelfWeightOf as PalletCommonWeightOf, weights::WeightInfo as CommonWeightInfo, helpers::add_weight_to_post_info, }; -use pallet_structure::{Pallet as PalletStructure, Error as StructureError}; +use pallet_evm::{account::CrossAccountId, Pallet as PalletEvm}; use pallet_evm_coder_substrate::{SubstrateRecorder, WithRecorder}; +use pallet_structure::{Error as StructureError, Pallet as PalletStructure}; +use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; +use scale_info::TypeInfo; use sp_core::{Get, H160}; use sp_runtime::{ArithmeticError, DispatchError, DispatchResult, TransactionOutcome}; -use sp_std::{vec::Vec, vec, collections::btree_map::BTreeMap}; -use core::ops::Deref; -use codec::{Encode, Decode, MaxEncodedLen}; -use scale_info::TypeInfo; - -pub use pallet::*; +use sp_std::{collections::btree_map::BTreeMap, vec, vec::Vec}; +use up_data_structs::{ + AccessMode, CollectionId, CustomDataLimit, TokenId, CreateCollectionData, CreateNftExData, + mapping::TokenAddressMapping, budget::Budget, Property, PropertyKey, PropertyValue, + PropertyKeyPermission, PropertyScope, TokenChild, AuxPropertyValue, PropertiesPermissionMap, + TokenProperties as TokenPropertiesT, +}; use weights::WeightInfo; #[cfg(feature = "runtime-benchmarks")] pub mod benchmarking; @@ -147,13 +147,13 @@ #[frame_support::pallet] pub mod pallet { - use super::*; use frame_support::{ - Blake2_128Concat, Twox64Concat, pallet_prelude::*, storage::Key, traits::StorageVersion, + pallet_prelude::*, storage::Key, traits::StorageVersion, Blake2_128Concat, Twox64Concat, }; use up_data_structs::{CollectionId, TokenId}; - use super::weights::WeightInfo; + use super::{weights::WeightInfo, *}; + #[pallet::error] pub enum Error { /// Not Nonfungible item data used to mint in Nonfungible collection. @@ -285,7 +285,6 @@ #[pallet::genesis_config] pub struct GenesisConfig(PhantomData); - #[cfg(feature = "std")] impl Default for GenesisConfig { fn default() -> Self { Self(Default::default()) @@ -293,7 +292,7 @@ } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { StorageVersion::new(1).put::>(); } --- a/pallets/unique/src/lib.rs +++ b/pallets/unique/src/lib.rs @@ -174,7 +174,7 @@ pub type CreateItemBasket = StorageMap< Hasher = Blake2_128Concat, Key = (CollectionId, T::AccountId), - Value = T::BlockNumber, + Value = BlockNumberFor, QueryKind = OptionQuery, >; /// Collection id (controlled?2), token id (controlled?2) @@ -185,7 +185,7 @@ Key1 = CollectionId, Hasher2 = Blake2_128Concat, Key2 = TokenId, - Value = T::BlockNumber, + Value = BlockNumberFor, QueryKind = OptionQuery, >; /// Collection id (controlled?2), owning user (real) @@ -196,7 +196,7 @@ Key1 = CollectionId, Hasher2 = Twox64Concat, Key2 = T::AccountId, - Value = T::BlockNumber, + Value = BlockNumberFor, QueryKind = OptionQuery, >; /// Collection id (controlled?2), token id (controlled?2) @@ -208,7 +208,7 @@ Key, Key, ), - Value = T::BlockNumber, + Value = BlockNumberFor, QueryKind = OptionQuery, >; //#endregion @@ -221,7 +221,7 @@ Key1 = CollectionId, Hasher2 = Blake2_128Concat, Key2 = TokenId, - Value = T::BlockNumber, + Value = BlockNumberFor, QueryKind = OptionQuery, >; @@ -233,7 +233,7 @@ Key1 = CollectionId, Hasher2 = Blake2_128Concat, Key2 = TokenId, - Value = T::BlockNumber, + Value = BlockNumberFor, QueryKind = OptionQuery, >; /// Last sponsoring of fungible tokens approval in a collection @@ -244,7 +244,7 @@ Key1 = CollectionId, Hasher2 = Twox64Concat, Key2 = T::AccountId, - Value = T::BlockNumber, + Value = BlockNumberFor, QueryKind = OptionQuery, >; /// Last sponsoring of RFT approval in a collection @@ -256,7 +256,7 @@ Key, Key, ), - Value = T::BlockNumber, + Value = BlockNumberFor, QueryKind = OptionQuery, >; --- a/primitives/common/src/constants.rs +++ b/primitives/common/src/constants.rs @@ -28,14 +28,14 @@ pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK; // These time units are defined in number of blocks. -pub const MINUTES: BlockNumber = 60_000 / (MILLISECS_PER_BLOCK as BlockNumber); -pub const HOURS: BlockNumber = MINUTES * 60; -pub const DAYS: BlockNumber = HOURS * 24; +pub const MINUTES: u32 = 60_000 / (MILLISECS_PER_BLOCK as u32); +pub const HOURS: u32 = MINUTES * 60; +pub const DAYS: u32 = HOURS * 24; // These time units are defined in number of relay blocks. -pub const RELAY_MINUTES: BlockNumber = 60_000 / (MILLISECS_PER_RELAY_BLOCK as BlockNumber); -pub const RELAY_HOURS: BlockNumber = RELAY_MINUTES * 60; -pub const RELAY_DAYS: BlockNumber = RELAY_HOURS * 24; +pub const RELAY_MINUTES: u32 = 60_000 / (MILLISECS_PER_RELAY_BLOCK as u32); +pub const RELAY_HOURS: u32 = RELAY_MINUTES * 60; +pub const RELAY_DAYS: u32 = RELAY_HOURS * 24; pub const MICROUNIQUE: Balance = 1_000_000_000_000; pub const MILLIUNIQUE: Balance = 1_000 * MICROUNIQUE; --- a/primitives/common/src/types.rs +++ b/primitives/common/src/types.rs @@ -37,10 +37,8 @@ Unknown(sp_std::vec::Vec), } - /// Opaque block header type. pub type Header = generic::Header; - /// Opaque block type. pub type Block = generic::Block; pub trait RuntimeInstance { @@ -71,7 +69,7 @@ pub type Balance = u128; /// Index of a transaction in the chain. -pub type Index = u32; +pub type Nonce = u32; /// A hash of some data used by the chain. pub type Hash = sp_core::H256; --- a/primitives/data-structs/src/bondrewd_codec.rs +++ b/primitives/data-structs/src/bondrewd_codec.rs @@ -5,12 +5,14 @@ macro_rules! bondrewd_codec { ($T:ty) => { impl Encode for $T { - fn encode_to(&self, dest: &mut O) { + fn encode_to(&self, dest: &mut O) { dest.write(&self.into_bytes()) } } - impl codec::Decode for $T { - fn decode(from: &mut I) -> Result { + impl parity_scale_codec::Decode for $T { + fn decode( + from: &mut I, + ) -> Result { let mut bytes = [0; Self::BYTE_SIZE]; from.read(&mut bytes)?; Ok(Self::from_bytes(bytes)) --- a/primitives/data-structs/src/bounded.rs +++ b/primitives/data-structs/src/bounded.rs @@ -26,13 +26,13 @@ }; /// [`serde`] implementations for [`BoundedVec`]. -#[cfg(feature = "serde1")] pub mod vec_serde { use core::convert::TryFrom; - use frame_support::{BoundedVec, traits::Get}; + + use frame_support::{traits::Get, BoundedVec}; use serde::{ - ser::{self, Serialize}, de::{self, Deserialize, Error}, + ser::{self, Serialize}, }; use sp_std::vec::Vec; @@ -66,17 +66,17 @@ (v as &Vec).fmt(f) } -#[cfg(feature = "serde1")] #[allow(dead_code)] /// [`serde`] implementations for [`BoundedBTreeMap`]. pub mod map_serde { use core::convert::TryFrom; - use sp_std::collections::btree_map::BTreeMap; - use frame_support::{traits::Get, storage::bounded_btree_map::BoundedBTreeMap}; + + use frame_support::{storage::bounded_btree_map::BoundedBTreeMap, traits::Get}; use serde::{ + de::{self, Deserialize, Error}, ser::{self, Serialize}, - de::{self, Deserialize, Error}, }; + use sp_std::collections::btree_map::BTreeMap; pub fn serialize( value: &BoundedBTreeMap, serializer: D, @@ -117,17 +117,17 @@ (v as &BTreeMap).fmt(f) } -#[cfg(feature = "serde1")] #[allow(dead_code)] /// [`serde`] implementations for [`BoundedBTreeSet`]. pub mod set_serde { use core::convert::TryFrom; - use sp_std::collections::btree_set::BTreeSet; - use frame_support::{traits::Get, storage::bounded_btree_set::BoundedBTreeSet}; + + use frame_support::{storage::bounded_btree_set::BoundedBTreeSet, traits::Get}; use serde::{ - ser::{self, Serialize}, de::{self, Deserialize, Error}, + ser::{self, Serialize}, }; + use sp_std::collections::btree_set::BTreeSet; pub fn serialize( value: &BoundedBTreeSet, serializer: D, --- a/primitives/data-structs/src/lib.rs +++ b/primitives/data-structs/src/lib.rs @@ -153,8 +153,9 @@ Default, TypeInfo, MaxEncodedLen, + Serialize, + Deserialize, )] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] pub struct CollectionId(pub u32); impl EncodeLike for CollectionId {} impl EncodeLike for u32 {} @@ -187,8 +188,9 @@ Default, TypeInfo, MaxEncodedLen, + Serialize, + Deserialize, )] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] pub struct TokenId(pub u32); impl EncodeLike for TokenId {} impl EncodeLike for u32 {} @@ -221,8 +223,7 @@ /// Token data. #[struct_versioning::versioned(version = 2, upper)] -#[derive(Encode, Decode, Clone, PartialEq, TypeInfo)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive(Encode, Decode, Clone, PartialEq, TypeInfo, Serialize, Deserialize)] pub struct TokenData { /// Properties of token. pub properties: Vec, @@ -251,8 +252,9 @@ /// Collection can represent various types of tokens. /// Each collection can contain only one type of tokens at a time. /// This type helps to understand which tokens the collection contains. -#[derive(Encode, Decode, Eq, Debug, Clone, PartialEq, TypeInfo, MaxEncodedLen)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive( + Encode, Decode, Eq, Debug, Clone, PartialEq, TypeInfo, MaxEncodedLen, Serialize, Deserialize, +)] pub enum CollectionMode { /// Non fungible tokens. NFT, @@ -279,8 +281,19 @@ } /// Access mode for some token operations. -#[derive(Encode, Decode, Eq, Debug, Clone, Copy, PartialEq, TypeInfo, MaxEncodedLen)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive( + Encode, + Decode, + Eq, + Debug, + Clone, + Copy, + PartialEq, + TypeInfo, + MaxEncodedLen, + Serialize, + Deserialize, +)] pub enum AccessMode { /// Access grant for owner and admins. Used as default. Normal, @@ -294,8 +307,9 @@ } // TODO: remove in future. -#[derive(Encode, Decode, Eq, Debug, Clone, PartialEq, TypeInfo, MaxEncodedLen)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive( + Encode, Decode, Eq, Debug, Clone, PartialEq, TypeInfo, MaxEncodedLen, Serialize, Deserialize, +)] pub enum SchemaVersion { ImageURL, Unique, @@ -307,16 +321,16 @@ } // TODO: unused type -#[derive(Encode, Decode, Default, Debug, Clone, PartialEq, TypeInfo)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive(Encode, Decode, Default, Debug, Clone, PartialEq, TypeInfo, Serialize, Deserialize)] pub struct Ownership { pub owner: AccountId, pub fraction: u128, } /// The state of collection sponsorship. -#[derive(Encode, Decode, Debug, Clone, PartialEq, TypeInfo, MaxEncodedLen)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive( + Encode, Decode, Debug, Clone, PartialEq, TypeInfo, MaxEncodedLen, Serialize, Deserialize, +)] pub enum SponsorshipState { /// The fees are applied to the transaction sender. Disabled, @@ -444,8 +458,7 @@ pub meta_update_permission: MetaUpdatePermission, } -#[derive(Debug, Encode, Decode, Clone, PartialEq, TypeInfo)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive(Debug, Encode, Decode, Clone, PartialEq, TypeInfo, Serialize, Deserialize)] pub struct RpcCollectionFlags { /// Is collection is foreign. pub foreign: bool, @@ -455,8 +468,7 @@ /// Collection parameters, used in RPC calls (see [`Collection`] for the storage version). #[struct_versioning::versioned(version = 2, upper)] -#[derive(Debug, Encode, Decode, Clone, PartialEq, TypeInfo)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive(Debug, Encode, Decode, Clone, PartialEq, TypeInfo, Serialize, Deserialize)] pub struct RpcCollection { /// Collection owner account. pub owner: AccountId, @@ -538,8 +550,10 @@ pub struct RawEncoded(Vec); -impl codec::Decode for RawEncoded { - fn decode(input: &mut I) -> Result { +impl parity_scale_codec::Decode for RawEncoded { + fn decode( + input: &mut I, + ) -> Result { let mut out = Vec::new(); while let Ok(v) = input.read_byte() { out.push(v); @@ -612,8 +626,18 @@ /// /// Update with `pallet_common::Pallet::clamp_limits`. // IMPORTANT: When adding/removing fields from this struct - don't forget to also -#[derive(Encode, Decode, Debug, Default, Clone, PartialEq, TypeInfo, MaxEncodedLen)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive( + Encode, + Decode, + Debug, + Default, + Clone, + PartialEq, + TypeInfo, + MaxEncodedLen, + Serialize, + Deserialize, +)] // When adding/removing fields from this struct - don't forget to also update with `pallet_common::Pallet::clamp_limits`. // TODO: move `pallet_common::Pallet::clamp_limits` into `impl CollectionLimits`. // TODO: may be remove [`Option`] and **pub** from fields and create struct with default values. @@ -769,8 +793,18 @@ /// Some fields are wrapped in [`Option`], where `None` means chain default. /// /// Update with `pallet_common::Pallet::clamp_permissions`. -#[derive(Encode, Decode, Debug, Default, Clone, PartialEq, TypeInfo, MaxEncodedLen)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive( + Encode, + Decode, + Debug, + Default, + Clone, + PartialEq, + TypeInfo, + MaxEncodedLen, + Serialize, + Deserialize, +)] // When adding/removing fields from this struct - don't forget to also update `pallet_common::Pallet::clamp_permissions`. // TODO: move `pallet_common::Pallet::clamp_permissions` into `impl CollectionPermissions`. pub struct CollectionPermissions { @@ -821,11 +855,12 @@ type OwnerRestrictedSetInner = BoundedBTreeSet>; /// Wraper for collections set allowing nest. -#[derive(Encode, Decode, Clone, PartialEq, TypeInfo, MaxEncodedLen, Derivative)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive( + Encode, Decode, Clone, PartialEq, TypeInfo, MaxEncodedLen, Derivative, Serialize, Deserialize, +)] #[derivative(Debug)] pub struct OwnerRestrictedSet( - #[cfg_attr(feature = "serde1", serde(with = "bounded::set_serde"))] + #[serde(with = "bounded::set_serde")] #[derivative(Debug(format_with = "bounded::set_debug"))] pub OwnerRestrictedSetInner, ); @@ -862,8 +897,9 @@ } /// Part of collection permissions, if set, defines who is able to nest tokens into other tokens. -#[derive(Encode, Decode, Clone, PartialEq, TypeInfo, MaxEncodedLen, Derivative)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive( + Encode, Decode, Clone, PartialEq, TypeInfo, MaxEncodedLen, Derivative, Serialize, Deserialize, +)] #[derivative(Debug)] pub struct NestingPermissions { /// Owner of token can nest tokens under it. @@ -881,8 +917,9 @@ /// Enum denominating how often can sponsoring occur if it is enabled. /// /// Used for [`collection limits`](CollectionLimits). -#[derive(Encode, Decode, Debug, Clone, Copy, PartialEq, TypeInfo, MaxEncodedLen)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive( + Encode, Decode, Debug, Clone, Copy, PartialEq, TypeInfo, MaxEncodedLen, Serialize, Deserialize, +)] pub enum SponsoringRateLimit { /// Sponsoring is disabled, and the collection sponsor will not pay for transactions SponsoringDisabled, @@ -891,42 +928,73 @@ } /// Data used to describe an NFT at creation. -#[derive(Encode, Decode, MaxEncodedLen, Default, PartialEq, Clone, Derivative, TypeInfo)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive( + Encode, + Decode, + MaxEncodedLen, + Default, + PartialEq, + Clone, + Derivative, + TypeInfo, + Serialize, + Deserialize, +)] #[derivative(Debug)] pub struct CreateNftData { /// Key-value pairs used to describe the token as metadata - #[cfg_attr(feature = "serde1", serde(with = "bounded::vec_serde"))] + #[serde(with = "bounded::vec_serde")] #[derivative(Debug(format_with = "bounded::vec_debug"))] /// Properties that wil be assignet to created item. pub properties: CollectionPropertiesVec, } /// Data used to describe a Fungible token at creation. -#[derive(Encode, Decode, MaxEncodedLen, Default, Debug, Clone, PartialEq, TypeInfo)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive( + Encode, + Decode, + MaxEncodedLen, + Default, + Debug, + Clone, + PartialEq, + TypeInfo, + Serialize, + Deserialize, +)] pub struct CreateFungibleData { /// Number of fungible coins minted pub value: u128, } /// Data used to describe a Refungible token at creation. -#[derive(Encode, Decode, MaxEncodedLen, Default, PartialEq, Clone, Derivative, TypeInfo)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive( + Encode, + Decode, + MaxEncodedLen, + Default, + PartialEq, + Clone, + Derivative, + TypeInfo, + Serialize, + Deserialize, +)] #[derivative(Debug)] pub struct CreateReFungibleData { /// Number of pieces the RFT is split into pub pieces: u128, /// Key-value pairs used to describe the token as metadata - #[cfg_attr(feature = "serde1", serde(with = "bounded::vec_serde"))] + #[serde(with = "bounded::vec_serde")] #[derivative(Debug(format_with = "bounded::vec_debug"))] pub properties: CollectionPropertiesVec, } // TODO: remove this. -#[derive(Encode, Decode, Debug, Clone, PartialEq, TypeInfo, MaxEncodedLen)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive( + Encode, Decode, Debug, Clone, PartialEq, TypeInfo, MaxEncodedLen, Serialize, Deserialize, +)] pub enum MetaUpdatePermission { ItemOwner, Admin, @@ -935,8 +1003,9 @@ /// Enum holding data used for creation of all three item types. /// Unified data for create item. -#[derive(Encode, Decode, MaxEncodedLen, PartialEq, Clone, Debug, TypeInfo)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive( + Encode, Decode, MaxEncodedLen, PartialEq, Clone, Debug, TypeInfo, Serialize, Deserialize, +)] pub enum CreateItemData { /// Data for create NFT. NFT(CreateNftData), @@ -1025,8 +1094,9 @@ } /// Token's address, dictated by its collection and token IDs. -#[derive(Encode, Decode, MaxEncodedLen, PartialEq, Clone, Debug, TypeInfo)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive( + Encode, Decode, MaxEncodedLen, PartialEq, Clone, Debug, TypeInfo, Serialize, Deserialize, +)] // todo possibly rename to be used generally as an address pair pub struct TokenChild { /// Token id. @@ -1037,8 +1107,9 @@ } /// Collection statistics. -#[derive(Encode, Decode, MaxEncodedLen, PartialEq, Clone, Debug, TypeInfo)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive( + Encode, Decode, MaxEncodedLen, PartialEq, Clone, Debug, TypeInfo, Serialize, Deserialize, +)] pub struct CollectionStats { /// Number of created items. pub created: u32, @@ -1060,10 +1131,9 @@ fn type_info() -> scale_info::Type { use scale_info::{ - Type, Path, build::{FieldsBuilder, UnnamedFields}, form::MetaForm, - type_params, + type_params, Path, Type, }; Type::builder() .path(Path::new("up_data_structs", "PhantomType")) @@ -1092,8 +1162,18 @@ pub type PropertyValue = BoundedBytes>; /// Property permission. -#[derive(Encode, Decode, TypeInfo, Debug, MaxEncodedLen, PartialEq, Clone, Default)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive( + Encode, + Decode, + TypeInfo, + Debug, + MaxEncodedLen, + PartialEq, + Clone, + Default, + Serialize, + Deserialize, +)] pub struct PropertyPermission { /// Permission to change the property and property permission. /// @@ -1119,15 +1199,16 @@ } /// Property is simpl key-value record. -#[derive(Encode, Decode, Debug, TypeInfo, Clone, PartialEq, MaxEncodedLen)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive( + Encode, Decode, Debug, TypeInfo, Clone, PartialEq, MaxEncodedLen, Serialize, Deserialize, +)] pub struct Property { /// Property key. - #[cfg_attr(feature = "serde1", serde(with = "bounded::vec_serde"))] + #[serde(with = "bounded::vec_serde")] pub key: PropertyKey, /// Property value. - #[cfg_attr(feature = "serde1", serde(with = "bounded::vec_serde"))] + #[serde(with = "bounded::vec_serde")] pub value: PropertyValue, } @@ -1138,8 +1219,9 @@ } /// Record for proprty key permission. -#[derive(Encode, Decode, TypeInfo, Debug, MaxEncodedLen, PartialEq, Clone)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] +#[derive( + Encode, Decode, TypeInfo, Debug, MaxEncodedLen, PartialEq, Clone, Serialize, Deserialize, +)] pub struct PropertyKeyPermission { /// Key. #[cfg_attr(feature = "serde1", serde(with = "bounded::vec_serde"))] @@ -1362,7 +1444,7 @@ scoped_slice_size(PropertyScope::None, data) } fn scoped_slice_size(scope: PropertyScope, data: &[u8]) -> u32 { - use codec::Compact; + use parity_scale_codec::Compact; let prefix = scope.prefix(); >::encoded_size(&Compact(data.len() as u32 + prefix.len() as u32)) as u32 + data.len() as u32 --- a/primitives/rpc/src/lib.rs +++ b/primitives/rpc/src/lib.rs @@ -82,7 +82,7 @@ collection: CollectionId, token_id: TokenId, keys: Option>> - ) -> Result>; + ) -> Result>; /// Total number of tokens in collection. fn total_supply(collection: CollectionId) -> Result; @@ -117,7 +117,7 @@ fn collection_by_id(collection: CollectionId) -> Result>>; #[changed_in(3)] - fn collection_by_id(collection: CollectionId) -> Result>; + fn collection_by_id(collection: CollectionId) -> Result>; /// Get collection stats. fn collection_stats() -> Result; --- a/runtime/common/config/pallets/collator_selection.rs +++ b/runtime/common/config/pallets/collator_selection.rs @@ -107,6 +107,7 @@ impl pallet_collator_selection::Config for Runtime { type RuntimeEvent = RuntimeEvent; + type RuntimeHoldReason = RuntimeHoldReason; type Currency = Balances; // We allow root only to execute privileged collator selection operations. @@ -128,7 +129,6 @@ type ValidatorIdOf = pallet_collator_selection::IdentityCollator; type ValidatorRegistration = Session; type WeightInfo = pallet_collator_selection::weights::SubstrateWeight; - type LicenceBondIdentifier = LicenceBondIdentifier; type DesiredCollators = DesiredCollators; type LicenseBond = LicenseBond; type KickThreshold = KickThreshold; --- a/runtime/common/config/substrate.rs +++ b/runtime/common/config/substrate.rs @@ -76,10 +76,10 @@ type BaseCallFilter = Everything; /// Maximum number of block number to block hash mappings to keep (oldest pruned first). type BlockHashCount = BlockHashCount; + /// The block type. + type Block = Block; /// The maximum length of a block (in bytes). type BlockLength = RuntimeBlockLength; - /// The index type for blocks. - type BlockNumber = BlockNumber; /// The weight of the overhead invoked on the block import process, independent of the extrinsics included in that block. type BlockWeights = RuntimeBlockWeights; /// The aggregated dispatch type that is available for extrinsics. @@ -92,10 +92,8 @@ type Hash = Hash; /// The hashing algorithm used. type Hashing = BlakeTwo256; - /// The header type. - type Header = generic::Header; /// The index type for storing how many extrinsics an account has signed. - type Index = Index; + type Nonce = Nonce; /// The lookup mechanism to get account ID from whatever is passed in dispatchers. type Lookup = AccountIdLookup; /// What to do if an account is fully reaped from the system. @@ -171,7 +169,7 @@ type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type WeightInfo = pallet_balances::weights::SubstrateWeight; - type HoldIdentifier = [u8; 16]; + type RuntimeHoldReason = RuntimeHoldReason; type FreezeIdentifier = [u8; 16]; type MaxHolds = MaxHolds; type MaxFreezes = MaxFreezes; @@ -247,6 +245,7 @@ type AuthorityId = AuraId; type DisabledValidators = (); type MaxAuthorities = MaxAuthorities; + type AllowMultipleBlocksPerSlot = ConstBool; } impl pallet_utility::Config for Runtime { --- a/runtime/common/config/xcm/foreignassets.rs +++ b/runtime/common/config/xcm/foreignassets.rs @@ -36,17 +36,11 @@ pub CheckingAccount: AccountId = PolkadotXcm::check_account(); } -pub struct AsInnerId(PhantomData<(AssetId, ConvertAssetId)>); -impl> - ConvertXcm for AsInnerId -where - AssetId: Borrow, - AssetId: TryAsForeign, - AssetIds: Borrow, +pub struct AsInnerId(PhantomData<(AssetId, ConvertAssetId)>); +impl> MaybeEquivalence + for AsInnerId { - fn convert_ref(id: impl Borrow) -> Result { - let id = id.borrow(); - + fn convert(id: &MultiLocation) -> Option { log::trace!( target: "xcm::AsInnerId::Convert", "AsInnerId {:?}", @@ -58,52 +52,46 @@ let self_location = MultiLocation::new(1, X1(Parachain(ParachainInfo::get().into()))); if *id == parent { - return ConvertAssetId::convert_ref(AssetIds::NativeAssetId(NativeCurrency::Parent)); + return ConvertAssetId::convert(&AssetId::NativeAssetId(NativeCurrency::Parent)); } if *id == here || *id == self_location { - return ConvertAssetId::convert_ref(AssetIds::NativeAssetId(NativeCurrency::Here)); + return ConvertAssetId::convert(&AssetId::NativeAssetId(NativeCurrency::Here)); } match XcmForeignAssetIdMapping::::get_currency_id(*id) { - Some(AssetIds::ForeignAssetId(foreign_asset_id)) => { - ConvertAssetId::convert_ref(AssetIds::ForeignAssetId(foreign_asset_id)) + Some(AssetId::ForeignAssetId(foreign_asset_id)) => { + ConvertAssetId::convert(&AssetId::ForeignAssetId(foreign_asset_id)) } - _ => Err(()), + _ => None, } } - fn reverse_ref(what: impl Borrow) -> Result { + fn convert_back(asset_id: &AssetId) -> Option { log::trace!( target: "xcm::AsInnerId::Reverse", "AsInnerId", ); - - let asset_id = what.borrow(); let parent_id = - ConvertAssetId::convert_ref(AssetIds::NativeAssetId(NativeCurrency::Parent)).unwrap(); + ConvertAssetId::convert(&AssetId::NativeAssetId(NativeCurrency::Parent)).unwrap(); let here_id = - ConvertAssetId::convert_ref(AssetIds::NativeAssetId(NativeCurrency::Here)).unwrap(); + ConvertAssetId::convert(&AssetId::NativeAssetId(NativeCurrency::Here)).unwrap(); if asset_id.clone() == parent_id { - return Ok(MultiLocation::parent()); + return Some(MultiLocation::parent()); } if asset_id.clone() == here_id { - return Ok(MultiLocation::new( + return Some(MultiLocation::new( 1, X1(Parachain(ParachainInfo::get().into())), )); } - match >::try_as_foreign(asset_id.clone()) { - Some(fid) => match XcmForeignAssetIdMapping::::get_multi_location(fid) { - Some(location) => Ok(location), - None => Err(()), - }, - None => Err(()), - } + let fid = + >::try_as_foreign(asset_id.clone())?; + XcmForeignAssetIdMapping::::get_multi_location(fid) } } @@ -112,7 +100,7 @@ // Use this fungibles implementation: ForeignAssets, // Use this currency when it is a fungible asset matching the given location or name: - ConvertedConcreteId, JustTry>, + ConvertedConcreteId, JustTry>, // Convert an XCM MultiLocation into a local account id: LocationToAccountId, // Our chain's account ID type (we can't get away without mentioning it explicitly): @@ -154,7 +142,7 @@ what: &MultiAsset, who: &MultiLocation, maybe_context: Option<&XcmContext>, - ) -> Result { + ) -> Result { FungiblesTransactor::withdraw_asset(what, who, maybe_context) } @@ -163,7 +151,7 @@ from: &MultiLocation, to: &MultiLocation, context: &XcmContext, - ) -> Result { + ) -> Result { FungiblesTransactor::internal_transfer_asset(what, from, to, context) } } @@ -179,15 +167,15 @@ >; pub struct CurrencyIdConvert; -impl Convert> for CurrencyIdConvert { - fn convert(id: AssetIds) -> Option { +impl Convert> for CurrencyIdConvert { + fn convert(id: AssetId) -> Option { match id { - AssetIds::NativeAssetId(NativeCurrency::Here) => Some(MultiLocation::new( + AssetId::NativeAssetId(NativeCurrency::Here) => Some(MultiLocation::new( 1, X1(Parachain(ParachainInfo::get().into())), )), - AssetIds::NativeAssetId(NativeCurrency::Parent) => Some(MultiLocation::parent()), - AssetIds::ForeignAssetId(foreign_asset_id) => { + AssetId::NativeAssetId(NativeCurrency::Parent) => Some(MultiLocation::parent()), + AssetId::ForeignAssetId(foreign_asset_id) => { XcmForeignAssetIdMapping::::get_multi_location(foreign_asset_id) } } @@ -199,11 +187,11 @@ if location == MultiLocation::here() || location == MultiLocation::new(1, X1(Parachain(ParachainInfo::get().into()))) { - return Some(AssetIds::NativeAssetId(NativeCurrency::Here)); + return Some(AssetId::NativeAssetId(NativeCurrency::Here)); } if location == MultiLocation::parent() { - return Some(AssetIds::NativeAssetId(NativeCurrency::Parent)); + return Some(AssetId::NativeAssetId(NativeCurrency::Parent)); } if let Some(currency_id) = XcmForeignAssetIdMapping::::get_currency_id(location) { --- a/runtime/common/config/xcm/mod.rs +++ b/runtime/common/config/xcm/mod.rs @@ -153,10 +153,10 @@ origin: &MultiLocation, message: &mut [Instruction], max_weight: Weight, - weight_credit: &mut Weight, + properties: &mut Properties, ) -> Result<(), ProcessMessageError> { Deny::try_pass(origin, message)?; - Allow::should_execute(origin, message, max_weight, weight_credit) + Allow::should_execute(origin, message, max_weight, properties) } } @@ -211,7 +211,7 @@ } pub struct XcmExecutorConfig(PhantomData); -impl xcm_executor::Config for XcmExecutorConfig +impl staging_xcm_executor::Config for XcmExecutorConfig where T: pallet_configuration::Config, { @@ -240,6 +240,7 @@ type UniversalAliases = Nothing; type CallDispatcher = RuntimeCall; type SafeCallFilter = XcmCallFilter; + type Aliasers = Nothing; } #[cfg(feature = "runtime-benchmarks")] --- a/runtime/common/config/xcm/nativeassets.rs +++ b/runtime/common/config/xcm/nativeassets.rs @@ -106,7 +106,12 @@ Self(Weight::from_parts(0, 0), Zero::zero(), PhantomData) } - fn buy_weight(&mut self, _weight: Weight, payment: Assets) -> Result { + fn buy_weight( + &mut self, + _weight: Weight, + payment: Assets, + _xcm: &XcmContext, + ) -> Result { Ok(payment) } } --- a/runtime/common/construct_runtime.rs +++ b/runtime/common/construct_runtime.rs @@ -19,11 +19,7 @@ () => { frame_support::construct_runtime! { - pub enum Runtime where - Block = Block, - NodeBlock = opaque::Block, - UncheckedExtrinsic = UncheckedExtrinsic - { + pub enum Runtime { System: frame_system = 0, StateTrieMigration: pallet_state_trie_migration = 1, --- a/runtime/common/mod.rs +++ b/runtime/common/mod.rs @@ -63,12 +63,15 @@ /// The address format for describing accounts. pub type Address = sp_runtime::MultiAddress; -/// Block header type as expected by this runtime. -pub type Header = generic::Header; -/// Block type as expected by this runtime. -pub type Block = generic::Block; /// A Block signed with a Justification pub type SignedBlock = generic::SignedBlock; +/// Frontier wrapped extrinsic +pub type UncheckedExtrinsic = + fp_self_contained::UncheckedExtrinsic; +/// Header type. +pub type Header = generic::Header; +/// Block type. +pub type Block = generic::Block; /// BlockId type as expected by this runtime. pub type BlockId = generic::BlockId; @@ -102,14 +105,6 @@ //pallet_contract_helpers::ContractHelpersExtension, pallet_ethereum::FakeTransactionFinalizer, ); - -/// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = - fp_self_contained::UncheckedExtrinsic; - -/// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = - fp_self_contained::CheckedExtrinsic; /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< --- a/runtime/common/sponsoring.rs +++ b/runtime/common/sponsoring.rs @@ -79,7 +79,7 @@ return None; } - let block_number = >::block_number() as T::BlockNumber; + let block_number = >::block_number() as BlockNumberFor; let limit = collection.limits.sponsored_data_rate_limit()?; if let Some(last_tx_block) = TokenPropertyBasket::::get(collection.id, item_id) { @@ -123,7 +123,7 @@ } // sponsor timeout - let block_number = >::block_number() as T::BlockNumber; + let block_number = >::block_number() as BlockNumberFor; let limit = collection .limits .sponsor_transfer_timeout(match collection.mode { @@ -169,7 +169,7 @@ properties: &CreateItemData, ) -> Option<()> { // sponsor timeout - let block_number = >::block_number() as T::BlockNumber; + let block_number = >::block_number() as BlockNumberFor; let limit = collection .limits .sponsor_transfer_timeout(match properties { @@ -195,7 +195,7 @@ item_id: &TokenId, ) -> Option<()> { // sponsor timeout - let block_number = >::block_number() as T::BlockNumber; + let block_number = >::block_number() as BlockNumberFor; let limit = collection.limits.sponsor_approve_timeout(); let last_tx_block = match collection.mode { @@ -307,7 +307,7 @@ pub trait SponsorshipPredict { fn predict(collection: CollectionId, account: T::CrossAccountId, token: TokenId) -> Option where - u64: From<::BlockNumber>; + u64: From>; } pub struct UniqueSponsorshipPredict(PhantomData); @@ -315,13 +315,13 @@ impl SponsorshipPredict for UniqueSponsorshipPredict { fn predict(collection_id: CollectionId, who: T::CrossAccountId, token: TokenId) -> Option where - u64: From<::BlockNumber>, + u64: From>, { let collection = >::try_get(collection_id).ok()?; let _ = collection.sponsorship.sponsor()?; // sponsor timeout - let block_number = >::block_number() as T::BlockNumber; + let block_number = >::block_number() as BlockNumberFor; let limit = collection .limits .sponsor_transfer_timeout(match collection.mode { --- a/runtime/common/tests/mod.rs +++ b/runtime/common/tests/mod.rs @@ -51,8 +51,8 @@ fn new_test_ext(balances: Vec<(AccountId, Balance)>) -> sp_io::TestExternalities { let mut storage = make_basic_storage(); - pallet_balances::GenesisConfig:: { balances } - .assimilate_storage(&mut storage) + pallet_balances::BuildGenesisConfig:: { balances } + .build_storage(&mut storage) .unwrap(); let mut ext = sp_io::TestExternalities::new(storage); @@ -94,13 +94,14 @@ .map(|acc| get_account_id_from_seed::(acc)) .collect::>(); - let cfg = GenesisConfig { + let cfg = BuildGenesisConfig { collator_selection: CollatorSelectionConfig { invulnerables }, session: SessionConfig { keys }, parachain_info: ParachainInfoConfig { parachain_id: PARA_ID.into(), + ..Default::default() }, - ..GenesisConfig::default() + ..Default::default() }; cfg.build_storage().unwrap() @@ -110,7 +111,7 @@ fn make_basic_storage() -> Storage { use crate::AuraConfig; - let cfg = GenesisConfig { + let cfg = BuildGenesisConfig { aura: AuraConfig { authorities: vec![ get_from_seed::("Alice"), @@ -119,8 +120,9 @@ }, parachain_info: ParachainInfoConfig { parachain_id: PARA_ID.into(), + ..Default::default() }, - ..GenesisConfig::default() + ..Default::default() }; cfg.build_storage().unwrap().into() --- a/runtime/tests/src/lib.rs +++ b/runtime/tests/src/lib.rs @@ -57,23 +57,19 @@ // Configure a mock runtime to test the pallet. frame_support::construct_runtime!( - pub enum Test where - Block = Block, - NodeBlock = Block, - UncheckedExtrinsic = UncheckedExtrinsic, - { + pub enum Test { System: frame_system, Timestamp: pallet_timestamp, - Unique: pallet_unique::{Pallet, Call, Storage}, - Balances: pallet_balances::{Pallet, Call, Storage, Event}, - Common: pallet_common::{Pallet, Storage, Event}, - Fungible: pallet_fungible::{Pallet, Storage}, - Refungible: pallet_refungible::{Pallet, Storage}, - Nonfungible: pallet_nonfungible::{Pallet, Storage}, - Structure: pallet_structure::{Pallet, Storage, Event}, - TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event}, - Ethereum: pallet_ethereum::{Pallet, Config, Call, Storage, Event, Origin}, - EVM: pallet_evm::{Pallet, Config, Call, Storage, Event}, + Unique: pallet_unique, + Balances: pallet_balances, + Common: pallet_common, + Fungible: pallet_fungible, + Refungible: pallet_refungible, + Nonfungible: pallet_nonfungible, + Structure: pallet_structure, + TransactionPayment: pallet_transaction_payment, + Ethereum: pallet_ethereum, + EVM: pallet_evm, } ); @@ -90,13 +86,11 @@ type DbWeight = (); type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; - type Index = u64; - type BlockNumber = u64; + type Nonce = u64; type Hash = H256; type Hashing = BlakeTwo256; type AccountId = u64; type Lookup = IdentityLookup; - type Header = Header; type BlockHashCount = BlockHashCount; type Version = (); type PalletInfo = PalletInfo; @@ -127,7 +121,6 @@ type MaxFreezes = MaxLocks; type FreezeIdentifier = [u8; 8]; type MaxHolds = MaxLocks; - type HoldIdentifier = [u8; 8]; } parameter_types! { @@ -242,7 +235,6 @@ type OnChargeTransaction = (); type FindAuthor = (); type BlockHashMapping = SubstrateBlockHashMapping; - type TransactionValidityHack = (); type Timestamp = Timestamp; type GasLimitPovSizeRatio = ConstU64<0>; } -- gitstuff