From f2e8b2f0434c1c366fdda08c79a07a03f3f7547a Mon Sep 17 00:00:00 2001 From: Kurdistan Tech Ministry Date: Fri, 19 Dec 2025 03:17:14 +0300 Subject: [PATCH] fix: resolve pezsp_runtime visibility issues across workspace - Add direct pezsp-runtime dependency to crates requiring pezsp_runtime types - Update imports to use pezkuwi_sdk:: prefix for primitive crates - Fix subxt_client.rs substitute_type paths to match rebranded metadata - Update umbrella crate with additional feature exports - Fix pezstaging-node-cli, pez-minimal-template-node, teyrchain templates - Delete stale sqlx query cache files (require regeneration with running chain) --- Cargo.lock | 8 ++++ bizinikiwi/bin/node/cli/Cargo.toml | 14 ++++++ bizinikiwi/bin/node/cli/src/service.rs | 43 ++++++++++-------- bizinikiwi/bin/node/runtime/Cargo.toml | 2 +- bizinikiwi/bin/node/runtime/src/lib.rs | 9 ++-- .../pezframe/revive/dev-node/node/Cargo.toml | 13 +++++- .../revive/dev-node/node/src/chain_spec.rs | 2 +- .../pezframe/revive/dev-node/node/src/rpc.rs | 4 +- .../revive/dev-node/node/src/service.rs | 12 ++--- ...82baef86a7c3d3469873a205805ef342ba031.json | 20 -------- ...bd61d257d1ffad222317634327e12be403ab2.json | 20 -------- ...a07ace0c67849e5b20c92532d7a77861ebf80.json | 12 ----- ...abae1ae43ffba0920a9d209d01dcfce44c5e0.json | 20 -------- .../revive/rpc/revive_chain.scale.bak | Bin 0 -> 124108 bytes .../pezframe/revive/rpc/src/subxt_client.rs | 26 +++++++++++ .../pezframe/staking/reward-curve/src/lib.rs | 8 +--- .../testing/yet-another-teyrchain/Cargo.toml | 22 +++++++++ .../src/genesis_config_presets.rs | 2 +- .../zombienet-sdk-helpers/src/lib.rs | 6 +-- templates/minimal/node/Cargo.toml | 13 +++++- templates/minimal/node/src/chain_spec.rs | 2 +- templates/minimal/node/src/rpc.rs | 4 +- templates/minimal/node/src/service.rs | 8 ++-- templates/minimal/runtime/Cargo.toml | 2 + templates/teyrchain/node/Cargo.toml | 7 ++- templates/teyrchain/node/src/command.rs | 1 + templates/teyrchain/node/src/service.rs | 6 +-- templates/teyrchain/runtime/Cargo.toml | 21 +++++++++ .../runtime/src/genesis_config_presets.rs | 6 +-- templates/teyrchain/runtime/src/lib.rs | 4 +- umbrella/Cargo.toml | 16 +++++++ umbrella/src/lib.rs | 4 ++ 32 files changed, 201 insertions(+), 136 deletions(-) delete mode 100644 bizinikiwi/pezframe/revive/rpc/.sqlx/query-47b830cef6768ed5b119c74037482baef86a7c3d3469873a205805ef342ba031.json delete mode 100644 bizinikiwi/pezframe/revive/rpc/.sqlx/query-7e5be81ad6f5d96bc6dbf62098cbd61d257d1ffad222317634327e12be403ab2.json delete mode 100644 bizinikiwi/pezframe/revive/rpc/.sqlx/query-cf515b47790a2ac4b3802c29e36a07ace0c67849e5b20c92532d7a77861ebf80.json delete mode 100644 bizinikiwi/pezframe/revive/rpc/.sqlx/query-e712acbeb712c0a61fc2a47f966abae1ae43ffba0920a9d209d01dcfce44c5e0.json create mode 100644 bizinikiwi/pezframe/revive/rpc/revive_chain.scale.bak diff --git a/Cargo.lock b/Cargo.lock index bf4f01ed..bb250e65 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10315,6 +10315,7 @@ dependencies = [ "jsonrpsee", "pez-minimal-template-runtime", "pezkuwi-sdk", + "pezsp-runtime", ] [[package]] @@ -10567,6 +10568,7 @@ dependencies = [ "jsonrpsee", "pez-revive-dev-runtime", "pezkuwi-sdk", + "pezsp-runtime", ] [[package]] @@ -14004,6 +14006,7 @@ dependencies = [ "pezpallet-revive-proc-macro", "pezpallet-revive-uapi", "pezpallet-root-offences", + "pezpallet-root-testing", "pezpallet-safe-mode", "pezpallet-salary", "pezpallet-scheduler", @@ -14132,6 +14135,7 @@ dependencies = [ "pezsp-offchain", "pezsp-panic-handler", "pezsp-rpc", + "pezsp-runtime", "pezsp-runtime-interface", "pezsp-runtime-interface-proc-macro", "pezsp-session", @@ -21214,6 +21218,7 @@ dependencies = [ "pezkuwi-sdk", "pezsc-service-test", "pezsp-keyring", + "pezsp-runtime", "pezstaging-node-inspect", "pretty_assertions", "rand 0.8.5", @@ -25884,6 +25889,7 @@ dependencies = [ "log", "parity-scale-codec", "pezkuwi-sdk", + "pezsp-runtime", "serde", "teyrchain-template-runtime", ] @@ -25900,6 +25906,7 @@ dependencies = [ "pezcumulus-pezpallet-teyrchain-system", "pezkuwi-sdk", "pezpallet-teyrchain-template", + "pezsp-runtime", "scale-info", "serde_json", "smallvec", @@ -28615,6 +28622,7 @@ dependencies = [ "parity-scale-codec", "pezcumulus-pezpallet-teyrchain-system", "pezkuwi-sdk", + "pezsp-runtime", "scale-info", "serde_json", ] diff --git a/bizinikiwi/bin/node/cli/Cargo.toml b/bizinikiwi/bin/node/cli/Cargo.toml index 45e49169..9d3d17ab 100644 --- a/bizinikiwi/bin/node/cli/Cargo.toml +++ b/bizinikiwi/bin/node/cli/Cargo.toml @@ -123,14 +123,24 @@ pezkuwi-sdk = { features = [ "pezsc-transaction-pool", "pezsc-transaction-pool-api", "pezsc-utils", + "pezsp-api", "pezsp-blockchain", "pezsp-consensus", + "pezsp-core", "pezsp-core-hashing", "pezsp-core-hashing-proc-macro", "pezsp-database", + "pezsp-inherents", + "pezsp-io", + "pezsp-keystore", "pezsp-maybe-compressed-blob", + "pezsp-mmr-primitives", "pezsp-panic-handler", "pezsp-rpc", + "pezsp-statement-store", + "pezsp-timestamp", + "pezsp-tracing", + "pezsp-transaction-storage-proof", "pezstaging-chain-spec-builder", "pezstaging-node-inspect", "pezstaging-tracking-allocator", @@ -146,6 +156,9 @@ pezkuwi-sdk = { features = [ "pez-tracing-gum", ], workspace = true, default-features = true } +# Direct dependency needed (not through umbrella due to macro visibility issues) +pezsp-runtime = { workspace = true } + # Shared code between the staging node and kitchensink runtime: pez-kitchensink-runtime = { workspace = true } node-inspect = { optional = true, workspace = true, default-features = true } @@ -205,6 +218,7 @@ runtime-benchmarks = [ "pezkuwi-sdk/runtime-benchmarks", "pezsc-service-test/runtime-benchmarks", "pezsp-keyring/runtime-benchmarks", + "pezsp-runtime/runtime-benchmarks", "bizinikiwi-cli-test-utils/runtime-benchmarks", ] try-runtime = [ diff --git a/bizinikiwi/bin/node/cli/src/service.rs b/bizinikiwi/bin/node/cli/src/service.rs index d1455e5a..fa7a4d0e 100644 --- a/bizinikiwi/bin/node/cli/src/service.rs +++ b/bizinikiwi/bin/node/cli/src/service.rs @@ -46,21 +46,23 @@ use pezsc_statement_store::Store as StatementStore; use pezsc_telemetry::{Telemetry, TelemetryWorker}; use pezsc_transaction_pool::TransactionPoolHandle; use pezsc_transaction_pool_api::OffchainTransactionPoolFactory; -use pezsp_api::ProvideRuntimeApi; -use pezsp_core::crypto::Pair; +use pezkuwi_sdk::pezsp_api::ProvideRuntimeApi; +use pezkuwi_sdk::pezsp_core::crypto::Pair; use pezsp_runtime::{generic, traits::Block as BlockT, SaturatedConversion}; use std::{path::Path, sync::Arc}; /// Host functions required for kitchensink runtime and Bizinikiwi node. #[cfg(not(feature = "runtime-benchmarks"))] -pub type HostFunctions = - (pezsp_io::BizinikiwiHostFunctions, pezsp_statement_store::runtime_api::HostFunctions); +pub type HostFunctions = ( + pezkuwi_sdk::pezsp_io::BizinikiwiHostFunctions, + pezkuwi_sdk::pezsp_statement_store::runtime_api::HostFunctions, +); /// Host functions required for kitchensink runtime and Bizinikiwi node. #[cfg(feature = "runtime-benchmarks")] pub type HostFunctions = ( - pezsp_io::BizinikiwiHostFunctions, - pezsp_statement_store::runtime_api::HostFunctions, + pezkuwi_sdk::pezsp_io::BizinikiwiHostFunctions, + pezkuwi_sdk::pezsp_statement_store::runtime_api::HostFunctions, pezframe_benchmarking::benchmarking::HostFunctions, ); @@ -273,9 +275,9 @@ pub fn new_partial( beefy_block_import, client.clone(), Arc::new(move |_, _| async move { - let timestamp = pezsp_timestamp::InherentDataProvider::from_system_time(); + let timestamp = pezkuwi_sdk::pezsp_timestamp::InherentDataProvider::from_system_time(); let slot = - pezsp_consensus_babe::inherents::InherentDataProvider::from_timestamp_and_slot_duration( + pezkuwi_sdk::pezsp_consensus_babe::inherents::InherentDataProvider::from_timestamp_and_slot_duration( *timestamp, slot_duration, ); @@ -621,16 +623,16 @@ pub fn new_full_base::Hash>>( create_inherent_data_providers: move |parent, ()| { let client_clone = client_clone.clone(); async move { - let timestamp = pezsp_timestamp::InherentDataProvider::from_system_time(); + let timestamp = pezkuwi_sdk::pezsp_timestamp::InherentDataProvider::from_system_time(); let slot = - pezsp_consensus_babe::inherents::InherentDataProvider::from_timestamp_and_slot_duration( + pezkuwi_sdk::pezsp_consensus_babe::inherents::InherentDataProvider::from_timestamp_and_slot_duration( *timestamp, slot_duration, ); let storage_proof = - pezsp_transaction_storage_proof::registration::new_data_provider( + pezkuwi_sdk::pezsp_transaction_storage_proof::registration::new_data_provider( &*client_clone, &parent, )?; @@ -729,7 +731,7 @@ pub fn new_full_base::Hash>>( pezmmr_gadget::MmrGadget::start( client.clone(), backend.clone(), - pezsp_mmr_primitives::INDEXING_PREFIX.to_vec(), + pezkuwi_sdk::pezsp_mmr_primitives::INDEXING_PREFIX.to_vec(), ), ); } @@ -877,7 +879,17 @@ mod tests { Address, BalancesCall, RuntimeCall, TxExtension, }; use pez_node_primitives::{Block, DigestItem, Signature}; - use pezkuwi_sdk::{pezsc_transaction_pool_api::MaintainedTransactionPool, *}; + use pezkuwi_sdk::{ + pezsc_transaction_pool_api::MaintainedTransactionPool, + pezsp_consensus::{BlockOrigin, Environment, Proposer}, + pezsp_consensus_babe, + pezsp_core::crypto::Pair, + pezsp_inherents::InherentDataProvider, + pezsp_keystore::KeystorePtr, + pezsp_timestamp, + pezsp_tracing, + *, + }; use pezsc_client_api::BlockBackend; use pezsc_consensus::{BlockImport, BlockImportParams, ForkChoiceStrategy}; use pezsc_consensus_babe::{BabeIntermediate, CompatibleDigestItem, INTERMEDIATE_KEY}; @@ -885,18 +897,13 @@ mod tests { use pezsc_keystore::LocalKeystore; use pezsc_service_test::TestNetNode; use pezsc_transaction_pool_api::ChainEvent; - use pezsp_consensus::{BlockOrigin, Environment, Proposer}; - use pezsp_core::crypto::Pair; - use pezsp_inherents::InherentDataProvider; use pezsp_keyring::Sr25519Keyring; - use pezsp_keystore::KeystorePtr; use pezsp_runtime::{ generic::{self, Digest, Era, SignedPayload}, key_types::BABE, traits::{Block as BlockT, Header as HeaderT, IdentifyAccount, Verify}, RuntimeAppPublic, }; - use pezsp_timestamp; use std::sync::Arc; type AccountPublic = ::Signer; diff --git a/bizinikiwi/bin/node/runtime/Cargo.toml b/bizinikiwi/bin/node/runtime/Cargo.toml index 65b4c0e8..d126229e 100644 --- a/bizinikiwi/bin/node/runtime/Cargo.toml +++ b/bizinikiwi/bin/node/runtime/Cargo.toml @@ -37,7 +37,7 @@ primitive-types = { features = [ ], workspace = true } pezkuwi-sdk = { features = ["runtime-full", "tuples-96"], workspace = true } -pezsp-runtime = { workspace = true } +pezsp-runtime = { path = "../../../primitives/runtime", default-features = false } # shared code between runtime and node pez-node-primitives = { workspace = true } diff --git a/bizinikiwi/bin/node/runtime/src/lib.rs b/bizinikiwi/bin/node/runtime/src/lib.rs index e8054fa3..a804225c 100644 --- a/bizinikiwi/bin/node/runtime/src/lib.rs +++ b/bizinikiwi/bin/node/runtime/src/lib.rs @@ -2332,7 +2332,7 @@ impl pezpallet_alliance::Config for Runtime { type RetirementPeriod = RetirementPeriod; } -impl pezframe_benchmarking_pallet_pov::Config for Runtime { +impl pezframe_benchmarking_pezpallet_pov::Config for Runtime { type RuntimeEvent = RuntimeEvent; } @@ -2806,7 +2806,7 @@ mod runtime { pub type MessageQueue = pezpallet_message_queue::Pezpallet; #[runtime::pezpallet_index(68)] - pub type Pov = pezframe_benchmarking_pallet_pov::Pezpallet; + pub type Pov = pezframe_benchmarking_pezpallet_pov::Pezpallet; #[runtime::pezpallet_index(69)] pub type TxPause = pezpallet_tx_pause::Pezpallet; @@ -2866,9 +2866,6 @@ mod runtime { pub type MultiAssetBounties = pezpallet_multi_asset_bounties::Pezpallet; } -// Re-export all pallet types from the runtime module -pub use runtime::*; - /// The address format for describing accounts. pub type Address = pezsp_runtime::MultiAddress; /// Block header type as expected by this runtime. @@ -3109,7 +3106,7 @@ impl mod benches { pezkuwi_sdk::pezframe_benchmarking::define_benchmarks!( [pezframe_benchmarking, BaselineBench::] - [pezframe_benchmarking_pallet_pov, Pov] + [pezframe_benchmarking_pezpallet_pov, Pov] [pezpallet_alliance, Alliance] [pezpallet_assets, Assets] [pezpallet_babe, Babe] diff --git a/bizinikiwi/pezframe/revive/dev-node/node/Cargo.toml b/bizinikiwi/pezframe/revive/dev-node/node/Cargo.toml index 6145fbe6..a8338246 100644 --- a/bizinikiwi/pezframe/revive/dev-node/node/Cargo.toml +++ b/bizinikiwi/pezframe/revive/dev-node/node/Cargo.toml @@ -24,7 +24,18 @@ futures = { features = ["thread-pool"], workspace = true } futures-timer = { workspace = true } jsonrpsee = { features = ["server"], workspace = true } -pezkuwi-sdk = { workspace = true, features = ["experimental", "node"] } +# Direct dependency needed (not through umbrella due to macro visibility issues) +pezsp-runtime = { workspace = true } + +pezkuwi-sdk = { workspace = true, features = [ + "experimental", + "node", + "pezsp-core", + "pezsp-io", + "pezsp-genesis-builder", + "pezsp-block-builder", + "pezsp-timestamp", +] } pez-revive-dev-runtime = { workspace = true } [build-dependencies] diff --git a/bizinikiwi/pezframe/revive/dev-node/node/src/chain_spec.rs b/bizinikiwi/pezframe/revive/dev-node/node/src/chain_spec.rs index 35969643..93a4c97c 100644 --- a/bizinikiwi/pezframe/revive/dev-node/node/src/chain_spec.rs +++ b/bizinikiwi/pezframe/revive/dev-node/node/src/chain_spec.rs @@ -36,7 +36,7 @@ pub fn development_chain_spec() -> Result { .with_name("Development") .with_id("dev") .with_chain_type(ChainType::Development) - .with_genesis_config_preset_name(pezsp_genesis_builder::DEV_RUNTIME_PRESET) + .with_genesis_config_preset_name(pezkuwi_sdk::pezsp_genesis_builder::DEV_RUNTIME_PRESET) .with_properties(props()) .build()) } diff --git a/bizinikiwi/pezframe/revive/dev-node/node/src/rpc.rs b/bizinikiwi/pezframe/revive/dev-node/node/src/rpc.rs index a9f82d4a..7f7d5f30 100644 --- a/bizinikiwi/pezframe/revive/dev-node/node/src/rpc.rs +++ b/bizinikiwi/pezframe/revive/dev-node/node/src/rpc.rs @@ -81,11 +81,11 @@ where C: Send + Sync + 'static - + pezsp_api::ProvideRuntimeApi + + pezkuwi_sdk::pezsp_api::ProvideRuntimeApi + HeaderBackend + HeaderMetadata + 'static, - C::Api: pezsp_block_builder::BlockBuilder, + C::Api: pezkuwi_sdk::pezsp_block_builder::BlockBuilder, C::Api: bizinikiwi_frame_rpc_system::AccountNonceApi, P: TransactionPool + 'static, { diff --git a/bizinikiwi/pezframe/revive/dev-node/node/src/service.rs b/bizinikiwi/pezframe/revive/dev-node/node/src/service.rs index 892c50b5..1ee2af97 100644 --- a/bizinikiwi/pezframe/revive/dev-node/node/src/service.rs +++ b/bizinikiwi/pezframe/revive/dev-node/node/src/service.rs @@ -22,12 +22,12 @@ use pezkuwi_sdk::{ pezsc_executor::WasmExecutor, pezsc_service::{error::Error as ServiceError, Configuration, TaskManager}, pezsc_telemetry::{Telemetry, TelemetryWorker}, - pezsp_runtime::traits::Block as BlockT, *, }; +use pezsp_runtime::traits::Block as BlockT; use std::sync::Arc; -type HostFunctions = pezsp_io::BizinikiwiHostFunctions; +type HostFunctions = pezkuwi_sdk::pezsp_io::BizinikiwiHostFunctions; #[docify::export] pub(crate) type FullClient = @@ -190,10 +190,10 @@ pub fn new_full: move |parent, ()| { let client = client.clone(); async move { - let key = pezsp_core::storage::StorageKey( + let key = pezkuwi_sdk::pezsp_core::storage::StorageKey( pezkuwi_sdk::pezpallet_timestamp::Now::::hashed_key().to_vec(), ); - let current = pezsp_timestamp::Timestamp::current(); + let current = pezkuwi_sdk::pezsp_timestamp::Timestamp::current(); let next = client .storage(parent, &key) .ok() @@ -201,10 +201,10 @@ pub fn new_full: .and_then(|data| data.0.try_into().ok()) .map(|data| { let last = u64::from_le_bytes(data) / 1000; - pezsp_timestamp::Timestamp::new((last + 1) * 1000) + pezkuwi_sdk::pezsp_timestamp::Timestamp::new((last + 1) * 1000) }) .unwrap_or(current); - Ok(pezsp_timestamp::InherentDataProvider::new(current.max(next))) + Ok(pezkuwi_sdk::pezsp_timestamp::InherentDataProvider::new(current.max(next))) } } }; diff --git a/bizinikiwi/pezframe/revive/rpc/.sqlx/query-47b830cef6768ed5b119c74037482baef86a7c3d3469873a205805ef342ba031.json b/bizinikiwi/pezframe/revive/rpc/.sqlx/query-47b830cef6768ed5b119c74037482baef86a7c3d3469873a205805ef342ba031.json deleted file mode 100644 index cf65a4e6..00000000 --- a/bizinikiwi/pezframe/revive/rpc/.sqlx/query-47b830cef6768ed5b119c74037482baef86a7c3d3469873a205805ef342ba031.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n\t\t\tSELECT bizinikiwi_block_hash\n\t\t\tFROM eth_to_bizinikiwi_blocks\n\t\t\tWHERE ethereum_block_hash = $1\n\t\t\t", - "describe": { - "columns": [ - { - "name": "bizinikiwi_block_hash", - "ordinal": 0, - "type_info": "Blob" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false - ] - }, - "hash": "47b830cef6768ed5b119c74037482baef86a7c3d3469873a205805ef342ba031" -} diff --git a/bizinikiwi/pezframe/revive/rpc/.sqlx/query-7e5be81ad6f5d96bc6dbf62098cbd61d257d1ffad222317634327e12be403ab2.json b/bizinikiwi/pezframe/revive/rpc/.sqlx/query-7e5be81ad6f5d96bc6dbf62098cbd61d257d1ffad222317634327e12be403ab2.json deleted file mode 100644 index 2ce9070a..00000000 --- a/bizinikiwi/pezframe/revive/rpc/.sqlx/query-7e5be81ad6f5d96bc6dbf62098cbd61d257d1ffad222317634327e12be403ab2.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n\t\t\tSELECT ethereum_block_hash\n\t\t\tFROM eth_to_bizinikiwi_blocks\n\t\t\tWHERE bizinikiwi_block_hash = $1\n\t\t\t", - "describe": { - "columns": [ - { - "name": "ethereum_block_hash", - "ordinal": 0, - "type_info": "Blob" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false - ] - }, - "hash": "7e5be81ad6f5d96bc6dbf62098cbd61d257d1ffad222317634327e12be403ab2" -} diff --git a/bizinikiwi/pezframe/revive/rpc/.sqlx/query-cf515b47790a2ac4b3802c29e36a07ace0c67849e5b20c92532d7a77861ebf80.json b/bizinikiwi/pezframe/revive/rpc/.sqlx/query-cf515b47790a2ac4b3802c29e36a07ace0c67849e5b20c92532d7a77861ebf80.json deleted file mode 100644 index 2f476379..00000000 --- a/bizinikiwi/pezframe/revive/rpc/.sqlx/query-cf515b47790a2ac4b3802c29e36a07ace0c67849e5b20c92532d7a77861ebf80.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n\t\t\tINSERT OR REPLACE INTO eth_to_bizinikiwi_blocks (ethereum_block_hash, bizinikiwi_block_hash)\n\t\t\tVALUES ($1, $2)\n\t\t\t", - "describe": { - "columns": [], - "parameters": { - "Right": 2 - }, - "nullable": [] - }, - "hash": "cf515b47790a2ac4b3802c29e36a07ace0c67849e5b20c92532d7a77861ebf80" -} diff --git a/bizinikiwi/pezframe/revive/rpc/.sqlx/query-e712acbeb712c0a61fc2a47f966abae1ae43ffba0920a9d209d01dcfce44c5e0.json b/bizinikiwi/pezframe/revive/rpc/.sqlx/query-e712acbeb712c0a61fc2a47f966abae1ae43ffba0920a9d209d01dcfce44c5e0.json deleted file mode 100644 index b4701a19..00000000 --- a/bizinikiwi/pezframe/revive/rpc/.sqlx/query-e712acbeb712c0a61fc2a47f966abae1ae43ffba0920a9d209d01dcfce44c5e0.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "db_name": "SQLite", - "query": "SELECT EXISTS(SELECT 1 FROM eth_to_bizinikiwi_blocks WHERE bizinikiwi_block_hash = $1) AS \"exists!:bool\"", - "describe": { - "columns": [ - { - "name": "exists!:bool", - "ordinal": 0, - "type_info": "Integer" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false - ] - }, - "hash": "e712acbeb712c0a61fc2a47f966abae1ae43ffba0920a9d209d01dcfce44c5e0" -} diff --git a/bizinikiwi/pezframe/revive/rpc/revive_chain.scale.bak b/bizinikiwi/pezframe/revive/rpc/revive_chain.scale.bak new file mode 100644 index 0000000000000000000000000000000000000000..2fdbb8c8c5fb55f6c0e3087654551df772b5a2bc GIT binary patch literal 124108 zcmeFa4}4|UeJ6B}d?%3;xhwC=yYj9A*RkA4j&!XVYaCe_52G1rGTLZn}(O&eMC!`!h2#6V?G2+$Dt+5=bG16kJHb1sAfALJBS$Sz*Uf(u=6 zAqy$+{r-OE&wWo%nwiAz?tVz>+Pdf6d(Q9t&hPyGpWoTZ+NI$?yek@--OXNT?G~Dy zdb_%l&Fpk)?P{q~X=bg~%y~X6=)>UnLb=?)Tgw#_&$z$qmF$KYHY0<}l{kt`cqfYD z-R1U2T1ly%l=Q=7c`=#T?QC4l_9oMjWquk*Bc`jb$i&a|epcn1>CmOp^*9w}(Lj7d-fT5?vZU19sJ5G>=3de)T~9Xl+F2_dw~#-2ERF_E@?2-`?Pd>0lJyl|)fAg#U|<+!YP8w`e4a-ZvbLM$y1f zG=?|ujNg;NX8=f{nO&=1%L26TJ3Bnj>gTen^soaoS)YT zly<9y?P>+17pnDgty9Tbg>s|bYBxLOw(D$uzWbH=`43d8t=&?)ygfh95lS1ijQ>5` zXr9oKrV~z9R4-?(I67y3^F0Q^jg^C7 zAR1olR2p$qG{5#9kIr#&Bi|K`UK09w7&=trXXrS)y>_pPmFwpD6pmBezc zqzsBl+IzcMIzDs)sw&(dx>_#SrGUwaF2RYBw)ofdeU5IfI+pl!4KV9b#}q2z#PyO7Omcp zUy>?6ueK8W!^H$*IZ{&M3)A2y&8*boh^^hMoB-b~FzW}VIHy*-(FC4><|_D7Ys$=0 zN_;Zgd#Y6HWGBJ7w>cYGPI-f%+Ku}&T(eCq z0Sy7OIzk#Pn};91aB+QU{^5r~Fpy#(mWI;Lr3P@S#F(@j$!@c84Kg9=w4|FH(FN#| z4&-d}3Bz%8gycE}D?8r7=RiDqf-LVevF|Vx)~MX6;cw~ldRE=q#+Y^uH#_yR2-8K~ zH9~O(?2>xB--dgC{K|nF4ir{NvYl$1o2=eW7fT%wZ?pPBR9F*eZ%*^|7BlesKJ3CH0!s�ila>n#uz3O`PC>1ZBH)x^ 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

aJ=$o5wH3WD#<51% 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�iouFEs8FapO@-UV&2aa}l9ULxan>rdE{ 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 ay@{KTO&kjr9F-nSz#UA2wQv5UKl$J89~KP& literal 0 HcmV?d00001 diff --git a/bizinikiwi/pezframe/revive/rpc/src/subxt_client.rs b/bizinikiwi/pezframe/revive/rpc/src/subxt_client.rs index ea567b09..2403c682 100644 --- a/bizinikiwi/pezframe/revive/rpc/src/subxt_client.rs +++ b/bizinikiwi/pezframe/revive/rpc/src/subxt_client.rs @@ -27,6 +27,32 @@ pub use subxt::config::PolkadotConfig as SrcChainConfig; with = "::subxt::utils::Static<::pezsp_core::U256>" ), + // The metadata is generated from our rebranded runtime, so paths already use pezsp_* names + substitute_type( + path = "pezsp_runtime::DispatchError", + with = "::subxt::utils::Static<::pezsp_runtime::DispatchError>" + ), + substitute_type( + path = "pezsp_runtime::ModuleError", + with = "::subxt::utils::Static<::pezsp_runtime::ModuleError>" + ), + substitute_type( + path = "pezsp_runtime::TokenError", + with = "::subxt::utils::Static<::pezsp_runtime::TokenError>" + ), + substitute_type( + path = "pezsp_arithmetic::ArithmeticError", + with = "::subxt::utils::Static<::pezsp_runtime::ArithmeticError>" + ), + substitute_type( + path = "pezsp_runtime::TransactionalError", + with = "::subxt::utils::Static<::pezsp_runtime::TransactionalError>" + ), + substitute_type( + path = "pezsp_runtime::MultiSignature", + with = "::subxt::utils::Static<::pezsp_runtime::MultiSignature>" + ), + substitute_type( path = "pezsp_runtime::generic::block::Block", with = "::subxt::utils::Static<::pezsp_runtime::generic::Block< diff --git a/bizinikiwi/pezframe/staking/reward-curve/src/lib.rs b/bizinikiwi/pezframe/staking/reward-curve/src/lib.rs index bb84f835..849f6d2c 100644 --- a/bizinikiwi/pezframe/staking/reward-curve/src/lib.rs +++ b/bizinikiwi/pezframe/staking/reward-curve/src/lib.rs @@ -88,13 +88,7 @@ pub fn build(input: TokenStream) -> TokenStream { let ident = syn::Ident::new(&pezsp_runtime, Span::call_site()); quote!( #[doc(hidden)] pub use #ident as _sp_runtime; ) }, - Err(e) => match crate_name("pezkuwi-sdk") { - Ok(FoundCrate::Name(pezkuwi_sdk)) => { - let ident = syn::Ident::new(&pezkuwi_sdk, Span::call_site()); - quote!( #[doc(hidden)] pub use #ident::pezsp_runtime as _sp_runtime; ) - }, - _ => syn::Error::new(Span::call_site(), e).to_compile_error(), - }, + Err(e) => syn::Error::new(Span::call_site(), e).to_compile_error(), }; let const_name = input.ident; diff --git a/pezcumulus/teyrchains/runtimes/testing/yet-another-teyrchain/Cargo.toml b/pezcumulus/teyrchains/runtimes/testing/yet-another-teyrchain/Cargo.toml index 866eefa9..f89ad53f 100644 --- a/pezcumulus/teyrchains/runtimes/testing/yet-another-teyrchain/Cargo.toml +++ b/pezcumulus/teyrchains/runtimes/testing/yet-another-teyrchain/Cargo.toml @@ -17,7 +17,27 @@ codec = { features = ["derive"], workspace = true } scale-info = { features = ["derive"], workspace = true } serde_json = { features = ["alloc"], workspace = true } +# Direct dependency needed for runtime (not through umbrella due to macro visibility issues) +pezsp-runtime = { workspace = true } + pezkuwi-sdk = { workspace = true, default-features = false, features = [ + # Primitives needed for runtime + "pezsp-core", + "pezsp-consensus-aura", + "pezsp-version", + "pezsp-genesis-builder", + "pezsp-keyring", + "pezsp-api", + "pezsp-block-builder", + "pezsp-inherents", + "pezsp-transaction-pool", + "pezsp-offchain", + "pezsp-session", + + "pezframe-support", + "pezframe-system", + "pezframe-executive", + "pezpallet-aura", "pezpallet-authorship", "pezpallet-balances", @@ -63,6 +83,7 @@ std = [ "codec/std", "pezcumulus-pezpallet-teyrchain-system/std", "pezkuwi-sdk/std", + "pezsp-runtime/std", "scale-info/std", "serde_json/std", "bizinikiwi-wasm-builder", @@ -70,6 +91,7 @@ std = [ runtime-benchmarks = [ "pezcumulus-pezpallet-teyrchain-system/runtime-benchmarks", "pezkuwi-sdk/runtime-benchmarks", + "pezsp-runtime/runtime-benchmarks", "bizinikiwi-wasm-builder?/runtime-benchmarks", ] diff --git a/pezcumulus/teyrchains/runtimes/testing/yet-another-teyrchain/src/genesis_config_presets.rs b/pezcumulus/teyrchains/runtimes/testing/yet-another-teyrchain/src/genesis_config_presets.rs index b7ece747..d080fbaf 100644 --- a/pezcumulus/teyrchains/runtimes/testing/yet-another-teyrchain/src/genesis_config_presets.rs +++ b/pezcumulus/teyrchains/runtimes/testing/yet-another-teyrchain/src/genesis_config_presets.rs @@ -67,7 +67,7 @@ pub fn get_preset(id: &PresetId) -> Option> { yap_teyrchain_genesis( Sr25519Keyring::Alice.to_account_id(), authorities, - Sr25519Keyring::well_known().map(|x| x.to_account_id()).collect(), + Sr25519Keyring::well_known().map(|x: Sr25519Keyring| x.to_account_id()).collect(), ENDOWMENT, DEFAULT_PARA_ID, ) diff --git a/pezcumulus/zombienet/zombienet-sdk-helpers/src/lib.rs b/pezcumulus/zombienet/zombienet-sdk-helpers/src/lib.rs index f7c020d0..7597b3f1 100644 --- a/pezcumulus/zombienet/zombienet-sdk-helpers/src/lib.rs +++ b/pezcumulus/zombienet/zombienet-sdk-helpers/src/lib.rs @@ -18,7 +18,7 @@ use tokio::{ use zombienet_sdk::subxt::{ self, blocks::Block, - config::{bizinikiwi::DigestItem, polkadot::PolkadotExtrinsicParamsBuilder}, + config::{polkadot::PolkadotExtrinsicParamsBuilder, substrate::DigestItem}, dynamic::Value, events::Events, ext::scale_value::value, @@ -70,7 +70,7 @@ fn find_event_and_decode_fields( let mut result = vec![]; for event in events.iter() { let event = event?; - if event.pezpallet_name() == pezpallet && event.variant_name() == variant { + if event.pallet_name() == pezpallet && event.variant_name() == variant { let field_bytes = event.field_bytes().to_vec(); result.push(T::decode(&mut &field_bytes[..])?); } @@ -84,7 +84,7 @@ async fn is_session_change( let events = block.events().await?; Ok(events.iter().any(|event| { event.as_ref().is_ok_and(|event| { - event.pezpallet_name() == "Session" && event.variant_name() == "NewSession" + event.pallet_name() == "Session" && event.variant_name() == "NewSession" }) })) } diff --git a/templates/minimal/node/Cargo.toml b/templates/minimal/node/Cargo.toml index 748ce153..cb6ae130 100644 --- a/templates/minimal/node/Cargo.toml +++ b/templates/minimal/node/Cargo.toml @@ -24,8 +24,19 @@ futures = { features = ["thread-pool"], workspace = true } futures-timer = { workspace = true } jsonrpsee = { features = ["server"], workspace = true } +# Direct dependency needed (not through umbrella due to macro visibility issues) +pezsp-runtime = { workspace = true } + pez-minimal-template-runtime = { workspace = true } -pezkuwi-sdk = { workspace = true, features = ["experimental", "node"] } +pezkuwi-sdk = { workspace = true, features = [ + "experimental", + "node", + "pezsp-api", + "pezsp-block-builder", + "pezsp-genesis-builder", + "pezsp-io", + "pezsp-timestamp", +] } [build-dependencies] pezkuwi-sdk = { workspace = true, features = ["bizinikiwi-build-script-utils"] } diff --git a/templates/minimal/node/src/chain_spec.rs b/templates/minimal/node/src/chain_spec.rs index d3f06587..a2ced7b2 100644 --- a/templates/minimal/node/src/chain_spec.rs +++ b/templates/minimal/node/src/chain_spec.rs @@ -36,7 +36,7 @@ pub fn development_chain_spec() -> Result { .with_name("Development") .with_id("dev") .with_chain_type(ChainType::Development) - .with_genesis_config_preset_name(pezsp_genesis_builder::DEV_RUNTIME_PRESET) + .with_genesis_config_preset_name(pezkuwi_sdk::pezsp_genesis_builder::DEV_RUNTIME_PRESET) .with_properties(props()) .build()) } diff --git a/templates/minimal/node/src/rpc.rs b/templates/minimal/node/src/rpc.rs index 8207a2f5..759d8cf9 100644 --- a/templates/minimal/node/src/rpc.rs +++ b/templates/minimal/node/src/rpc.rs @@ -48,11 +48,11 @@ where C: Send + Sync + 'static - + pezsp_api::ProvideRuntimeApi + + pezkuwi_sdk::pezsp_api::ProvideRuntimeApi + HeaderBackend + HeaderMetadata + 'static, - C::Api: pezsp_block_builder::BlockBuilder, + C::Api: pezkuwi_sdk::pezsp_block_builder::BlockBuilder, C::Api: bizinikiwi_frame_rpc_system::AccountNonceApi, P: TransactionPool + 'static, { diff --git a/templates/minimal/node/src/service.rs b/templates/minimal/node/src/service.rs index 7e20df48..07c19f1f 100644 --- a/templates/minimal/node/src/service.rs +++ b/templates/minimal/node/src/service.rs @@ -24,12 +24,12 @@ use pezkuwi_sdk::{ pezsc_service::{error::Error as ServiceError, Configuration, TaskManager}, pezsc_telemetry::{Telemetry, TelemetryWorker}, pezsc_transaction_pool_api::OffchainTransactionPoolFactory, - pezsp_runtime::traits::Block as BlockT, *, }; +use pezsp_runtime::traits::Block as BlockT; use std::sync::Arc; -type HostFunctions = pezsp_io::BizinikiwiHostFunctions; +type HostFunctions = pezkuwi_sdk::pezsp_io::BizinikiwiHostFunctions; #[docify::export] pub(crate) type FullClient = @@ -215,7 +215,7 @@ pub fn new_full: select_chain, consensus_data_provider: None, create_inherent_data_providers: move |_, ()| async move { - Ok(pezsp_timestamp::InherentDataProvider::from_system_time()) + Ok(pezkuwi_sdk::pezsp_timestamp::InherentDataProvider::from_system_time()) }, }; @@ -251,7 +251,7 @@ pub fn new_full: commands_stream: Box::pin(commands_stream), consensus_data_provider: None, create_inherent_data_providers: move |_, ()| async move { - Ok(pezsp_timestamp::InherentDataProvider::from_system_time()) + Ok(pezkuwi_sdk::pezsp_timestamp::InherentDataProvider::from_system_time()) }, }; let authorship_future = pezsc_consensus_manual_seal::run_manual_seal(params); diff --git a/templates/minimal/runtime/Cargo.toml b/templates/minimal/runtime/Cargo.toml index fee14aad..3820024d 100644 --- a/templates/minimal/runtime/Cargo.toml +++ b/templates/minimal/runtime/Cargo.toml @@ -16,6 +16,8 @@ workspace = true [dependencies] codec = { workspace = true } pezkuwi-sdk = { workspace = true, features = [ + "pezsp-api", + "pezsp-keyring", "pezpallet-balances", "pezpallet-sudo", "pezpallet-timestamp", diff --git a/templates/teyrchain/node/Cargo.toml b/templates/teyrchain/node/Cargo.toml index 47ee64b6..91fface9 100644 --- a/templates/teyrchain/node/Cargo.toml +++ b/templates/teyrchain/node/Cargo.toml @@ -24,7 +24,10 @@ jsonrpsee = { features = ["server"], workspace = true } log = { workspace = true, default-features = true } serde = { features = ["derive"], workspace = true, default-features = true } -pezkuwi-sdk = { workspace = true, features = ["node", "pezkuwi-primitives"] } +# Direct dependency needed (not through umbrella due to macro visibility issues) +pezsp-runtime = { workspace = true } + +pezkuwi-sdk = { workspace = true, features = ["node", "pezkuwi-primitives", "pezsp-keystore", "pezsp-timestamp"] } teyrchain-template-runtime = { workspace = true } @@ -36,7 +39,7 @@ pezkuwi-sdk = { workspace = true, features = ["bizinikiwi-build-script-utils"] } [features] default = ["std"] -std = ["log/std", "pezkuwi-sdk/std", "teyrchain-template-runtime/std"] +std = ["log/std", "pezkuwi-sdk/std", "pezsp-runtime/std", "teyrchain-template-runtime/std"] runtime-benchmarks = [ "pezkuwi-sdk/runtime-benchmarks", "teyrchain-template-runtime/runtime-benchmarks", diff --git a/templates/teyrchain/node/src/command.rs b/templates/teyrchain/node/src/command.rs index 6c80238d..73382908 100644 --- a/templates/teyrchain/node/src/command.rs +++ b/templates/teyrchain/node/src/command.rs @@ -1,6 +1,7 @@ use pezkuwi_sdk::*; use log::info; +use pezsp_runtime; use pezcumulus_client_service::storage_proof_size::HostFunctions as ReclaimHostFunctions; use pezframe_benchmarking_cli::{BenchmarkCmd, BIZINIKIWI_REFERENCE_HARDWARE}; use pezsc_cli::{ diff --git a/templates/teyrchain/node/src/service.rs b/templates/teyrchain/node/src/service.rs index 1d8f23c8..b47e55b4 100644 --- a/templates/teyrchain/node/src/service.rs +++ b/templates/teyrchain/node/src/service.rs @@ -41,8 +41,8 @@ use pezsc_network::{NetworkBackend, NetworkBlock}; use pezsc_service::{Configuration, PartialComponents, TFullBackend, TFullClient, TaskManager}; use pezsc_telemetry::{Telemetry, TelemetryHandle, TelemetryWorker, TelemetryWorkerHandle}; use pezsc_transaction_pool_api::OffchainTransactionPoolFactory; -use pezsp_api::ProvideRuntimeApi; -use pezsp_keystore::KeystorePtr; +use pezkuwi_sdk::pezsp_api::ProvideRuntimeApi; +use pezkuwi_sdk::pezsp_keystore::KeystorePtr; use prometheus_endpoint::Registry; #[docify::export(wasm_executor)] @@ -161,7 +161,7 @@ fn build_import_queue( client, block_import, move |_, _| async move { - let timestamp = pezsp_timestamp::InherentDataProvider::from_system_time(); + let timestamp = pezkuwi_sdk::pezsp_timestamp::InherentDataProvider::from_system_time(); Ok(timestamp) }, &task_manager.spawn_essential_handle(), diff --git a/templates/teyrchain/runtime/Cargo.toml b/templates/teyrchain/runtime/Cargo.toml index de9527c3..9ab061f1 100644 --- a/templates/teyrchain/runtime/Cargo.toml +++ b/templates/teyrchain/runtime/Cargo.toml @@ -30,7 +30,26 @@ smallvec = { workspace = true, default-features = true } # Local pezpallet-teyrchain-template = { workspace = true } +# Direct dependency needed for runtime (not through umbrella due to macro visibility issues) +pezsp-runtime = { workspace = true } + pezkuwi-sdk = { workspace = true, default-features = false, features = [ + # Primitives needed for runtime + "pezsp-core", + "pezsp-consensus-aura", + "pezsp-version", + "pezsp-genesis-builder", + "pezsp-keyring", + "pezsp-api", + "pezsp-block-builder", + "pezsp-inherents", + "pezsp-transaction-pool", + "pezsp-offchain", + "pezsp-session", + "pezframe-support", + "pezframe-system", + "pezframe-executive", + "pezpallet-aura", "pezpallet-authorship", "pezpallet-balances", @@ -78,6 +97,7 @@ std = [ "log/std", "pezpallet-teyrchain-template/std", "pezkuwi-sdk/std", + "pezsp-runtime/std", "scale-info/std", "serde_json/std", "bizinikiwi-wasm-builder", @@ -87,6 +107,7 @@ runtime-benchmarks = [ "hex-literal", "pezpallet-teyrchain-template/runtime-benchmarks", "pezkuwi-sdk/runtime-benchmarks", + "pezsp-runtime/runtime-benchmarks", "bizinikiwi-wasm-builder?/runtime-benchmarks", ] try-runtime = [ diff --git a/templates/teyrchain/runtime/src/genesis_config_presets.rs b/templates/teyrchain/runtime/src/genesis_config_presets.rs index ed8e4cdd..3dc8af55 100644 --- a/templates/teyrchain/runtime/src/genesis_config_presets.rs +++ b/templates/teyrchain/runtime/src/genesis_config_presets.rs @@ -49,7 +49,7 @@ fn testnet_genesis( session: SessionConfig { keys: invulnerables .into_iter() - .map(|(acc, aura)| { + .map(|(acc, aura): (AccountId, AuraId)| { ( acc.clone(), // account id acc, // validator id @@ -70,7 +70,7 @@ fn local_testnet_genesis() -> Value { (Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()), (Sr25519Keyring::Bob.to_account_id(), Sr25519Keyring::Bob.public().into()), ], - Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect(), + Sr25519Keyring::well_known().map(|k: Sr25519Keyring| k.to_account_id()).collect(), Sr25519Keyring::Alice.to_account_id(), TEYRCHAIN_ID.into(), ) @@ -83,7 +83,7 @@ fn development_config_genesis() -> Value { (Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()), (Sr25519Keyring::Bob.to_account_id(), Sr25519Keyring::Bob.public().into()), ], - Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect(), + Sr25519Keyring::well_known().map(|k: Sr25519Keyring| k.to_account_id()).collect(), Sr25519Keyring::Alice.to_account_id(), TEYRCHAIN_ID.into(), ) diff --git a/templates/teyrchain/runtime/src/lib.rs b/templates/teyrchain/runtime/src/lib.rs index a20b0e10..2144d63d 100644 --- a/templates/teyrchain/runtime/src/lib.rs +++ b/templates/teyrchain/runtime/src/lib.rs @@ -137,8 +137,8 @@ impl WeightToFeePolynomial for WeightToFee { /// to even the core data structures. pub mod opaque { use super::*; - pub use pezkuwi_sdk::pezsp_runtime::OpaqueExtrinsic as UncheckedExtrinsic; - use pezkuwi_sdk::pezsp_runtime::{ + pub use pezsp_runtime::OpaqueExtrinsic as UncheckedExtrinsic; + use pezsp_runtime::{ generic, traits::{BlakeTwo256, Hash as HashT}, }; diff --git a/umbrella/Cargo.toml b/umbrella/Cargo.toml index 8fec8389..4170309c 100644 --- a/umbrella/Cargo.toml +++ b/umbrella/Cargo.toml @@ -139,6 +139,7 @@ std = [ "pezpallet-remark?/std", "pezpallet-revive?/std", "pezpallet-root-offences?/std", + "pezpallet-root-testing?/std", "pezpallet-safe-mode?/std", "pezpallet-salary?/std", "pezpallet-scheduler?/std", @@ -204,6 +205,7 @@ std = [ "pezsp-npos-elections?/std", "pezsp-offchain?/std", "pezsp-runtime-interface?/std", + "pezsp-runtime?/std", "pezsp-session?/std", "pezsp-staking?/std", "pezsp-state-machine?/std", @@ -430,6 +432,7 @@ runtime-benchmarks = [ "pezpallet-remark?/runtime-benchmarks", "pezpallet-revive?/runtime-benchmarks", "pezpallet-root-offences?/runtime-benchmarks", + "pezpallet-root-testing?/runtime-benchmarks", "pezpallet-safe-mode?/runtime-benchmarks", "pezpallet-salary?/runtime-benchmarks", "pezpallet-scheduler?/runtime-benchmarks", @@ -528,6 +531,7 @@ runtime-benchmarks = [ "pezsp-npos-elections?/runtime-benchmarks", "pezsp-offchain?/runtime-benchmarks", "pezsp-runtime-interface?/runtime-benchmarks", + "pezsp-runtime?/runtime-benchmarks", "pezsp-session?/runtime-benchmarks", "pezsp-staking?/runtime-benchmarks", "pezsp-state-machine?/runtime-benchmarks", @@ -649,6 +653,7 @@ try-runtime = [ "pezpallet-remark?/try-runtime", "pezpallet-revive?/try-runtime", "pezpallet-root-offences?/try-runtime", + "pezpallet-root-testing?/try-runtime", "pezpallet-safe-mode?/try-runtime", "pezpallet-salary?/try-runtime", "pezpallet-scheduler?/try-runtime", @@ -869,6 +874,7 @@ runtime-full = [ "pezpallet-revive-proc-macro", "pezpallet-revive-uapi", "pezpallet-root-offences", + "pezpallet-root-testing", "pezpallet-safe-mode", "pezpallet-salary", "pezpallet-scheduler", @@ -1833,6 +1839,11 @@ default-features = false optional = true path = "../bizinikiwi/pezframe/root-offences" +[dependencies.pezpallet-root-testing] +default-features = false +optional = true +path = "../bizinikiwi/pezframe/root-testing" + [dependencies.pezpallet-safe-mode] default-features = false optional = true @@ -2163,6 +2174,11 @@ default-features = false optional = true path = "../bizinikiwi/primitives/offchain" +[dependencies.pezsp-runtime] +default-features = false +optional = true +path = "../bizinikiwi/primitives/runtime" + [dependencies.pezsp-runtime-interface] default-features = false optional = true diff --git a/umbrella/src/lib.rs b/umbrella/src/lib.rs index f2722679..647a431a 100644 --- a/umbrella/src/lib.rs +++ b/umbrella/src/lib.rs @@ -903,6 +903,10 @@ pub use pezpallet_revive_uapi; #[cfg(feature = "pezpallet-root-offences")] pub use pezpallet_root_offences; +/// FRAME root testing pezpallet. +#[cfg(feature = "pezpallet-root-testing")] +pub use pezpallet_root_testing; + /// FRAME safe-mode pezpallet. #[cfg(feature = "pezpallet-safe-mode")] pub use pezpallet_safe_mode;