diff --git a/Cargo.lock b/Cargo.lock index 44a949d00..dc15151f0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1789,6 +1789,8 @@ dependencies = [ "cumulus-primitives-core", "cumulus-relay-chain-interface", "cumulus-test-relay-sproof-builder", + "dc-orchestrator-chain-interface", + "dp-core", "fc-api", "fc-cli", "fc-consensus", @@ -1802,6 +1804,7 @@ dependencies = [ "fp-rpc", "frame-benchmarking", "frame-benchmarking-cli", + "frame-support", "frame-system-rpc-runtime-api", "futures 0.3.30", "hex-literal 0.3.4", @@ -1859,6 +1862,9 @@ dependencies = [ "substrate-frame-rpc-system", "substrate-prometheus-endpoint", "tc-consensus", + "tc-orchestrator-chain-rpc-interface", + "tc-service-container-chain", + "tp-traits", "url", ] @@ -8043,6 +8049,7 @@ dependencies = [ "substrate-frame-rpc-system", "substrate-prometheus-endpoint", "tc-consensus", + "tp-traits", ] [[package]] @@ -17502,6 +17509,7 @@ dependencies = [ name = "tc-service-container-chain" version = "0.1.0" dependencies = [ + "async-backing-primitives", "async-trait", "ccp-authorities-noting-inherent", "clap 4.5.4", @@ -17518,6 +17526,7 @@ dependencies = [ "dp-container-chain-genesis-data", "dp-slot-duration-runtime-api", "flume 0.10.14", + "frame-support", "fs2", "futures 0.3.30", "jsonrpsee", @@ -17556,6 +17565,7 @@ dependencies = [ "sp-keystore", "sp-runtime", "sp-timestamp", + "sp-transaction-pool", "stream-payment-rpc", "substrate-build-script-utils", "substrate-frame-rpc-system", @@ -17564,6 +17574,7 @@ dependencies = [ "tokio", "tokio-stream", "tokio-util", + "tp-traits", "url", ] diff --git a/client/node-common/Cargo.toml b/client/node-common/Cargo.toml index 5f174fea1..c6f57fcc8 100644 --- a/client/node-common/Cargo.toml +++ b/client/node-common/Cargo.toml @@ -23,6 +23,7 @@ serde = { workspace = true, features = [ "derive" ] } # Local tc-consensus = { workspace = true } +tp-traits = { workspace = true } # Nimbus nimbus-consensus = { workspace = true } diff --git a/client/node-common/src/service.rs b/client/node-common/src/service.rs index 5da92f7f1..d9e4588e6 100644 --- a/client/node-common/src/service.rs +++ b/client/node-common/src/service.rs @@ -65,6 +65,36 @@ use { #[allow(deprecated)] use sc_executor::NativeElseWasmExecutor; +tp_traits::alias!( + pub trait MinimalRuntimeApi< + Block: (cumulus_primitives_core::BlockT), + Client: (sp_api::CallApiAt), + > : + ConstructRuntimeApi< + Block, + Client, + RuntimeApi: + TaggedTransactionQueue + + BlockBuilder + OffchainWorkerApi + + sp_api::Metadata + + sp_session::SessionKeys, + > + Send + Sync + 'static +); + +tp_traits::alias!( + pub trait MinimalCumulusRuntimeApi< + Block: (cumulus_primitives_core::BlockT), + Client: (sp_api::CallApiAt), + > : + MinimalRuntimeApi + + ConstructRuntimeApi< + Block, + Client, + RuntimeApi: + cumulus_primitives_core::CollectCollationInfo, + > +); + /// Trait to configure the main types the builder rely on, bundled in a single /// type to reduce verbosity and the amount of type parameters. pub trait NodeBuilderConfig { @@ -83,10 +113,7 @@ pub trait NodeBuilderConfig { BlockOf: cumulus_primitives_core::BlockT, ExecutorOf: Clone + CodeExecutor + RuntimeVersionOf + TanssiExecutorExt + Sync + Send + 'static, - RuntimeApiOf: - ConstructRuntimeApi, ClientOf> + Sync + Send + 'static, - ConstructedRuntimeApiOf: - TaggedTransactionQueue> + BlockBuilder>, + RuntimeApiOf: MinimalRuntimeApi, ClientOf>, { NodeBuilder::::new(parachain_config, hwbench) } @@ -137,8 +164,7 @@ pub struct NodeBuilder< > where BlockOf: cumulus_primitives_core::BlockT, ExecutorOf: Clone + CodeExecutor + RuntimeVersionOf + Sync + Send + 'static, - RuntimeApiOf: ConstructRuntimeApi, ClientOf> + Sync + Send + 'static, - ConstructedRuntimeApiOf: TaggedTransactionQueue> + BlockBuilder>, + RuntimeApiOf: MinimalRuntimeApi, ClientOf>, { pub client: Arc>, pub backend: Arc>, @@ -198,8 +224,7 @@ where BlockOf: cumulus_primitives_core::BlockT, ExecutorOf: Clone + CodeExecutor + RuntimeVersionOf + TanssiExecutorExt + Sync + Send + 'static, - RuntimeApiOf: ConstructRuntimeApi, ClientOf> + Sync + Send + 'static, - ConstructedRuntimeApiOf: TaggedTransactionQueue> + BlockBuilder>, + RuntimeApiOf: MinimalRuntimeApi, ClientOf>, { /// Create a new `NodeBuilder` which prepare objects required to launch a /// node. However it only starts telemetry, and doesn't provide any @@ -293,10 +318,7 @@ impl where BlockOf: cumulus_primitives_core::BlockT, ExecutorOf: Clone + CodeExecutor + RuntimeVersionOf + Sync + Send + 'static, - RuntimeApiOf: ConstructRuntimeApi, ClientOf> + Sync + Send + 'static, - ConstructedRuntimeApiOf: TaggedTransactionQueue> - + BlockBuilder> - + cumulus_primitives_core::CollectCollationInfo>, + RuntimeApiOf: MinimalCumulusRuntimeApi, ClientOf>, { pub async fn build_relay_chain_interface( &mut self, diff --git a/client/service-container-chain/Cargo.toml b/client/service-container-chain/Cargo.toml index aa56274bf..4ff3af098 100644 --- a/client/service-container-chain/Cargo.toml +++ b/client/service-container-chain/Cargo.toml @@ -32,6 +32,7 @@ pallet-data-preservers = { workspace = true, features = [ "std" ] } services-payment-rpc = { workspace = true } stream-payment-rpc = { workspace = true } tc-consensus = { workspace = true } +tp-traits = { workspace = true } # Dancekit dc-orchestrator-chain-interface = { workspace = true } @@ -39,6 +40,7 @@ dp-container-chain-genesis-data = { workspace = true, features = [ "json", "std" dp-slot-duration-runtime-api = { workspace = true } # Substrate +frame-support = { workspace = true } sc-basic-authorship = { workspace = true } sc-chain-spec = { workspace = true } sc-cli = { workspace = true } @@ -56,6 +58,7 @@ sc-transaction-pool = { workspace = true } sc-transaction-pool-api = { workspace = true } sp-blockchain = { workspace = true } sp-consensus = { workspace = true } +sp-transaction-pool = { workspace = true } substrate-frame-rpc-system = { workspace = true } substrate-prometheus-endpoint = { workspace = true } @@ -81,6 +84,7 @@ cumulus-primitives-core = { workspace = true } cumulus-relay-chain-interface = { workspace = true } # Nimbus +async-backing-primitives = { workspace = true } nimbus-consensus = { workspace = true } nimbus-primitives = { workspace = true } @@ -96,14 +100,17 @@ default = [] runtime-benchmarks = [ "cumulus-primitives-core/runtime-benchmarks", "dancebox-runtime/runtime-benchmarks", + "frame-support/runtime-benchmarks", "nimbus-primitives/runtime-benchmarks", "pallet-data-preservers/runtime-benchmarks", "polkadot-primitives/runtime-benchmarks", "sc-service/runtime-benchmarks", "sp-runtime/runtime-benchmarks", + "tp-traits/runtime-benchmarks", ] try-runtime = [ "dancebox-runtime/try-runtime", + "frame-support/try-runtime", "nimbus-primitives/try-runtime", "pallet-data-preservers/try-runtime", "sp-runtime/try-runtime", diff --git a/client/service-container-chain/src/monitor.rs b/client/service-container-chain/src/monitor.rs index e8b749f97..b9f38d43f 100644 --- a/client/service-container-chain/src/monitor.rs +++ b/client/service-container-chain/src/monitor.rs @@ -16,11 +16,13 @@ use { crate::{ - service::{ContainerChainBackend, ContainerChainClient}, + service::ContainerChainBackend, spawner::{CcSpawnMsg, ContainerChainSpawnerState}, }, cumulus_primitives_core::ParaId, + frame_support::DefaultNoBound, std::{ + any::Any, cell::Cell, collections::VecDeque, sync::{Arc, Mutex}, @@ -32,7 +34,7 @@ use { }, }; -#[derive(Default)] +#[derive(DefaultNoBound)] pub struct SpawnedContainersMonitor { /// List of the N most recently started container chains, with some statistics related to /// stopping time and reference count. @@ -59,7 +61,7 @@ pub struct SpawnedContainer { /// Used to check the reference count, if it's 0 it means the database has been closed pub backend: std::sync::Weak, /// Used to check the reference count, if it's 0 it means that the client has been closed. - pub client: std::sync::Weak, + pub client: std::sync::Weak, } impl SpawnedContainer { @@ -295,7 +297,7 @@ mod tests { stop_task_manager_time: Default::default(), stop_refcount_time: Default::default(), backend: Default::default(), - client: Default::default(), + client: std::sync::Weak::<()>::new(), }; // Truncating empty list does not panic diff --git a/client/service-container-chain/src/rpc.rs b/client/service-container-chain/src/rpc.rs index 8fe6500ba..606097f24 100644 --- a/client/service-container-chain/src/rpc.rs +++ b/client/service-container-chain/src/rpc.rs @@ -24,6 +24,7 @@ use { cumulus_primitives_core::ParaId, dancebox_runtime::{opaque::Block, AccountId, Index as Nonce}, + frame_support::{CloneNoBound, DefaultNoBound}, manual_xcm_rpc::{ManualXcm, ManualXcmApiServer}, polkadot_primitives::Hash, sc_client_api::{AuxStore, UsageProvider}, @@ -33,14 +34,10 @@ use { }, sc_rpc::DenyUnsafe, sc_transaction_pool_api::TransactionPool, - services_payment_rpc::{ - ServicesPayment, ServicesPaymentApiServer as _, ServicesPaymentRuntimeApi, - }, sp_api::ProvideRuntimeApi, sp_block_builder::BlockBuilder, sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata}, - std::sync::Arc, - stream_payment_rpc::{StreamPayment, StreamPaymentApiServer as _, StreamPaymentRuntimeApi}, + std::{marker::PhantomData, sync::Arc}, }; /// A type representing all RPC extensions. @@ -60,6 +57,18 @@ pub struct FullDeps { pub xcm_senders: Option<(flume::Sender>, flume::Sender<(ParaId, Vec)>)>, } +tp_traits::alias!( + /// Test + pub trait SubstrateRpcRuntimeApi)>: + sp_api::ConstructRuntimeApi< + Block, + Client, + RuntimeApi: + substrate_frame_rpc_system::AccountNonceApi + + BlockBuilder + > + Send + Sync + 'static +); + /// Instantiate all RPC extensions. pub fn create_full( deps: FullDeps, @@ -75,8 +84,6 @@ where + 'static, C::Api: substrate_frame_rpc_system::AccountNonceApi, C::Api: BlockBuilder, - C::Api: StreamPaymentRuntimeApi, - C::Api: ServicesPaymentRuntimeApi, P: TransactionPool + Sync + Send + 'static, { use substrate_frame_rpc_system::{System, SystemApiServer}; @@ -91,8 +98,6 @@ where } = deps; module.merge(System::new(client.clone(), pool, deny_unsafe).into_rpc())?; - module.merge(StreamPayment::<_, Block>::new(client.clone()).into_rpc())?; - module.merge(ServicesPayment::<_, Block>::new(client).into_rpc())?; if let Some(command_sink) = command_sink { module.merge( @@ -114,3 +119,103 @@ where Ok(module) } + +/// Contains the `GenerateRpcBuilder` trait and defines or re-exports all types it uses. +pub mod generate_rpc_builder { + // We re-export types with specific type parameters, no need to be verbose documenting that. + #![allow(missing_docs)] + + pub use { + crate::service::{ContainerChainBackend, ContainerChainClient, MinimalContainerRuntimeApi}, + sc_service::{Error as ServiceError, TaskManager}, + std::sync::Arc, + substrate_prometheus_endpoint::Registry as PrometheusRegistry, + tc_consensus::ParaId, + }; + + // TODO: It would be better to use a container chain types. + pub use dancebox_runtime::{opaque::Block, Hash}; + + pub type SyncingService = sc_network_sync::SyncingService; + pub type TransactionPool = + sc_transaction_pool::FullPool>; + pub type CommandSink = + futures::channel::mpsc::Sender>; + pub type XcmSenders = (flume::Sender>, flume::Sender<(ParaId, Vec)>); + pub type Network = dyn sc_network::service::traits::NetworkService; + pub type CompleteRpcBuilder = Box< + dyn Fn( + sc_rpc::DenyUnsafe, + sc_rpc::SubscriptionTaskExecutor, + ) -> Result, ServiceError>, + >; + + pub struct GenerateRpcBuilderParams<'a, RuntimeApi: MinimalContainerRuntimeApi> { + pub task_manager: &'a TaskManager, + pub container_chain_config: &'a sc_service::Configuration, + + pub client: Arc>, + pub backend: Arc, + pub sync_service: Arc, + pub transaction_pool: Arc>, + pub prometheus_registry: Option, + pub command_sink: Option, + pub xcm_senders: Option, + pub network: Arc, + } + + pub trait GenerateRpcBuilder: + Clone + Sync + Send + { + fn generate( + &self, + params: GenerateRpcBuilderParams, + ) -> Result; + } +} + +/// Generate an rpc builder for simple substrate container chains. +#[derive(CloneNoBound, DefaultNoBound)] +pub struct GenerateSubstrateRpcBuilder(pub PhantomData); +impl GenerateSubstrateRpcBuilder { + /// Creates a new instance. + pub fn new() -> Self { + Self(PhantomData) + } +} + +mod impl_generate_rpc_builder { + use {super::*, generate_rpc_builder::*}; + + impl< + RuntimeApi: MinimalContainerRuntimeApi + + crate::rpc::SubstrateRpcRuntimeApi>, + > GenerateRpcBuilder for GenerateSubstrateRpcBuilder + { + fn generate( + &self, + GenerateRpcBuilderParams { + client, + transaction_pool, + command_sink, + xcm_senders, + .. + }: GenerateRpcBuilderParams, + ) -> Result { + let client = client.clone(); + let transaction_pool = transaction_pool.clone(); + + Ok(Box::new(move |deny_unsafe, _| { + let deps = FullDeps { + client: client.clone(), + pool: transaction_pool.clone(), + deny_unsafe, + command_sink: command_sink.clone(), + xcm_senders: xcm_senders.clone(), + }; + + create_full(deps).map_err(Into::into) + })) + } + } +} diff --git a/client/service-container-chain/src/service.rs b/client/service-container-chain/src/service.rs index d1112c3b8..24f4926d4 100644 --- a/client/service-container-chain/src/service.rs +++ b/client/service-container-chain/src/service.rs @@ -15,6 +15,7 @@ // along with Tanssi. If not, see use { + crate::rpc::generate_rpc_builder::{GenerateRpcBuilder, GenerateRpcBuilderParams}, cumulus_client_consensus_common::{ ParachainBlockImport as TParachainBlockImport, ParachainBlockImportMarker, }, @@ -33,7 +34,7 @@ use { dc_orchestrator_chain_interface::OrchestratorChainInterface, dp_slot_duration_runtime_api::TanssiSlotDurationApi, nimbus_primitives::{NimbusId, NimbusPair}, - node_common::service::{NodeBuilder, NodeBuilderConfig}, + node_common::service::{MinimalCumulusRuntimeApi, NodeBuilder, NodeBuilderConfig}, sc_basic_authorship::ProposerFactory, sc_consensus::{BasicQueue, BlockImport}, sc_executor::WasmExecutor, @@ -48,7 +49,7 @@ use { sp_consensus::EnableProofRecording, sp_consensus_aura::SlotDuration, sp_keystore::KeystorePtr, - std::{sync::Arc, time::Duration}, + std::{marker::PhantomData, sync::Arc, time::Duration}, substrate_prometheus_endpoint::Registry, tc_consensus::{ collators::lookahead::{ @@ -79,15 +80,22 @@ impl sc_executor::NativeExecutionDispatch for ParachainNativeExecutor { } } -pub struct ContainerChainNodeConfig; -impl NodeBuilderConfig for ContainerChainNodeConfig { +#[derive(Default, Copy, Clone)] +pub struct ContainerChainNodeConfig(PhantomData); +impl NodeBuilderConfig for ContainerChainNodeConfig { type Block = Block; - // TODO: RuntimeApi here should be the subset of runtime apis available for all containers - // Currently we are using the orchestrator runtime apis + /// RuntimeApi is customizable to allow supporting more features than the common subset of + /// runtime api features. type RuntimeApi = RuntimeApi; type ParachainExecutor = ContainerChainExecutor; } +impl ContainerChainNodeConfig { + pub fn new() -> Self { + Self(PhantomData) + } +} + /// Orchestrator Parachain Block import. We cannot use the one in cumulus as it overrides the best /// chain selection rule #[derive(Clone)] @@ -143,25 +151,42 @@ pub type ParachainProposerFactory = // Container chains types type ContainerChainExecutor = WasmExecutor; -pub type ContainerChainClient = TFullClient; +pub type ContainerChainClient = TFullClient; pub type ContainerChainBackend = TFullBackend; -type ContainerChainBlockImport = - TParachainBlockImport, ContainerChainBackend>; +type ContainerChainBlockImport = + TParachainBlockImport>, ContainerChainBackend>; + +tp_traits::alias!( + pub trait MinimalContainerRuntimeApi: + MinimalCumulusRuntimeApi> + + sp_api::ConstructRuntimeApi< + Block, + ContainerChainClient, + RuntimeApi: + TanssiSlotDurationApi + + async_backing_primitives::UnincludedSegmentApi, + > + + Sized +); /// Start a node with the given parachain `Configuration` and relay chain `Configuration`. /// /// This is the actual implementation that is abstract over the executor and the runtime api. #[sc_tracing::logging::prefix_logs_with(container_log_str(para_id))] -pub async fn start_node_impl_container( +pub async fn start_node_impl_container< + RuntimeApi: MinimalContainerRuntimeApi, + TGenerateRpcBuilder: GenerateRpcBuilder, +>( parachain_config: Configuration, relay_chain_interface: Arc, orchestrator_chain_interface: Arc, keystore: KeystorePtr, para_id: ParaId, collation_params: Option, + generate_rpc_builder: TGenerateRpcBuilder, ) -> sc_service::error::Result<( TaskManager, - Arc, + Arc>, Arc, )> { let parachain_config = prepare_node_config(parachain_config); @@ -186,22 +211,18 @@ pub async fn start_node_impl_container( let force_authoring = parachain_config.force_authoring; let prometheus_registry = parachain_config.prometheus_registry().cloned(); - let rpc_builder = { - let client = node_builder.client.clone(); - let transaction_pool = node_builder.transaction_pool.clone(); - - Box::new(move |deny_unsafe, _| { - let deps = crate::rpc::FullDeps { - client: client.clone(), - pool: transaction_pool.clone(), - deny_unsafe, - command_sink: None, - xcm_senders: None, - }; - - crate::rpc::create_full(deps).map_err(Into::into) - }) - }; + let rpc_builder = generate_rpc_builder.generate(GenerateRpcBuilderParams { + task_manager: &node_builder.task_manager, + container_chain_config: ¶chain_config, + client: node_builder.client.clone(), + backend: node_builder.backend.clone(), + sync_service: node_builder.network.sync_service.clone(), + transaction_pool: node_builder.transaction_pool.clone(), + prometheus_registry: node_builder.prometheus_registry.clone(), + command_sink: None, + xcm_senders: None, + network: node_builder.network.network.clone(), + })?; let node_builder = node_builder.spawn_common_tasks(parachain_config, rpc_builder)?; @@ -269,10 +290,10 @@ pub async fn start_node_impl_container( )) } -pub fn container_chain_import_queue( +pub fn container_chain_import_queue( parachain_config: &Configuration, - node_builder: &NodeBuilder, -) -> (ContainerChainBlockImport, BasicQueue) { + node_builder: &NodeBuilder>, +) -> (ContainerChainBlockImport, BasicQueue) { // The nimbus import queue ONLY checks the signature correctness // Any other checks corresponding to the author-correctness should be done // in the runtime @@ -297,17 +318,17 @@ pub fn container_chain_import_queue( } #[sc_tracing::logging::prefix_logs_with(container_log_str(para_id))] -fn start_consensus_container( - client: Arc, +fn start_consensus_container( + client: Arc>, backend: Arc, collation_params: crate::spawner::CollationParams, - block_import: ContainerChainBlockImport, + block_import: ContainerChainBlockImport, prometheus_registry: Option, telemetry: Option, spawner: SpawnTaskHandle, relay_chain_interface: Arc, orchestrator_chain_interface: Arc, - transaction_pool: Arc>, + transaction_pool: Arc>>, sync_oracle: Arc>, keystore: KeystorePtr, force_authoring: bool, diff --git a/client/service-container-chain/src/spawner.rs b/client/service-container-chain/src/spawner.rs index a44c180a7..c03bf8757 100644 --- a/client/service-container-chain/src/spawner.rs +++ b/client/service-container-chain/src/spawner.rs @@ -25,12 +25,17 @@ use { crate::{ cli::ContainerChainCli, monitor::{SpawnedContainer, SpawnedContainersMonitor}, - service::{start_node_impl_container, ContainerChainClient, ParachainClient}, + rpc::generate_rpc_builder::GenerateRpcBuilder, + service::{ + start_node_impl_container, ContainerChainClient, MinimalContainerRuntimeApi, + ParachainClient, + }, }, cumulus_primitives_core::ParaId, cumulus_relay_chain_interface::RelayChainInterface, dancebox_runtime::{opaque::Block as OpaqueBlock, Block}, dc_orchestrator_chain_interface::{OrchestratorChainInterface, PHash}, + frame_support::{CloneNoBound, DefaultNoBound}, fs2::FileExt, futures::FutureExt, node_common::command::generate_genesis_block, @@ -45,7 +50,9 @@ use { sp_keystore::KeystorePtr, sp_runtime::traits::Block as BlockT, std::{ + any::Any, collections::{HashMap, HashSet}, + marker::PhantomData, path::{Path, PathBuf}, sync::{Arc, Mutex}, time::Instant, @@ -71,9 +78,12 @@ const MAX_BLOCK_DIFF_FOR_FULL_SYNC: u32 = 30_000; /// Task that handles spawning a stopping container chains based on assignment. /// The main loop is [rx_loop](ContainerChainSpawner::rx_loop). -pub struct ContainerChainSpawner { +pub struct ContainerChainSpawner< + RuntimeApi: MinimalContainerRuntimeApi, + TGenerateRpcBuilder: GenerateRpcBuilder, +> { /// Start container chain params - pub params: ContainerChainSpawnParams, + pub params: ContainerChainSpawnParams, /// State pub state: Arc>, @@ -95,8 +105,11 @@ pub struct ContainerChainSpawner { /// This struct MUST NOT contain types (outside of `Option`) obtained through /// running an embeded orchestrator node, as this will prevent spawning a container chain in a node /// connected to an orchestrator node through WebSocket. -#[derive(Clone)] -pub struct ContainerChainSpawnParams { +#[derive(CloneNoBound)] +pub struct ContainerChainSpawnParams< + RuntimeApi: MinimalContainerRuntimeApi, + TGenerateRpcBuilder: GenerateRpcBuilder, +> { pub orchestrator_chain_interface: Arc, pub container_chain_cli: ContainerChainCli, pub tokio_handle: tokio::runtime::Handle, @@ -108,6 +121,9 @@ pub struct ContainerChainSpawnParams { pub spawn_handle: SpawnTaskHandle, pub collation_params: Option, pub data_preserver: bool, + pub generate_rpc_builder: TGenerateRpcBuilder, + + pub phantom: PhantomData, } /// Params specific to collation. This struct can contain types obtained through running an @@ -123,7 +139,7 @@ pub struct CollationParams { } /// Mutable state for container chain spawner. Keeps track of running chains. -#[derive(Default)] +#[derive(DefaultNoBound)] pub struct ContainerChainSpawnerState { spawned_container_chains: HashMap, assigned_para_id: Option, @@ -162,8 +178,11 @@ pub enum CcSpawnMsg { // Separate function to allow using `?` to return a result, and also to avoid using `self` in an // async function. Mutable state should be written by locking `state`. // TODO: `state` should be an async mutex -async fn try_spawn( - try_spawn_params: ContainerChainSpawnParams, +async fn try_spawn< + RuntimeApi: MinimalContainerRuntimeApi, + TGenerateRpcBuilder: GenerateRpcBuilder, +>( + try_spawn_params: ContainerChainSpawnParams, state: Arc>, container_chain_para_id: ParaId, start_collation: bool, @@ -179,6 +198,7 @@ async fn try_spawn( spawn_handle, mut collation_params, data_preserver, + generate_rpc_builder, .. } = try_spawn_params; // Preload genesis data from orchestrator chain storage. @@ -338,6 +358,7 @@ async fn try_spawn( sync_keystore.clone(), container_chain_para_id, collation_params.clone(), + generate_rpc_builder.clone(), ) .await?; @@ -430,6 +451,7 @@ async fn try_spawn( let monitor_id; { let mut state = state.lock().expect("poison error"); + let container_chain_client = container_chain_client as Arc; monitor_id = state.spawned_containers_monitor.push(SpawnedContainer { id: 0, @@ -545,7 +567,11 @@ pub trait Spawner { fn stop(&self, container_chain_para_id: ParaId, keep_db: bool) -> Option; } -impl Spawner for ContainerChainSpawner { +impl< + RuntimeApi: MinimalContainerRuntimeApi, + TGenerateRpcBuilder: GenerateRpcBuilder, + > Spawner for ContainerChainSpawner +{ /// Access to the Orchestrator Chain Interface fn orchestrator_chain_interface(&self) -> Arc { self.params.orchestrator_chain_interface.clone() @@ -625,7 +651,11 @@ impl Spawner for ContainerChainSpawner { } } -impl ContainerChainSpawner { +impl< + RuntimeApi: MinimalContainerRuntimeApi, + TGenerateRpcBuilder: GenerateRpcBuilder, + > ContainerChainSpawner +{ /// Receive and process `CcSpawnMsg`s indefinitely pub async fn rx_loop( mut self, @@ -883,7 +913,6 @@ async fn get_latest_container_block_number_from_orchestrator( container_chain_para_id: ParaId, ) -> Option { // Get the container chain's latest block from orchestrator chain and compare with client's one - orchestrator_chain_interface .latest_block_number(orchestrator_block_hash, container_chain_para_id) .await @@ -909,8 +938,8 @@ enum DbRemovalReason { /// Reasons may be: /// * High block diff: when the local db is outdated and it would take a long time to sync using full sync, we remove it to be able to use warp sync. /// * Genesis hash mismatch, when the chain was deregistered and a different chain with the same para id was registered. -async fn db_needs_removal( - container_chain_client: &Arc, +async fn db_needs_removal( + container_chain_client: &Arc>, orchestrator_chain_interface: &Arc, orchestrator_block_hash: PHash, container_chain_para_id: ParaId, diff --git a/container-chains/nodes/frontier/Cargo.toml b/container-chains/nodes/frontier/Cargo.toml index 106a040e3..7eccb06ee 100644 --- a/container-chains/nodes/frontier/Cargo.toml +++ b/container-chains/nodes/frontier/Cargo.toml @@ -25,12 +25,19 @@ serde = { workspace = true, features = [ "derive" ] } serde_json = { workspace = true, features = [ "arbitrary_precision" ] } url = { workspace = true } +# Dancekit +dc-orchestrator-chain-interface = { workspace = true } +dp-core = { workspace = true } +tc-orchestrator-chain-rpc-interface = { workspace = true } + # Local ccp-authorities-noting-inherent = { workspace = true } container-chain-template-frontier-runtime = { workspace = true, features = [ "std" ] } manual-xcm-rpc = { workspace = true } node-common = { workspace = true } tc-consensus = { workspace = true } +tc-service-container-chain = { workspace = true } +tp-traits = { workspace = true } # Nimbus nimbus-consensus = { workspace = true } @@ -39,6 +46,7 @@ nimbus-primitives = { workspace = true, features = [ "std" ] } # Substrate frame-benchmarking = { workspace = true } frame-benchmarking-cli = { workspace = true } +frame-support = { workspace = true } frame-system-rpc-runtime-api = { workspace = true } pallet-transaction-payment-rpc = { workspace = true } pallet-transaction-payment-rpc-runtime-api = { workspace = true, features = [ "std" ] } @@ -120,6 +128,7 @@ runtime-benchmarks = [ "cumulus-primitives-core/runtime-benchmarks", "frame-benchmarking-cli/runtime-benchmarks", "frame-benchmarking/runtime-benchmarks", + "frame-support/runtime-benchmarks", "nimbus-primitives/runtime-benchmarks", "pallet-ethereum/runtime-benchmarks", "polkadot-cli/runtime-benchmarks", @@ -128,12 +137,16 @@ runtime-benchmarks = [ "polkadot-service/runtime-benchmarks", "sc-service/runtime-benchmarks", "sp-runtime/runtime-benchmarks", + "tc-service-container-chain/runtime-benchmarks", + "tp-traits/runtime-benchmarks", ] try-runtime = [ "container-chain-template-frontier-runtime/try-runtime", + "frame-support/try-runtime", "nimbus-primitives/try-runtime", "pallet-ethereum/try-runtime", "polkadot-cli/try-runtime", "polkadot-service/try-runtime", "sp-runtime/try-runtime", + "tc-service-container-chain/try-runtime", ] diff --git a/container-chains/nodes/frontier/src/cli.rs b/container-chains/nodes/frontier/src/cli.rs index 7ffecac51..b45db7798 100644 --- a/container-chains/nodes/frontier/src/cli.rs +++ b/container-chains/nodes/frontier/src/cli.rs @@ -19,6 +19,7 @@ use { node_common::service::Sealing, sc_cli::{CliConfiguration, NodeKeyParams, SharedParams}, std::path::PathBuf, + url::Url, }; /// Sub-commands supported by the collator. @@ -126,13 +127,48 @@ pub struct Cli { #[arg(long)] pub no_hardware_benchmarks: bool, - /// Relay chain arguments - #[arg(raw = true)] - pub relay_chain_args: Vec, + /// Profile id associated with the node, whose assignements will be followed to provide RPC services. + #[arg(long)] + pub rpc_provider_profile_id: Option, + + /// Endpoints to connect to orchestrator nodes, avoiding to start a local orchestrator node. + /// If this list is empty, a local embeded orchestrator node is started. + #[arg(long)] + pub orchestrator_endpoints: Vec, /// Optional parachain id that should be used to build chain spec. #[arg(long)] pub para_id: Option, + + /// Relay chain arguments, optionally followed by "--" and container chain arguments + #[arg(raw = true)] + extra_args: Vec, +} + +impl Cli { + pub fn relaychain_args(&self) -> &[String] { + let (relay_chain_args, _) = self.split_extra_args_at_first_dashdash(); + + relay_chain_args + } + + pub fn container_chain_args(&self) -> &[String] { + let (_, container_chain_args) = self.split_extra_args_at_first_dashdash(); + + container_chain_args + } + + fn split_extra_args_at_first_dashdash(&self) -> (&[String], &[String]) { + let index_of_dashdash = self.extra_args.iter().position(|x| *x == "--"); + + if let Some(i) = index_of_dashdash { + let (container_chain_args, extra_extra) = self.extra_args.split_at(i); + (&extra_extra[1..], container_chain_args) + } else { + // Only relay chain args + (&self.extra_args, &[]) + } + } } #[derive(Debug)] @@ -190,6 +226,7 @@ impl CliConfiguration for BuildSpecCmd { } } +#[derive(Clone)] pub struct RpcConfig { pub eth_log_block_cache: usize, pub eth_statuses_cache: usize, diff --git a/container-chains/nodes/frontier/src/command.rs b/container-chains/nodes/frontier/src/command.rs index bc8243ede..ca995c151 100644 --- a/container-chains/nodes/frontier/src/command.rs +++ b/container-chains/nodes/frontier/src/command.rs @@ -21,8 +21,12 @@ use { service::{self, frontier_database_dir, NodeConfig}, }, container_chain_template_frontier_runtime::Block, - cumulus_client_service::storage_proof_size::HostFunctions as ReclaimHostFunctions, + core::marker::PhantomData, + cumulus_client_service::{ + build_relay_chain_interface, storage_proof_size::HostFunctions as ReclaimHostFunctions, + }, cumulus_primitives_core::ParaId, + dc_orchestrator_chain_interface::OrchestratorChainInterface, frame_benchmarking_cli::{BenchmarkCmd, SUBSTRATE_REFERENCE_HARDWARE}, log::{info, warn}, node_common::{command::generate_genesis_block, service::NodeBuilderConfig as _}, @@ -34,11 +38,16 @@ use { }, sc_service::{ config::{BasePath, PrometheusConfig}, - DatabaseSource, + DatabaseSource, KeystoreContainer, TaskManager, }, + sc_telemetry::TelemetryWorker, sp_core::hexdisplay::HexDisplay, sp_runtime::traits::{AccountIdConversion, Block as BlockT}, - std::net::SocketAddr, + std::{net::SocketAddr, sync::Arc}, + tc_service_container_chain::{ + cli::ContainerChainCli, + spawner::{ContainerChainSpawnParams, ContainerChainSpawner}, + }, }; fn load_spec(id: &str, para_id: ParaId) -> std::result::Result, String> { @@ -214,7 +223,7 @@ pub fn run() -> Result<()> { &config, [RelayChainCli::executable_name()] .iter() - .chain(cli.relay_chain_args.iter()), + .chain(cli.relaychain_args().iter()), ); let polkadot_config = SubstrateCli::create_configuration( @@ -295,10 +304,15 @@ pub fn run() -> Result<()> { }) } None => { + if let Some(profile_id) = cli.rpc_provider_profile_id { + return rpc_provider_mode(cli, profile_id); + } + let runner = cli.create_runner(&cli.run.normalize())?; let collator_options = cli.run.collator_options(); runner.run_node_until_exit(|config| async move { + let relaychain_args = cli.relaychain_args(); let hwbench = (!cli.no_hardware_benchmarks).then_some( config.database.path().map(|database_path| { let _ = std::fs::create_dir_all(database_path); @@ -311,7 +325,7 @@ pub fn run() -> Result<()> { let polkadot_cli = RelayChainCli::new( &config, - [RelayChainCli::executable_name()].iter().chain(cli.relay_chain_args.iter()), + [RelayChainCli::executable_name()].iter().chain(relaychain_args.iter()), ); let rpc_config = crate::cli::RpcConfig { @@ -362,7 +376,7 @@ pub fn run() -> Result<()> { if let cumulus_client_cli::RelayChainMode::ExternalRpc(rpc_target_urls) = collator_options.clone().relay_chain_mode { - if !rpc_target_urls.is_empty() && !cli.relay_chain_args.is_empty() { + if !rpc_target_urls.is_empty() && !relaychain_args.is_empty() { warn!("Detected relay chain node arguments together with --relay-chain-rpc-url. This command starts a minimal Polkadot node that only uses a network-related subset of all relay chain CLI options."); } } @@ -513,3 +527,165 @@ impl CliConfiguration for RelayChainCli { self.base.base.node_name() } } + +fn rpc_provider_mode(cli: Cli, profile_id: u64) -> Result<()> { + log::info!("Starting in RPC provider mode!"); + + let runner = cli.create_runner(&cli.run.normalize())?; + + runner.run_node_until_exit(|config| async move { + let orchestrator_chain_interface: Arc; + let mut task_manager; + + if cli.orchestrator_endpoints.is_empty() { + todo!("Start in process node") + } else { + task_manager = TaskManager::new(config.tokio_handle.clone(), None) + .map_err(|e| sc_cli::Error::Application(Box::new(e)))?; + + orchestrator_chain_interface = + tc_orchestrator_chain_rpc_interface::create_client_and_start_worker( + cli.orchestrator_endpoints.clone(), + &mut task_manager, + None, + ) + .await + .map(Arc::new) + .map_err(|e| sc_cli::Error::Application(Box::new(e)))?; + }; + + // Spawn assignment watcher + { + let mut container_chain_cli = ContainerChainCli::new( + &config, + [ContainerChainCli::executable_name()] + .iter() + .chain(cli.container_chain_args().iter()), + ); + + // If the container chain args have no --wasmtime-precompiled flag, use the same as the orchestrator + if container_chain_cli + .base + .base + .import_params + .wasmtime_precompiled + .is_none() + { + container_chain_cli + .base + .base + .import_params + .wasmtime_precompiled + .clone_from(&config.wasmtime_precompiled); + } + + log::info!("Container chain CLI: {container_chain_cli:?}"); + + let para_id = chain_spec::Extensions::try_get(&*config.chain_spec) + .map(|e| e.para_id) + .ok_or("Could not find parachain ID in chain-spec.")?; + + let para_id = ParaId::from(para_id); + + // TODO: Once there is an embeded node this should use it. + let keystore_container = KeystoreContainer::new(&config.keystore)?; + + let collator_options = cli.run.collator_options(); + + let polkadot_cli = RelayChainCli::new( + &config, + [RelayChainCli::executable_name()] + .iter() + .chain(cli.relaychain_args().iter()), + ); + + let tokio_handle = config.tokio_handle.clone(); + let polkadot_config = + SubstrateCli::create_configuration(&polkadot_cli, &polkadot_cli, tokio_handle) + .map_err(|err| format!("Relay chain argument error: {}", err))?; + + let telemetry = config + .telemetry_endpoints + .clone() + .filter(|x| !x.is_empty()) + .map(|endpoints| -> std::result::Result<_, sc_telemetry::Error> { + let worker = TelemetryWorker::new(16)?; + let telemetry = worker.handle().new_telemetry(endpoints); + Ok((worker, telemetry)) + }) + .transpose() + .map_err(sc_service::Error::Telemetry)?; + + let telemetry_worker_handle = telemetry.as_ref().map(|(worker, _)| worker.handle()); + + let (relay_chain_interface, _collation_pair) = build_relay_chain_interface( + polkadot_config, + &config, + telemetry_worker_handle, + &mut task_manager, + collator_options, + None, + ) + .await + .map_err(|e| sc_service::Error::Application(Box::new(e) as Box<_>))?; + + let relay_chain = crate::chain_spec::Extensions::try_get(&*config.chain_spec) + .map(|e| e.relay_chain.clone()) + .ok_or("Could not find relay_chain extension in chain-spec.")?; + + let rpc_config = crate::cli::RpcConfig { + eth_log_block_cache: cli.run.eth_log_block_cache, + eth_statuses_cache: cli.run.eth_statuses_cache, + fee_history_limit: cli.run.fee_history_limit, + max_past_logs: cli.run.max_past_logs, + }; + + let container_chain_spawner = ContainerChainSpawner { + params: ContainerChainSpawnParams { + orchestrator_chain_interface, + container_chain_cli, + tokio_handle: config.tokio_handle.clone(), + chain_type: config.chain_spec.chain_type(), + relay_chain, + relay_chain_interface, + sync_keystore: keystore_container.keystore(), + orchestrator_para_id: para_id, + collation_params: None, + spawn_handle: task_manager.spawn_handle().clone(), + data_preserver: true, + generate_rpc_builder: crate::rpc::GenerateFrontierRpcBuilder::< + container_chain_template_frontier_runtime::RuntimeApi, + > { + rpc_config, + phantom: PhantomData, + }, + + phantom: PhantomData, + }, + state: Default::default(), + collate_on_tanssi: Arc::new(|| { + panic!("Called collate_on_tanssi outside of Tanssi node") + }), + collation_cancellation_constructs: None, + }; + let state = container_chain_spawner.state.clone(); + + task_manager.spawn_essential_handle().spawn( + "container-chain-assignment-watcher", + None, + tc_service_container_chain::data_preservers::task_watch_assignment( + container_chain_spawner, + profile_id, + ), + ); + + task_manager.spawn_essential_handle().spawn( + "container-chain-spawner-debug-state", + None, + tc_service_container_chain::monitor::monitor_task(state), + ); + } + + Ok(task_manager) + }) +} diff --git a/container-chains/nodes/frontier/src/rpc/mod.rs b/container-chains/nodes/frontier/src/rpc/mod.rs index dd01a7336..e4988d9e2 100644 --- a/container-chains/nodes/frontier/src/rpc/mod.rs +++ b/container-chains/nodes/frontier/src/rpc/mod.rs @@ -25,6 +25,7 @@ pub use sc_rpc::{DenyUnsafe, SubscriptionTaskExecutor}; use { container_chain_template_frontier_runtime::{opaque::Block, AccountId, Hash, Index}, + core::marker::PhantomData, cumulus_client_parachain_inherent::ParachainInherentData, cumulus_primitives_core::{ParaId, PersistedValidationData}, cumulus_test_relay_sproof_builder::RelayStateSproofBuilder, @@ -32,6 +33,7 @@ use { fc_rpc_core::TxPoolApiServer, fc_storage::StorageOverride, fp_rpc::EthereumRuntimeRPCApi, + frame_support::CloneNoBound, futures::StreamExt, jsonrpsee::RpcModule, manual_xcm_rpc::{ManualXcm, ManualXcmApiServer}, @@ -53,7 +55,12 @@ use { sp_consensus_aura::SlotDuration, sp_core::H256, sp_runtime::traits::{BlakeTwo256, Block as BlockT, Header as HeaderT}, - std::{sync::Arc, time::Duration}, + std::{ + collections::BTreeMap, + sync::{Arc, Mutex}, + time::Duration, + }, + tc_service_container_chain::service::{ContainerChainClient, MinimalContainerRuntimeApi}, }; pub struct DefaultEthConfig(std::marker::PhantomData<(C, BE)>); @@ -462,3 +469,112 @@ impl RuntimeApiCollection for Api where + cumulus_primitives_core::CollectCollationInfo { } + +tp_traits::alias!( + pub trait FrontierRpcRuntimeApi: + MinimalContainerRuntimeApi + + sp_api::ConstructRuntimeApi< + Block, + ContainerChainClient, + RuntimeApi: + RuntimeApiCollection + > +); + +#[derive(CloneNoBound)] +pub struct GenerateFrontierRpcBuilder { + pub rpc_config: crate::cli::RpcConfig, + pub phantom: PhantomData, +} + +const _: () = { + use tc_service_container_chain::rpc::generate_rpc_builder::*; + + impl GenerateRpcBuilder + for GenerateFrontierRpcBuilder + { + fn generate( + &self, + GenerateRpcBuilderParams { + backend, + client, + network, + container_chain_config, + prometheus_registry, + sync_service, + task_manager, + transaction_pool, + .. + }: GenerateRpcBuilderParams, + ) -> Result { + let max_past_logs = self.rpc_config.max_past_logs; + + // Frontier specific stuff + let filter_pool: Option = Some(Arc::new(Mutex::new(BTreeMap::new()))); + let fee_history_cache: FeeHistoryCache = Arc::new(Mutex::new(BTreeMap::new())); + let frontier_backend = Arc::new(fc_db::Backend::KeyValue( + crate::service::open_frontier_backend(client.clone(), container_chain_config)? + .into(), + )); + let overrides = Arc::new(fc_rpc::StorageOverrideHandler::new(client.clone())); + let fee_history_limit = self.rpc_config.fee_history_limit; + + let pubsub_notification_sinks: fc_mapping_sync::EthereumBlockNotificationSinks< + fc_mapping_sync::EthereumBlockNotification, + > = Default::default(); + let pubsub_notification_sinks = Arc::new(pubsub_notification_sinks); + + spawn_essential_tasks(SpawnTasksParams { + task_manager, + client: client.clone(), + substrate_backend: backend.clone(), + frontier_backend: frontier_backend.clone(), + filter_pool: filter_pool.clone(), + overrides: overrides.clone(), + fee_history_limit, + fee_history_cache: fee_history_cache.clone(), + sync_service: sync_service.clone(), + pubsub_notification_sinks: pubsub_notification_sinks.clone(), + }); + + let block_data_cache = Arc::new(fc_rpc::EthBlockDataCacheTask::new( + task_manager.spawn_handle(), + overrides.clone(), + self.rpc_config.eth_log_block_cache, + self.rpc_config.eth_statuses_cache, + prometheus_registry.clone(), + )); + + Ok(Box::new(move |deny_unsafe, subscription_task_executor| { + let deps = crate::rpc::FullDeps { + backend: backend.clone(), + client: client.clone(), + deny_unsafe, + filter_pool: filter_pool.clone(), + frontier_backend: match &*frontier_backend { + fc_db::Backend::KeyValue(b) => b.clone(), + fc_db::Backend::Sql(b) => b.clone(), + }, + graph: transaction_pool.pool().clone(), + pool: transaction_pool.clone(), + max_past_logs, + fee_history_limit, + fee_history_cache: fee_history_cache.clone(), + network: Arc::new(network.clone()), + sync: sync_service.clone(), + block_data_cache: block_data_cache.clone(), + overrides: overrides.clone(), + is_authority: false, + command_sink: None, + xcm_senders: None, + }; + crate::rpc::create_full( + deps, + subscription_task_executor, + pubsub_notification_sinks.clone(), + ) + .map_err(Into::into) + })) + } + } +}; diff --git a/container-chains/nodes/simple/src/command.rs b/container-chains/nodes/simple/src/command.rs index c6326a9cb..bf0a97923 100644 --- a/container-chains/nodes/simple/src/command.rs +++ b/container-chains/nodes/simple/src/command.rs @@ -42,7 +42,7 @@ use { sc_telemetry::TelemetryWorker, sp_core::hexdisplay::HexDisplay, sp_runtime::traits::{AccountIdConversion, Block as BlockT}, - std::{net::SocketAddr, sync::Arc}, + std::{marker::PhantomData, net::SocketAddr, sync::Arc}, tc_service_container_chain::{ cli::ContainerChainCli, spawner::{ContainerChainSpawnParams, ContainerChainSpawner}, @@ -602,6 +602,12 @@ fn rpc_provider_mode(cli: Cli, profile_id: u64) -> Result<()> { collation_params: None, spawn_handle: task_manager.spawn_handle().clone(), data_preserver: true, + generate_rpc_builder: + tc_service_container_chain::rpc::GenerateSubstrateRpcBuilder::< + container_chain_template_simple_runtime::RuntimeApi, + >::new(), + + phantom: PhantomData, }, state: Default::default(), collate_on_tanssi: Arc::new(|| { diff --git a/node/src/service.rs b/node/src/service.rs index c13ba9d23..c6371f247 100644 --- a/node/src/service.rs +++ b/node/src/service.rs @@ -20,6 +20,7 @@ use { crate::command::solochain::{ build_solochain_config_dir, copy_zombienet_keystore, dummy_config, keystore_config, }, + core::marker::PhantomData, cumulus_client_cli::CollatorOptions, cumulus_client_collator::service::CollatorService, cumulus_client_consensus_proposer::Proposer, @@ -427,6 +428,10 @@ async fn start_node_impl( let orchestrator_tx_pool = node_builder.transaction_pool.clone(); let spawn_handle = node_builder.task_manager.spawn_handle(); + // This considers that the container chains have the same APIs as dancebox, which + // is not the case. However the spawner don't call APIs that are not part of the expected + // common APIs for a container chain. + // TODO: Depend on the simple container chain runtime which should be the minimal api? let container_chain_spawner = ContainerChainSpawner { params: ContainerChainSpawnParams { orchestrator_chain_interface, @@ -451,6 +456,10 @@ async fn start_node_impl( None }, spawn_handle, + generate_rpc_builder: tc_service_container_chain::rpc::GenerateSubstrateRpcBuilder::< + dancebox_runtime::RuntimeApi, + >::new(), + phantom: PhantomData, }, state: Default::default(), collate_on_tanssi, @@ -811,6 +820,10 @@ pub async fn start_solochain_node( }, spawn_handle, data_preserver: false, + generate_rpc_builder: tc_service_container_chain::rpc::GenerateSubstrateRpcBuilder::< + dancebox_runtime::RuntimeApi, + >::new(), + phantom: PhantomData, }, state: Default::default(), collate_on_tanssi, diff --git a/pallets/author-noting/src/benchmarks.rs b/pallets/author-noting/src/benchmarks.rs index 8bdcb7b3a..2eb81f418 100644 --- a/pallets/author-noting/src/benchmarks.rs +++ b/pallets/author-noting/src/benchmarks.rs @@ -18,16 +18,14 @@ //! Benchmarking use { - crate::{Call, Config, HeadData, Pallet, ParaId, ReadEntryErr, RelayOrPara}, + crate::{Call, Config, HeadData, Pallet, ParaId, RelayOrPara}, core::any::{Any, TypeId}, frame_benchmarking::{account, benchmarks}, frame_support::{assert_ok, Hashable}, frame_system::RawOrigin, parity_scale_codec::Encode, sp_std::{boxed::Box, vec}, - tp_traits::{ - GenericStateProof, GenericStorageReader, GetContainerChainAuthor, GetCurrentContainerChains, - }, + tp_traits::{GetContainerChainAuthor, GetCurrentContainerChains}, }; mod test_sproof { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b0d2444d..7d684c5a2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@zombienet/orchestrator': specifier: 0.0.87 - version: 0.0.87(@polkadot/util@13.0.2)(@types/node@20.11.30) + version: 0.0.87(@polkadot/util@13.0.2)(@types/node@20.11.30)(chokidar@3.6.0) inquirer: specifier: 9.2.16 version: 9.2.16 @@ -20,16 +20,16 @@ importers: devDependencies: '@acala-network/chopsticks': specifier: 0.11.0 - version: 0.11.0(debug@4.3.4) + version: 0.11.0(debug@4.3.4)(ts-node@10.9.2(@types/node@20.11.30)(typescript@5.4.2)) '@moonbeam-network/api-augment': specifier: 0.2902.0 version: 0.2902.0 '@moonwall/cli': specifier: 5.3.3 - version: 5.3.3(@acala-network/chopsticks@0.11.0)(@polkadot/api@12.2.1)(@types/node@20.11.30)(@vitest/ui@1.4.0)(typescript@5.4.2)(vitest@1.4.0) + version: 5.3.3(@acala-network/chopsticks@0.11.0(debug@4.3.4)(ts-node@10.9.2(@types/node@20.11.30)(typescript@5.4.2)))(@polkadot/api@12.2.1)(@types/node@20.11.30)(@vitest/ui@1.4.0(vitest@1.4.0))(chokidar@3.6.0)(encoding@0.1.13)(typescript@5.4.2)(vitest@1.4.0(@types/node@20.11.30)(@vitest/ui@1.4.0)(jsdom@23.2.0))(zod@3.23.8) '@moonwall/util': specifier: 5.3.3 - version: 5.3.3(@polkadot/api@12.2.1)(typescript@5.4.2)(vitest@1.4.0) + version: 5.3.3(@polkadot/api@12.2.1)(chokidar@3.6.0)(encoding@0.1.13)(typescript@5.4.2)(vitest@1.4.0(@types/node@20.11.30)(@vitest/ui@1.4.0)(jsdom@23.2.0))(zod@3.23.8) '@polkadot/api': specifier: 12.2.1 version: 12.2.1 @@ -38,7 +38,7 @@ importers: version: 12.2.1 '@polkadot/keyring': specifier: 13.0.2 - version: 13.0.2(@polkadot/util-crypto@13.0.2)(@polkadot/util@13.0.2) + version: 13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2) '@polkadot/types': specifier: 12.2.1 version: 12.2.1 @@ -62,7 +62,7 @@ importers: version: 20.11.30 '@typescript-eslint/eslint-plugin': specifier: 6.15.0 - version: 6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.4.2) + version: 6.15.0(@typescript-eslint/parser@6.15.0(eslint@8.56.0)(typescript@5.4.2))(eslint@8.56.0)(typescript@5.4.2) '@typescript-eslint/parser': specifier: 6.15.0 version: 6.15.0(eslint@8.56.0)(typescript@5.4.2) @@ -71,7 +71,7 @@ importers: version: 1.4.0(vitest@1.4.0) '@zombienet/utils': specifier: 0.0.25 - version: 0.0.25(@types/node@20.11.30)(typescript@5.4.2) + version: 0.0.25(@types/node@20.11.30)(chokidar@3.6.0)(typescript@5.4.2) bottleneck: specifier: 2.19.5 version: 2.19.5 @@ -85,8 +85,8 @@ importers: specifier: 8.56.0 version: 8.56.0 ethers: - specifier: 6.11.1 - version: 6.11.1 + specifier: ^5.4 + version: 5.7.2 json-bigint: specifier: 1.0.0 version: 1.0.0 @@ -107,13 +107,13 @@ importers: version: 5.4.2 viem: specifier: 2.8.14 - version: 2.8.14(typescript@5.4.2) + version: 2.8.14(typescript@5.4.2)(zod@3.23.8) vitest: specifier: 1.4.0 - version: 1.4.0(@types/node@20.11.30)(@vitest/ui@1.4.0) + version: 1.4.0(@types/node@20.11.30)(@vitest/ui@1.4.0)(jsdom@23.2.0) web3: specifier: 4.6.0 - version: 4.6.0(typescript@5.4.2) + version: 4.6.0(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8) web3-providers-ws: specifier: 4.0.7 version: 4.0.7 @@ -684,6 +684,96 @@ packages: engines: {node: '>=18'} hasBin: true + '@ethersproject/abi@5.7.0': + resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} + + '@ethersproject/abstract-provider@5.7.0': + resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} + + '@ethersproject/abstract-signer@5.7.0': + resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} + + '@ethersproject/address@5.7.0': + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + + '@ethersproject/base64@5.7.0': + resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} + + '@ethersproject/basex@5.7.0': + resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} + + '@ethersproject/bignumber@5.7.0': + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + + '@ethersproject/bytes@5.7.0': + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + + '@ethersproject/constants@5.7.0': + resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} + + '@ethersproject/contracts@5.7.0': + resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} + + '@ethersproject/hash@5.7.0': + resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} + + '@ethersproject/hdnode@5.7.0': + resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} + + '@ethersproject/json-wallets@5.7.0': + resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} + + '@ethersproject/keccak256@5.7.0': + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} + + '@ethersproject/logger@5.7.0': + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + + '@ethersproject/networks@5.7.1': + resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} + + '@ethersproject/pbkdf2@5.7.0': + resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} + + '@ethersproject/properties@5.7.0': + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} + + '@ethersproject/providers@5.7.2': + resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} + + '@ethersproject/random@5.7.0': + resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} + + '@ethersproject/rlp@5.7.0': + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + + '@ethersproject/sha2@5.7.0': + resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} + + '@ethersproject/signing-key@5.7.0': + resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} + + '@ethersproject/solidity@5.7.0': + resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==} + + '@ethersproject/strings@5.7.0': + resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} + + '@ethersproject/transactions@5.7.0': + resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} + + '@ethersproject/units@5.7.0': + resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==} + + '@ethersproject/wallet@5.7.0': + resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} + + '@ethersproject/web@5.7.1': + resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} + + '@ethersproject/wordlists@5.7.0': + resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} + '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} @@ -1744,6 +1834,9 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + aes-js@3.0.0: + resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} + aes-js@4.0.0-beta.5: resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} @@ -1853,6 +1946,9 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + bech32@1.1.4: + resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} + before-after-hook@3.0.2: resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} @@ -1878,6 +1974,9 @@ packages: bl@5.1.0: resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} + bn.js@4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} @@ -1897,6 +1996,9 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} @@ -2234,6 +2336,9 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + elliptic@6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2343,9 +2448,8 @@ packages: ethereum-cryptography@2.2.1: resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==} - ethers@6.11.1: - resolution: {integrity: sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg==} - engines: {node: '>=14.0.0'} + ethers@5.7.2: + resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} ethers@6.13.1: resolution: {integrity: sha512-hdJ2HOxg/xx97Lm9HdCWk949BfYqYWpyw4//78SiwOLgASyfrNszfMUNB2joKjvGUdwhHfaiMMFFwacVVoLR9A==} @@ -2608,6 +2712,9 @@ packages: has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -2622,6 +2729,9 @@ packages: highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + html-encoding-sniffer@4.0.0: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} @@ -2944,6 +3054,7 @@ packages: resolution: {integrity: sha512-Quz3MvAwHxVYNXsOByL7xI5EB2WYOeFswqaHIA3qOK3isRWTxiplBEocmmru6XmxDB2L7jDNYtYA4FyimoAFEw==} engines: {node: '>=8.17.0'} hasBin: true + bundledDependencies: [] jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -3127,6 +3238,12 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + minimatch@10.0.1: resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} engines: {node: 20 || >=22} @@ -3706,6 +3823,9 @@ packages: scale-ts@1.6.0: resolution: {integrity: sha512-Ja5VCjNZR8TGKhUumy9clVVxcDpM+YFjAnkMuwQy68Hixio3VRRvWdE3g8T/yC+HXA0ZDQl2TGyUmtmbcVl40Q==} + scrypt-js@3.0.1: + resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} @@ -4418,20 +4538,20 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} - engines: {node: '>=10.0.0'} + ws@7.4.6: + resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} + engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' + utf-8-validate: ^5.0.2 peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true - ws@8.17.1: - resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + ws@8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -4442,8 +4562,8 @@ packages: utf-8-validate: optional: true - ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -4454,12 +4574,12 @@ packages: utf-8-validate: optional: true - ws@8.5.0: - resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + utf-8-validate: '>=5.0.2' peerDependenciesMeta: bufferutil: optional: true @@ -4553,13 +4673,13 @@ snapshots: - supports-color - utf-8-validate - '@acala-network/chopsticks-db@0.11.0': + '@acala-network/chopsticks-db@0.11.0(ts-node@10.9.2(@types/node@20.11.30)(typescript@5.4.2))': dependencies: '@acala-network/chopsticks-core': 0.11.0 '@polkadot/util': 12.6.2 idb: 8.0.0 sqlite3: 5.1.7 - typeorm: 0.3.20(sqlite3@5.1.7) + typeorm: 0.3.20(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.11.30)(typescript@5.4.2)) transitivePeerDependencies: - '@google-cloud/spanner' - '@sap/hana-client' @@ -4587,10 +4707,10 @@ snapshots: '@polkadot/util': 12.6.2 '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.2) - '@acala-network/chopsticks@0.11.0(debug@4.3.4)': + '@acala-network/chopsticks@0.11.0(debug@4.3.4)(ts-node@10.9.2(@types/node@20.11.30)(typescript@5.4.2))': dependencies: '@acala-network/chopsticks-core': 0.11.0 - '@acala-network/chopsticks-db': 0.11.0 + '@acala-network/chopsticks-db': 0.11.0(ts-node@10.9.2(@types/node@20.11.30)(typescript@5.4.2)) '@pnpm/npm-conf': 2.3.1 '@polkadot/api-augment': 10.13.1 '@polkadot/types': 10.13.1 @@ -4896,6 +5016,261 @@ snapshots: '@ethereumjs/rlp@5.0.2': {} + '@ethersproject/abi@5.7.0': + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/abstract-provider@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + + '@ethersproject/abstract-signer@5.7.0': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + + '@ethersproject/address@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 + + '@ethersproject/base64@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + + '@ethersproject/basex@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/properties': 5.7.0 + + '@ethersproject/bignumber@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + bn.js: 5.2.1 + + '@ethersproject/bytes@5.7.0': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/constants@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + + '@ethersproject/contracts@5.7.0': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + + '@ethersproject/hash@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/hdnode@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + + '@ethersproject/json-wallets@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + + '@ethersproject/keccak256@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + js-sha3: 0.8.0 + + '@ethersproject/logger@5.7.0': {} + + '@ethersproject/networks@5.7.1': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/pbkdf2@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/sha2': 5.7.0 + + '@ethersproject/properties@5.7.0': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/providers@5.7.2': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + bech32: 1.1.4 + ws: 7.4.6 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@ethersproject/random@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/rlp@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/sha2@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + hash.js: 1.1.7 + + '@ethersproject/signing-key@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + bn.js: 5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + + '@ethersproject/solidity@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/strings@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/transactions@5.7.0': + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + + '@ethersproject/units@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/wallet@5.7.0': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + + '@ethersproject/web@5.7.1': + dependencies: + '@ethersproject/base64': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/wordlists@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@gar/promisify@1.1.3': optional: true @@ -4941,23 +5316,23 @@ snapshots: '@moonbeam-network/api-augment@0.2902.0': {} - '@moonwall/cli@5.3.3(@acala-network/chopsticks@0.11.0)(@polkadot/api@12.2.1)(@types/node@20.11.30)(@vitest/ui@1.4.0)(typescript@5.4.2)(vitest@1.4.0)': + '@moonwall/cli@5.3.3(@acala-network/chopsticks@0.11.0(debug@4.3.4)(ts-node@10.9.2(@types/node@20.11.30)(typescript@5.4.2)))(@polkadot/api@12.2.1)(@types/node@20.11.30)(@vitest/ui@1.4.0(vitest@1.4.0))(chokidar@3.6.0)(encoding@0.1.13)(typescript@5.4.2)(vitest@1.4.0(@types/node@20.11.30)(@vitest/ui@1.4.0)(jsdom@23.2.0))(zod@3.23.8)': dependencies: - '@acala-network/chopsticks': 0.11.0(debug@4.3.4) + '@acala-network/chopsticks': 0.11.0(debug@4.3.4)(ts-node@10.9.2(@types/node@20.11.30)(typescript@5.4.2)) '@moonbeam-network/api-augment': 0.2902.0 - '@moonwall/types': 5.3.3(@polkadot/api@12.2.1)(typescript@5.4.2) - '@moonwall/util': 5.3.3(@polkadot/api@12.2.1)(typescript@5.4.2)(vitest@1.4.0) + '@moonwall/types': 5.3.3(@polkadot/api@12.2.1)(chokidar@3.6.0)(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8) + '@moonwall/util': 5.3.3(@polkadot/api@12.2.1)(chokidar@3.6.0)(encoding@0.1.13)(typescript@5.4.2)(vitest@1.4.0(@types/node@20.11.30)(@vitest/ui@1.4.0)(jsdom@23.2.0))(zod@3.23.8) '@octokit/rest': 21.0.2 '@polkadot/api': 12.2.1 '@polkadot/api-derive': 12.1.1 - '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) + '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2(@polkadot/util@12.6.2))(@polkadot/util@12.6.2) '@polkadot/types': 12.1.1 '@polkadot/types-codec': 12.1.1 '@polkadot/util': 12.6.2 '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) '@vitest/ui': 1.4.0(vitest@1.4.0) - '@zombienet/orchestrator': 0.0.87(@polkadot/util@12.6.2)(@types/node@20.11.30) - '@zombienet/utils': 0.0.25(@types/node@20.11.30)(typescript@5.4.2) + '@zombienet/orchestrator': 0.0.87(@polkadot/util@12.6.2)(@types/node@20.11.30)(chokidar@3.6.0) + '@zombienet/utils': 0.0.25(@types/node@20.11.30)(chokidar@3.6.0)(typescript@5.4.2) bottleneck: 2.19.5 cfonts: 3.3.0 chalk: 5.3.0 @@ -4973,10 +5348,10 @@ snapshots: jsonc-parser: 3.3.1 minimatch: 9.0.5 semver: 7.6.2 - viem: 2.17.3(typescript@5.4.2) - vitest: 1.4.0(@types/node@20.11.30)(@vitest/ui@1.4.0) + viem: 2.17.3(typescript@5.4.2)(zod@3.23.8) + vitest: 1.4.0(@types/node@20.11.30)(@vitest/ui@1.4.0)(jsdom@23.2.0) vue: 3.5.1(typescript@5.4.2) - web3: 4.10.0(typescript@5.4.2) + web3: 4.10.0(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8) web3-providers-ws: 4.0.7 ws: 8.18.0 yaml: 2.4.5 @@ -4994,21 +5369,21 @@ snapshots: - utf-8-validate - zod - '@moonwall/types@5.3.3(@polkadot/api@12.2.1)(typescript@5.4.2)': + '@moonwall/types@5.3.3(@polkadot/api@12.2.1)(chokidar@3.6.0)(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8)': dependencies: '@polkadot/api': 12.2.1 '@polkadot/api-base': 12.1.1 - '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) + '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2(@polkadot/util@12.6.2))(@polkadot/util@12.6.2) '@polkadot/types': 12.1.1 '@polkadot/util': 12.6.2 '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) '@types/node': 20.14.10 - '@zombienet/utils': 0.0.25(@types/node@20.14.10)(typescript@5.4.2) + '@zombienet/utils': 0.0.25(@types/node@20.14.10)(chokidar@3.6.0)(typescript@5.4.2) bottleneck: 2.19.5 debug: 4.3.5 ethers: 6.13.1 - viem: 2.17.3(typescript@5.4.2) - web3: 4.10.0(typescript@5.4.2) + viem: 2.17.3(typescript@5.4.2)(zod@3.23.8) + web3: 4.10.0(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8) transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -5020,13 +5395,13 @@ snapshots: - utf-8-validate - zod - '@moonwall/util@5.3.3(@polkadot/api@12.2.1)(typescript@5.4.2)(vitest@1.4.0)': + '@moonwall/util@5.3.3(@polkadot/api@12.2.1)(chokidar@3.6.0)(encoding@0.1.13)(typescript@5.4.2)(vitest@1.4.0(@types/node@20.11.30)(@vitest/ui@1.4.0)(jsdom@23.2.0))(zod@3.23.8)': dependencies: '@moonbeam-network/api-augment': 0.2902.0 - '@moonwall/types': 5.3.3(@polkadot/api@12.2.1)(typescript@5.4.2) + '@moonwall/types': 5.3.3(@polkadot/api@12.2.1)(chokidar@3.6.0)(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8) '@polkadot/api': 12.2.1 '@polkadot/api-derive': 12.1.1 - '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) + '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2(@polkadot/util@12.6.2))(@polkadot/util@12.6.2) '@polkadot/rpc-provider': 12.1.1 '@polkadot/types': 12.1.1 '@polkadot/types-codec': 12.1.1 @@ -5044,9 +5419,9 @@ snapshots: inquirer-press-to-continue: 1.2.0(inquirer@9.3.3) rlp: 3.0.0 semver: 7.6.2 - viem: 2.17.3(typescript@5.4.2) - vitest: 1.4.0(@types/node@20.11.30)(@vitest/ui@1.4.0) - web3: 4.10.0(typescript@5.4.2) + viem: 2.17.3(typescript@5.4.2)(zod@3.23.8) + vitest: 1.4.0(@types/node@20.11.30)(@vitest/ui@1.4.0)(jsdom@23.2.0) + web3: 4.10.0(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8) ws: 8.18.0 yaml: 2.4.5 yargs: 17.7.2 @@ -5497,7 +5872,7 @@ snapshots: '@polkadot/api-augment': 11.3.1 '@polkadot/api-base': 11.3.1 '@polkadot/api-derive': 11.3.1 - '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) + '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2(@polkadot/util@12.6.2))(@polkadot/util@12.6.2) '@polkadot/rpc-augment': 11.3.1 '@polkadot/rpc-core': 11.3.1 '@polkadot/rpc-provider': 11.3.1 @@ -5521,7 +5896,7 @@ snapshots: '@polkadot/api-augment': 12.1.1 '@polkadot/api-base': 12.1.1 '@polkadot/api-derive': 12.1.1 - '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) + '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2(@polkadot/util@12.6.2))(@polkadot/util@12.6.2) '@polkadot/rpc-augment': 12.1.1 '@polkadot/rpc-core': 12.1.1 '@polkadot/rpc-provider': 12.1.1 @@ -5545,7 +5920,7 @@ snapshots: '@polkadot/api-augment': 12.2.1 '@polkadot/api-base': 12.2.1 '@polkadot/api-derive': 12.2.1 - '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2)(@polkadot/util@13.0.2) + '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2) '@polkadot/rpc-augment': 12.2.1 '@polkadot/rpc-core': 12.2.1 '@polkadot/rpc-provider': 12.2.1 @@ -5569,7 +5944,7 @@ snapshots: '@polkadot/api-augment': 12.4.2 '@polkadot/api-base': 12.4.2 '@polkadot/api-derive': 12.4.2 - '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2)(@polkadot/util@13.0.2) + '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2) '@polkadot/rpc-augment': 12.4.2 '@polkadot/rpc-core': 12.4.2 '@polkadot/rpc-provider': 12.4.2 @@ -5588,19 +5963,19 @@ snapshots: - supports-color - utf-8-validate - '@polkadot/keyring@12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2)': + '@polkadot/keyring@12.6.2(@polkadot/util-crypto@12.6.2(@polkadot/util@12.6.2))(@polkadot/util@12.6.2)': dependencies: '@polkadot/util': 12.6.2 '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) tslib: 2.7.0 - '@polkadot/keyring@12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@13.0.2)': + '@polkadot/keyring@12.6.2(@polkadot/util-crypto@12.6.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2)': dependencies: '@polkadot/util': 13.0.2 '@polkadot/util-crypto': 12.6.2(@polkadot/util@13.0.2) tslib: 2.7.0 - '@polkadot/keyring@13.0.2(@polkadot/util-crypto@13.0.2)(@polkadot/util@13.0.2)': + '@polkadot/keyring@13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2)': dependencies: '@polkadot/util': 13.0.2 '@polkadot/util-crypto': 13.0.2(@polkadot/util@13.0.2) @@ -5745,7 +6120,7 @@ snapshots: '@polkadot/rpc-provider@10.13.1': dependencies: - '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) + '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2(@polkadot/util@12.6.2))(@polkadot/util@12.6.2) '@polkadot/types': 10.13.1 '@polkadot/types-support': 10.13.1 '@polkadot/util': 12.6.2 @@ -5766,7 +6141,7 @@ snapshots: '@polkadot/rpc-provider@11.3.1': dependencies: - '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) + '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2(@polkadot/util@12.6.2))(@polkadot/util@12.6.2) '@polkadot/types': 11.3.1 '@polkadot/types-support': 11.3.1 '@polkadot/util': 12.6.2 @@ -5787,7 +6162,7 @@ snapshots: '@polkadot/rpc-provider@12.1.1': dependencies: - '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) + '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2(@polkadot/util@12.6.2))(@polkadot/util@12.6.2) '@polkadot/types': 12.1.1 '@polkadot/types-support': 12.1.1 '@polkadot/util': 12.6.2 @@ -5808,7 +6183,7 @@ snapshots: '@polkadot/rpc-provider@12.2.1': dependencies: - '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2)(@polkadot/util@13.0.2) + '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2) '@polkadot/types': 12.2.1 '@polkadot/types-support': 12.2.1 '@polkadot/util': 13.0.2 @@ -5829,7 +6204,7 @@ snapshots: '@polkadot/rpc-provider@12.4.2': dependencies: - '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2)(@polkadot/util@13.0.2) + '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2) '@polkadot/types': 12.4.2 '@polkadot/types-support': 12.4.2 '@polkadot/util': 13.0.2 @@ -6037,7 +6412,7 @@ snapshots: '@polkadot/types@10.13.1': dependencies: - '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) + '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2(@polkadot/util@12.6.2))(@polkadot/util@12.6.2) '@polkadot/types-augment': 10.13.1 '@polkadot/types-codec': 10.13.1 '@polkadot/types-create': 10.13.1 @@ -6048,7 +6423,7 @@ snapshots: '@polkadot/types@11.3.1': dependencies: - '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) + '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2(@polkadot/util@12.6.2))(@polkadot/util@12.6.2) '@polkadot/types-augment': 11.3.1 '@polkadot/types-codec': 11.3.1 '@polkadot/types-create': 11.3.1 @@ -6059,7 +6434,7 @@ snapshots: '@polkadot/types@12.1.1': dependencies: - '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) + '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2(@polkadot/util@12.6.2))(@polkadot/util@12.6.2) '@polkadot/types-augment': 12.1.1 '@polkadot/types-codec': 12.1.1 '@polkadot/types-create': 12.1.1 @@ -6070,7 +6445,7 @@ snapshots: '@polkadot/types@12.2.1': dependencies: - '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2)(@polkadot/util@13.0.2) + '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2) '@polkadot/types-augment': 12.2.1 '@polkadot/types-codec': 12.2.1 '@polkadot/types-create': 12.2.1 @@ -6081,7 +6456,7 @@ snapshots: '@polkadot/types@12.4.2': dependencies: - '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2)(@polkadot/util@13.0.2) + '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2) '@polkadot/types-augment': 12.4.2 '@polkadot/types-codec': 12.4.2 '@polkadot/types-create': 12.4.2 @@ -6096,10 +6471,10 @@ snapshots: '@noble/hashes': 1.5.0 '@polkadot/networks': 12.6.2 '@polkadot/util': 12.6.2 - '@polkadot/wasm-crypto': 7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2) + '@polkadot/wasm-crypto': 7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@12.6.2))) '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.2) '@polkadot/x-bigint': 12.6.2 - '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2) + '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@12.6.2)) '@scure/base': 1.1.8 tslib: 2.7.0 @@ -6109,10 +6484,10 @@ snapshots: '@noble/hashes': 1.5.0 '@polkadot/networks': 12.6.2 '@polkadot/util': 13.0.2 - '@polkadot/wasm-crypto': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@12.6.2) + '@polkadot/wasm-crypto': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@12.6.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2))) '@polkadot/wasm-util': 7.3.2(@polkadot/util@13.0.2) '@polkadot/x-bigint': 12.6.2 - '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2) + '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2)) '@scure/base': 1.1.8 tslib: 2.7.0 @@ -6122,10 +6497,10 @@ snapshots: '@noble/hashes': 1.5.0 '@polkadot/networks': 13.0.2 '@polkadot/util': 13.0.2 - '@polkadot/wasm-crypto': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2) + '@polkadot/wasm-crypto': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2))) '@polkadot/wasm-util': 7.3.2(@polkadot/util@13.0.2) '@polkadot/x-bigint': 13.0.2 - '@polkadot/x-randomvalues': 13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2) + '@polkadot/x-randomvalues': 13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2)) '@scure/base': 1.1.8 tslib: 2.7.0 @@ -6149,25 +6524,25 @@ snapshots: bn.js: 5.2.1 tslib: 2.7.0 - '@polkadot/wasm-bridge@7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2)': + '@polkadot/wasm-bridge@7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@12.6.2)))': dependencies: '@polkadot/util': 12.6.2 '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.2) - '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2) + '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@12.6.2)) tslib: 2.7.0 - '@polkadot/wasm-bridge@7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@12.6.2)': + '@polkadot/wasm-bridge@7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@12.6.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2)))': dependencies: '@polkadot/util': 13.0.2 '@polkadot/wasm-util': 7.3.2(@polkadot/util@13.0.2) - '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2) + '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2)) tslib: 2.7.0 - '@polkadot/wasm-bridge@7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2)': + '@polkadot/wasm-bridge@7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2)))': dependencies: '@polkadot/util': 13.0.2 '@polkadot/wasm-util': 7.3.2(@polkadot/util@13.0.2) - '@polkadot/x-randomvalues': 13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2) + '@polkadot/x-randomvalues': 13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2)) tslib: 2.7.0 '@polkadot/wasm-crypto-asmjs@7.3.2(@polkadot/util@12.6.2)': @@ -6180,34 +6555,34 @@ snapshots: '@polkadot/util': 13.0.2 tslib: 2.7.0 - '@polkadot/wasm-crypto-init@7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2)': + '@polkadot/wasm-crypto-init@7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@12.6.2)))': dependencies: '@polkadot/util': 12.6.2 - '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2) + '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@12.6.2))) '@polkadot/wasm-crypto-asmjs': 7.3.2(@polkadot/util@12.6.2) '@polkadot/wasm-crypto-wasm': 7.3.2(@polkadot/util@12.6.2) '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.2) - '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2) + '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@12.6.2)) tslib: 2.7.0 - '@polkadot/wasm-crypto-init@7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@12.6.2)': + '@polkadot/wasm-crypto-init@7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@12.6.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2)))': dependencies: '@polkadot/util': 13.0.2 - '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@12.6.2) + '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@12.6.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2))) '@polkadot/wasm-crypto-asmjs': 7.3.2(@polkadot/util@13.0.2) '@polkadot/wasm-crypto-wasm': 7.3.2(@polkadot/util@13.0.2) '@polkadot/wasm-util': 7.3.2(@polkadot/util@13.0.2) - '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2) + '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2)) tslib: 2.7.0 - '@polkadot/wasm-crypto-init@7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2)': + '@polkadot/wasm-crypto-init@7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2)))': dependencies: '@polkadot/util': 13.0.2 - '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2) + '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2))) '@polkadot/wasm-crypto-asmjs': 7.3.2(@polkadot/util@13.0.2) '@polkadot/wasm-crypto-wasm': 7.3.2(@polkadot/util@13.0.2) '@polkadot/wasm-util': 7.3.2(@polkadot/util@13.0.2) - '@polkadot/x-randomvalues': 13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2) + '@polkadot/x-randomvalues': 13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2)) tslib: 2.7.0 '@polkadot/wasm-crypto-wasm@7.3.2(@polkadot/util@12.6.2)': @@ -6222,37 +6597,37 @@ snapshots: '@polkadot/wasm-util': 7.3.2(@polkadot/util@13.0.2) tslib: 2.7.0 - '@polkadot/wasm-crypto@7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2)': + '@polkadot/wasm-crypto@7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@12.6.2)))': dependencies: '@polkadot/util': 12.6.2 - '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2) + '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@12.6.2))) '@polkadot/wasm-crypto-asmjs': 7.3.2(@polkadot/util@12.6.2) - '@polkadot/wasm-crypto-init': 7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2) + '@polkadot/wasm-crypto-init': 7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@12.6.2))) '@polkadot/wasm-crypto-wasm': 7.3.2(@polkadot/util@12.6.2) '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.2) - '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2) + '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@12.6.2)) tslib: 2.7.0 - '@polkadot/wasm-crypto@7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@12.6.2)': + '@polkadot/wasm-crypto@7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@12.6.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2)))': dependencies: '@polkadot/util': 13.0.2 - '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@12.6.2) + '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@12.6.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2))) '@polkadot/wasm-crypto-asmjs': 7.3.2(@polkadot/util@13.0.2) - '@polkadot/wasm-crypto-init': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@12.6.2) + '@polkadot/wasm-crypto-init': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@12.6.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2))) '@polkadot/wasm-crypto-wasm': 7.3.2(@polkadot/util@13.0.2) '@polkadot/wasm-util': 7.3.2(@polkadot/util@13.0.2) - '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2) + '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2)) tslib: 2.7.0 - '@polkadot/wasm-crypto@7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2)': + '@polkadot/wasm-crypto@7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2)))': dependencies: '@polkadot/util': 13.0.2 - '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2) + '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2))) '@polkadot/wasm-crypto-asmjs': 7.3.2(@polkadot/util@13.0.2) - '@polkadot/wasm-crypto-init': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2) + '@polkadot/wasm-crypto-init': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2))) '@polkadot/wasm-crypto-wasm': 7.3.2(@polkadot/util@13.0.2) '@polkadot/wasm-util': 7.3.2(@polkadot/util@13.0.2) - '@polkadot/x-randomvalues': 13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2) + '@polkadot/x-randomvalues': 13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2)) tslib: 2.7.0 '@polkadot/wasm-util@7.3.2(@polkadot/util@12.6.2)': @@ -6295,21 +6670,21 @@ snapshots: dependencies: tslib: 2.7.0 - '@polkadot/x-randomvalues@12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2)': + '@polkadot/x-randomvalues@12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@12.6.2))': dependencies: '@polkadot/util': 12.6.2 '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.2) '@polkadot/x-global': 12.6.2 tslib: 2.7.0 - '@polkadot/x-randomvalues@12.6.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2)': + '@polkadot/x-randomvalues@12.6.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2))': dependencies: '@polkadot/util': 13.0.2 '@polkadot/wasm-util': 7.3.2(@polkadot/util@13.0.2) '@polkadot/x-global': 12.6.2 tslib: 2.7.0 - '@polkadot/x-randomvalues@13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2)': + '@polkadot/x-randomvalues@13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2))': dependencies: '@polkadot/util': 13.0.2 '@polkadot/wasm-util': 7.3.2(@polkadot/util@13.0.2) @@ -6435,7 +6810,7 @@ snapshots: '@scure/bip32@1.4.0': dependencies: - '@noble/curves': 1.4.0 + '@noble/curves': 1.4.2 '@noble/hashes': 1.4.0 '@scure/base': 1.1.8 @@ -6581,9 +6956,9 @@ snapshots: '@types/ws@8.5.3': dependencies: - '@types/node': 20.11.30 + '@types/node': 22.5.0 - '@typescript-eslint/eslint-plugin@6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.4.2)': + '@typescript-eslint/eslint-plugin@6.15.0(@typescript-eslint/parser@6.15.0(eslint@8.56.0)(typescript@5.4.2))(eslint@8.56.0)(typescript@5.4.2)': dependencies: '@eslint-community/regexpp': 4.11.0 '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.4.2) @@ -6598,6 +6973,7 @@ snapshots: natural-compare: 1.4.0 semver: 7.6.3 ts-api-utils: 1.3.0(typescript@5.4.2) + optionalDependencies: typescript: 5.4.2 transitivePeerDependencies: - supports-color @@ -6610,6 +6986,7 @@ snapshots: '@typescript-eslint/visitor-keys': 6.15.0 debug: 4.3.4 eslint: 8.56.0 + optionalDependencies: typescript: 5.4.2 transitivePeerDependencies: - supports-color @@ -6626,6 +7003,7 @@ snapshots: debug: 4.3.4 eslint: 8.56.0 ts-api-utils: 1.3.0(typescript@5.4.2) + optionalDependencies: typescript: 5.4.2 transitivePeerDependencies: - supports-color @@ -6641,6 +7019,7 @@ snapshots: is-glob: 4.0.3 semver: 7.6.3 ts-api-utils: 1.3.0(typescript@5.4.2) + optionalDependencies: typescript: 5.4.2 transitivePeerDependencies: - supports-color @@ -6697,7 +7076,7 @@ snapshots: pathe: 1.1.2 picocolors: 1.1.0 sirv: 2.0.4 - vitest: 1.4.0(@types/node@20.11.30)(@vitest/ui@1.4.0) + vitest: 1.4.0(@types/node@20.11.30)(@vitest/ui@1.4.0)(jsdom@23.2.0) '@vitest/utils@1.4.0': dependencies: @@ -6752,7 +7131,7 @@ snapshots: '@vue/shared': 3.5.1 csstype: 3.1.3 - '@vue/server-renderer@3.5.1(vue@3.5.1)': + '@vue/server-renderer@3.5.1(vue@3.5.1(typescript@5.4.2))': dependencies: '@vue/compiler-ssr': 3.5.1 '@vue/shared': 3.5.1 @@ -6760,12 +7139,12 @@ snapshots: '@vue/shared@3.5.1': {} - '@zombienet/orchestrator@0.0.87(@polkadot/util@12.6.2)(@types/node@20.11.30)': + '@zombienet/orchestrator@0.0.87(@polkadot/util@12.6.2)(@types/node@20.11.30)(chokidar@3.6.0)': dependencies: '@polkadot/api': 11.3.1 - '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) + '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2(@polkadot/util@12.6.2))(@polkadot/util@12.6.2) '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) - '@zombienet/utils': 0.0.25(@types/node@20.11.30)(typescript@5.4.2) + '@zombienet/utils': 0.0.25(@types/node@20.11.30)(chokidar@3.6.0)(typescript@5.4.2) JSONStream: 1.3.5 chai: 4.5.0 debug: 4.3.4 @@ -6792,12 +7171,12 @@ snapshots: - supports-color - utf-8-validate - '@zombienet/orchestrator@0.0.87(@polkadot/util@13.0.2)(@types/node@20.11.30)': + '@zombienet/orchestrator@0.0.87(@polkadot/util@13.0.2)(@types/node@20.11.30)(chokidar@3.6.0)': dependencies: '@polkadot/api': 11.3.1 - '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@13.0.2) + '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2(@polkadot/util@13.0.2))(@polkadot/util@13.0.2) '@polkadot/util-crypto': 12.6.2(@polkadot/util@13.0.2) - '@zombienet/utils': 0.0.25(@types/node@20.11.30)(typescript@5.4.2) + '@zombienet/utils': 0.0.25(@types/node@20.11.30)(chokidar@3.6.0)(typescript@5.4.2) JSONStream: 1.3.5 chai: 4.5.0 debug: 4.3.4 @@ -6824,12 +7203,12 @@ snapshots: - supports-color - utf-8-validate - '@zombienet/utils@0.0.25(@types/node@20.11.30)(typescript@5.4.2)': + '@zombienet/utils@0.0.25(@types/node@20.11.30)(chokidar@3.6.0)(typescript@5.4.2)': dependencies: cli-table3: 0.6.5 debug: 4.3.4 mocha: 10.7.3 - nunjucks: 3.2.4 + nunjucks: 3.2.4(chokidar@3.6.0) toml: 3.0.0 ts-node: 10.9.2(@types/node@20.11.30)(typescript@5.4.2) transitivePeerDependencies: @@ -6840,12 +7219,12 @@ snapshots: - supports-color - typescript - '@zombienet/utils@0.0.25(@types/node@20.14.10)(typescript@5.4.2)': + '@zombienet/utils@0.0.25(@types/node@20.14.10)(chokidar@3.6.0)(typescript@5.4.2)': dependencies: cli-table3: 0.6.5 debug: 4.3.4 mocha: 10.7.3 - nunjucks: 3.2.4 + nunjucks: 3.2.4(chokidar@3.6.0) toml: 3.0.0 ts-node: 10.9.2(@types/node@20.14.10)(typescript@5.4.2) transitivePeerDependencies: @@ -6866,17 +7245,21 @@ snapshots: abbrev@1.1.1: optional: true - abitype@0.7.1(typescript@5.4.2): + abitype@0.7.1(typescript@5.4.2)(zod@3.23.8): dependencies: typescript: 5.4.2 + optionalDependencies: + zod: 3.23.8 - abitype@1.0.0(typescript@5.4.2): - dependencies: + abitype@1.0.0(typescript@5.4.2)(zod@3.23.8): + optionalDependencies: typescript: 5.4.2 + zod: 3.23.8 - abitype@1.0.5(typescript@5.4.2): - dependencies: + abitype@1.0.5(typescript@5.4.2)(zod@3.23.8): + optionalDependencies: typescript: 5.4.2 + zod: 3.23.8 abort-controller@3.0.0: dependencies: @@ -6892,6 +7275,8 @@ snapshots: acorn@8.12.1: {} + aes-js@3.0.0: {} + aes-js@4.0.0-beta.5: {} agent-base@6.0.2: @@ -6996,6 +7381,8 @@ snapshots: base64-js@1.5.1: {} + bech32@1.1.4: {} + before-after-hook@3.0.2: {} bidi-js@1.0.3: @@ -7024,6 +7411,8 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + bn.js@4.12.0: {} + bn.js@5.2.1: {} boolean@3.2.0: {} @@ -7043,6 +7432,8 @@ snapshots: dependencies: fill-range: 7.1.1 + brorand@1.1.0: {} + browser-stdout@1.3.1: {} buffer@5.7.1: @@ -7241,9 +7632,9 @@ snapshots: create-require@1.1.1: {} - cross-fetch@4.0.0: + cross-fetch@4.0.0(encoding@0.1.13): dependencies: - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) transitivePeerDependencies: - encoding @@ -7286,6 +7677,7 @@ snapshots: debug@4.3.6(supports-color@8.1.1): dependencies: ms: 2.1.2 + optionalDependencies: supports-color: 8.1.1 decamelize@4.0.0: {} @@ -7384,6 +7776,16 @@ snapshots: eastasianwidth@0.2.0: {} + elliptic@6.5.4: + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -7593,15 +7995,38 @@ snapshots: '@scure/bip32': 1.4.0 '@scure/bip39': 1.3.0 - ethers@6.11.1: - dependencies: - '@adraffy/ens-normalize': 1.10.1 - '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 - '@types/node': 18.15.13 - aes-js: 4.0.0-beta.5 - tslib: 2.4.0 - ws: 8.5.0 + ethers@5.7.2: + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/providers': 5.7.2 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/solidity': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/units': 5.7.0 + '@ethersproject/wallet': 5.7.0 + '@ethersproject/web': 5.7.1 + '@ethersproject/wordlists': 5.7.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -7718,7 +8143,7 @@ snapshots: flatted@3.3.1: {} follow-redirects@1.15.8(debug@4.3.4): - dependencies: + optionalDependencies: debug: 4.3.4 for-each@0.3.3: @@ -7905,6 +8330,11 @@ snapshots: has-unicode@2.0.1: optional: true + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -7915,6 +8345,12 @@ snapshots: highlight.js@10.7.3: {} + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + html-encoding-sniffer@4.0.0: dependencies: whatwg-encoding: 3.1.1 @@ -8543,6 +8979,10 @@ snapshots: mimic-response@3.1.0: {} + minimalistic-assert@1.0.1: {} + + minimalistic-crypto-utils@1.0.1: {} + minimatch@10.0.1: dependencies: brace-expansion: 2.0.1 @@ -8703,9 +9143,11 @@ snapshots: node-domexception@1.0.0: {} - node-fetch@2.7.0: + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 node-fetch@3.3.2: dependencies: @@ -8755,11 +9197,13 @@ snapshots: set-blocking: 2.0.0 optional: true - nunjucks@3.2.4: + nunjucks@3.2.4(chokidar@3.6.0): dependencies: a-sync-waterfall: 1.0.1 asap: 2.0.6 commander: 5.1.0 + optionalDependencies: + chokidar: 3.6.0 object-assign@4.1.1: {} @@ -9019,7 +9463,7 @@ snapshots: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 '@types/long': 4.0.2 - '@types/node': 20.11.30 + '@types/node': 22.5.0 long: 4.0.0 proxy-from-env@1.1.0: {} @@ -9177,6 +9621,8 @@ snapshots: scale-ts@1.6.0: optional: true + scrypt-js@3.0.1: {} + secure-json-parse@2.7.0: {} semver-compare@1.0.0: {} @@ -9550,7 +9996,7 @@ snapshots: type-fest@0.21.3: {} - typeorm@0.3.20(sqlite3@5.1.7): + typeorm@0.3.20(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.11.30)(typescript@5.4.2)): dependencies: '@sqltools/formatter': 1.2.5 app-root-path: 3.1.0 @@ -9564,10 +10010,12 @@ snapshots: mkdirp: 2.1.6 reflect-metadata: 0.2.2 sha.js: 2.4.11 - sqlite3: 5.1.7 tslib: 2.7.0 uuid: 9.0.1 yargs: 17.7.2 + optionalDependencies: + sqlite3: 5.1.7 + ts-node: 10.9.2(@types/node@20.11.30)(typescript@5.4.2) transitivePeerDependencies: - supports-color @@ -9631,33 +10079,35 @@ snapshots: v8-compile-cache-lib@3.0.1: {} - viem@2.17.3(typescript@5.4.2): + viem@2.17.3(typescript@5.4.2)(zod@3.23.8): dependencies: '@adraffy/ens-normalize': 1.10.0 '@noble/curves': 1.4.0 '@noble/hashes': 1.4.0 '@scure/bip32': 1.4.0 '@scure/bip39': 1.3.0 - abitype: 1.0.5(typescript@5.4.2) + abitype: 1.0.5(typescript@5.4.2)(zod@3.23.8) isows: 1.0.4(ws@8.17.1) - typescript: 5.4.2 ws: 8.17.1 + optionalDependencies: + typescript: 5.4.2 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - viem@2.8.14(typescript@5.4.2): + viem@2.8.14(typescript@5.4.2)(zod@3.23.8): dependencies: '@adraffy/ens-normalize': 1.10.0 '@noble/curves': 1.2.0 '@noble/hashes': 1.3.2 '@scure/bip32': 1.3.2 '@scure/bip39': 1.2.1 - abitype: 1.0.0(typescript@5.4.2) + abitype: 1.0.0(typescript@5.4.2)(zod@3.23.8) isows: 1.0.3(ws@8.13.0) - typescript: 5.4.2 ws: 8.13.0 + optionalDependencies: + typescript: 5.4.2 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -9683,21 +10133,19 @@ snapshots: vite@5.4.3(@types/node@20.11.30): dependencies: - '@types/node': 20.11.30 esbuild: 0.21.5 postcss: 8.4.45 rollup: 4.21.2 optionalDependencies: + '@types/node': 20.11.30 fsevents: 2.3.3 - vitest@1.4.0(@types/node@20.11.30)(@vitest/ui@1.4.0): + vitest@1.4.0(@types/node@20.11.30)(@vitest/ui@1.4.0)(jsdom@23.2.0): dependencies: - '@types/node': 20.11.30 '@vitest/expect': 1.4.0 '@vitest/runner': 1.4.0 '@vitest/snapshot': 1.4.0 '@vitest/spy': 1.4.0 - '@vitest/ui': 1.4.0(vitest@1.4.0) '@vitest/utils': 1.4.0 acorn-walk: 8.3.3 chai: 4.5.0 @@ -9714,6 +10162,10 @@ snapshots: vite: 5.4.3(@types/node@20.11.30) vite-node: 1.4.0(@types/node@20.11.30) why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 20.11.30 + '@vitest/ui': 1.4.0(vitest@1.4.0) + jsdom: 23.2.0 transitivePeerDependencies: - less - lightningcss @@ -9729,8 +10181,9 @@ snapshots: '@vue/compiler-dom': 3.5.1 '@vue/compiler-sfc': 3.5.1 '@vue/runtime-dom': 3.5.1 - '@vue/server-renderer': 3.5.1(vue@3.5.1) + '@vue/server-renderer': 3.5.1(vue@3.5.1(typescript@5.4.2)) '@vue/shared': 3.5.1 + optionalDependencies: typescript: 5.4.2 w3c-xmlserializer@5.0.0: @@ -9743,12 +10196,12 @@ snapshots: web-streams-polyfill@3.3.3: {} - web3-core@4.5.1: + web3-core@4.5.1(encoding@0.1.13): dependencies: web3-errors: 1.3.0 web3-eth-accounts: 4.2.1 web3-eth-iban: 4.0.7 - web3-providers-http: 4.2.0 + web3-providers-http: 4.2.0(encoding@0.1.13) web3-providers-ws: 4.0.8 web3-types: 1.7.0 web3-utils: 4.3.1 @@ -9764,9 +10217,9 @@ snapshots: dependencies: web3-types: 1.7.0 - web3-eth-abi@4.2.3(typescript@5.4.2): + web3-eth-abi@4.2.3(typescript@5.4.2)(zod@3.23.8): dependencies: - abitype: 0.7.1(typescript@5.4.2) + abitype: 0.7.1(typescript@5.4.2)(zod@3.23.8) web3-errors: 1.3.0 web3-types: 1.7.0 web3-utils: 4.3.1 @@ -9785,13 +10238,13 @@ snapshots: web3-utils: 4.3.1 web3-validator: 2.0.6 - web3-eth-contract@4.7.0(typescript@5.4.2): + web3-eth-contract@4.7.0(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8): dependencies: '@ethereumjs/rlp': 5.0.2 - web3-core: 4.5.1 + web3-core: 4.5.1(encoding@0.1.13) web3-errors: 1.3.0 - web3-eth: 4.8.2(typescript@5.4.2) - web3-eth-abi: 4.2.3(typescript@5.4.2) + web3-eth: 4.8.2(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8) + web3-eth-abi: 4.2.3(typescript@5.4.2)(zod@3.23.8) web3-types: 1.7.0 web3-utils: 4.3.1 web3-validator: 2.0.6 @@ -9802,14 +10255,14 @@ snapshots: - utf-8-validate - zod - web3-eth-ens@4.4.0(typescript@5.4.2): + web3-eth-ens@4.4.0(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8): dependencies: '@adraffy/ens-normalize': 1.10.1 - web3-core: 4.5.1 + web3-core: 4.5.1(encoding@0.1.13) web3-errors: 1.3.0 - web3-eth: 4.8.2(typescript@5.4.2) - web3-eth-contract: 4.7.0(typescript@5.4.2) - web3-net: 4.1.0 + web3-eth: 4.8.2(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8) + web3-eth-contract: 4.7.0(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8) + web3-net: 4.1.0(encoding@0.1.13) web3-types: 1.7.0 web3-utils: 4.3.1 web3-validator: 2.0.6 @@ -9827,11 +10280,11 @@ snapshots: web3-utils: 4.3.1 web3-validator: 2.0.6 - web3-eth-personal@4.0.8(typescript@5.4.2): + web3-eth-personal@4.0.8(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8): dependencies: - web3-core: 4.5.1 - web3-eth: 4.8.2(typescript@5.4.2) - web3-rpc-methods: 1.3.0 + web3-core: 4.5.1(encoding@0.1.13) + web3-eth: 4.8.2(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8) + web3-rpc-methods: 1.3.0(encoding@0.1.13) web3-types: 1.7.0 web3-utils: 4.3.1 web3-validator: 2.0.6 @@ -9842,16 +10295,16 @@ snapshots: - utf-8-validate - zod - web3-eth@4.8.2(typescript@5.4.2): + web3-eth@4.8.2(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8): dependencies: setimmediate: 1.0.5 - web3-core: 4.5.1 + web3-core: 4.5.1(encoding@0.1.13) web3-errors: 1.3.0 - web3-eth-abi: 4.2.3(typescript@5.4.2) + web3-eth-abi: 4.2.3(typescript@5.4.2)(zod@3.23.8) web3-eth-accounts: 4.2.1 - web3-net: 4.1.0 + web3-net: 4.1.0(encoding@0.1.13) web3-providers-ws: 4.0.8 - web3-rpc-methods: 1.3.0 + web3-rpc-methods: 1.3.0(encoding@0.1.13) web3-types: 1.7.0 web3-utils: 4.3.1 web3-validator: 2.0.6 @@ -9862,10 +10315,10 @@ snapshots: - utf-8-validate - zod - web3-net@4.1.0: + web3-net@4.1.0(encoding@0.1.13): dependencies: - web3-core: 4.5.1 - web3-rpc-methods: 1.3.0 + web3-core: 4.5.1(encoding@0.1.13) + web3-rpc-methods: 1.3.0(encoding@0.1.13) web3-types: 1.7.0 web3-utils: 4.3.1 transitivePeerDependencies: @@ -9873,9 +10326,9 @@ snapshots: - encoding - utf-8-validate - web3-providers-http@4.2.0: + web3-providers-http@4.2.0(encoding@0.1.13): dependencies: - cross-fetch: 4.0.0 + cross-fetch: 4.0.0(encoding@0.1.13) web3-errors: 1.3.0 web3-types: 1.7.0 web3-utils: 4.3.1 @@ -9913,9 +10366,9 @@ snapshots: - bufferutil - utf-8-validate - web3-rpc-methods@1.3.0: + web3-rpc-methods@1.3.0(encoding@0.1.13): dependencies: - web3-core: 4.5.1 + web3-core: 4.5.1(encoding@0.1.13) web3-types: 1.7.0 web3-validator: 2.0.6 transitivePeerDependencies: @@ -9923,10 +10376,10 @@ snapshots: - encoding - utf-8-validate - web3-rpc-providers@1.0.0-rc.2: + web3-rpc-providers@1.0.0-rc.2(encoding@0.1.13): dependencies: web3-errors: 1.3.0 - web3-providers-http: 4.2.0 + web3-providers-http: 4.2.0(encoding@0.1.13) web3-providers-ws: 4.0.8 web3-types: 1.7.0 web3-utils: 4.3.1 @@ -9954,22 +10407,22 @@ snapshots: web3-types: 1.7.0 zod: 3.23.8 - web3@4.10.0(typescript@5.4.2): + web3@4.10.0(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8): dependencies: - web3-core: 4.5.1 + web3-core: 4.5.1(encoding@0.1.13) web3-errors: 1.3.0 - web3-eth: 4.8.2(typescript@5.4.2) - web3-eth-abi: 4.2.3(typescript@5.4.2) + web3-eth: 4.8.2(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8) + web3-eth-abi: 4.2.3(typescript@5.4.2)(zod@3.23.8) web3-eth-accounts: 4.2.1 - web3-eth-contract: 4.7.0(typescript@5.4.2) - web3-eth-ens: 4.4.0(typescript@5.4.2) + web3-eth-contract: 4.7.0(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8) + web3-eth-ens: 4.4.0(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8) web3-eth-iban: 4.0.7 - web3-eth-personal: 4.0.8(typescript@5.4.2) - web3-net: 4.1.0 - web3-providers-http: 4.2.0 + web3-eth-personal: 4.0.8(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8) + web3-net: 4.1.0(encoding@0.1.13) + web3-providers-http: 4.2.0(encoding@0.1.13) web3-providers-ws: 4.0.7 - web3-rpc-methods: 1.3.0 - web3-rpc-providers: 1.0.0-rc.2 + web3-rpc-methods: 1.3.0(encoding@0.1.13) + web3-rpc-providers: 1.0.0-rc.2(encoding@0.1.13) web3-types: 1.7.0 web3-utils: 4.3.1 web3-validator: 2.0.6 @@ -9980,21 +10433,21 @@ snapshots: - utf-8-validate - zod - web3@4.6.0(typescript@5.4.2): + web3@4.6.0(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8): dependencies: - web3-core: 4.5.1 + web3-core: 4.5.1(encoding@0.1.13) web3-errors: 1.3.0 - web3-eth: 4.8.2(typescript@5.4.2) - web3-eth-abi: 4.2.3(typescript@5.4.2) + web3-eth: 4.8.2(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8) + web3-eth-abi: 4.2.3(typescript@5.4.2)(zod@3.23.8) web3-eth-accounts: 4.2.1 - web3-eth-contract: 4.7.0(typescript@5.4.2) - web3-eth-ens: 4.4.0(typescript@5.4.2) + web3-eth-contract: 4.7.0(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8) + web3-eth-ens: 4.4.0(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8) web3-eth-iban: 4.0.7 - web3-eth-personal: 4.0.8(typescript@5.4.2) - web3-net: 4.1.0 - web3-providers-http: 4.2.0 + web3-eth-personal: 4.0.8(encoding@0.1.13)(typescript@5.4.2)(zod@3.23.8) + web3-net: 4.1.0(encoding@0.1.13) + web3-providers-http: 4.2.0(encoding@0.1.13) web3-providers-ws: 4.0.7 - web3-rpc-methods: 1.3.0 + web3-rpc-methods: 1.3.0(encoding@0.1.13) web3-types: 1.7.0 web3-utils: 4.3.1 web3-validator: 2.0.6 @@ -10093,14 +10546,14 @@ snapshots: wrappy@1.0.2: {} + ws@7.4.6: {} + ws@8.13.0: {} ws@8.17.1: {} ws@8.18.0: {} - ws@8.5.0: {} - xml-name-validator@5.0.0: {} xmlchars@2.2.0: {} diff --git a/primitives/traits/src/alias.rs b/primitives/traits/src/alias.rs index 1e383f83f..c0aee5a16 100644 --- a/primitives/traits/src/alias.rs +++ b/primitives/traits/src/alias.rs @@ -73,23 +73,58 @@ macro_rules! derive_scale_codec { } } -macro_rules! trait_alias { - ($vis:vis $alias:ident : $bound0:path $(, $boundN:path)* $(,)?) => { - $vis trait $alias: $bound0 $(+ $boundN)* { } - impl $alias for T { } +/// Macro to define a trait alias for one or othe traits. +/// Thanks to Associated Type Bounds syntax stabilized in Rust 1.79, it can be used to +/// reduce the need to repeat a lot of `::Baz : Traits`. +/// +/// Extra parenthesis around bounds allows to easily parse them as-is and not restrict their +/// expressivity. +#[macro_export] +macro_rules! alias { + ( + $(#[$attr:meta])* + $vis:vis + trait + $alias:ident + $(< $( + $tparam:ident + $( : ( $( $tparam_bound:tt )+ ) )? + ),+ $(,)? >)? + : $( $bounds:tt )+ + ) => { + $(#[$attr])* + $vis trait $alias $( < $( + $tparam + $( : $($tparam_bound)+)? + ),+ > )? + : $( $bounds )+ + { } + + impl<__Self, $( $( + $tparam + $( : $($tparam_bound)+)? + ),+ )?> + $alias $( < $( $tparam ),+ > )? + for __Self + where __Self : $( $bounds )+ + { } } } -trait_alias!(pub ScaleCodec: - __reexports::Encode, - __reexports::Decode, - __reexports::TypeInfo, +alias!( + pub trait ScaleCodec : + __reexports::Encode + + __reexports::Decode + + __reexports::TypeInfo + ); -trait_alias!(pub StorageTraits: - ::core::fmt::Debug, - ::core::clone::Clone, - ::core::cmp::Eq, - ::core::cmp::PartialEq, - ScaleCodec, +alias!( + pub trait StorageTraits : + ::core::fmt::Debug + + ::core::clone::Clone + + ::core::cmp::Eq + + ::core::cmp::PartialEq + + ScaleCodec + ); diff --git a/test/configs/zombieDataPreservers.json b/test/configs/zombieDataPreservers.json index 403440385..edff44ce0 100644 --- a/test/configs/zombieDataPreservers.json +++ b/test/configs/zombieDataPreservers.json @@ -33,14 +33,22 @@ { "name": "bob", "validator": true + }, + { + "name": "charlie", + "validator": true + }, + { + "name": "dave", + "validator": true } ] }, "parachains": [ { "id": 1000, - "chain_spec_path": "specs/single-container-tanssi-1000.json", - "COMMENT": "Important: these collators will not be injected to pallet-invulnerables because zombienet does not support that. When changing the collators list, make sure to update `scripts/build-spec-single-container.sh`", + "chain_spec_path": "specs/data-preservers-dancebox-1000.json", + "COMMENT": "Important: these collators will not be injected to pallet-invulnerables because zombienet does not support that. When changing the collators list, make sure to update `scripts/build-spec-data-preservers.sh`", "collators": [ { "name": "FullNode-1000", @@ -70,15 +78,46 @@ "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] }, { - "name": "Collator1000-03", + "name": "Collator2001-01", "command": "../target/release/tanssi-node", "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] + }, + { + "name": "Collator2001-02", + "command": "../target/release/tanssi-node", + "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] + }, + { + "name": "DataPreserver-2000", + "validator": false, + "command": "../target/release/container-chain-simple-node", + "args": [ + "--rpc-provider-profile-id=0", + "--orchestrator-endpoints=ws://127.0.0.1:9948/", + "--database=paritydb", + "--wasmtime-precompiled=wasm", + "-- --rpc-port 9950" + ], + "prometheus_port": 33102 + }, + { + "name": "DataPreserver-2001", + "validator": false, + "command": "../target/release/container-chain-frontier-node", + "args": [ + "--rpc-provider-profile-id=1", + "--orchestrator-endpoints=ws://127.0.0.1:9948/", + "--database=paritydb", + "--wasmtime-precompiled=wasm", + "-- --rpc-port 9952 --rpc-cors all --unsafe-rpc-external --rpc-methods unsafe" + ], + "prometheus_port": 33103 } ] }, { "id": 2000, - "chain_spec_path": "specs/single-container-template-container-2000.json", + "chain_spec_path": "specs/data-preservers-container-2000.json", "collators": [ { "name": "FullNode-2000", @@ -88,19 +127,21 @@ "ws_port": 9949, "p2p_port": 33049, "prometheus_port": 33102 - }, + } + ] + }, + { + "id": 2001, + "chain_spec_path": "specs/data-preservers-container-2001.json", + "collators": [ { - "name": "DataPreserver", + "name": "FullNode-2001", "validator": false, - "command": "../target/release/container-chain-simple-node", - "args": [ - "--rpc-provider-profile-id=0", - "--orchestrator-endpoints=ws://127.0.0.1:9948/", - "--database=paritydb", - "--wasmtime-precompiled=wasm", - "-- --rpc-port 9950" - ], - "prometheus_port": 33102 + "command": "../target/release/container-chain-frontier-node", + "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"], + "ws_port": 9951, + "p2p_port": 33050, + "prometheus_port": 33103 } ] } diff --git a/test/moonwall.config.json b/test/moonwall.config.json index 829c8cda0..cc6c89c54 100644 --- a/test/moonwall.config.json +++ b/test/moonwall.config.json @@ -746,10 +746,11 @@ "name": "zombie_data_preservers", "testFileDir": ["suites/data-preservers"], "runScripts": [ - "build-spec-single-container.sh", + "build-spec-data-preservers.sh", "download-polkadot.sh", - "compile-wasm.ts compile -b ../target/release/tanssi-node -o wasm -c specs/single-container-tanssi-1000.json", - "compile-wasm.ts compile -b ../target/release/container-chain-simple-node -o wasm -c specs/single-container-template-container-2000.json" + "compile-wasm.ts compile -b ../target/release/tanssi-node -o wasm -c specs/data-preservers-dancebox-1000.json", + "compile-wasm.ts compile -b ../target/release/container-chain-simple-node -o wasm -c specs/data-preservers-container-2000.json", + "compile-wasm.ts compile -b ../target/release/container-chain-frontier-node -o wasm -c specs/data-preservers-container-2001.json" ], "timeout": 600000, "foundation": { @@ -776,9 +777,19 @@ "endpoints": ["ws://127.0.0.1:9949"] }, { - "name": "DataPreserver", + "name": "DataPreserver-2000", "type": "polkadotJs", "endpoints": ["ws://127.0.0.1:9950"] + }, + { + "name": "Container2001", + "type": "polkadotJs", + "endpoints": ["ws://127.0.0.1:9951"] + }, + { + "name": "DataPreserver-2001", + "type": "polkadotJs", + "endpoints": ["ws://127.0.0.1:9952"] } ] }, diff --git a/test/package.json b/test/package.json index 80e81df33..19a0cb0ed 100644 --- a/test/package.json +++ b/test/package.json @@ -46,7 +46,7 @@ "chalk": "5.3.0", "debug": "4.3.4", "eslint": "8.56.0", - "ethers": "6.11.1", + "ethers": "^5.4", "json-bigint": "1.0.0", "pnpm": "9.9.0", "prettier": "2.8.8", diff --git a/test/scripts/build-spec-data-preservers.sh b/test/scripts/build-spec-data-preservers.sh new file mode 100755 index 000000000..9e01c81a3 --- /dev/null +++ b/test/scripts/build-spec-data-preservers.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Exit on any error +set -e + +# Always run the commands from the "test" dir +cd $(dirname $0)/.. + +mkdir -p specs +../target/release/container-chain-simple-node build-spec\ + --disable-default-bootnode\ + --add-bootnode "/ip4/127.0.0.1/tcp/33049/ws/p2p/12D3KooWHVMhQDHBpj9vQmssgyfspYecgV6e3hH1dQVDUkUbCYC9"\ + --parachain-id 2000\ + --raw > specs/data-preservers-container-2000.json + +../target/release/container-chain-frontier-node build-spec\ + --disable-default-bootnode\ + --add-bootnode "/ip4/127.0.0.1/tcp/33050/ws/p2p/12D3KooWFGaw1rxB6MSuN3ucuBm7hMq5pBFJbEoqTyth4cG483Cc"\ + --parachain-id 2001\ + --raw > specs/data-preservers-container-2001.json + +../target/release/tanssi-node build-spec\ + --chain dancebox-local\ + --parachain-id 1000\ + --add-container-chain specs/data-preservers-container-2000.json\ + --add-container-chain specs/data-preservers-container-2001.json\ + --invulnerable "Collator1000-01" --invulnerable "Collator1000-02"\ + --invulnerable "Collator2000-01" --invulnerable "Collator2000-02"\ + --invulnerable "Collator2001-01" --invulnerable "Collator2001-02" > specs/data-preservers-dancebox-1000.json diff --git a/test/suites/data-preservers/test_data_preservers.ts b/test/suites/data-preservers/test_data_preservers.ts index f587ef5ca..8636554ad 100644 --- a/test/suites/data-preservers/test_data_preservers.ts +++ b/test/suites/data-preservers/test_data_preservers.ts @@ -3,6 +3,8 @@ import { ApiPromise, Keyring } from "@polkadot/api"; import { signAndSendAndInclude } from "../../util/block"; import { getHeaderFromRelay } from "../../util/relayInterface"; import fs from "fs/promises"; +import ethers from "ethers"; +import { BALTATHAR_PRIVATE_KEY, CHARLETH_ADDRESS } from "@moonwall/util"; describeSuite({ id: "DP01", @@ -12,11 +14,13 @@ describeSuite({ let paraApi: ApiPromise; let relayApi: ApiPromise; let container2000Api: ApiPromise; + let container2001Api: ApiPromise; beforeAll(async () => { paraApi = context.polkadotJs("Tanssi"); relayApi = context.polkadotJs("Relay"); container2000Api = context.polkadotJs("Container2000"); + container2001Api = context.polkadotJs("Container2001"); const relayNetwork = relayApi.consts.system.version.specName.toString(); expect(relayNetwork, "Relay API incorrect").to.contain("rococo"); @@ -31,6 +35,11 @@ describeSuite({ expect(container2000Network, "Container2000 API incorrect").to.contain("container-chain-template"); expect(paraId2000, "Container2000 API incorrect").to.be.equal("2000"); + const container2001Network = container2001Api.consts.system.version.specName.toString(); + const paraId2001 = (await container2001Api.query.parachainInfo.parachainId()).toString(); + expect(container2001Network, "Container2001 API incorrect").to.contain("frontier-template"); + expect(paraId2001, "Container2001 API incorrect").to.be.equal("2001"); + // Test block numbers in relay are 0 yet const header2000 = await getHeaderFromRelay(relayApi, 2000); @@ -48,18 +57,18 @@ describeSuite({ it({ id: "T02", - title: "Data preservers watcher properly starts", + title: "Data preservers 2000 watcher properly starts", test: async function () { - const logFilePath = getTmpZombiePath() + "/DataPreserver.log"; + const logFilePath = getTmpZombiePath() + "/DataPreserver-2000.log"; await waitForLogs(logFilePath, 300, ["Assignement for block"]); }, }); it({ id: "T03", - title: "Change assignment", + title: "Change assignment 2000", test: async function () { - const logFilePath = getTmpZombiePath() + "/DataPreserver.log"; + const logFilePath = getTmpZombiePath() + "/DataPreserver-2000.log"; const keyring = new Keyring({ type: "sr25519" }); const alice = keyring.addFromUri("//Alice", { name: "Alice default" }); @@ -87,15 +96,85 @@ describeSuite({ it({ id: "T04", - title: "RPC endpoint is properly started", + title: "RPC endpoint 2000 is properly started", test: async function () { - const preserverApi = context.polkadotJs("DataPreserver"); + const preserverApi = context.polkadotJs("DataPreserver-2000"); const container2000Network = preserverApi.consts.system.version.specName.toString(); const paraId2000 = (await preserverApi.query.parachainInfo.parachainId()).toString(); expect(container2000Network, "Container2000 API incorrect").to.contain("container-chain-template"); expect(paraId2000, "Container2000 API incorrect").to.be.equal("2000"); }, }); + + it({ + id: "T05", + title: "Data preservers 2001 watcher properly starts", + test: async function () { + const logFilePath = getTmpZombiePath() + "/DataPreserver-2001.log"; + await waitForLogs(logFilePath, 300, ["Assignement for block"]); + }, + }); + + it({ + id: "T06", + title: "Change assignment 2001", + test: async function () { + const logFilePath = getTmpZombiePath() + "/DataPreserver-2001.log"; + const keyring = new Keyring({ type: "sr25519" }); + const alice = keyring.addFromUri("//Alice", { name: "Alice default" }); + + const profile = { + url: "exemple", + paraIds: "AnyParaId", + mode: { rpc: { supportsEthereumRpc: true } }, + }; + + { + const tx = paraApi.tx.dataPreservers.forceCreateProfile(profile, alice.address); + await signAndSendAndInclude(paraApi.tx.sudo.sudo(tx), alice); + await context.waitBlock(1, "Tanssi"); + } + + { + const tx = paraApi.tx.dataPreservers.forceStartAssignment(1, 2001, "Free"); + await signAndSendAndInclude(paraApi.tx.sudo.sudo(tx), alice); + await context.waitBlock(1, "Tanssi"); + } + + await waitForLogs(logFilePath, 300, ["Active(Id(2001))"]); + }, + }); + + it({ + id: "T07", + title: "RPC endpoint 2001 is properly started", + test: async function () { + const preserverApi = context.polkadotJs("DataPreserver-2001"); + const container2001Network = preserverApi.consts.system.version.specName.toString(); + const paraId2001 = (await preserverApi.query.parachainInfo.parachainId()).toString(); + expect(container2001Network, "Container2001 API incorrect").to.contain("frontier-template"); + expect(paraId2001, "Container2001 API incorrect").to.be.equal("2001"); + }, + }); + + it({ + id: "T08", + title: "RPC endpoint 2001 is Ethereum compatible", + test: async function () { + const url = "ws://127.0.0.1:9952"; + const customHttpProvider = new ethers.providers.WebSocketProvider(url); + console.log((await customHttpProvider.getNetwork()).chainId); + + const signer = new ethers.Wallet(BALTATHAR_PRIVATE_KEY, customHttpProvider); + const tx = await signer.sendTransaction({ + to: CHARLETH_ADDRESS, + value: ethers.utils.parseUnits("0.001", "ether"), + }); + + await customHttpProvider.waitForTransaction(tx.hash); + expect(Number(await customHttpProvider.getBalance(CHARLETH_ADDRESS))).to.be.greaterThan(0); + }, + }); }, });