From a4f302b9968afbf0019ef9f092fed38583fc45f2 Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Mon, 3 Feb 2025 19:53:49 +0100 Subject: [PATCH 01/31] fix: skipping eras without payouts --- pallets/ddc-verification/src/aggregator_client.rs | 9 +++++++++ pallets/ddc-verification/src/lib.rs | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/pallets/ddc-verification/src/aggregator_client.rs b/pallets/ddc-verification/src/aggregator_client.rs index 7f18b73e6..35105926e 100644 --- a/pallets/ddc-verification/src/aggregator_client.rs +++ b/pallets/ddc-verification/src/aggregator_client.rs @@ -646,6 +646,15 @@ pub(crate) mod json { pub number_of_gets: u64, } + impl EHDUsage { + pub fn has_usage(&self) -> bool { + self.stored_bytes > 0 && + self.transferred_bytes > 0 && + self.number_of_puts > 0 && + self.number_of_gets > 0 + } + } + #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Encode, Decode)] pub struct EHDUsagePercent { #[serde(rename = "storedBytesPercent")] diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index 5a2895ab6..e98de4afc 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -2696,6 +2696,15 @@ pub mod pallet { if let Some(inspected_ehds) = Self::fetch_last_inspected_ehds(cluster_id) { for inspected_ehd in inspected_ehds.clone().into_iter().sorted() { if inspected_ehd.2 > last_paid_era_for_cluster { + let ehd_root = + Self::get_ehd_root(cluster_id, inspected_ehd.clone()) + .expect("EHD to be fetched"); + + let cluster_usage = ehd_root.get_cluster_usage(); + if !cluster_usage.has_usage() { + continue; + } + let receipts_by_inspector = Self::fetch_inspection_receipts( cluster_id, inspected_ehd.clone(), From 75fc64758f4f789a5a667144dad0859676310cbd Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Mon, 3 Feb 2025 23:30:23 +0100 Subject: [PATCH 02/31] fix: genesis initialization for verification pallet --- pallets/ddc-verification/src/lib.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index e98de4afc..d627b3f8c 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -4648,7 +4648,7 @@ pub mod pallet { #[pallet::genesis_config] pub struct GenesisConfig { - pub validators: Vec, + pub validators: Vec<(T::AccountId, T::AccountId)>, } impl Default for GenesisConfig { @@ -4663,8 +4663,11 @@ pub mod pallet { T::AccountId: UncheckedFrom + AsRef<[u8]>, { fn build(&self) { - for validator in &self.validators { - >::append(validator); + for (verification_key, stash_key) in &self.validators { + // > should be updated in 'on_genesis_session' handler + if >::get().contains(verification_key) { + ValidatorToStashKey::::insert(&verification_key, &stash_key); + } } } } From 43d25772f03b181a2a6f7af58e6a5852a0d137d6 Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Mon, 3 Feb 2025 23:32:31 +0100 Subject: [PATCH 03/31] chore: runtime version bump --- runtime/cere-dev/src/lib.rs | 2 +- runtime/cere/src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/runtime/cere-dev/src/lib.rs b/runtime/cere-dev/src/lib.rs index 482d0fbff..f96e2ecff 100644 --- a/runtime/cere-dev/src/lib.rs +++ b/runtime/cere-dev/src/lib.rs @@ -155,7 +155,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 72005, + spec_version: 72006, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 24, diff --git a/runtime/cere/src/lib.rs b/runtime/cere/src/lib.rs index 162b2e7cc..f109a5f17 100644 --- a/runtime/cere/src/lib.rs +++ b/runtime/cere/src/lib.rs @@ -148,7 +148,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 72005, + spec_version: 72006, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 24, From 9326187b3e9257a5d6e0f07b8227012ef8bcc85b Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Mon, 3 Feb 2025 23:45:11 +0100 Subject: [PATCH 04/31] fix: clippy issues --- pallets/ddc-verification/src/lib.rs | 2 +- pallets/ddc-verification/src/mock.rs | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index d627b3f8c..0aa8df36f 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -4666,7 +4666,7 @@ pub mod pallet { for (verification_key, stash_key) in &self.validators { // > should be updated in 'on_genesis_session' handler if >::get().contains(verification_key) { - ValidatorToStashKey::::insert(&verification_key, &stash_key); + ValidatorToStashKey::::insert(verification_key, stash_key); } } } diff --git a/pallets/ddc-verification/src/mock.rs b/pallets/ddc-verification/src/mock.rs index b4af38b4a..bce861570 100644 --- a/pallets/ddc-verification/src/mock.rs +++ b/pallets/ddc-verification/src/mock.rs @@ -527,8 +527,10 @@ pub fn new_test_ext() -> sp_io::TestExternalities { let verification_key = AccountId::decode(&mut &arr[..]).unwrap(); - let _ = pallet_ddc_verification::GenesisConfig:: { validators: vec![verification_key] } - .assimilate_storage(&mut storage); + let _ = pallet_ddc_verification::GenesisConfig:: { + validators: vec![(verification_key.clone(), verification_key)], + } + .assimilate_storage(&mut storage); sp_io::TestExternalities::new(storage) } From f6e27e2333489fadf5e86cc7ff309f11f9befc99 Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Mon, 3 Feb 2025 23:49:27 +0100 Subject: [PATCH 05/31] ci: replacing v3 of actions/upload-artifact with v4 --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 067aac579..25cb119f0 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -116,7 +116,7 @@ jobs: version: '0.22.0' args: '--verbose --locked --no-fail-fast --workspace --features runtime-benchmarks --out "Xml"' - name: Upload coverage report - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: tarpaulin coverage path: ./tarpaulin-report.xml From 02992a50b9abe639789b1a9c258b0841fc44880c Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Tue, 4 Feb 2025 12:25:59 +0100 Subject: [PATCH 06/31] chore: addressing PR's comments --- .../ddc-verification/src/aggregator_client.rs | 22 ++++++++++--------- pallets/ddc-verification/src/lib.rs | 4 +++- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/pallets/ddc-verification/src/aggregator_client.rs b/pallets/ddc-verification/src/aggregator_client.rs index 35105926e..c96789a69 100644 --- a/pallets/ddc-verification/src/aggregator_client.rs +++ b/pallets/ddc-verification/src/aggregator_client.rs @@ -633,7 +633,18 @@ pub(crate) mod json { } #[derive( - Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, + Default, + Debug, + Serialize, + Deserialize, + Clone, + Hash, + Ord, + PartialOrd, + PartialEq, + Eq, + Encode, + Decode, )] pub struct EHDUsage { #[serde(rename = "storedBytes")] @@ -646,15 +657,6 @@ pub(crate) mod json { pub number_of_gets: u64, } - impl EHDUsage { - pub fn has_usage(&self) -> bool { - self.stored_bytes > 0 && - self.transferred_bytes > 0 && - self.number_of_puts > 0 && - self.number_of_gets > 0 - } - } - #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Encode, Decode)] pub struct EHDUsagePercent { #[serde(rename = "storedBytesPercent")] diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index 0aa8df36f..2c18d36c3 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -2701,7 +2701,7 @@ pub mod pallet { .expect("EHD to be fetched"); let cluster_usage = ehd_root.get_cluster_usage(); - if !cluster_usage.has_usage() { + if cluster_usage == Default::default() { continue; } @@ -4648,6 +4648,8 @@ pub mod pallet { #[pallet::genesis_config] pub struct GenesisConfig { + // the first key is 'verification_key' that is used to sign inspection receipts + // the second key is 'stash_key' that should be used in staking by this validator pub validators: Vec<(T::AccountId, T::AccountId)>, } From a6298b040673aaf3f1067dd95e90ea4f50906619 Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Thu, 6 Feb 2025 13:03:19 +0100 Subject: [PATCH 07/31] feat: challenging bucket aggregates --- pallets/ddc-verification/src/lib.rs | 1103 +++++++++++++++------------ 1 file changed, 608 insertions(+), 495 deletions(-) diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index 2c18d36c3..9b4e11746 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -240,133 +240,82 @@ pub mod pallet { /// `frame_system::Pallet::deposit_event`. #[pallet::generate_deposit(pub(crate) fn deposit_event)] pub enum Event { - /// A new payout report was created from `ClusterId` and `ERA`. - PayoutReceiptCreated { + PaidEraRetrievalError { cluster_id: ClusterId, - era_id: DdcEra, - }, - /// A verification key was stored with `VerificationKey`. - VerificationKeyStored { - verification_key: Vec, - }, - /// A new payout batch was created from `ClusterId` and `ERA`. - PayoutBatchCreated { - cluster_id: ClusterId, - era_id: DdcEra, - }, - EraValidationReady { - cluster_id: ClusterId, - era_id: DdcEra, - }, - EraValidationNotReady { - cluster_id: ClusterId, - era_id: DdcEra, - }, - /// Node Usage Retrieval Error. - NodeUsageRetrievalError { - cluster_id: ClusterId, - era_id: DdcEra, - node_pub_key: NodePubKey, - validator: T::AccountId, - }, - /// Bucket aggregates Retrieval Error. - BucketAggregatesRetrievalError { - cluster_id: ClusterId, - era_id: DdcEra, - node_pub_key: NodePubKey, - validator: T::AccountId, - }, - EraRetrievalError { - cluster_id: ClusterId, - node_pub_key: Option, - validator: T::AccountId, - }, - PrepareEraTransactionError { - cluster_id: ClusterId, - era_id: DdcEra, - payers_merkle_root_hash: DeltaUsageHash, - payees_merkle_root_hash: DeltaUsageHash, validator: T::AccountId, }, CommitPayoutFingerprintTransactionError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, payers_root: PayableUsageHash, payees_root: PayableUsageHash, validator: T::AccountId, }, BeginPayoutTransactionError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, validator: T::AccountId, }, BeginChargingCustomersTransactionError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, validator: T::AccountId, }, SendChargingCustomersBatchTransactionError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, batch_index: BatchIndex, validator: T::AccountId, }, SendRewardingProvidersBatchTransactionError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, batch_index: BatchIndex, validator: T::AccountId, }, EndChargingCustomersTransactionError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, validator: T::AccountId, }, BeginRewardingProvidersTransactionError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, validator: T::AccountId, }, EndRewardingProvidersTransactionError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, validator: T::AccountId, }, EndPayoutTransactionError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, validator: T::AccountId, }, PayoutReceiptDoesNotExist { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, validator: T::AccountId, }, - EmptyCustomerActivity { + BatchIndexUnderflow { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, validator: T::AccountId, }, - BatchIndexConversionFailed { + BatchIndexOverflow { cluster_id: ClusterId, - era_id: DdcEra, - validator: T::AccountId, - }, - NoAvailableSigner { - validator: T::AccountId, - }, - NotEnoughDACNodes { - num_nodes: u16, + era_id: EhdEra, validator: T::AccountId, }, FailedToCreateMerkleRoot { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, validator: T::AccountId, }, FailedToCreateMerkleProof { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, validator: T::AccountId, }, FailedToCollectVerificationKey { @@ -375,58 +324,39 @@ pub mod pallet { FailedToFetchVerificationKey { validator: T::AccountId, }, - FailedToFetchNodeProvider { - validator: T::AccountId, - }, ValidatorKeySet { validator: T::AccountId, }, - FailedToFetchClusterNodes { - validator: T::AccountId, - }, - FailedToFetchDacNodes { - validator: T::AccountId, - }, - FailedToFetchNodeTotalUsage { + FailedToFetchCollectors { cluster_id: ClusterId, - node_pub_key: NodePubKey, validator: T::AccountId, }, - EraValidationRootsPosted { - cluster_id: ClusterId, - era_id: DdcEra, - validator: T::AccountId, - payers_merkle_root_hash: DeltaUsageHash, - payees_merkle_root_hash: DeltaUsageHash, - payers_batch_merkle_root_hashes: Vec, - payees_batch_merkle_root_hashes: Vec, - }, - BucketAggregateRetrievalError { - cluster_id: ClusterId, - era_id: DdcEra, - bucket_id: BucketId, - node_pub_key: NodePubKey, - validator: T::AccountId, - }, - ChallengeResponseRetrievalError { + ChallengeResponseError { cluster_id: ClusterId, era_id: DdcEra, aggregate_key: AggregateKey, aggregator: NodePubKey, validator: T::AccountId, }, - TraverseResponseRetrievalError { + TraverseResponseError { cluster_id: ClusterId, era_id: DdcEra, aggregate_key: AggregateKey, aggregator: NodePubKey, validator: T::AccountId, }, - EmptyConsistentGroup, FailedToFetchVerifiedDeltaUsage, FailedToFetchVerifiedPayableUsage, - FailedToFetchEHD, - FailedToFetchPHD, + FailedToParseEHDId { + ehd_id: String, + }, + FailedToParsePHDId { + phd_id: String, + }, + FailedToParseNodeKey { + node_key: String, + }, + FailedToParseTCAA, FailedToFetchTraversedEHD, FailedToFetchTraversedPHD, FailedToFetchNodeChallenge, @@ -438,127 +368,100 @@ pub mod pallet { /// Consensus Errors #[derive(Debug, Encode, Decode, Clone, TypeInfo, PartialEq)] pub enum OCWError { - /// Node Usage Retrieval Error. - NodeUsageRetrievalError { + PaidEraRetrievalError { cluster_id: ClusterId, - era_id: DdcEra, - node_pub_key: NodePubKey, - }, - /// Bucket aggregates Retrieval Error. - BucketAggregatesRetrievalError { - cluster_id: ClusterId, - era_id: DdcEra, - node_pub_key: NodePubKey, - }, - EraRetrievalError { - cluster_id: ClusterId, - node_pub_key: Option, - }, - /// Bucket aggregate Retrieval Error. - BucketAggregateRetrievalError { - cluster_id: ClusterId, - era_id: DdcEra, - bucket_id: BucketId, - node_pub_key: NodePubKey, }, /// Challenge Response Retrieval Error. - ChallengeResponseRetrievalError { + ChallengeResponseError { cluster_id: ClusterId, era_id: DdcEra, aggregate_key: AggregateKey, aggregator: NodePubKey, }, /// Traverse Response Retrieval Error. - TraverseResponseRetrievalError { + TraverseResponseError { cluster_id: ClusterId, era_id: DdcEra, aggregate_key: AggregateKey, aggregator: NodePubKey, }, - PrepareEraTransactionError { - cluster_id: ClusterId, - era_id: DdcEra, - payers_merkle_root_hash: DeltaUsageHash, - payees_merkle_root_hash: DeltaUsageHash, - }, CommitPayoutFingerprintTransactionError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, payers_root: PayableUsageHash, payees_root: PayableUsageHash, }, BeginPayoutTransactionError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, }, BeginChargingCustomersTransactionError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, }, SendChargingCustomersBatchTransactionError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, batch_index: BatchIndex, }, SendRewardingProvidersBatchTransactionError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, batch_index: BatchIndex, }, EndChargingCustomersTransactionError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, }, BeginRewardingProvidersTransactionError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, }, EndRewardingProvidersTransactionError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, }, EndPayoutTransactionError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, }, PayoutReceiptDoesNotExist { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, }, - EmptyCustomerActivity { + BatchIndexUnderflow { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, }, - BatchIndexConversionFailed { + BatchIndexOverflow { cluster_id: ClusterId, - era_id: DdcEra, - }, - NoAvailableSigner, - NotEnoughDACNodes { - num_nodes: u16, + era_id: EhdEra, }, FailedToCreateMerkleRoot { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, }, FailedToCreateMerkleProof { cluster_id: ClusterId, - era_id: DdcEra, + era_id: EhdEra, }, FailedToCollectVerificationKey, FailedToFetchVerificationKey, - FailedToFetchNodeProvider, - FailedToFetchClusterNodes, - FailedToFetchDacNodes, - FailedToFetchNodeTotalUsage { + FailedToFetchCollectors { cluster_id: ClusterId, - node_pub_key: NodePubKey, }, - EmptyConsistentGroup, FailedToFetchVerifiedDeltaUsage, FailedToFetchVerifiedPayableUsage, - FailedToFetchEHD, - FailedToFetchPHD, + FailedToParseEHDId { + ehd_id: String, + }, + FailedToParsePHDId { + phd_id: String, + }, + FailedToParseNodeKey { + node_key: String, + }, + FailedToParseTCAA, FailedToFetchTraversedEHD, FailedToFetchTraversedPHD, FailedToFetchNodeChallenge, @@ -595,7 +498,6 @@ pub mod pallet { NotController, /// Not a validator stash. NotValidatorStash, - NoAvailableSigner, /// Fail to generate proof FailedToGenerateProof, /// Fail to verify merkle proof @@ -806,44 +708,9 @@ pub mod pallet { for error in errors { match error { - OCWError::NodeUsageRetrievalError { cluster_id, era_id, node_pub_key } => { - Self::deposit_event(Event::NodeUsageRetrievalError { + OCWError::PaidEraRetrievalError { cluster_id } => { + Self::deposit_event(Event::PaidEraRetrievalError { cluster_id, - era_id, - node_pub_key, - validator: caller.clone(), - }); - }, - OCWError::BucketAggregatesRetrievalError { - cluster_id, - era_id, - node_pub_key, - } => { - Self::deposit_event(Event::BucketAggregatesRetrievalError { - cluster_id, - era_id, - node_pub_key, - validator: caller.clone(), - }); - }, - OCWError::EraRetrievalError { cluster_id, node_pub_key } => { - Self::deposit_event(Event::EraRetrievalError { - cluster_id, - node_pub_key, - validator: caller.clone(), - }); - }, - OCWError::PrepareEraTransactionError { - cluster_id, - era_id, - payers_merkle_root_hash, - payees_merkle_root_hash, - } => { - Self::deposit_event(Event::PrepareEraTransactionError { - cluster_id, - era_id, - payers_merkle_root_hash, - payees_merkle_root_hash, validator: caller.clone(), }); }, @@ -934,29 +801,20 @@ pub mod pallet { validator: caller.clone(), }); }, - OCWError::EmptyCustomerActivity { cluster_id, era_id } => { - Self::deposit_event(Event::EmptyCustomerActivity { + OCWError::BatchIndexUnderflow { cluster_id, era_id } => { + Self::deposit_event(Event::BatchIndexUnderflow { cluster_id, era_id, validator: caller.clone(), }); }, - OCWError::BatchIndexConversionFailed { cluster_id, era_id } => { - Self::deposit_event(Event::BatchIndexConversionFailed { + OCWError::BatchIndexOverflow { cluster_id, era_id } => { + Self::deposit_event(Event::BatchIndexOverflow { cluster_id, era_id, validator: caller.clone(), }); }, - OCWError::NoAvailableSigner => { - Self::deposit_event(Event::NoAvailableSigner { validator: caller.clone() }); - }, - OCWError::NotEnoughDACNodes { num_nodes } => { - Self::deposit_event(Event::NotEnoughDACNodes { - num_nodes, - validator: caller.clone(), - }); - }, OCWError::FailedToCreateMerkleRoot { cluster_id, era_id } => { Self::deposit_event(Event::FailedToCreateMerkleRoot { cluster_id, @@ -981,39 +839,13 @@ pub mod pallet { validator: caller.clone(), }); }, - OCWError::FailedToFetchNodeProvider => { - Self::deposit_event(Event::FailedToFetchNodeProvider { - validator: caller.clone(), - }); - }, - OCWError::FailedToFetchNodeTotalUsage { cluster_id, node_pub_key } => { - Self::deposit_event(Event::FailedToFetchNodeTotalUsage { - cluster_id, - node_pub_key, - validator: caller.clone(), - }); - }, - OCWError::BucketAggregateRetrievalError { - cluster_id, - era_id, - bucket_id, - node_pub_key, - } => { - Self::deposit_event(Event::BucketAggregateRetrievalError { - cluster_id, - era_id, - bucket_id, - node_pub_key, - validator: caller.clone(), - }); - }, - OCWError::ChallengeResponseRetrievalError { + OCWError::ChallengeResponseError { cluster_id, era_id, aggregate_key, aggregator, } => { - Self::deposit_event(Event::ChallengeResponseRetrievalError { + Self::deposit_event(Event::ChallengeResponseError { cluster_id, era_id, aggregate_key, @@ -1021,13 +853,13 @@ pub mod pallet { validator: caller.clone(), }); }, - OCWError::TraverseResponseRetrievalError { + OCWError::TraverseResponseError { cluster_id, era_id, aggregate_key, aggregator, } => { - Self::deposit_event(Event::TraverseResponseRetrievalError { + Self::deposit_event(Event::TraverseResponseError { cluster_id, era_id, aggregate_key, @@ -1035,30 +867,29 @@ pub mod pallet { validator: caller.clone(), }); }, - OCWError::FailedToFetchClusterNodes => { - Self::deposit_event(Event::FailedToFetchClusterNodes { - validator: caller.clone(), - }); - }, - OCWError::FailedToFetchDacNodes => { - Self::deposit_event(Event::FailedToFetchDacNodes { + OCWError::FailedToFetchCollectors { cluster_id } => { + Self::deposit_event(Event::FailedToFetchCollectors { validator: caller.clone(), + cluster_id, }); }, - OCWError::EmptyConsistentGroup => { - Self::deposit_event(Event::EmptyConsistentGroup); - }, OCWError::FailedToFetchVerifiedDeltaUsage => { Self::deposit_event(Event::FailedToFetchVerifiedDeltaUsage); }, OCWError::FailedToFetchVerifiedPayableUsage => { Self::deposit_event(Event::FailedToFetchVerifiedPayableUsage); }, - OCWError::FailedToFetchEHD => { - Self::deposit_event(Event::FailedToFetchEHD); + OCWError::FailedToParseEHDId { ehd_id } => { + Self::deposit_event(Event::FailedToParseEHDId { ehd_id }); + }, + OCWError::FailedToParsePHDId { phd_id } => { + Self::deposit_event(Event::FailedToParsePHDId { phd_id }); }, - OCWError::FailedToFetchPHD => { - Self::deposit_event(Event::FailedToFetchPHD); + OCWError::FailedToParseNodeKey { node_key } => { + Self::deposit_event(Event::FailedToParseNodeKey { node_key }); + }, + OCWError::FailedToParseTCAA => { + Self::deposit_event(Event::FailedToParseTCAA); }, OCWError::FailedToFetchTraversedEHD => { Self::deposit_event(Event::FailedToFetchTraversedEHD); @@ -1308,7 +1139,7 @@ pub mod pallet { ) -> Result<(), Vec> { let collectors = Self::get_collectors_nodes(cluster_id).map_err(|_| { log::error!("❌ Error retrieving collectors for cluster {:?}", cluster_id); - vec![OCWError::FailedToFetchDacNodes] + vec![OCWError::FailedToFetchCollectors { cluster_id: *cluster_id }] })?; let g_collector = collectors .iter() @@ -1320,49 +1151,298 @@ pub mod pallet { Self::get_ehd_era_for_inspection(cluster_id, vec![g_collector.clone()].as_slice()) .map_err(|e| vec![e])? { + let tcaa_start = + ehd_era.era_start.ok_or_else(|| vec![OCWError::FailedToParseTCAA])?; + let tcaa_end = ehd_era.era_end.ok_or_else(|| vec![OCWError::FailedToParseTCAA])?; + let ehd_root = Self::get_ehd_root( cluster_id, EHDId(*cluster_id, g_collector.0.clone(), ehd_era.id), ) - .expect("EHD to be fetched"); + .map_err(|e| vec![e])?; - let ehd_id = EHDId::try_from(ehd_root.ehd_id).expect("EHD to be parsed"); + let ehd_id = EHDId::try_from(ehd_root.ehd_id.clone()).map_err(|_| { + vec![OCWError::FailedToParseEHDId { ehd_id: ehd_root.ehd_id.clone() }] + })?; let mut phd_roots = vec![]; for phd_id in &ehd_root.pdh_ids { - let phd_id = PHDId::try_from(phd_id.clone()) - .map_err(|_| vec![OCWError::FailedToFetchEHD])?; - let traversed_phd_tree = Self::fetch_traversed_partial_historical_document( - cluster_id, phd_id, 1, 1, - )?; + let phd_id = PHDId::try_from(phd_id.clone()).map_err(|_| { + vec![OCWError::FailedToParsePHDId { phd_id: phd_id.clone() }] + })?; + + let phd_root = Self::get_phd_root(cluster_id, phd_id).map_err(|e| vec![e])?; + phd_roots.push(phd_root.clone()); + } + + let nodes_inspection = + Self::inspect_nodes_aggregates(cluster_id, &phd_roots, tcaa_start, tcaa_end)?; + + let buckets_inspection = + Self::inspect_buckets_aggregates(cluster_id, &phd_roots, tcaa_start, tcaa_end)?; + + let payload = ( + Into::::into(ehd_id.clone()), + nodes_inspection.clone(), + buckets_inspection.clone(), + ) + .encode(); + + let signature = + >::sign( + &payload, + verification_account.public.clone(), + ) + .expect("Inspection receipt to be signed."); + + let inspector_pub_key: Vec = verification_account.public.encode(); + let inspector = format!("0x{}", hex::encode(&inspector_pub_key[1..])); // skip byte of SCALE encoding + let signature = format!("0x{}", hex::encode(signature.encode())); + + let receipt = aggregator_client::json::InspectionReceipt { + ehd_id: ehd_id.clone().into(), + inspector, + signature, + nodes_inspection, + buckets_inspection, + }; + + log::info!("##### INSPECTION RECEIPT ##### {:?}", receipt); + + Self::send_inspection_receipt(cluster_id, &g_collector, receipt) + .map_err(|e| vec![e])?; + + Self::store_last_inspected_ehd(cluster_id, ehd_id); + } + + Ok(()) + } + + pub(crate) fn inspect_nodes_aggregates( + cluster_id: &ClusterId, + phd_roots: &Vec, + tcaa_start: DdcEra, + tcaa_end: DdcEra, + ) -> Result> { + #[allow(clippy::type_complexity)] + let mut era_leaves_map: BTreeMap< + NodePubKey, // node aggrehate key + BTreeMap<(PHDId, (u64, u64)), BTreeMap>>, + > = BTreeMap::new(); + + let mut tcaas_map: BTreeMap = BTreeMap::new(); + + for phd_root in phd_roots { + let phd_id = PHDId::try_from(phd_root.phd_id.clone()).map_err(|_| { + vec![OCWError::FailedToParsePHDId { phd_id: phd_root.phd_id.clone() }] + })?; + + let collector_key = phd_id.0.clone(); + for node_aggregate in &phd_root.nodes_aggregates { + let node_key = + NodePubKey::try_from(node_aggregate.node_key.clone()).map_err(|_| { + vec![OCWError::FailedToParseNodeKey { + node_key: node_aggregate.node_key.clone(), + }] + })?; + + if tcaas_map.contains_key(&node_key.clone()) { + // Currently, we inspect node aggregation from a single (first + // responded) collector. We may compare the aggregation for the same + // node between different collectors in the next iterations to ensure + // redundancy. + continue; + } + + let mut node_leaves_count: u64 = 0; + let mut node_tcaa_count: u64 = 0; + + let mut tcaa_leaves = BTreeMap::new(); + for tcaa_id in tcaa_start..=tcaa_end { + if let Ok(challenge_res) = Self::fetch_node_challenge_response( + cluster_id, + tcaa_id, + collector_key.clone(), + node_key.clone(), + vec![1], + ) { + let tcaa_root = + challenge_res.proofs.first().expect("TCAA root to exist."); + + let tcaa_leaves_count = + tcaa_root.usage.expect("TCAA root usage to exist.").puts + + tcaa_root.usage.expect("TCAA root usage to exist.").gets; + + let ids = get_leaves_ids(tcaa_leaves_count); + tcaa_leaves.insert(tcaa_id, ids); + + node_leaves_count += tcaa_leaves_count; + node_tcaa_count += 1; + + tcaas_map.insert(node_key.clone(), tcaa_id); + } + } + + if node_tcaa_count > 0 { + era_leaves_map.insert( + node_key, + BTreeMap::from([( + (phd_id.clone(), (node_leaves_count, node_tcaa_count)), + tcaa_leaves, + )]), + ); + } + } + } + + let mut unverified_phd_parts = vec![]; + let mut verified_phd_parts = vec![]; + + let n0 = calculate_sample_size_inf(D_099, P_001); + + for (node_key, mut val) in era_leaves_map { + let ((phd_id, (node_leaves_count, node_tcaa_count)), tcaa_leaves) = + val.pop_first().expect("Collected activity records to exist."); + let collector_key = phd_id.0.clone(); + + let n = match calculate_sample_size_fin(n0, node_leaves_count) { + Ok(n) => n, + Err(_) => continue, + }; + + let n_per_tcaa = n / node_tcaa_count; + if n_per_tcaa == 0 { + continue; + } - if let Some(phd_root) = traversed_phd_tree.first() { - phd_roots.push(phd_root.clone()); + let mut remainder = n % node_tcaa_count; + + let mut verified_tcaas: BTreeMap> = BTreeMap::new(); + let mut unverified_tcaas: BTreeMap> = BTreeMap::new(); + + for (tcaa_id, ids) in tcaa_leaves { + let ids_count: u64 = ids.len().try_into().unwrap(); + + let leaves_to_inspect = if n_per_tcaa < ids_count { + let sample_size = if remainder > 0 && (n_per_tcaa + remainder) <= ids_count + { + let size = n_per_tcaa + remainder; + remainder = 0; + size + } else { + n_per_tcaa + }; + + Self::select_random_leaves(sample_size, ids, node_key.clone().into()) + } else { + remainder += n_per_tcaa - ids_count; + ids + }; + + log::info!( + "Node {:?} - TCAA {:?}. Selecting {:?} leaves out of {:?} for inspection. Selected leaves {:?}. Additional reminder is {:?}.", + node_key.clone(), + tcaa_id, + n_per_tcaa, + ids_count, + leaves_to_inspect, + remainder + ); + + if let Ok(challenge_res) = Self::fetch_node_challenge_response( + cluster_id, + tcaa_id, + collector_key.clone(), + node_key.clone(), + leaves_to_inspect.clone(), + ) { + if challenge_res.verify() { + if verified_tcaas.contains_key(&tcaa_id) { + let mut verified_ids = verified_tcaas + .get(&tcaa_id) + .expect("Verified TCAA to exist.") + .clone(); + verified_ids.extend(leaves_to_inspect); + verified_tcaas.insert(tcaa_id, verified_ids.clone()); + } else { + verified_tcaas.insert(tcaa_id, leaves_to_inspect); + }; + } else { + if unverified_tcaas.contains_key(&tcaa_id) { + let mut unverified_ids = unverified_tcaas + .get(&tcaa_id) + .expect("Unverified TCAA to exist.") + .clone(); + unverified_ids.extend(leaves_to_inspect); + unverified_tcaas.insert(tcaa_id, unverified_ids); + } else { + unverified_tcaas.insert(tcaa_id, leaves_to_inspect); + }; + } } } - #[allow(clippy::type_complexity)] - let mut era_leaves_map: BTreeMap< - NodePubKey, - BTreeMap<(PHDId, (u64, u64)), BTreeMap>>, - > = BTreeMap::new(); + if !verified_tcaas.is_empty() { + verified_phd_parts.push(aggregator_client::json::InspectedTreePart { + collector: phd_id.0.clone().into(), + aggregate: AggregateKey::NodeAggregateKey(node_key.clone().into()), + nodes: Vec::new(), /* todo: re-calculate aggregations in branch nodes + * of PHD merkle tree */ + leafs: verified_tcaas, + }); + } + + if !unverified_tcaas.is_empty() { + unverified_phd_parts.push(aggregator_client::json::InspectedTreePart { + collector: phd_id.0.clone().into(), + aggregate: AggregateKey::NodeAggregateKey(node_key.clone().into()), + nodes: Vec::new(), /* todo: re-calculate aggregations in branch nodes + * of PHD merkle tree */ + leafs: unverified_tcaas, + }); + } + } + + let nodes_inspection_result = aggregator_client::json::InspectionResult { + unverified_branches: unverified_phd_parts, + verified_branches: verified_phd_parts, + }; + + Ok(nodes_inspection_result) + } - let mut unverified_phd_parts = vec![]; - let mut verified_phd_parts = vec![]; + pub(crate) fn inspect_buckets_aggregates( + cluster_id: &ClusterId, + phd_roots: &Vec, + tcaa_start: DdcEra, + tcaa_end: DdcEra, + ) -> Result> { + let mut era_leaves_map: BTreeMap< + (BucketId, NodePubKey), // bucket sub-aggegate key + BTreeMap<(PHDId, (u64, u64)), BTreeMap>>, + > = BTreeMap::new(); + + let mut tcaas_map: BTreeMap<(BucketId, NodePubKey), DdcEra> = BTreeMap::new(); + + for phd_root in phd_roots { + let phd_id = PHDId::try_from(phd_root.phd_id.clone()).map_err(|_| { + vec![OCWError::FailedToParsePHDId { phd_id: phd_root.phd_id.clone() }] + })?; - for phd_root in phd_roots { - let phd_id = PHDId::try_from(phd_root.phd_id) - .map_err(|_| vec![OCWError::FailedToFetchPHD])?; + let collector_key = phd_id.0.clone(); - let collector_key = phd_id.0.clone(); - let tcaa_start = ehd_era.era_start.expect("TCAA start in EHD era"); - let tcaa_end = ehd_era.era_end.expect("TCAA start in EHD era"); + for bucket_aggregate in &phd_root.buckets_aggregates { + let bucket_id = bucket_aggregate.bucket_id; for node_aggregate in &phd_root.nodes_aggregates { let node_key = NodePubKey::try_from(node_aggregate.node_key.clone()) - .expect("Node pub key to be parsed"); + .map_err(|_| { + vec![OCWError::FailedToParseNodeKey { + node_key: node_aggregate.node_key.clone(), + }] + })?; - if era_leaves_map.contains_key(&node_key) { + if tcaas_map.contains_key(&(bucket_id, node_key.clone())) { // Currently, we inspect node aggregation from a single (first // responded) collector. We may compare the aggregation for the same // node between different collectors in the next iterations to ensure @@ -1370,16 +1450,17 @@ pub mod pallet { continue; } - let mut node_leaves_count: u64 = 0; - let mut node_tcaa_count: u64 = 0; + let mut bucket_sub_leaves_count: u64 = 0; + let mut bucket_sub_tcaa_count: u64 = 0; let mut tcaa_leaves = BTreeMap::new(); for tcaa_id in tcaa_start..=tcaa_end { - if let Ok(challenge_res) = Self::fetch_node_challenge_response( + if let Ok(challenge_res) = Self::fetch_bucket_challenge_response( cluster_id, tcaa_id, collector_key.clone(), node_key.clone(), + bucket_id, vec![1], ) { let tcaa_root = @@ -1392,165 +1473,152 @@ pub mod pallet { let ids = get_leaves_ids(tcaa_leaves_count); tcaa_leaves.insert(tcaa_id, ids); - node_leaves_count += tcaa_leaves_count; - node_tcaa_count += 1; + bucket_sub_leaves_count += tcaa_leaves_count; + bucket_sub_tcaa_count += 1; + + tcaas_map.insert((bucket_id, node_key.clone()), tcaa_id); } } - era_leaves_map.insert( - node_key, - BTreeMap::from([( - (phd_id.clone(), (node_leaves_count, node_tcaa_count)), - tcaa_leaves, - )]), - ); + if bucket_sub_tcaa_count > 0 { + era_leaves_map.insert( + (bucket_id, node_key.clone()), + BTreeMap::from([( + ( + phd_id.clone(), + (bucket_sub_leaves_count, bucket_sub_tcaa_count), + ), + tcaa_leaves, + )]), + ); + } } } + } - let n0 = calculate_sample_size_inf(D_099, P_001); + let mut unverified_phd_parts = vec![]; + let mut verified_phd_parts = vec![]; - for (node_key, mut val) in era_leaves_map { - let ((phd_id, (node_leaves_count, node_tcaa_count)), tcaa_leaves) = - val.pop_first().expect("Collected activity records to exist."); - let collector_key = phd_id.0.clone(); + let n0 = calculate_sample_size_inf(D_099, P_001); - let n = match calculate_sample_size_fin(n0, node_leaves_count) { - Ok(n) => n, - Err(_) => continue, - }; + for ((bucket_id, node_key), mut val) in era_leaves_map { + let ((phd_id, (bucket_sub_leaves_count, bucket_sub_tcaa_count)), tcaa_leaves) = + val.pop_first().expect("Collected activity records to exist."); - let n_per_tcaa = n / node_tcaa_count; - if n_per_tcaa == 0 { - continue; - } + let collector_key = phd_id.0.clone(); + + let n = match calculate_sample_size_fin(n0, bucket_sub_leaves_count) { + Ok(n) => n, + Err(_) => continue, + }; - let mut remainder = n % node_tcaa_count; + let n_per_tcaa = n / bucket_sub_tcaa_count; + if n_per_tcaa == 0 { + continue; + } - let mut verified_tcaas: BTreeMap> = BTreeMap::new(); - let mut unverified_tcaas: BTreeMap> = BTreeMap::new(); + let mut remainder = n % bucket_sub_tcaa_count; - for (tcaa_id, ids) in tcaa_leaves { - let ids_count: u64 = ids.len().try_into().unwrap(); + let mut verified_tcaas: BTreeMap> = BTreeMap::new(); + let mut unverified_tcaas: BTreeMap> = BTreeMap::new(); - let leaves_to_inspect = if n_per_tcaa < ids_count { - let sample_size = - if remainder > 0 && (n_per_tcaa + remainder) <= ids_count { - let size = n_per_tcaa + remainder; - remainder = 0; - size - } else { - n_per_tcaa - }; + for (tcaa_id, ids) in tcaa_leaves { + let ids_count: u64 = ids.len().try_into().unwrap(); - Self::select_random_leaves(sample_size, ids, node_key.clone().into()) + let leaves_to_inspect = if n_per_tcaa < ids_count { + let sample_size = if remainder > 0 && (n_per_tcaa + remainder) <= ids_count + { + let size = n_per_tcaa + remainder; + remainder = 0; + size } else { - remainder += n_per_tcaa - ids_count; - ids + n_per_tcaa }; - log::info!( - "Node {:?} - TCAA {:?}. Selecting {:?} leaves out of {:?} for inspection. Selected leaves {:?}. Additional reminder is {:?}.", - node_key.clone(), - tcaa_id, - n_per_tcaa, - ids_count, - leaves_to_inspect, - remainder - ); + Self::select_random_leaves(sample_size, ids, node_key.clone().into()) + } else { + remainder += n_per_tcaa - ids_count; + ids + }; - if let Ok(challenge_res) = Self::fetch_node_challenge_response( - cluster_id, - tcaa_id, - collector_key.clone(), - node_key.clone(), - leaves_to_inspect.clone(), - ) { - if challenge_res.verify() { - if verified_tcaas.contains_key(&tcaa_id) { - let mut verified_ids = verified_tcaas - .get(&tcaa_id) - .expect("Verified TCAA to exist.") - .clone(); - verified_ids.extend(leaves_to_inspect); - verified_tcaas.insert(tcaa_id, verified_ids.clone()); - } else { - verified_tcaas.insert(tcaa_id, leaves_to_inspect); - }; + log::info!( + "Bucket {:?}/{:?} - TCAA {:?}. Selecting {:?} leaves out of {:?} for inspection. Selected leaves {:?}. Additional reminder is {:?}.", + bucket_id, + node_key.clone(), + tcaa_id, + n_per_tcaa, + ids_count, + leaves_to_inspect, + remainder + ); + + if let Ok(challenge_res) = Self::fetch_bucket_challenge_response( + cluster_id, + tcaa_id, + collector_key.clone(), + node_key.clone(), + bucket_id, + leaves_to_inspect.clone(), + ) { + if challenge_res.verify() { + if verified_tcaas.contains_key(&tcaa_id) { + let mut verified_ids = verified_tcaas + .get(&tcaa_id) + .expect("Verified TCAA to exist.") + .clone(); + verified_ids.extend(leaves_to_inspect); + verified_tcaas.insert(tcaa_id, verified_ids.clone()); } else { - if unverified_tcaas.contains_key(&tcaa_id) { - let mut unverified_ids = unverified_tcaas - .get(&tcaa_id) - .expect("Unverified TCAA to exist.") - .clone(); - unverified_ids.extend(leaves_to_inspect); - unverified_tcaas.insert(tcaa_id, unverified_ids); - } else { - unverified_tcaas.insert(tcaa_id, leaves_to_inspect); - }; - } + verified_tcaas.insert(tcaa_id, leaves_to_inspect); + }; + } else { + if unverified_tcaas.contains_key(&tcaa_id) { + let mut unverified_ids = unverified_tcaas + .get(&tcaa_id) + .expect("Unverified TCAA to exist.") + .clone(); + unverified_ids.extend(leaves_to_inspect); + unverified_tcaas.insert(tcaa_id, unverified_ids); + } else { + unverified_tcaas.insert(tcaa_id, leaves_to_inspect); + }; } } - - if !verified_tcaas.is_empty() { - verified_phd_parts.push(aggregator_client::json::InspectedTreePart { - collector: phd_id.0.clone().into(), - aggregate: AggregateKey::NodeAggregateKey(node_key.clone().into()), - nodes: Vec::new(), /* todo: re-calculate aggregations in branch nodes - * of PHD merkle tree */ - leafs: verified_tcaas, - }); - } - - if !unverified_tcaas.is_empty() { - unverified_phd_parts.push(aggregator_client::json::InspectedTreePart { - collector: phd_id.0.clone().into(), - aggregate: AggregateKey::NodeAggregateKey(node_key.clone().into()), - nodes: Vec::new(), /* todo: re-calculate aggregations in branch nodes - * of PHD merkle tree */ - leafs: unverified_tcaas, - }); - } } - let nodes_inspection = aggregator_client::json::InspectionResult { - unverified_branches: unverified_phd_parts, - verified_branches: verified_phd_parts, - }; - - let buckets_inspection = aggregator_client::json::InspectionResult { - unverified_branches: vec![], - verified_branches: vec![], - }; - - let payload = - (Into::::into(ehd_id.clone()), nodes_inspection.clone()).encode(); - let signature = - >::sign( - &payload, - verification_account.public.clone(), - ) - .expect("Inspection receipt to be signed."); - - let inspector_pub_key: Vec = verification_account.public.encode(); - let inspector = format!("0x{}", hex::encode(&inspector_pub_key[1..])); // skip byte of SCALE encoding - let signature = format!("0x{}", hex::encode(signature.encode())); - - let receipt = aggregator_client::json::InspectionReceipt { - ehd_id: ehd_id.clone().into(), - inspector, - signature, - nodes_inspection, - buckets_inspection, - }; - - log::info!("##### INSPECTION RECEIPT ##### {:?}", receipt); + if !verified_tcaas.is_empty() { + verified_phd_parts.push(aggregator_client::json::InspectedTreePart { + collector: phd_id.0.clone().into(), + aggregate: AggregateKey::BucketSubAggregateKey( + bucket_id, + node_key.clone().into(), + ), + nodes: Vec::new(), /* todo: re-calculate aggregations in branch nodes + * of PHD merkle tree */ + leafs: verified_tcaas, + }); + } - Self::send_inspection_receipt(cluster_id, &g_collector, receipt) - .map_err(|e| vec![e])?; - Self::store_last_inspected_ehd(cluster_id, ehd_id); + if !unverified_tcaas.is_empty() { + unverified_phd_parts.push(aggregator_client::json::InspectedTreePart { + collector: phd_id.0.clone().into(), + aggregate: AggregateKey::BucketSubAggregateKey( + bucket_id, + node_key.clone().into(), + ), + nodes: Vec::new(), /* todo: re-calculate aggregations in branch nodes + * of PHD merkle tree */ + leafs: unverified_tcaas, + }); + } } - Ok(()) + let buckets_inspection_result = aggregator_client::json::InspectionResult { + unverified_branches: unverified_phd_parts, + verified_branches: verified_phd_parts, + }; + + Ok(buckets_inspection_result) } pub(crate) fn start_payouts_phase( @@ -1838,7 +1906,7 @@ pub mod pallet { let collectors = Self::get_collectors_nodes(cluster_id).map_err(|_| { log::error!("❌ Error retrieving collectors for cluster {:?}", cluster_id); - vec![OCWError::FailedToFetchDacNodes] + vec![OCWError::FailedToFetchCollectors { cluster_id: *cluster_id }] })?; let g_collector = collectors @@ -1847,12 +1915,7 @@ pub mod pallet { .cloned() .expect("G-Collector to be found"); - let ehd = - Self::fetch_traversed_era_historical_document(cluster_id, ehd_id.clone(), 1, 1) - .expect("EHD list be fetched") - .first() - .cloned() - .expect("EHD to be fetched"); + let ehd = Self::get_ehd_root(cluster_id, ehd_id.clone()).map_err(|e| vec![e])?; let era = Self::fetch_processed_ehd_era_from_collector(cluster_id, ehd_id.2, &g_collector) @@ -2167,14 +2230,11 @@ pub mod pallet { ) -> Result, Vec> { if let Some(max_batch_index) = payers_batch_roots.len().checked_sub(1) { let max_batch_index: u16 = max_batch_index.try_into().map_err(|_| { - vec![OCWError::BatchIndexConversionFailed { - cluster_id: *cluster_id, - era_id: ehd_id.2, - }] + vec![OCWError::BatchIndexOverflow { cluster_id: *cluster_id, era_id: ehd_id.2 }] })?; Ok(Some((ehd_id, max_batch_index))) } else { - Err(vec![OCWError::EmptyCustomerActivity { + Err(vec![OCWError::BatchIndexUnderflow { cluster_id: *cluster_id, era_id: ehd_id.2, }]) @@ -2310,15 +2370,12 @@ pub mod pallet { ) -> Result, Vec> { if let Some(max_batch_index) = payees_batch_roots.len().checked_sub(1) { let max_batch_index: u16 = max_batch_index.try_into().map_err(|_| { - vec![OCWError::BatchIndexConversionFailed { - cluster_id: *cluster_id, - era_id: ehd_id.2, - }] + vec![OCWError::BatchIndexOverflow { cluster_id: *cluster_id, era_id: ehd_id.2 }] })?; Ok(Some((ehd_id, max_batch_index))) } else { - Err(vec![OCWError::EmptyCustomerActivity { + Err(vec![OCWError::BatchIndexUnderflow { cluster_id: *cluster_id, era_id: ehd_id.2, }]) @@ -2683,10 +2740,20 @@ pub mod pallet { pub(crate) fn get_ehd_root( cluster_id: &ClusterId, ehd_id: EHDId, - ) -> Option { - Self::fetch_traversed_era_historical_document(cluster_id, ehd_id, 1, 1) - .ok()? + ) -> Result { + Self::fetch_traversed_era_historical_document(cluster_id, ehd_id, 1, 1)? .first() + .ok_or_else(|| OCWError::FailedToFetchTraversedEHD) + .cloned() + } + + pub(crate) fn get_phd_root( + cluster_id: &ClusterId, + phd_id: PHDId, + ) -> Result { + Self::fetch_traversed_partial_historical_document(cluster_id, phd_id, 1, 1)? + .first() + .ok_or_else(|| OCWError::FailedToFetchTraversedPHD) .cloned() } @@ -2796,10 +2863,8 @@ pub mod pallet { Default::default() }; - let last_paid_era_for_cluster = - T::ClusterValidator::get_last_paid_era(cluster_id).map_err(|_| { - OCWError::EraRetrievalError { cluster_id: *cluster_id, node_pub_key: None } - })?; + let last_paid_era_for_cluster = T::ClusterValidator::get_last_paid_era(cluster_id) + .map_err(|_| OCWError::PaidEraRetrievalError { cluster_id: *cluster_id })?; log::info!( "👁️‍🗨️ The last era inspected by this specific validator for cluster_id: {:?} is {:?}. The last paid era for the cluster is {:?}", @@ -3221,10 +3286,10 @@ pub mod pallet { ehd_id: EHDId, tree_node_id: u32, tree_levels_count: u32, - ) -> Result, Vec> { + ) -> Result, OCWError> { let collectors = Self::get_collectors_nodes(cluster_id).map_err(|_| { log::error!("❌ Error retrieving collectors for cluster {:?}", cluster_id); - vec![OCWError::FailedToFetchDacNodes] + OCWError::FailedToFetchCollectors { cluster_id: *cluster_id } })?; for (collector_key, collector_params) in collectors { @@ -3259,7 +3324,7 @@ pub mod pallet { } } - Err(vec![OCWError::FailedToFetchTraversedEHD]) + Err(OCWError::FailedToFetchTraversedEHD) } /// Traverse PHD record. @@ -3277,10 +3342,10 @@ pub mod pallet { phd_id: PHDId, tree_node_id: u32, tree_levels_count: u32, - ) -> Result, Vec> { + ) -> Result, OCWError> { let collectors = Self::get_collectors_nodes(cluster_id).map_err(|_| { log::error!("❌ Error retrieving collectors for cluster {:?}", cluster_id); - vec![OCWError::FailedToFetchDacNodes] + OCWError::FailedToFetchCollectors { cluster_id: *cluster_id } })?; for (collector_key, collector_params) in collectors { @@ -3315,7 +3380,7 @@ pub mod pallet { } } - Err(vec![OCWError::FailedToFetchTraversedPHD]) + Err(OCWError::FailedToFetchTraversedPHD) } fn fetch_inspection_receipts( @@ -3323,7 +3388,7 @@ pub mod pallet { ehd_id: EHDId, ) -> Result, OCWError> { let collectors = Self::get_collectors_nodes(cluster_id) - .map_err(|_| OCWError::FailedToFetchDacNodes)?; + .map_err(|_| OCWError::FailedToFetchCollectors { cluster_id: *cluster_id })?; let g_collector = collectors .iter() .find(|(key, _)| *key == G_COLLECTOR_KEY) @@ -3385,14 +3450,14 @@ pub mod pallet { pub(crate) fn fetch_node_challenge_response( cluster_id: &ClusterId, - era_id: DdcEra, + tcaa_id: DdcEra, collector_key: NodePubKey, node_key: NodePubKey, tree_node_ids: Vec, ) -> Result> { let collectors = Self::get_collectors_nodes(cluster_id).map_err(|_| { log::error!("❌ Error retrieving collectors for cluster {:?}", cluster_id); - vec![OCWError::FailedToFetchDacNodes] + vec![OCWError::FailedToFetchCollectors { cluster_id: *cluster_id }] })?; for (key, collector_params) in collectors { @@ -3410,14 +3475,62 @@ pub mod pallet { ); if let Ok(node_challenge_res) = client.challenge_node_aggregate( - era_id, + tcaa_id, Into::::into(node_key.clone()).as_str(), tree_node_ids.clone(), ) { return Ok(node_challenge_res); } else { log::warn!( - "Collector from cluster {:?} is unavailable while fetching EHD record or responded with unexpected body. Key: {:?} Host: {:?}", + "Collector from cluster {:?} is unavailable while challenging node aggregate or responded with unexpected body. Key: {:?} Host: {:?}", + cluster_id, + collector_key, + String::from_utf8(collector_params.host) + ); + } + } + } + + Err(vec![OCWError::FailedToFetchNodeChallenge]) + } + + pub(crate) fn fetch_bucket_challenge_response( + cluster_id: &ClusterId, + tcaa_id: DdcEra, + collector_key: NodePubKey, + node_key: NodePubKey, + bucket_id: BucketId, + tree_node_ids: Vec, + ) -> Result> { + let collectors = Self::get_collectors_nodes(cluster_id).map_err(|_| { + log::error!("❌ Error retrieving collectors for cluster {:?}", cluster_id); + vec![OCWError::FailedToFetchCollectors { cluster_id: *cluster_id }] + })?; + + for (key, collector_params) in collectors { + if key != collector_key { + continue; + }; + + if let Ok(host) = str::from_utf8(&collector_params.host) { + let base_url = format!("http://{}:{}", host, collector_params.http_port); + let client = aggregator_client::AggregatorClient::new( + &base_url, + Duration::from_millis(RESPONSE_TIMEOUT), + MAX_RETRIES_COUNT, + false, // no response signature verification for now + ); + + if let Ok(node_challenge_res) = client.challenge_bucket_sub_aggregate( + tcaa_id, + bucket_id, + Into::::into(node_key.clone()).as_str(), + tree_node_ids.clone(), + ) { + return Ok(node_challenge_res); + } else { + log::warn!( + "Collector from cluster {:?} is unavailable while challenging bucket sub-aggregate or responded with unexpected body. Key: {:?} Host: {:?}", cluster_id, collector_key, String::from_utf8(collector_params.host) @@ -3450,7 +3563,7 @@ pub mod pallet { let dac_nodes = Self::get_collectors_nodes(cluster_id).map_err(|_| { log::error!("❌ Error retrieving dac nodes to validate cluster {:?}", cluster_id); - vec![OCWError::FailedToFetchDacNodes] + vec![OCWError::FailedToFetchCollectors { cluster_id: *cluster_id }] })?; log::info!( @@ -4091,7 +4204,7 @@ pub mod pallet { &aggregator.node_params, ) .map_err(|_| { - vec![OCWError::TraverseResponseRetrievalError { + vec![OCWError::TraverseResponseError { cluster_id: *cluster_id, era_id, aggregate_key: aggregate_key.clone(), @@ -4197,7 +4310,7 @@ pub mod pallet { merkle_node_identifiers.clone(), &aggregator.node_params, ) - .map_err(|_| OCWError::ChallengeResponseRetrievalError { + .map_err(|_| OCWError::ChallengeResponseError { cluster_id: *cluster_id, era_id, aggregate_key, @@ -4221,7 +4334,7 @@ pub mod pallet { merkle_tree_node_id.clone(), &aggregator.node_params, ) - .map_err(|_| OCWError::ChallengeResponseRetrievalError { + .map_err(|_| OCWError::ChallengeResponseError { cluster_id: *cluster_id, era_id, aggregate_key, @@ -4231,49 +4344,6 @@ pub mod pallet { Ok(response) } - /// Fetch customer usage. - /// - /// Parameters: - /// - `cluster_id`: cluster id of a cluster - /// - `era_id`: era id - /// - `node_params`: DAC node parameters - pub(crate) fn _v4_fetch_bucket_aggregates( - _cluster_id: &ClusterId, - era_id: DdcEra, - node_params: &StorageNodeParams, - ) -> Result, http::Error> { - let host = str::from_utf8(&node_params.host).map_err(|_| http::Error::Unknown)?; - let base_url = format!("http://{}:{}", host, node_params.http_port); - let client = aggregator_client::AggregatorClient::new( - &base_url, - Duration::from_millis(RESPONSE_TIMEOUT), - MAX_RETRIES_COUNT, - T::VERIFY_AGGREGATOR_RESPONSE_SIGNATURE, - ); - - let mut buckets_aggregates = Vec::new(); - let mut prev_token = None; - - loop { - let response = client.buckets_aggregates( - era_id, - Some(BUCKETS_AGGREGATES_FETCH_BATCH_SIZE as u32), - prev_token, - )?; - - let response_len = response.len(); - prev_token = response.last().map(|a| a.bucket_id); - - buckets_aggregates.extend(response); - - if response_len < BUCKETS_AGGREGATES_FETCH_BATCH_SIZE { - break; - } - } - - Ok(buckets_aggregates) - } - /// Fetch node usage. /// /// Parameters: @@ -4607,6 +4677,49 @@ pub mod pallet { client.challenge_node_aggregate(era_id, &node_id, merkle_tree_node_id), } } + + /// Fetch customer usage. + /// + /// Parameters: + /// - `cluster_id`: cluster id of a cluster + /// - `tcaa_id`: tcaa id + /// - `node_params`: DAC node parameters + pub(crate) fn _v4_fetch_bucket_aggregates( + _cluster_id: &ClusterId, + tcaa_id: DdcEra, + node_params: &StorageNodeParams, + ) -> Result, http::Error> { + let host = str::from_utf8(&node_params.host).map_err(|_| http::Error::Unknown)?; + let base_url = format!("http://{}:{}", host, node_params.http_port); + let client = aggregator_client::AggregatorClient::new( + &base_url, + Duration::from_millis(RESPONSE_TIMEOUT), + MAX_RETRIES_COUNT, + T::VERIFY_AGGREGATOR_RESPONSE_SIGNATURE, + ); + + let mut buckets_aggregates = Vec::new(); + let mut prev_token = None; + + loop { + let response = client.buckets_aggregates( + tcaa_id, + Some(BUCKETS_AGGREGATES_FETCH_BATCH_SIZE as u32), + prev_token, + )?; + + let response_len = response.len(); + prev_token = response.last().map(|a| a.bucket_id); + + buckets_aggregates.extend(response); + + if response_len < BUCKETS_AGGREGATES_FETCH_BATCH_SIZE { + break; + } + } + + Ok(buckets_aggregates) + } } impl sp_application_crypto::BoundToRuntimeAppPublic for Pallet { From d2679d614bddb88a417d30f42e23f7ddbadcbe16 Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Thu, 6 Feb 2025 20:06:19 +0100 Subject: [PATCH 08/31] fix: fetching grouping collector dynamically --- .../ddc-verification/src/aggregator_client.rs | 11 ++ pallets/ddc-verification/src/lib.rs | 121 +++++++++++------- pallets/ddc-verification/src/tests.rs | 7 +- runtime/cere-dev/src/lib.rs | 2 +- runtime/cere/src/lib.rs | 2 +- 5 files changed, 95 insertions(+), 48 deletions(-) diff --git a/pallets/ddc-verification/src/aggregator_client.rs b/pallets/ddc-verification/src/aggregator_client.rs index c96789a69..ee0eb6d7a 100644 --- a/pallets/ddc-verification/src/aggregator_client.rs +++ b/pallets/ddc-verification/src/aggregator_client.rs @@ -283,6 +283,11 @@ impl<'a> AggregatorClient<'a> { fetch_and_parse!(self, url, BTreeMap, BTreeMap) } + pub fn check_grouping_collector(&self) -> Result { + let mut url = format!("{}/activity/is-grouping-collector", self.base_url); + fetch_and_parse!(self, url, json::IsGCollectorResponse, json::IsGCollectorResponse) + } + fn get(&self, url: &str, accept: Accept) -> Result { let mut maybe_response = None; @@ -1044,4 +1049,10 @@ pub(crate) mod json { pub buckets_inspection: Option, /* todo(yahortsaryk): remove optional * after fix in DDC api */ } + + #[derive(Debug, Serialize, Deserialize, Clone, Hash, Encode, Decode)] + pub struct IsGCollectorResponse { + #[serde(rename = "isGroupingCollector")] + pub is_g_collector: bool, + } } diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index 9b4e11746..2674562c0 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -118,13 +118,6 @@ pub mod pallet { pub const NODES_AGGREGATES_FETCH_BATCH_SIZE: usize = 10; pub const OCW_MUTEX_ID: &[u8] = b"inspection_lock"; - // todo(yahortsaryk): provide an endpoint for fetching G-collector from DDC - pub const G_COLLECTOR_KEY: NodePubKey = NodePubKey::StoragePubKey(AccountId32::new([ - 0x9e, 0xf9, 0x8a, 0xd9, 0xc3, 0x62, 0x6b, 0xa7, 0x25, 0xe7, 0x8d, 0x76, 0xcf, 0xcf, 0xc4, - 0xb4, 0xd0, 0x7e, 0x84, 0xf0, 0x38, 0x84, 0x65, 0xbc, 0x7e, 0xb9, 0x92, 0xe3, 0xe1, 0x17, - 0x23, 0x4a, - ])); - /// This is overall amount that the bucket owner will be charged for his buckets within a /// payment Era. #[derive(Clone, PartialOrd, Ord, Eq, PartialEq, Encode, Decode)] @@ -331,6 +324,10 @@ pub mod pallet { cluster_id: ClusterId, validator: T::AccountId, }, + FailedToFetchGCollectors { + cluster_id: ClusterId, + validator: T::AccountId, + }, ChallengeResponseError { cluster_id: ClusterId, era_id: DdcEra, @@ -450,6 +447,9 @@ pub mod pallet { FailedToFetchCollectors { cluster_id: ClusterId, }, + FailedToFetchGCollectors { + cluster_id: ClusterId, + }, FailedToFetchVerifiedDeltaUsage, FailedToFetchVerifiedPayableUsage, FailedToParseEHDId { @@ -873,6 +873,12 @@ pub mod pallet { cluster_id, }); }, + OCWError::FailedToFetchGCollectors { cluster_id } => { + Self::deposit_event(Event::FailedToFetchGCollectors { + validator: caller.clone(), + cluster_id, + }); + }, OCWError::FailedToFetchVerifiedDeltaUsage => { Self::deposit_event(Event::FailedToFetchVerifiedDeltaUsage); }, @@ -1137,15 +1143,14 @@ pub mod pallet { verification_account: &Account, _signer: &Signer, ) -> Result<(), Vec> { - let collectors = Self::get_collectors_nodes(cluster_id).map_err(|_| { - log::error!("❌ Error retrieving collectors for cluster {:?}", cluster_id); - vec![OCWError::FailedToFetchCollectors { cluster_id: *cluster_id }] + let g_collectors = Self::get_g_collectors_nodes(cluster_id).map_err(|_| { + vec![OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id }] })?; - let g_collector = collectors - .iter() - .find(|(key, _)| *key == G_COLLECTOR_KEY) - .cloned() - .expect("G-Collector to be found"); + // todo(yahortsaryk): infer the node deterministically + let Some(g_collector) = g_collectors.first() else { + log::warn!("⚠️ No Grouping Collector found in cluster {:?}", cluster_id); + return Ok(()); + }; if let Some(ehd_era) = Self::get_ehd_era_for_inspection(cluster_id, vec![g_collector.clone()].as_slice()) @@ -1207,8 +1212,6 @@ pub mod pallet { buckets_inspection, }; - log::info!("##### INSPECTION RECEIPT ##### {:?}", receipt); - Self::send_inspection_receipt(cluster_id, &g_collector, receipt) .map_err(|e| vec![e])?; @@ -1904,16 +1907,14 @@ pub mod pallet { ) -> Result<(), Vec> { let batch_size = T::MAX_PAYOUT_BATCH_SIZE; - let collectors = Self::get_collectors_nodes(cluster_id).map_err(|_| { - log::error!("❌ Error retrieving collectors for cluster {:?}", cluster_id); - vec![OCWError::FailedToFetchCollectors { cluster_id: *cluster_id }] - })?; - - let g_collector = collectors - .iter() - .find(|(key, _)| *key == G_COLLECTOR_KEY) + // todo(yahortsaryk): infer the node deterministically + let g_collector = Self::get_g_collectors_nodes(cluster_id) + .map_err(|_| vec![OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id }])? + .first() .cloned() - .expect("G-Collector to be found"); + .ok_or_else(|| { + vec![OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id }] + })?; let ehd = Self::get_ehd_root(cluster_id, ehd_id.clone()).map_err(|e| vec![e])?; @@ -2930,35 +2931,46 @@ pub mod pallet { Ok(ehd_era_to_inspect) } - /// Fetch DAC nodes of a cluster. + /// Fetch collectors nodes of a cluster. /// Parameters: /// - `cluster_id`: Cluster id of a cluster. fn get_collectors_nodes( cluster_id: &ClusterId, ) -> Result, Error> { - let mut dac_nodes = Vec::new(); + let mut collectors = Vec::new(); let nodes = T::ClusterManager::get_nodes(cluster_id) .map_err(|_| Error::::NodeRetrievalError)?; - // Iterate over each node for node_pub_key in nodes { - // Get the node parameters if let Ok(NodeParams::StorageParams(storage_params)) = T::NodeManager::get_node_params(&node_pub_key) { - // log::info!( - // "🏭 Obtained DAC Node for cluster_id: {:?} and with key: {:?}", - // cluster_id, - // node_pub_key - // ); - - // Add to the results if the mode matches - dac_nodes.push((node_pub_key, storage_params)); + collectors.push((node_pub_key, storage_params)); } } - Ok(dac_nodes) + Ok(collectors) + } + + /// Fetch grouping collectors nodes of a cluster. + /// Parameters: + /// - `cluster_id`: Cluster id of a cluster. + fn get_g_collectors_nodes( + cluster_id: &ClusterId, + ) -> Result, Error> { + let mut g_collectors = Vec::new(); + + let collectors = Self::get_collectors_nodes(cluster_id)?; + for (node_key, node_params) in collectors { + if Self::check_grouping_collector(&node_params) + .map_err(|_| Error::::NodeRetrievalError)? + { + g_collectors.push((node_key, node_params)) + } + } + + Ok(g_collectors) } /// Fetch processed payment era for across all nodes. @@ -3387,13 +3399,12 @@ pub mod pallet { cluster_id: &ClusterId, ehd_id: EHDId, ) -> Result, OCWError> { - let collectors = Self::get_collectors_nodes(cluster_id) - .map_err(|_| OCWError::FailedToFetchCollectors { cluster_id: *cluster_id })?; - let g_collector = collectors - .iter() - .find(|(key, _)| *key == G_COLLECTOR_KEY) + // todo(yahortsaryk): infer the node deterministically + let g_collector = Self::get_g_collectors_nodes(cluster_id) + .map_err(|_| OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })? + .first() .cloned() - .expect("G-Collector to be found"); + .ok_or_else(|| OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })?; if let Ok(host) = str::from_utf8(&g_collector.1.host) { let base_url = format!("http://{}:{}", host, g_collector.1.http_port); @@ -4720,6 +4731,26 @@ pub mod pallet { Ok(buckets_aggregates) } + + /// Fetch customer usage. + /// + /// Parameters: + /// - `node_params`: Requesting DDC node + pub(crate) fn check_grouping_collector( + node_params: &StorageNodeParams, + ) -> Result { + let host = str::from_utf8(&node_params.host).map_err(|_| http::Error::Unknown)?; + let base_url = format!("http://{}:{}", host, node_params.http_port); + let client = aggregator_client::AggregatorClient::new( + &base_url, + Duration::from_millis(RESPONSE_TIMEOUT), + MAX_RETRIES_COUNT, + T::VERIFY_AGGREGATOR_RESPONSE_SIGNATURE, + ); + + let response = client.check_grouping_collector()?; + Ok(response.is_g_collector) + } } impl sp_application_crypto::BoundToRuntimeAppPublic for Pallet { diff --git a/pallets/ddc-verification/src/tests.rs b/pallets/ddc-verification/src/tests.rs index a85e038b4..80f00b2d3 100644 --- a/pallets/ddc-verification/src/tests.rs +++ b/pallets/ddc-verification/src/tests.rs @@ -2726,9 +2726,14 @@ fn fetch_reward_activities_works() { let c: DeltaUsageHash = H256([2; 32]); let d: DeltaUsageHash = H256([3; 32]); let e: DeltaUsageHash = H256([4; 32]); + let g_collector_key: NodePubKey = NodePubKey::StoragePubKey(AccountId32::new([ + 0x9e, 0xf9, 0x8a, 0xd9, 0xc3, 0x62, 0x6b, 0xa7, 0x25, 0xe7, 0x8d, 0x76, 0xcf, 0xcf, 0xc4, + 0xb4, 0xd0, 0x7e, 0x84, 0xf0, 0x38, 0x84, 0x65, 0xbc, 0x7e, 0xb9, 0x92, 0xe3, 0xe1, 0x17, + 0x23, 0x4a, + ])); let leaves = [a, b, c, d, e]; - let ehd_id = EHDId(cluster_id, G_COLLECTOR_KEY, 1); + let ehd_id = EHDId(cluster_id, g_collector_key, 1); let result = DdcVerification::fetch_ehd_charging_loop_input( &cluster_id, diff --git a/runtime/cere-dev/src/lib.rs b/runtime/cere-dev/src/lib.rs index f96e2ecff..bd6958a8d 100644 --- a/runtime/cere-dev/src/lib.rs +++ b/runtime/cere-dev/src/lib.rs @@ -155,7 +155,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 72006, + spec_version: 72007, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 24, diff --git a/runtime/cere/src/lib.rs b/runtime/cere/src/lib.rs index f109a5f17..489bb468b 100644 --- a/runtime/cere/src/lib.rs +++ b/runtime/cere/src/lib.rs @@ -148,7 +148,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 72006, + spec_version: 72007, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 24, From 19afd84763a7fb8c051ae9b4f2801c89452ff149 Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Thu, 6 Feb 2025 20:11:55 +0100 Subject: [PATCH 09/31] fix: clippy issues --- pallets/ddc-verification/src/lib.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index 2674562c0..b56d775d2 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -1212,7 +1212,7 @@ pub mod pallet { buckets_inspection, }; - Self::send_inspection_receipt(cluster_id, &g_collector, receipt) + Self::send_inspection_receipt(cluster_id, g_collector, receipt) .map_err(|e| vec![e])?; Self::store_last_inspected_ehd(cluster_id, ehd_id); @@ -1221,6 +1221,7 @@ pub mod pallet { Ok(()) } + #[allow(clippy::collapsible_else_if)] pub(crate) fn inspect_nodes_aggregates( cluster_id: &ClusterId, phd_roots: &Vec, @@ -1414,12 +1415,14 @@ pub mod pallet { Ok(nodes_inspection_result) } + #[allow(clippy::collapsible_else_if)] pub(crate) fn inspect_buckets_aggregates( cluster_id: &ClusterId, phd_roots: &Vec, tcaa_start: DdcEra, tcaa_end: DdcEra, ) -> Result> { + #[allow(clippy::type_complexity)] let mut era_leaves_map: BTreeMap< (BucketId, NodePubKey), // bucket sub-aggegate key BTreeMap<(PHDId, (u64, u64)), BTreeMap>>, @@ -2744,7 +2747,7 @@ pub mod pallet { ) -> Result { Self::fetch_traversed_era_historical_document(cluster_id, ehd_id, 1, 1)? .first() - .ok_or_else(|| OCWError::FailedToFetchTraversedEHD) + .ok_or(OCWError::FailedToFetchTraversedEHD) .cloned() } @@ -2754,7 +2757,7 @@ pub mod pallet { ) -> Result { Self::fetch_traversed_partial_historical_document(cluster_id, phd_id, 1, 1)? .first() - .ok_or_else(|| OCWError::FailedToFetchTraversedPHD) + .ok_or(OCWError::FailedToFetchTraversedPHD) .cloned() } @@ -3404,7 +3407,7 @@ pub mod pallet { .map_err(|_| OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })? .first() .cloned() - .ok_or_else(|| OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })?; + .ok_or(OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })?; if let Ok(host) = str::from_utf8(&g_collector.1.host) { let base_url = format!("http://{}:{}", host, g_collector.1.http_port); From 1da9c488db5ab75bbf3cf3895d611265da922ce6 Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Fri, 7 Feb 2025 20:24:39 +0100 Subject: [PATCH 10/31] feat: cutting of unverified activity from customers --- .../ddc-verification/src/aggregator_client.rs | 8 +- pallets/ddc-verification/src/lib.rs | 330 ++++++++++++++---- runtime/cere-dev/src/lib.rs | 3 +- runtime/cere/src/lib.rs | 3 +- 4 files changed, 272 insertions(+), 72 deletions(-) diff --git a/pallets/ddc-verification/src/aggregator_client.rs b/pallets/ddc-verification/src/aggregator_client.rs index ee0eb6d7a..34f04fbc5 100644 --- a/pallets/ddc-verification/src/aggregator_client.rs +++ b/pallets/ddc-verification/src/aggregator_client.rs @@ -1043,11 +1043,11 @@ pub(crate) mod json { pub inspector: String, pub signature: String, #[serde(rename = "nodesInspection")] - pub nodes_inspection: Option, /* todo(yahortsaryk): remove optional - * after fix in DDC api */ + pub nodes_inspection: InspectionResult, /* todo(yahortsaryk): remove optional + * after fix in DDC api */ #[serde(rename = "bucketsInspection")] - pub buckets_inspection: Option, /* todo(yahortsaryk): remove optional - * after fix in DDC api */ + pub buckets_inspection: InspectionResult, /* todo(yahortsaryk): remove optional + * after fix in DDC api */ } #[derive(Debug, Serialize, Deserialize, Clone, Hash, Encode, Decode)] diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index b56d775d2..43332a1bf 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -13,18 +13,18 @@ use core::str; use base64ct::{Base64, Encoding}; #[cfg(feature = "runtime-benchmarks")] -use ddc_primitives::traits::{BucketManager, ClusterCreator, CustomerDepositor}; +use ddc_primitives::traits::{ClusterCreator, CustomerDepositor}; use ddc_primitives::{ ocw_mutex::OcwMutex, traits::{ - ClusterManager, ClusterProtocol, ClusterValidator, CustomerVisitor, NodeManager, - PayoutProcessor, StorageUsageProvider, ValidatorVisitor, + BucketManager, ClusterManager, ClusterProtocol, ClusterValidator, CustomerVisitor, + NodeManager, PayoutProcessor, StorageUsageProvider, ValidatorVisitor, }, - BatchIndex, BucketStorageUsage, ClusterFeesParams, ClusterId, ClusterPricingParams, - ClusterStatus, CustomerCharge as CustomerCosts, DdcEra, EHDId, EhdEra, MMRProof, NodeParams, - NodePubKey, NodeStorageUsage, PHDId, PayableUsageHash, PaymentEra, PayoutFingerprintParams, - PayoutReceiptParams, PayoutState, ProviderReward as ProviderProfits, StorageNodeParams, - StorageNodePubKey, AVG_SECONDS_MONTH, + BatchIndex, BucketStorageUsage, BucketUsage, ClusterFeesParams, ClusterId, + ClusterPricingParams, ClusterStatus, CustomerCharge as CustomerCosts, DdcEra, EHDId, EhdEra, + MMRProof, NodeParams, NodePubKey, NodeStorageUsage, NodeUsage, PHDId, PayableUsageHash, + PaymentEra, PayoutFingerprintParams, PayoutReceiptParams, PayoutState, + ProviderReward as ProviderProfits, StorageNodeParams, StorageNodePubKey, AVG_SECONDS_MONTH, }; use frame_support::{ pallet_prelude::*, @@ -221,7 +221,6 @@ pub mod pallet { type CustomerDepositor: CustomerDepositor; #[cfg(feature = "runtime-benchmarks")] type ClusterCreator: ClusterCreator>; - #[cfg(feature = "runtime-benchmarks")] type BucketManager: BucketManager; } @@ -353,13 +352,32 @@ pub mod pallet { FailedToParseNodeKey { node_key: String, }, + FailedToParseBucketId { + bucket_id: String, + }, + FailedToFetchCustomerId { + bucket_id: BucketId, + }, + FailedToParseCustomerId { + customer_id: AccountId32, + }, FailedToParseTCAA, FailedToFetchTraversedEHD, FailedToFetchTraversedPHD, FailedToFetchNodeChallenge, + FailedToFetchBucketChallenge, FailedToSaveInspectionReceipt, FailedToFetchInspectionReceipt, FailedToFetchPaymentEra, + FailedToCalculatePayersBatches { + era_id: EhdEra, + }, + FailedToCalculatePayeesBatches { + era_id: EhdEra, + }, + FailedToFetchProtocolParams { + cluster_id: ClusterId, + }, } /// Consensus Errors @@ -461,13 +479,32 @@ pub mod pallet { FailedToParseNodeKey { node_key: String, }, + FailedToParseBucketId { + bucket_id: String, + }, + FailedToFetchCustomerId { + bucket_id: BucketId, + }, + FailedToParseCustomerId { + customer_id: AccountId32, + }, FailedToParseTCAA, FailedToFetchTraversedEHD, FailedToFetchTraversedPHD, FailedToFetchNodeChallenge, + FailedToFetchBucketChallenge, FailedToSaveInspectionReceipt, FailedToFetchInspectionReceipt, FailedToFetchPaymentEra, + FailedToCalculatePayersBatches { + era_id: EhdEra, + }, + FailedToCalculatePayeesBatches { + era_id: EhdEra, + }, + FailedToFetchProtocolParams { + cluster_id: ClusterId, + }, } #[pallet::error] @@ -894,6 +931,12 @@ pub mod pallet { OCWError::FailedToParseNodeKey { node_key } => { Self::deposit_event(Event::FailedToParseNodeKey { node_key }); }, + OCWError::FailedToParseBucketId { bucket_id } => { + Self::deposit_event(Event::FailedToParseBucketId { bucket_id }); + }, + OCWError::FailedToFetchCustomerId { bucket_id } => { + Self::deposit_event(Event::FailedToFetchCustomerId { bucket_id }); + }, OCWError::FailedToParseTCAA => { Self::deposit_event(Event::FailedToParseTCAA); }, @@ -906,6 +949,9 @@ pub mod pallet { OCWError::FailedToFetchNodeChallenge => { Self::deposit_event(Event::FailedToFetchNodeChallenge); }, + OCWError::FailedToFetchBucketChallenge => { + Self::deposit_event(Event::FailedToFetchBucketChallenge); + }, OCWError::FailedToSaveInspectionReceipt => { Self::deposit_event(Event::FailedToSaveInspectionReceipt); }, @@ -915,6 +961,18 @@ pub mod pallet { OCWError::FailedToFetchPaymentEra => { Self::deposit_event(Event::FailedToFetchPaymentEra); }, + OCWError::FailedToCalculatePayersBatches { era_id } => { + Self::deposit_event(Event::FailedToCalculatePayersBatches { era_id }); + }, + OCWError::FailedToCalculatePayeesBatches { era_id } => { + Self::deposit_event(Event::FailedToCalculatePayeesBatches { era_id }); + }, + OCWError::FailedToFetchProtocolParams { cluster_id } => { + Self::deposit_event(Event::FailedToFetchProtocolParams { cluster_id }); + }, + OCWError::FailedToParseCustomerId { customer_id } => { + Self::deposit_event(Event::FailedToParseCustomerId { customer_id }); + }, } } @@ -1907,38 +1965,40 @@ pub mod pallet { pub(crate) fn build_and_store_ehd_payable_usage( cluster_id: &ClusterId, ehd_id: EHDId, - ) -> Result<(), Vec> { + ) -> Result<(), OCWError> { let batch_size = T::MAX_PAYOUT_BATCH_SIZE; - // todo(yahortsaryk): infer the node deterministically + // todo(yahortsaryk): infer g-collectors deterministically let g_collector = Self::get_g_collectors_nodes(cluster_id) - .map_err(|_| vec![OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id }])? + .map_err(|_| OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })? .first() .cloned() - .ok_or_else(|| { - vec![OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id }] - })?; + .ok_or_else(|| OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })?; - let ehd = Self::get_ehd_root(cluster_id, ehd_id.clone()).map_err(|e| vec![e])?; + let ehd = Self::get_ehd_root(cluster_id, ehd_id.clone())?; let era = - Self::fetch_processed_ehd_era_from_collector(cluster_id, ehd_id.2, &g_collector) - .map_err(|e| vec![e])? - .expect("EHD era be found"); + Self::fetch_processed_ehd_era_from_collector(cluster_id, ehd_id.2, &g_collector)?; let pricing = T::ClusterProtocol::get_pricing_params(cluster_id) - .expect("Pricing params to be fetched"); + .map_err(|_| OCWError::FailedToFetchProtocolParams { cluster_id: *cluster_id })?; - let fees = - T::ClusterProtocol::get_fees_params(cluster_id).expect("Fees params to be fetched"); + let fees = T::ClusterProtocol::get_fees_params(cluster_id) + .map_err(|_| OCWError::FailedToFetchProtocolParams { cluster_id: *cluster_id })?; + + let inspection_receipts = Self::fetch_inspection_receipts(cluster_id, ehd_id.clone())?; + + let customers_usage_cutoff = + Self::calculate_customers_usage_cutoff(cluster_id, &inspection_receipts)?; let (payers, cluster_costs) = Self::calculate_ehd_customers_charges( &ehd.customers, + &customers_usage_cutoff, &pricing, - era.time_start.expect("Processed era to contain start time"), - era.time_end.expect("Processed era to contain end time"), + era.time_start.ok_or(OCWError::FailedToParseTCAA)?, + era.time_end.ok_or(OCWError::FailedToParseTCAA)?, ) - .expect("Payers batch to be calculated"); + .map_err(|_| OCWError::FailedToCalculatePayersBatches { era_id: ehd_id.2 })?; let cluster_usage = ehd.get_cluster_usage(); @@ -1948,27 +2008,22 @@ pub mod pallet { &cluster_usage, &cluster_costs, ) - .expect("Payees batch to be calculated"); + .map_err(|_| OCWError::FailedToCalculatePayeesBatches { era_id: ehd_id.2 })?; let payers_batch_roots = Self::convert_to_batch_merkle_roots( cluster_id, Self::split_to_batches(&payers, batch_size.into()), ehd_id.2, - ) - .map_err(|err| vec![err])?; + )?; let payees_batch_roots = Self::convert_to_batch_merkle_roots( cluster_id, Self::split_to_batches(&payees, batch_size.into()), ehd_id.2, - ) - .map_err(|err| vec![err])?; - - let payers_root = Self::create_merkle_root(cluster_id, &payers_batch_roots, ehd_id.2) - .map_err(|err| vec![err])?; + )?; - let payees_root = Self::create_merkle_root(cluster_id, &payees_batch_roots, ehd_id.2) - .map_err(|err| vec![err])?; + let payers_root = Self::create_merkle_root(cluster_id, &payers_batch_roots, ehd_id.2)?; + let payees_root = Self::create_merkle_root(cluster_id, &payees_batch_roots, ehd_id.2)?; Self::store_ehd_payable_usage( cluster_id, @@ -1993,7 +2048,8 @@ pub mod pallet { { Ok(ehd_paybale_usage) } else { - Self::build_and_store_ehd_payable_usage(cluster_id, ehd_id.clone())?; + Self::build_and_store_ehd_payable_usage(cluster_id, ehd_id.clone()) + .map_err(|e| [e])?; if let Some(ehd_paybale_usage) = Self::fetch_ehd_payable_usage(cluster_id, ehd_id) { Ok(ehd_paybale_usage) } else { @@ -2004,6 +2060,7 @@ pub mod pallet { fn calculate_ehd_customers_charges( customers: &Vec, + cutoff_usage: &BTreeMap, pricing: &ClusterPricingParams, time_start: i64, time_end: i64, @@ -2016,6 +2073,10 @@ pub mod pallet { let customer_costs = Self::get_customer_costs( pricing, &customer.consumed_usage, + cutoff_usage.get( + &T::AccountId::decode(&mut &customer_id.encode()[..]) + .map_err(|_| ArithmeticError::Overflow)?, + ), time_start, time_end, )?; @@ -2063,18 +2124,22 @@ pub mod pallet { fn get_customer_costs( pricing: &ClusterPricingParams, consumed_usage: &aggregator_client::json::EHDUsage, + cutoff_usage: Option<&BucketUsage>, time_start: i64, time_end: i64, ) -> Result { #[allow(clippy::field_reassign_with_default)] let mut customer_costs = CustomerCosts::default(); + let no_cutoff = Default::default(); + let cutoff = cutoff_usage.unwrap_or(&no_cutoff); - customer_costs.transfer = (|| -> Option { - (consumed_usage.transferred_bytes as u128) - .checked_mul(pricing.unit_per_mb_streamed)? - .checked_div(byte_unit::MEBIBYTE) - })() - .ok_or(ArithmeticError::Overflow)?; + customer_costs.transfer = (consumed_usage.transferred_bytes as u128) + .checked_sub(cutoff.transferred_bytes as u128) + .ok_or(ArithmeticError::Underflow)? + .checked_mul(pricing.unit_per_mb_streamed) + .ok_or(ArithmeticError::Overflow)? + .checked_div(byte_unit::MEBIBYTE) + .ok_or(ArithmeticError::Underflow)?; // Calculate the duration of the period in seconds let duration_seconds = time_end - time_start; @@ -2082,18 +2147,23 @@ pub mod pallet { Perquintill::from_rational(duration_seconds as u64, AVG_SECONDS_MONTH as u64); customer_costs.storage = fraction_of_month * - (|| -> Option { - (consumed_usage.stored_bytes as u128) - .checked_mul(pricing.unit_per_mb_stored)? - .checked_div(byte_unit::MEBIBYTE) - })() - .ok_or(ArithmeticError::Overflow)?; + ((consumed_usage.stored_bytes as u128) + .checked_sub(cutoff.stored_bytes as u128) + .ok_or(ArithmeticError::Underflow)? + .checked_mul(pricing.unit_per_mb_stored) + .ok_or(ArithmeticError::Overflow)? + .checked_div(byte_unit::MEBIBYTE) + .ok_or(ArithmeticError::Underflow)?); customer_costs.gets = (consumed_usage.number_of_gets as u128) + .checked_sub(cutoff.number_of_gets as u128) + .ok_or(ArithmeticError::Underflow)? .checked_mul(pricing.unit_per_get_request) .ok_or(ArithmeticError::Overflow)?; customer_costs.puts = (consumed_usage.number_of_puts as u128) + .checked_sub(cutoff.number_of_puts as u128) + .ok_or(ArithmeticError::Underflow)? .checked_mul(pricing.unit_per_put_request) .ok_or(ArithmeticError::Overflow)?; @@ -2761,6 +2831,60 @@ pub mod pallet { .cloned() } + pub(crate) fn get_tcaa_bucket_usage( + cluster_id: &ClusterId, + collector_key: NodePubKey, + tcaa_id: DdcEra, + node_key: NodePubKey, + bucket_id: BucketId, + ) -> Result { + let challenge_res = Self::fetch_bucket_challenge_response( + cluster_id, + tcaa_id, + collector_key, + node_key, + bucket_id, + vec![1], + )?; + + let tcaa_root = + challenge_res.proofs.first().ok_or(OCWError::FailedToFetchBucketChallenge)?; + let tcaa_usage = tcaa_root.usage.ok_or(OCWError::FailedToFetchBucketChallenge)?; + + Ok(BucketUsage { + stored_bytes: tcaa_usage.stored, + transferred_bytes: tcaa_usage.delivered, + number_of_puts: tcaa_usage.puts, + number_of_gets: tcaa_usage.gets, + }) + } + + pub(crate) fn get_tcaa_node_usage( + cluster_id: &ClusterId, + collector_key: NodePubKey, + tcaa_id: DdcEra, + node_key: NodePubKey, + ) -> Result { + let challenge_res = Self::fetch_node_challenge_response( + cluster_id, + tcaa_id, + collector_key, + node_key, + vec![1], + )?; + + let tcaa_root = + challenge_res.proofs.first().ok_or(OCWError::FailedToFetchNodeChallenge)?; + let tcaa_usage = tcaa_root.usage.ok_or(OCWError::FailedToFetchNodeChallenge)?; + + Ok(NodeUsage { + stored_bytes: tcaa_usage.stored, + transferred_bytes: tcaa_usage.delivered, + number_of_puts: tcaa_usage.puts, + number_of_gets: tcaa_usage.gets, + }) + } + pub(crate) fn get_ehd_id_for_payout(cluster_id: &ClusterId) -> Option { match T::ClusterValidator::get_last_paid_era(cluster_id) { Ok(last_paid_era_for_cluster) => { @@ -3014,16 +3138,19 @@ pub mod pallet { cluster_id: &ClusterId, era: EhdEra, g_collector: &(NodePubKey, StorageNodeParams), - ) -> Result, OCWError> { + ) -> Result { let ehd_eras = Self::fetch_processed_ehd_eras_from_collector( cluster_id, vec![g_collector.clone()].as_slice(), )?; - let era = - ehd_eras.iter().flat_map(|eras| eras.iter()).find(|ehd| ehd.id == era).cloned(); + let era = ehd_eras + .iter() + .flat_map(|eras| eras.iter()) + .find(|ehd| ehd.id == era) + .ok_or(OCWError::FailedToFetchPaymentEra)?; - Ok(era) + Ok(era.clone()) } /// Verify whether leaf is part of tree @@ -3426,6 +3553,85 @@ pub mod pallet { Err(OCWError::FailedToFetchInspectionReceipt) } + fn calculate_customers_usage_cutoff( + cluster_id: &ClusterId, + receipts_by_inspector: &BTreeMap< + String, + aggregator_client::json::GroupedInspectionReceipt, + >, + ) -> Result, OCWError> { + let mut buckets_usage_cutoff: BTreeMap<(DdcEra, BucketId, NodePubKey), BucketUsage> = + BTreeMap::new(); + let mut buckets_to_customers: BTreeMap = BTreeMap::new(); + let mut customers_usage_cutoff: BTreeMap = BTreeMap::new(); + + for (_inspector_key, inspection_receipt) in receipts_by_inspector { + for unverified_branch in &inspection_receipt.buckets_inspection.unverified_branches + { + let collector_key = NodePubKey::try_from(unverified_branch.collector.clone()) + .map_err(|_| OCWError::FailedToParseNodeKey { + node_key: unverified_branch.collector.clone(), + })?; + let (bucket_id, node_key) = match &unverified_branch.aggregate { + AggregateKey::BucketSubAggregateKey(bucket_id, key) => { + let node_key = NodePubKey::try_from(key.clone()).map_err(|_| { + OCWError::FailedToParseNodeKey { node_key: key.clone() } + })?; + (bucket_id, node_key) + }, + _ => continue, // can happen only in case of a malformed response or bug + }; + + for (tcaa_id, _leafs) in &unverified_branch.leafs { + let tcaa_usage = Self::get_tcaa_bucket_usage( + cluster_id, + collector_key.clone(), + *tcaa_id, + node_key.clone(), + *bucket_id, + )?; + + if !buckets_usage_cutoff.contains_key(&( + *tcaa_id, + *bucket_id, + node_key.clone(), + )) { + buckets_usage_cutoff + .insert((*tcaa_id, *bucket_id, node_key.clone()), tcaa_usage); + if !buckets_to_customers.contains_key(&bucket_id) { + let customer_id = T::BucketManager::get_bucket_owner_id(*bucket_id) + .map_err(|_| OCWError::FailedToFetchCustomerId { + bucket_id: *bucket_id, + })?; + + buckets_to_customers.insert(*bucket_id, customer_id); + } + } + } + } + } + + for ((_, bucket_id, _), bucket_usage) in buckets_usage_cutoff { + let customer_id = buckets_to_customers + .get(&bucket_id) + .ok_or(OCWError::FailedToFetchCustomerId { bucket_id })?; + + match customers_usage_cutoff.get_mut(&customer_id) { + Some(total_usage) => { + total_usage.number_of_puts += bucket_usage.number_of_puts; + total_usage.number_of_gets += bucket_usage.number_of_gets; + total_usage.transferred_bytes += bucket_usage.transferred_bytes; + total_usage.stored_bytes += bucket_usage.stored_bytes; + }, + None => { + customers_usage_cutoff.insert(customer_id.clone(), bucket_usage.clone()); + }, + } + } + + Ok(customers_usage_cutoff) + } + /// Send Inspection Receipt. /// /// Parameters: @@ -3468,11 +3674,9 @@ pub mod pallet { collector_key: NodePubKey, node_key: NodePubKey, tree_node_ids: Vec, - ) -> Result> { - let collectors = Self::get_collectors_nodes(cluster_id).map_err(|_| { - log::error!("❌ Error retrieving collectors for cluster {:?}", cluster_id); - vec![OCWError::FailedToFetchCollectors { cluster_id: *cluster_id }] - })?; + ) -> Result { + let collectors = Self::get_collectors_nodes(cluster_id) + .map_err(|_| OCWError::FailedToFetchCollectors { cluster_id: *cluster_id })?; for (key, collector_params) in collectors { if key != collector_key { @@ -3505,7 +3709,7 @@ pub mod pallet { } } - Err(vec![OCWError::FailedToFetchNodeChallenge]) + Err(OCWError::FailedToFetchNodeChallenge) } pub(crate) fn fetch_bucket_challenge_response( @@ -3515,11 +3719,9 @@ pub mod pallet { node_key: NodePubKey, bucket_id: BucketId, tree_node_ids: Vec, - ) -> Result> { - let collectors = Self::get_collectors_nodes(cluster_id).map_err(|_| { - log::error!("❌ Error retrieving collectors for cluster {:?}", cluster_id); - vec![OCWError::FailedToFetchCollectors { cluster_id: *cluster_id }] - })?; + ) -> Result { + let collectors = Self::get_collectors_nodes(cluster_id) + .map_err(|_| OCWError::FailedToFetchCollectors { cluster_id: *cluster_id })?; for (key, collector_params) in collectors { if key != collector_key { @@ -3553,7 +3755,7 @@ pub mod pallet { } } - Err(vec![OCWError::FailedToFetchNodeChallenge]) + Err(OCWError::FailedToFetchBucketChallenge) } } diff --git a/runtime/cere-dev/src/lib.rs b/runtime/cere-dev/src/lib.rs index bd6958a8d..8b9c3e03e 100644 --- a/runtime/cere-dev/src/lib.rs +++ b/runtime/cere-dev/src/lib.rs @@ -155,7 +155,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 72007, + spec_version: 72008, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 24, @@ -1342,7 +1342,6 @@ impl pallet_ddc_verification::Config for Runtime { type CustomerDepositor = DdcCustomers; #[cfg(feature = "runtime-benchmarks")] type ClusterCreator = DdcClusters; - #[cfg(feature = "runtime-benchmarks")] type BucketManager = DdcCustomers; } diff --git a/runtime/cere/src/lib.rs b/runtime/cere/src/lib.rs index 489bb468b..c8274b1e1 100644 --- a/runtime/cere/src/lib.rs +++ b/runtime/cere/src/lib.rs @@ -148,7 +148,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 72007, + spec_version: 72008, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 24, @@ -1361,7 +1361,6 @@ impl pallet_ddc_verification::Config for Runtime { type CustomerDepositor = DdcCustomers; #[cfg(feature = "runtime-benchmarks")] type ClusterCreator = DdcClusters; - #[cfg(feature = "runtime-benchmarks")] type BucketManager = DdcCustomers; } From 76098d4ac989a91de26fa61ac0f99413c09bbc7c Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Fri, 7 Feb 2025 21:57:54 +0100 Subject: [PATCH 11/31] feat: cutting of unverified activity from providers --- pallets/ddc-verification/src/lib.rs | 203 +++++++++++++++++++++++----- 1 file changed, 166 insertions(+), 37 deletions(-) diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index 43332a1bf..0cb01ea61 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -352,6 +352,9 @@ pub mod pallet { FailedToParseNodeKey { node_key: String, }, + FailedToFetchProviderId { + node_key: NodePubKey, + }, FailedToParseBucketId { bucket_id: String, }, @@ -361,7 +364,7 @@ pub mod pallet { FailedToParseCustomerId { customer_id: AccountId32, }, - FailedToParseTCAA, + TimeCapsuleError, FailedToFetchTraversedEHD, FailedToFetchTraversedPHD, FailedToFetchNodeChallenge, @@ -378,6 +381,9 @@ pub mod pallet { FailedToFetchProtocolParams { cluster_id: ClusterId, }, + NodesInspectionError, + BucketsInspectionError, + FailedToSignInspectionReceipt, } /// Consensus Errors @@ -479,6 +485,9 @@ pub mod pallet { FailedToParseNodeKey { node_key: String, }, + FailedToFetchProviderId { + node_key: NodePubKey, + }, FailedToParseBucketId { bucket_id: String, }, @@ -488,7 +497,7 @@ pub mod pallet { FailedToParseCustomerId { customer_id: AccountId32, }, - FailedToParseTCAA, + TimeCapsuleError, FailedToFetchTraversedEHD, FailedToFetchTraversedPHD, FailedToFetchNodeChallenge, @@ -505,6 +514,9 @@ pub mod pallet { FailedToFetchProtocolParams { cluster_id: ClusterId, }, + NodesInspectionError, + BucketsInspectionError, + FailedToSignInspectionReceipt, } #[pallet::error] @@ -937,8 +949,14 @@ pub mod pallet { OCWError::FailedToFetchCustomerId { bucket_id } => { Self::deposit_event(Event::FailedToFetchCustomerId { bucket_id }); }, - OCWError::FailedToParseTCAA => { - Self::deposit_event(Event::FailedToParseTCAA); + OCWError::FailedToFetchProviderId { node_key } => { + Self::deposit_event(Event::FailedToFetchProviderId { node_key }); + }, + OCWError::TimeCapsuleError => { + Self::deposit_event(Event::TimeCapsuleError); + }, + OCWError::FailedToSignInspectionReceipt => { + Self::deposit_event(Event::FailedToSignInspectionReceipt); }, OCWError::FailedToFetchTraversedEHD => { Self::deposit_event(Event::FailedToFetchTraversedEHD); @@ -973,6 +991,12 @@ pub mod pallet { OCWError::FailedToParseCustomerId { customer_id } => { Self::deposit_event(Event::FailedToParseCustomerId { customer_id }); }, + OCWError::NodesInspectionError => { + Self::deposit_event(Event::NodesInspectionError); + }, + OCWError::BucketsInspectionError => { + Self::deposit_event(Event::BucketsInspectionError); + }, } } @@ -1215,8 +1239,8 @@ pub mod pallet { .map_err(|e| vec![e])? { let tcaa_start = - ehd_era.era_start.ok_or_else(|| vec![OCWError::FailedToParseTCAA])?; - let tcaa_end = ehd_era.era_end.ok_or_else(|| vec![OCWError::FailedToParseTCAA])?; + ehd_era.era_start.ok_or_else(|| vec![OCWError::TimeCapsuleError])?; + let tcaa_end = ehd_era.era_end.ok_or_else(|| vec![OCWError::TimeCapsuleError])?; let ehd_root = Self::get_ehd_root( cluster_id, @@ -1256,7 +1280,7 @@ pub mod pallet { &payload, verification_account.public.clone(), ) - .expect("Inspection receipt to be signed."); + .ok_or([OCWError::FailedToSignInspectionReceipt])?; let inspector_pub_key: Vec = verification_account.public.encode(); let inspector = format!("0x{}", hex::encode(&inspector_pub_key[1..])); // skip byte of SCALE encoding @@ -1328,12 +1352,18 @@ pub mod pallet { node_key.clone(), vec![1], ) { - let tcaa_root = - challenge_res.proofs.first().expect("TCAA root to exist."); - - let tcaa_leaves_count = - tcaa_root.usage.expect("TCAA root usage to exist.").puts + - tcaa_root.usage.expect("TCAA root usage to exist.").gets; + let tcaa_root = challenge_res + .proofs + .first() + .ok_or([OCWError::FailedToFetchNodeChallenge])?; + + let tcaa_leaves_count = tcaa_root + .usage + .ok_or([OCWError::FailedToFetchNodeChallenge])? + .puts + tcaa_root + .usage + .ok_or([OCWError::FailedToFetchNodeChallenge])? + .gets; let ids = get_leaves_ids(tcaa_leaves_count); tcaa_leaves.insert(tcaa_id, ids); @@ -1364,7 +1394,7 @@ pub mod pallet { for (node_key, mut val) in era_leaves_map { let ((phd_id, (node_leaves_count, node_tcaa_count)), tcaa_leaves) = - val.pop_first().expect("Collected activity records to exist."); + val.pop_first().ok_or([OCWError::NodesInspectionError])?; let collector_key = phd_id.0.clone(); let n = match calculate_sample_size_fin(n0, node_leaves_count) { @@ -1422,7 +1452,7 @@ pub mod pallet { if verified_tcaas.contains_key(&tcaa_id) { let mut verified_ids = verified_tcaas .get(&tcaa_id) - .expect("Verified TCAA to exist.") + .ok_or([OCWError::TimeCapsuleError])? .clone(); verified_ids.extend(leaves_to_inspect); verified_tcaas.insert(tcaa_id, verified_ids.clone()); @@ -1433,7 +1463,7 @@ pub mod pallet { if unverified_tcaas.contains_key(&tcaa_id) { let mut unverified_ids = unverified_tcaas .get(&tcaa_id) - .expect("Unverified TCAA to exist.") + .ok_or([OCWError::TimeCapsuleError])? .clone(); unverified_ids.extend(leaves_to_inspect); unverified_tcaas.insert(tcaa_id, unverified_ids); @@ -1527,12 +1557,18 @@ pub mod pallet { bucket_id, vec![1], ) { - let tcaa_root = - challenge_res.proofs.first().expect("TCAA root to exist."); - - let tcaa_leaves_count = - tcaa_root.usage.expect("TCAA root usage to exist.").puts + - tcaa_root.usage.expect("TCAA root usage to exist.").gets; + let tcaa_root = challenge_res + .proofs + .first() + .ok_or([OCWError::FailedToFetchBucketChallenge])?; + + let tcaa_leaves_count = tcaa_root + .usage + .ok_or([OCWError::FailedToFetchBucketChallenge])? + .puts + tcaa_root + .usage + .ok_or([OCWError::FailedToFetchBucketChallenge])? + .gets; let ids = get_leaves_ids(tcaa_leaves_count); tcaa_leaves.insert(tcaa_id, ids); @@ -1567,7 +1603,7 @@ pub mod pallet { for ((bucket_id, node_key), mut val) in era_leaves_map { let ((phd_id, (bucket_sub_leaves_count, bucket_sub_tcaa_count)), tcaa_leaves) = - val.pop_first().expect("Collected activity records to exist."); + val.pop_first().ok_or([OCWError::BucketsInspectionError])?; let collector_key = phd_id.0.clone(); @@ -1628,7 +1664,7 @@ pub mod pallet { if verified_tcaas.contains_key(&tcaa_id) { let mut verified_ids = verified_tcaas .get(&tcaa_id) - .expect("Verified TCAA to exist.") + .ok_or([OCWError::TimeCapsuleError])? .clone(); verified_ids.extend(leaves_to_inspect); verified_tcaas.insert(tcaa_id, verified_ids.clone()); @@ -1639,7 +1675,7 @@ pub mod pallet { if unverified_tcaas.contains_key(&tcaa_id) { let mut unverified_ids = unverified_tcaas .get(&tcaa_id) - .expect("Unverified TCAA to exist.") + .ok_or([OCWError::TimeCapsuleError])? .clone(); unverified_ids.extend(leaves_to_inspect); unverified_tcaas.insert(tcaa_id, unverified_ids); @@ -1879,7 +1915,7 @@ pub mod pallet { .map(|payee| { ( T::AccountId::decode(&mut &payee.0.encode()[..]) - .expect("CustomerId to be parsed"), + .expect("ProviderId to be parsed"), payee.1, ) }) @@ -1995,15 +2031,19 @@ pub mod pallet { &ehd.customers, &customers_usage_cutoff, &pricing, - era.time_start.ok_or(OCWError::FailedToParseTCAA)?, - era.time_end.ok_or(OCWError::FailedToParseTCAA)?, + era.time_start.ok_or(OCWError::TimeCapsuleError)?, + era.time_end.ok_or(OCWError::TimeCapsuleError)?, ) .map_err(|_| OCWError::FailedToCalculatePayersBatches { era_id: ehd_id.2 })?; let cluster_usage = ehd.get_cluster_usage(); + let providers_usage_cutoff = + Self::calculate_providers_usage_cutoff(cluster_id, &inspection_receipts)?; + let payees = Self::calculate_ehd_providers_rewards( &ehd.providers, + &providers_usage_cutoff, &fees, &cluster_usage, &cluster_costs, @@ -2060,7 +2100,7 @@ pub mod pallet { fn calculate_ehd_customers_charges( customers: &Vec, - cutoff_usage: &BTreeMap, + cutoff_usage_map: &BTreeMap, pricing: &ClusterPricingParams, time_start: i64, time_end: i64, @@ -2073,7 +2113,7 @@ pub mod pallet { let customer_costs = Self::get_customer_costs( pricing, &customer.consumed_usage, - cutoff_usage.get( + cutoff_usage_map.get( &T::AccountId::decode(&mut &customer_id.encode()[..]) .map_err(|_| ArithmeticError::Overflow)?, ), @@ -2172,13 +2212,18 @@ pub mod pallet { fn get_provider_profits( provided_usage: &aggregator_client::json::EHDUsage, + cutoff_usage: Option<&NodeUsage>, cluster_usage: &aggregator_client::json::EHDUsage, cluster_costs: &CustomerCosts, ) -> Result { let mut provider_profits = ProviderProfits::default(); + let no_cutoff = Default::default(); + let cutoff = cutoff_usage.unwrap_or(&no_cutoff); let mut ratio = Perquintill::from_rational( - provided_usage.transferred_bytes as u128, + (provided_usage.transferred_bytes as u128) + .checked_sub(cutoff.transferred_bytes as u128) + .ok_or(ArithmeticError::Underflow)?, cluster_usage.transferred_bytes as u128, ); @@ -2186,19 +2231,27 @@ pub mod pallet { provider_profits.transfer = ratio * cluster_costs.transfer; ratio = Perquintill::from_rational( - provided_usage.stored_bytes as u128, + (provided_usage.stored_bytes as u128) + .checked_sub(cutoff.stored_bytes as u128) + .ok_or(ArithmeticError::Underflow)?, cluster_usage.stored_bytes as u128, ); provider_profits.storage = ratio * cluster_costs.storage; ratio = Perquintill::from_rational( - provided_usage.number_of_puts, + provided_usage + .number_of_puts + .checked_sub(cutoff.number_of_puts) + .ok_or(ArithmeticError::Underflow)?, cluster_usage.number_of_puts, ); provider_profits.puts = ratio * cluster_costs.puts; ratio = Perquintill::from_rational( - provided_usage.number_of_gets, + provided_usage + .number_of_gets + .checked_sub(cutoff.number_of_gets) + .ok_or(ArithmeticError::Underflow)?, cluster_usage.number_of_gets, ); provider_profits.gets = ratio * cluster_costs.gets; @@ -2208,6 +2261,7 @@ pub mod pallet { fn calculate_ehd_providers_rewards( providers: &Vec, + cutoff_usage_map: &BTreeMap, fees: &ClusterFeesParams, cluster_usage: &aggregator_client::json::EHDUsage, cluster_costs: &CustomerCosts, @@ -2218,6 +2272,10 @@ pub mod pallet { if let Ok(provider_id) = provider.parse_provider_id() { let provider_profits = Self::get_provider_profits( &provider.provided_usage, + cutoff_usage_map.get( + &T::AccountId::decode(&mut &provider_id.encode()[..]) + .map_err(|_| ArithmeticError::Overflow)?, + ), cluster_usage, cluster_costs, )?; @@ -2892,8 +2950,7 @@ pub mod pallet { for inspected_ehd in inspected_ehds.clone().into_iter().sorted() { if inspected_ehd.2 > last_paid_era_for_cluster { let ehd_root = - Self::get_ehd_root(cluster_id, inspected_ehd.clone()) - .expect("EHD to be fetched"); + Self::get_ehd_root(cluster_id, inspected_ehd.clone()).ok()?; let cluster_usage = ehd_root.get_cluster_usage(); if cluster_usage == Default::default() { @@ -3124,7 +3181,8 @@ pub mod pallet { // Skip unavailable aggregators and continue with available ones continue; } else { - let eras = processed_payment_eras.expect("Era Response to be available"); + let eras = + processed_payment_eras.map_err(|_| OCWError::FailedToFetchPaymentEra)?; if !eras.is_empty() { processed_eras_by_nodes.push(eras.into_iter().collect::>()); } @@ -3632,6 +3690,77 @@ pub mod pallet { Ok(customers_usage_cutoff) } + fn calculate_providers_usage_cutoff( + cluster_id: &ClusterId, + receipts_by_inspector: &BTreeMap< + String, + aggregator_client::json::GroupedInspectionReceipt, + >, + ) -> Result, OCWError> { + let mut nodes_usage_cutoff: BTreeMap<(DdcEra, NodePubKey), NodeUsage> = BTreeMap::new(); + let mut nodes_to_providers: BTreeMap = BTreeMap::new(); + let mut providers_usage_cutoff: BTreeMap = BTreeMap::new(); + + for (_inspector_key, inspection_receipt) in receipts_by_inspector { + for unverified_branch in &inspection_receipt.nodes_inspection.unverified_branches { + let collector_key = NodePubKey::try_from(unverified_branch.collector.clone()) + .map_err(|_| OCWError::FailedToParseNodeKey { + node_key: unverified_branch.collector.clone(), + })?; + let node_key = match &unverified_branch.aggregate { + AggregateKey::NodeAggregateKey(key) => { + let node_key = NodePubKey::try_from(key.clone()).map_err(|_| { + OCWError::FailedToParseNodeKey { node_key: key.clone() } + })?; + node_key + }, + _ => continue, // can happen only in case of a malformed response or bug + }; + + for (tcaa_id, _leafs) in &unverified_branch.leafs { + let tcaa_usage = Self::get_tcaa_node_usage( + cluster_id, + collector_key.clone(), + *tcaa_id, + node_key.clone(), + )?; + + if !nodes_usage_cutoff.contains_key(&(*tcaa_id, node_key.clone())) { + nodes_usage_cutoff.insert((*tcaa_id, node_key.clone()), tcaa_usage); + if !nodes_to_providers.contains_key(&node_key) { + let provider_id = T::NodeManager::get_node_provider_id(&node_key) + .map_err(|_| { + OCWError::FailedToFetchProviderId { node_key: node_key.clone() } + })?; + + nodes_to_providers.insert(node_key.clone(), provider_id); + } + } + } + } + } + + for ((_, node_key), node_usage) in nodes_usage_cutoff { + let provider_id = nodes_to_providers + .get(&node_key) + .ok_or(OCWError::FailedToFetchProviderId { node_key: node_key.clone() })?; + + match providers_usage_cutoff.get_mut(&provider_id) { + Some(total_usage) => { + total_usage.number_of_puts += node_usage.number_of_puts; + total_usage.number_of_gets += node_usage.number_of_gets; + total_usage.transferred_bytes += node_usage.transferred_bytes; + total_usage.stored_bytes += node_usage.stored_bytes; + }, + None => { + providers_usage_cutoff.insert(provider_id.clone(), node_usage.clone()); + }, + } + } + + Ok(providers_usage_cutoff) + } + /// Send Inspection Receipt. /// /// Parameters: From 5d26bb9b62c407e798c8121ed83ffdb4e876a488 Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Mon, 10 Feb 2025 12:57:53 +0100 Subject: [PATCH 12/31] fix: clippy issues --- pallets/ddc-verification/src/lib.rs | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index 0cb01ea61..f03c4d02b 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -2009,7 +2009,7 @@ pub mod pallet { .map_err(|_| OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })? .first() .cloned() - .ok_or_else(|| OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })?; + .ok_or(OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })?; let ehd = Self::get_ehd_root(cluster_id, ehd_id.clone())?; @@ -3623,7 +3623,7 @@ pub mod pallet { let mut buckets_to_customers: BTreeMap = BTreeMap::new(); let mut customers_usage_cutoff: BTreeMap = BTreeMap::new(); - for (_inspector_key, inspection_receipt) in receipts_by_inspector { + for inspection_receipt in receipts_by_inspector.values() { for unverified_branch in &inspection_receipt.buckets_inspection.unverified_branches { let collector_key = NodePubKey::try_from(unverified_branch.collector.clone()) @@ -3640,7 +3640,7 @@ pub mod pallet { _ => continue, // can happen only in case of a malformed response or bug }; - for (tcaa_id, _leafs) in &unverified_branch.leafs { + for tcaa_id in unverified_branch.leafs.keys() { let tcaa_usage = Self::get_tcaa_bucket_usage( cluster_id, collector_key.clone(), @@ -3649,6 +3649,7 @@ pub mod pallet { *bucket_id, )?; + #[allow(clippy::map_entry)] if !buckets_usage_cutoff.contains_key(&( *tcaa_id, *bucket_id, @@ -3656,7 +3657,7 @@ pub mod pallet { )) { buckets_usage_cutoff .insert((*tcaa_id, *bucket_id, node_key.clone()), tcaa_usage); - if !buckets_to_customers.contains_key(&bucket_id) { + if !buckets_to_customers.contains_key(bucket_id) { let customer_id = T::BucketManager::get_bucket_owner_id(*bucket_id) .map_err(|_| OCWError::FailedToFetchCustomerId { bucket_id: *bucket_id, @@ -3674,7 +3675,7 @@ pub mod pallet { .get(&bucket_id) .ok_or(OCWError::FailedToFetchCustomerId { bucket_id })?; - match customers_usage_cutoff.get_mut(&customer_id) { + match customers_usage_cutoff.get_mut(customer_id) { Some(total_usage) => { total_usage.number_of_puts += bucket_usage.number_of_puts; total_usage.number_of_gets += bucket_usage.number_of_gets; @@ -3701,23 +3702,21 @@ pub mod pallet { let mut nodes_to_providers: BTreeMap = BTreeMap::new(); let mut providers_usage_cutoff: BTreeMap = BTreeMap::new(); - for (_inspector_key, inspection_receipt) in receipts_by_inspector { + for inspection_receipt in receipts_by_inspector.values() { for unverified_branch in &inspection_receipt.nodes_inspection.unverified_branches { let collector_key = NodePubKey::try_from(unverified_branch.collector.clone()) .map_err(|_| OCWError::FailedToParseNodeKey { node_key: unverified_branch.collector.clone(), })?; let node_key = match &unverified_branch.aggregate { - AggregateKey::NodeAggregateKey(key) => { - let node_key = NodePubKey::try_from(key.clone()).map_err(|_| { - OCWError::FailedToParseNodeKey { node_key: key.clone() } - })?; - node_key - }, + AggregateKey::NodeAggregateKey(key) => NodePubKey::try_from(key.clone()) + .map_err(|_| OCWError::FailedToParseNodeKey { + node_key: key.clone(), + })?, _ => continue, // can happen only in case of a malformed response or bug }; - for (tcaa_id, _leafs) in &unverified_branch.leafs { + for tcaa_id in unverified_branch.leafs.keys() { let tcaa_usage = Self::get_tcaa_node_usage( cluster_id, collector_key.clone(), @@ -3725,6 +3724,7 @@ pub mod pallet { node_key.clone(), )?; + #[allow(clippy::map_entry)] if !nodes_usage_cutoff.contains_key(&(*tcaa_id, node_key.clone())) { nodes_usage_cutoff.insert((*tcaa_id, node_key.clone()), tcaa_usage); if !nodes_to_providers.contains_key(&node_key) { @@ -3745,7 +3745,7 @@ pub mod pallet { .get(&node_key) .ok_or(OCWError::FailedToFetchProviderId { node_key: node_key.clone() })?; - match providers_usage_cutoff.get_mut(&provider_id) { + match providers_usage_cutoff.get_mut(provider_id) { Some(total_usage) => { total_usage.number_of_puts += node_usage.number_of_puts; total_usage.number_of_gets += node_usage.number_of_gets; From dbc8efb59e719b836fd5321c6fe51987527a60fe Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Mon, 10 Feb 2025 13:31:43 +0100 Subject: [PATCH 13/31] feat: config variables for verification pallet --- pallets/ddc-verification/src/lib.rs | 88 ++++++++++++++++------------ pallets/ddc-verification/src/mock.rs | 5 +- runtime/cere-dev/src/lib.rs | 2 + runtime/cere/src/lib.rs | 2 + 4 files changed, 56 insertions(+), 41 deletions(-) diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index f03c4d02b..c77457667 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -216,6 +216,8 @@ pub mod pallet { >; type Currency: Currency; const VERIFY_AGGREGATOR_RESPONSE_SIGNATURE: bool; + const DISABLE_PAYOUTS_CUTOFF: bool; + const DEBUG_MODE: bool; type ClusterProtocol: ClusterProtocol>; #[cfg(feature = "runtime-benchmarks")] type CustomerDepositor: CustomerDepositor; @@ -1148,7 +1150,9 @@ pub mod pallet { errors.extend(errs); } - Self::submit_errors(&errors, &verification_account, &signer); + if T::DEBUG_MODE { + Self::submit_errors(&errors, &verification_account, &signer); + } } } } @@ -1357,13 +1361,12 @@ pub mod pallet { .first() .ok_or([OCWError::FailedToFetchNodeChallenge])?; - let tcaa_leaves_count = tcaa_root - .usage - .ok_or([OCWError::FailedToFetchNodeChallenge])? - .puts + tcaa_root - .usage - .ok_or([OCWError::FailedToFetchNodeChallenge])? - .gets; + let tcaa_leaves_count = + tcaa_root.usage.ok_or([OCWError::FailedToFetchNodeChallenge])?.puts + + tcaa_root + .usage + .ok_or([OCWError::FailedToFetchNodeChallenge])? + .gets; let ids = get_leaves_ids(tcaa_leaves_count); tcaa_leaves.insert(tcaa_id, ids); @@ -2024,8 +2027,11 @@ pub mod pallet { let inspection_receipts = Self::fetch_inspection_receipts(cluster_id, ehd_id.clone())?; - let customers_usage_cutoff = - Self::calculate_customers_usage_cutoff(cluster_id, &inspection_receipts)?; + let customers_usage_cutoff = if !T::DISABLE_PAYOUTS_CUTOFF { + Self::calculate_customers_usage_cutoff(cluster_id, &inspection_receipts)? + } else { + Default::default() + }; let (payers, cluster_costs) = Self::calculate_ehd_customers_charges( &ehd.customers, @@ -2038,8 +2044,11 @@ pub mod pallet { let cluster_usage = ehd.get_cluster_usage(); - let providers_usage_cutoff = - Self::calculate_providers_usage_cutoff(cluster_id, &inspection_receipts)?; + let providers_usage_cutoff = if !T::DISABLE_PAYOUTS_CUTOFF { + Self::calculate_providers_usage_cutoff(cluster_id, &inspection_receipts)? + } else { + Default::default() + }; let payees = Self::calculate_ehd_providers_rewards( &ehd.providers, @@ -2186,8 +2195,8 @@ pub mod pallet { let fraction_of_month = Perquintill::from_rational(duration_seconds as u64, AVG_SECONDS_MONTH as u64); - customer_costs.storage = fraction_of_month * - ((consumed_usage.stored_bytes as u128) + customer_costs.storage = fraction_of_month + * ((consumed_usage.stored_bytes as u128) .checked_sub(cutoff.stored_bytes as u128) .ok_or(ArithmeticError::Underflow)? .checked_mul(pricing.unit_per_mb_stored) @@ -2337,8 +2346,8 @@ pub mod pallet { cluster_id: &ClusterId, ) -> Result, Vec> { if let Some(ehd_id) = Self::get_ehd_id_for_payout(cluster_id) { - if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) == - PayoutState::Initialized + if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) + == PayoutState::Initialized { let era_payable_usage = Self::fetch_ehd_payable_usage_or_retry(cluster_id, ehd_id.clone())?; @@ -2379,8 +2388,8 @@ pub mod pallet { let batch_size = T::MAX_PAYOUT_BATCH_SIZE; if let Some(ehd_id) = Self::get_ehd_id_for_payout(cluster_id) { - if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) == - PayoutState::ChargingCustomers + if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) + == PayoutState::ChargingCustomers { let era_payable_usage = Self::fetch_ehd_payable_usage_or_retry(cluster_id, ehd_id.clone())?; @@ -2463,9 +2472,9 @@ pub mod pallet { cluster_id: &ClusterId, ) -> Result, Vec> { if let Some(ehd_id) = Self::get_ehd_id_for_payout(cluster_id) { - if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) == - PayoutState::ChargingCustomers && - T::PayoutProcessor::is_customers_charging_finished(cluster_id, ehd_id.2) + if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) + == PayoutState::ChargingCustomers + && T::PayoutProcessor::is_customers_charging_finished(cluster_id, ehd_id.2) { return Ok(Some(ehd_id)); } @@ -2477,8 +2486,8 @@ pub mod pallet { cluster_id: &ClusterId, ) -> Result, Vec> { if let Some(ehd_id) = Self::get_ehd_id_for_payout(cluster_id) { - if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) == - PayoutState::CustomersChargedWithFees + if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) + == PayoutState::CustomersChargedWithFees { let ehd_payable_usage = Self::fetch_ehd_payable_usage_or_retry(cluster_id, ehd_id.clone())?; @@ -2520,8 +2529,8 @@ pub mod pallet { let batch_size = T::MAX_PAYOUT_BATCH_SIZE; if let Some(ehd_id) = Self::get_ehd_id_for_payout(cluster_id) { - if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) == - PayoutState::RewardingProviders + if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) + == PayoutState::RewardingProviders { let era_payable_usage = Self::fetch_ehd_payable_usage_or_retry(cluster_id, ehd_id.clone())?; @@ -2605,9 +2614,9 @@ pub mod pallet { cluster_id: &ClusterId, ) -> Result, Vec> { if let Some(ehd_id) = Self::get_ehd_id_for_payout(cluster_id) { - if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) == - PayoutState::RewardingProviders && - T::PayoutProcessor::is_providers_rewarding_finished(cluster_id, ehd_id.2) + if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) + == PayoutState::RewardingProviders + && T::PayoutProcessor::is_providers_rewarding_finished(cluster_id, ehd_id.2) { return Ok(Some(ehd_id)); } @@ -2619,8 +2628,8 @@ pub mod pallet { cluster_id: &ClusterId, ) -> Result, Vec> { if let Some(ehd_id) = Self::get_ehd_id_for_payout(cluster_id) { - if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) == - PayoutState::ProvidersRewarded + if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) + == PayoutState::ProvidersRewarded { return Ok(Some(ehd_id)); } @@ -2857,11 +2866,12 @@ pub mod pallet { for &leaf in leaves { match mmr.push(leaf) { Ok(pos) => leaves_with_position.push((pos, leaf)), - Err(_) => + Err(_) => { return Err(OCWError::FailedToCreateMerkleRoot { cluster_id: *cluster_id, era_id, - }), + }) + }, } } @@ -3070,8 +3080,8 @@ pub mod pallet { .flat_map(|eras| { eras.iter() .filter(|&ids| { - ids.id > last_validated_era_by_this_validator && - ids.id > last_paid_era_for_cluster + ids.id > last_validated_era_by_this_validator + && ids.id > last_paid_era_for_cluster }) .cloned() }) @@ -4987,8 +4997,9 @@ pub mod pallet { merkle_tree_node_id, levels, ), - AggregateKey::NodeAggregateKey(node_id) => - client.traverse_node_aggregate(era_id, &node_id, merkle_tree_node_id, levels), + AggregateKey::NodeAggregateKey(node_id) => { + client.traverse_node_aggregate(era_id, &node_id, merkle_tree_node_id, levels) + }, }?; Ok(response) @@ -5018,8 +5029,9 @@ pub mod pallet { &node_id, merkle_tree_node_id, ), - AggregateKey::NodeAggregateKey(node_id) => - client.challenge_node_aggregate(era_id, &node_id, merkle_tree_node_id), + AggregateKey::NodeAggregateKey(node_id) => { + client.challenge_node_aggregate(era_id, &node_id, merkle_tree_node_id) + }, } } diff --git a/pallets/ddc-verification/src/mock.rs b/pallets/ddc-verification/src/mock.rs index bce861570..6bacfc9bd 100644 --- a/pallets/ddc-verification/src/mock.rs +++ b/pallets/ddc-verification/src/mock.rs @@ -247,6 +247,8 @@ impl crate::Config for Test { const MAX_MERKLE_NODE_IDENTIFIER: u16 = 4; type Currency = Balances; const VERIFY_AGGREGATOR_RESPONSE_SIGNATURE: bool = false; + const DISABLE_PAYOUTS_CUTOFF: bool = false; + const DEBUG_MODE: bool = true; type BucketsStorageUsageProvider = MockBucketValidator; type NodesStorageUsageProvider = MockNodeValidator; type ClusterProtocol = MockClusterProtocol; @@ -254,7 +256,6 @@ impl crate::Config for Test { type CustomerDepositor = MockCustomerDepositor; #[cfg(feature = "runtime-benchmarks")] type ClusterCreator = MockClusterCreator; - #[cfg(feature = "runtime-benchmarks")] type BucketManager = MockBucketManager; } @@ -407,9 +408,7 @@ impl ClusterCreator for MockClusterCreator { } } -#[cfg(feature = "runtime-benchmarks")] pub struct MockBucketManager; -#[cfg(feature = "runtime-benchmarks")] impl BucketManager for MockBucketManager { fn get_bucket_owner_id(_bucket_id: BucketId) -> Result { unimplemented!() diff --git a/runtime/cere-dev/src/lib.rs b/runtime/cere-dev/src/lib.rs index 8b9c3e03e..fb1cedc5c 100644 --- a/runtime/cere-dev/src/lib.rs +++ b/runtime/cere-dev/src/lib.rs @@ -1335,6 +1335,8 @@ impl pallet_ddc_verification::Config for Runtime { const MAX_MERKLE_NODE_IDENTIFIER: u16 = 3; type Currency = Balances; const VERIFY_AGGREGATOR_RESPONSE_SIGNATURE: bool = false; + const DISABLE_PAYOUTS_CUTOFF: bool = true; + const DEBUG_MODE: bool = true; type BucketsStorageUsageProvider = DdcCustomers; type NodesStorageUsageProvider = DdcNodes; type ClusterProtocol = DdcClusters; diff --git a/runtime/cere/src/lib.rs b/runtime/cere/src/lib.rs index c8274b1e1..32f7d38e9 100644 --- a/runtime/cere/src/lib.rs +++ b/runtime/cere/src/lib.rs @@ -1354,6 +1354,8 @@ impl pallet_ddc_verification::Config for Runtime { const MAX_MERKLE_NODE_IDENTIFIER: u16 = 3; type Currency = Balances; const VERIFY_AGGREGATOR_RESPONSE_SIGNATURE: bool = true; + const DISABLE_PAYOUTS_CUTOFF: bool = false; + const DEBUG_MODE: bool = false; type BucketsStorageUsageProvider = DdcCustomers; type NodesStorageUsageProvider = DdcNodes; type ClusterProtocol = DdcClusters; From bf4d28c49bf5c9ce4911c28a19aff21ad4fe45be Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Mon, 10 Feb 2025 13:34:18 +0100 Subject: [PATCH 14/31] fix: formatting issues --- pallets/ddc-verification/src/lib.rs | 68 ++++++++++++++--------------- 1 file changed, 33 insertions(+), 35 deletions(-) diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index c77457667..b70ee608b 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -1361,12 +1361,13 @@ pub mod pallet { .first() .ok_or([OCWError::FailedToFetchNodeChallenge])?; - let tcaa_leaves_count = - tcaa_root.usage.ok_or([OCWError::FailedToFetchNodeChallenge])?.puts - + tcaa_root - .usage - .ok_or([OCWError::FailedToFetchNodeChallenge])? - .gets; + let tcaa_leaves_count = tcaa_root + .usage + .ok_or([OCWError::FailedToFetchNodeChallenge])? + .puts + tcaa_root + .usage + .ok_or([OCWError::FailedToFetchNodeChallenge])? + .gets; let ids = get_leaves_ids(tcaa_leaves_count); tcaa_leaves.insert(tcaa_id, ids); @@ -2195,8 +2196,8 @@ pub mod pallet { let fraction_of_month = Perquintill::from_rational(duration_seconds as u64, AVG_SECONDS_MONTH as u64); - customer_costs.storage = fraction_of_month - * ((consumed_usage.stored_bytes as u128) + customer_costs.storage = fraction_of_month * + ((consumed_usage.stored_bytes as u128) .checked_sub(cutoff.stored_bytes as u128) .ok_or(ArithmeticError::Underflow)? .checked_mul(pricing.unit_per_mb_stored) @@ -2346,8 +2347,8 @@ pub mod pallet { cluster_id: &ClusterId, ) -> Result, Vec> { if let Some(ehd_id) = Self::get_ehd_id_for_payout(cluster_id) { - if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) - == PayoutState::Initialized + if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) == + PayoutState::Initialized { let era_payable_usage = Self::fetch_ehd_payable_usage_or_retry(cluster_id, ehd_id.clone())?; @@ -2388,8 +2389,8 @@ pub mod pallet { let batch_size = T::MAX_PAYOUT_BATCH_SIZE; if let Some(ehd_id) = Self::get_ehd_id_for_payout(cluster_id) { - if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) - == PayoutState::ChargingCustomers + if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) == + PayoutState::ChargingCustomers { let era_payable_usage = Self::fetch_ehd_payable_usage_or_retry(cluster_id, ehd_id.clone())?; @@ -2472,9 +2473,9 @@ pub mod pallet { cluster_id: &ClusterId, ) -> Result, Vec> { if let Some(ehd_id) = Self::get_ehd_id_for_payout(cluster_id) { - if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) - == PayoutState::ChargingCustomers - && T::PayoutProcessor::is_customers_charging_finished(cluster_id, ehd_id.2) + if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) == + PayoutState::ChargingCustomers && + T::PayoutProcessor::is_customers_charging_finished(cluster_id, ehd_id.2) { return Ok(Some(ehd_id)); } @@ -2486,8 +2487,8 @@ pub mod pallet { cluster_id: &ClusterId, ) -> Result, Vec> { if let Some(ehd_id) = Self::get_ehd_id_for_payout(cluster_id) { - if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) - == PayoutState::CustomersChargedWithFees + if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) == + PayoutState::CustomersChargedWithFees { let ehd_payable_usage = Self::fetch_ehd_payable_usage_or_retry(cluster_id, ehd_id.clone())?; @@ -2529,8 +2530,8 @@ pub mod pallet { let batch_size = T::MAX_PAYOUT_BATCH_SIZE; if let Some(ehd_id) = Self::get_ehd_id_for_payout(cluster_id) { - if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) - == PayoutState::RewardingProviders + if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) == + PayoutState::RewardingProviders { let era_payable_usage = Self::fetch_ehd_payable_usage_or_retry(cluster_id, ehd_id.clone())?; @@ -2614,9 +2615,9 @@ pub mod pallet { cluster_id: &ClusterId, ) -> Result, Vec> { if let Some(ehd_id) = Self::get_ehd_id_for_payout(cluster_id) { - if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) - == PayoutState::RewardingProviders - && T::PayoutProcessor::is_providers_rewarding_finished(cluster_id, ehd_id.2) + if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) == + PayoutState::RewardingProviders && + T::PayoutProcessor::is_providers_rewarding_finished(cluster_id, ehd_id.2) { return Ok(Some(ehd_id)); } @@ -2628,8 +2629,8 @@ pub mod pallet { cluster_id: &ClusterId, ) -> Result, Vec> { if let Some(ehd_id) = Self::get_ehd_id_for_payout(cluster_id) { - if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) - == PayoutState::ProvidersRewarded + if T::PayoutProcessor::get_payout_state(cluster_id, ehd_id.2) == + PayoutState::ProvidersRewarded { return Ok(Some(ehd_id)); } @@ -2866,12 +2867,11 @@ pub mod pallet { for &leaf in leaves { match mmr.push(leaf) { Ok(pos) => leaves_with_position.push((pos, leaf)), - Err(_) => { + Err(_) => return Err(OCWError::FailedToCreateMerkleRoot { cluster_id: *cluster_id, era_id, - }) - }, + }), } } @@ -3080,8 +3080,8 @@ pub mod pallet { .flat_map(|eras| { eras.iter() .filter(|&ids| { - ids.id > last_validated_era_by_this_validator - && ids.id > last_paid_era_for_cluster + ids.id > last_validated_era_by_this_validator && + ids.id > last_paid_era_for_cluster }) .cloned() }) @@ -4997,9 +4997,8 @@ pub mod pallet { merkle_tree_node_id, levels, ), - AggregateKey::NodeAggregateKey(node_id) => { - client.traverse_node_aggregate(era_id, &node_id, merkle_tree_node_id, levels) - }, + AggregateKey::NodeAggregateKey(node_id) => + client.traverse_node_aggregate(era_id, &node_id, merkle_tree_node_id, levels), }?; Ok(response) @@ -5029,9 +5028,8 @@ pub mod pallet { &node_id, merkle_tree_node_id, ), - AggregateKey::NodeAggregateKey(node_id) => { - client.challenge_node_aggregate(era_id, &node_id, merkle_tree_node_id) - }, + AggregateKey::NodeAggregateKey(node_id) => + client.challenge_node_aggregate(era_id, &node_id, merkle_tree_node_id), } } From aa76f26fe7e002460287f8350a33a26fe6c07fc2 Mon Sep 17 00:00:00 2001 From: Ayush Kumar Mishra Date: Mon, 10 Feb 2025 19:00:28 +0530 Subject: [PATCH 15/31] Update to Crate Polkadot-2409 and Hyperbridge Integration --- .github/workflows/ci.yaml | 13 +- .github/workflows/e2e.yaml | 4 +- .github/workflows/stage.yaml | 6 +- CHANGELOG.md | 5 + Cargo.lock | 18398 +++++++++++----- Cargo.toml | 237 +- README.md | 2 +- node/cli/src/command.rs | 4 +- node/client/Cargo.toml | 6 +- node/client/src/lib.rs | 7 +- node/rpc/Cargo.toml | 6 +- node/rpc/src/lib.rs | 21 +- node/service/Cargo.toml | 3 +- node/service/src/chain_spec.rs | 2 +- node/service/src/lib.rs | 3 +- pallets/chainbridge/src/lib.rs | 2 +- pallets/ddc-clusters-gov/src/lib.rs | 2 +- pallets/ddc-clusters/src/lib.rs | 2 +- pallets/ddc-customers/src/lib.rs | 2 +- pallets/ddc-nodes/src/lib.rs | 2 +- pallets/ddc-payouts/src/lib.rs | 2 +- pallets/ddc-staking/src/lib.rs | 2 +- pallets/ddc-verification/src/benchmarking.rs | 2 +- pallets/ddc-verification/src/lib.rs | 5 +- pallets/origins/src/lib.rs | 2 +- primitives/src/lib.rs | 35 +- runtime/cere-dev/Cargo.toml | 27 +- runtime/cere-dev/src/hyperbridge_ismp.rs | 240 + runtime/cere-dev/src/lib.rs | 83 +- runtime/cere-dev/src/weights/ismp_grandpa.rs | 62 + runtime/cere-dev/src/weights/mod.rs | 2 + .../src/weights/pallet_token_gateway.rs | 111 + runtime/cere/Cargo.toml | 26 +- runtime/cere/src/hyperbridge_ismp.rs | 240 + runtime/cere/src/lib.rs | 81 +- runtime/cere/src/weights/ismp_grandpa.rs | 62 + runtime/cere/src/weights/mod.rs | 2 + .../cere/src/weights/pallet_token_gateway.rs | 111 + runtime/common/Cargo.toml | 4 +- runtime/common/src/constants.rs | 4 +- runtime/common/src/lib.rs | 2 +- runtime/common/src/migrations.rs | 1 + rust-toolchain.toml | 2 +- scripts/init.sh | 5 +- 44 files changed, 14091 insertions(+), 5749 deletions(-) create mode 100644 runtime/cere-dev/src/hyperbridge_ismp.rs create mode 100644 runtime/cere-dev/src/weights/ismp_grandpa.rs create mode 100644 runtime/cere-dev/src/weights/mod.rs create mode 100644 runtime/cere-dev/src/weights/pallet_token_gateway.rs create mode 100644 runtime/cere/src/hyperbridge_ismp.rs create mode 100644 runtime/cere/src/weights/ismp_grandpa.rs create mode 100644 runtime/cere/src/weights/mod.rs create mode 100644 runtime/cere/src/weights/pallet_token_gateway.rs diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 25cb119f0..d9a652c40 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -44,7 +44,7 @@ jobs: - name: Install toolchain and rust-src uses: actions-rs/toolchain@v1 with: - toolchain: 1.79.0 + toolchain: 1.81.0 override: true target: wasm32-unknown-unknown components: rust-src @@ -54,7 +54,7 @@ jobs: run: cargo install --git https://github.com/paritytech/try-runtime-cli --tag v0.7.0 --locked - name: Check Build run: | - cargo update -p home --precise 0.5.9 && cargo build --release --features try-runtime + cargo build --release --features try-runtime - name: Check Try-Runtime run: | try-runtime --runtime ./target/release/wbuild/cere-dev-runtime/cere_dev_runtime.compact.compressed.wasm \ @@ -78,7 +78,7 @@ jobs: - name: Install toolchain uses: actions-rs/toolchain@v1 with: - toolchain: 1.79.0 + toolchain: 1.81.0 override: true target: wasm32-unknown-unknown components: rust-src @@ -86,7 +86,7 @@ jobs: uses: Swatinem/rust-cache@v2 - name: Check with Clippy run: | - cargo update -p home --precise 0.5.9 && cargo clippy --no-deps --all-targets --features runtime-benchmarks,try-runtime --workspace -- --deny warnings + cargo clippy --no-deps --all-targets --features runtime-benchmarks,try-runtime --workspace -- --deny warnings tests: name: Run tests @@ -101,15 +101,12 @@ jobs: - name: Install toolchain uses: actions-rs/toolchain@v1 with: - toolchain: 1.79.0 + toolchain: 1.81.0 override: true target: wasm32-unknown-unknown components: rust-src - name: Rust Cache uses: Swatinem/rust-cache@v2 - - name: Update dependency - run: | - cargo update -p home --precise 0.5.9 - name: Run cargo-tarpaulin uses: actions-rs/tarpaulin@v0.1 with: diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 4e8f6bff2..cc2873bc1 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -78,13 +78,13 @@ jobs: docker cp "${CONTAINER_ID}:/home/cere/cere-dev-runtime-artifacts/cere_dev_runtime.compact.compressed.wasm" "./${{ env.CERE_DEV_RUNTIME }}" - name: Upload cere-runtime wasm artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "cere_runtime.compact.compressed.${{ env.GITHUB_SHA }}.wasm" path: "./${{ env.CERE_RUNTIME }}" - name: Upload cere-dev-runtime wasm artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "cere_dev_runtime.compact.compressed.${{ env.GITHUB_SHA }}.wasm" path: "./${{ env.CERE_DEV_RUNTIME }}" diff --git a/.github/workflows/stage.yaml b/.github/workflows/stage.yaml index d999fc586..c1951a3b5 100644 --- a/.github/workflows/stage.yaml +++ b/.github/workflows/stage.yaml @@ -60,7 +60,7 @@ jobs: - name: Install toolchain and rust-src uses: actions-rs/toolchain@v1 with: - toolchain: 1.79.0 + toolchain: 1.81.0 override: true target: wasm32-unknown-unknown components: rust-src @@ -90,13 +90,13 @@ jobs: docker cp "${CONTAINER_ID}:/home/cere/cere-dev-runtime-artifacts/cere_dev_runtime.compact.compressed.wasm" "./${{ env.CERE_DEV_RUNTIME }}" - name: Upload cere-runtime wasm artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "cere_runtime.compact.compressed.${{ env.GITHUB_SHA }}.wasm" path: "./${{ env.CERE_RUNTIME }}" - name: Upload cere-dev-runtime wasm artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: "cere_dev_runtime.compact.compressed.${{ env.GITHUB_SHA }}.wasm" path: "./${{ env.CERE_DEV_RUNTIME }}" diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d06da06e..4f5a90330 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [C] Changes is `Cere` Runtime - [D] Changes is `Cere Dev` Runtime +## [7.3.0] + +- [C,D] Update to Polkadot-2409 crate version +- [C,D] Hyperbridge Integration + ## [7.2.0] - [C,D] DAC v5 Inspection + Payouts prototype diff --git a/Cargo.lock b/Cargo.lock index e169e3d3e..eb8ab9c39 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -71,6 +71,17 @@ dependencies = [ "subtle 2.6.1", ] +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "version_check", +] + [[package]] name = "ahash" version = "0.8.11" @@ -78,7 +89,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom", + "getrandom 0.2.15", "once_cell", "version_check", "zerocopy", @@ -99,6 +110,151 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +[[package]] +name = "alloy-primitives" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0628ec0ba5b98b3370bb6be17b12f23bfce8ee4ad83823325a20546d9b03b78" +dependencies = [ + "alloy-rlp", + "bytes 1.10.0", + "cfg-if", + "const-hex", + "derive_more 0.99.19", + "hex-literal 0.4.1", + "itoa", + "proptest", + "rand", + "ruint", + "serde", + "tiny-keccak", +] + +[[package]] +name = "alloy-primitives" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccb3ead547f4532bc8af961649942f0b9c16ee9226e26caa3f38420651cc0bf4" +dependencies = [ + "alloy-rlp", + "bytes 1.10.0", + "cfg-if", + "const-hex", + "derive_more 0.99.19", + "hex-literal 0.4.1", + "itoa", + "k256", + "keccak-asm", + "proptest", + "rand", + "ruint", + "serde", + "tiny-keccak", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6c1d995bff8d011f7cd6c81820d51825e6e06d6db73914c1630ecf544d83d6" +dependencies = [ + "arrayvec 0.7.6", + "bytes 1.10.0", +] + +[[package]] +name = "alloy-sol-macro" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a98ad1696a2e17f010ae8e43e9f2a1e930ed176a8e3ff77acfeff6dfb07b42c" +dependencies = [ + "const-hex", + "dunce", + "heck 0.4.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.98", + "syn-solidity 0.4.2", + "tiny-keccak", +] + +[[package]] +name = "alloy-sol-macro" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b40397ddcdcc266f59f959770f601ce1280e699a91fc1862f29cef91707cd09" +dependencies = [ + "alloy-sol-macro-expander", + "alloy-sol-macro-input", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "alloy-sol-macro-expander" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "867a5469d61480fea08c7333ffeca52d5b621f5ca2e44f271b117ec1fc9a0525" +dependencies = [ + "alloy-sol-macro-input", + "const-hex", + "heck 0.5.0", + "indexmap 2.7.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.98", + "syn-solidity 0.7.7", + "tiny-keccak", +] + +[[package]] +name = "alloy-sol-macro-input" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e482dc33a32b6fadbc0f599adea520bd3aaa585c141a80b404d0a3e3fa72528" +dependencies = [ + "const-hex", + "dunce", + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.98", + "syn-solidity 0.7.7", +] + +[[package]] +name = "alloy-sol-types" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98d7107bed88e8f09f0ddcc3335622d87bfb6821f3e0c7473329fb1cfad5e015" +dependencies = [ + "alloy-primitives 0.4.2", + "alloy-sol-macro 0.4.2", + "const-hex", + "serde", +] + +[[package]] +name = "alloy-sol-types" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a91ca40fa20793ae9c3841b83e74569d1cc9af29a2f5237314fd3452d51e38c7" +dependencies = [ + "alloy-primitives 0.7.7", + "alloy-sol-macro 0.7.7", + "const-hex", +] + +[[package]] +name = "always-assert" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4436e0292ab1bb631b42973c61205e704475fe8126af845c8d923c0996328127" + [[package]] name = "android-tzdata" version = "0.1.1" @@ -155,11 +311,12 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "3.0.6" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", + "once_cell", "windows-sys 0.59.0", ] @@ -189,7 +346,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] @@ -199,8 +356,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f" dependencies = [ "ark-ec", - "ark-ff", - "ark-std", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bls12-377-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20c7021f180a0cbea0380eba97c2af3c57074cdaffe0eef7e840e1c9f2841e55" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-models-ext", + "ark-std 0.4.0", ] [[package]] @@ -210,9 +379,48 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" dependencies = [ "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bls12-381-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1dc4b3d08f19e8ec06e949712f95b8361e43f1391d94f65e4234df03480631c" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff 0.4.2", + "ark-models-ext", + "ark-serialize 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bw6-761" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e0605daf0cc5aa2034b78d008aaf159f56901d92a52ee4f6ecdfdac4f426700" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bw6-761-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccee5fba47266f460067588ee1bf070a9c760bf2050c1c509982c5719aadb4f2" +dependencies = [ + "ark-bw6-761", + "ark-ec", + "ark-ff 0.4.2", + "ark-models-ext", + "ark-std 0.4.0", ] [[package]] @@ -221,14 +429,83 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" dependencies = [ - "ark-ff", + "ark-ff 0.4.2", "ark-poly", - "ark-serialize", - "ark-std", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "hashbrown 0.13.2", "itertools 0.10.5", "num-traits", + "rayon", + "zeroize", +] + +[[package]] +name = "ark-ed-on-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b10d901b9ac4b38f9c32beacedfadcdd64e46f8d7f8e88c1ae1060022cf6f6c6" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ed-on-bls12-377-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524a4fb7540df2e1a8c2e67a83ba1d1e6c3947f4f9342cc2359fc2e789ad731d" +dependencies = [ + "ark-ec", + "ark-ed-on-bls12-377", + "ark-ff 0.4.2", + "ark-models-ext", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ed-on-bls12-381-bandersnatch" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9cde0f2aa063a2a5c28d39b47761aa102bda7c13c84fc118a61b87c7b2f785c" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ed-on-bls12-381-bandersnatch-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d15185f1acb49a07ff8cbe5f11a1adc5a93b19e211e325d826ae98e98e124346" +dependencies = [ + "ark-ec", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ff 0.4.2", + "ark-models-ext", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.3.3", "zeroize", ] @@ -238,10 +515,10 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "digest 0.10.7", "itertools 0.10.5", @@ -252,6 +529,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-ff-asm" version = "0.4.2" @@ -262,6 +549,18 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint", + "num-traits", + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-ff-macros" version = "0.4.2" @@ -275,19 +574,56 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-models-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e9eab5d4b5ff2f228b763d38442adc9b084b0a465409b059fac5c2308835ec2" +dependencies = [ + "ark-ec", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", +] + [[package]] name = "ark-poly" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "hashbrown 0.13.2", ] +[[package]] +name = "ark-scale" +version = "0.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f69c00b3b529be29528a6f2fd5fa7b1790f8bed81b9cdca17e326538545a179" +dependencies = [ + "ark-ec", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + [[package]] name = "ark-serialize" version = "0.4.2" @@ -295,7 +631,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ "ark-serialize-derive", - "ark-std", + "ark-std 0.4.0", "digest 0.10.7", "num-bigint", ] @@ -311,6 +647,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand", +] + [[package]] name = "ark-std" version = "0.4.0" @@ -319,6 +665,7 @@ checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" dependencies = [ "num-traits", "rand", + "rayon", ] [[package]] @@ -333,6 +680,15 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + [[package]] name = "arrayvec" version = "0.7.6" @@ -391,7 +747,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", "synstructure 0.13.1", ] @@ -414,7 +770,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] @@ -424,55 +780,259 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" [[package]] -name = "async-channel" -version = "1.9.0" +name = "asset-test-utils" +version = "18.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +checksum = "d0324df9ce91a9840632e865dd3272bd20162023856f1b189b7ae58afa5c6b61" dependencies = [ - "concurrent-queue", - "event-listener 2.5.3", - "futures-core", + "cumulus-pallet-parachain-system", + "cumulus-pallet-xcmp-queue", + "cumulus-primitives-core", + "frame-support", + "frame-system", + "pallet-assets", + "pallet-balances", + "pallet-collator-selection", + "pallet-session", + "pallet-timestamp", + "pallet-xcm", + "pallet-xcm-bridge-hub-router", + "parachains-common", + "parachains-runtimes-test-utils 17.0.0", + "parity-scale-codec", + "sp-io", + "sp-runtime", + "staging-parachain-info", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "substrate-wasm-builder", ] [[package]] -name = "async-io" -version = "2.4.0" +name = "asset-test-utils" +version = "20.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" +checksum = "9b0a99a8fa37a58ad868fca25530dde06b6582cb46b64bfae808f5b9b87e42ce" dependencies = [ - "async-lock", - "cfg-if", - "concurrent-queue", - "futures-io", - "futures-lite", - "parking", - "polling", - "rustix 0.38.42", - "slab", - "tracing", + "cumulus-pallet-parachain-system", + "cumulus-pallet-xcmp-queue", + "cumulus-primitives-core", + "frame-support", + "frame-system", + "pallet-asset-conversion", + "pallet-assets", + "pallet-balances", + "pallet-collator-selection", + "pallet-session", + "pallet-timestamp", + "pallet-xcm", + "pallet-xcm-bridge-hub-router", + "parachains-common", + "parachains-runtimes-test-utils 19.0.0", + "parity-scale-codec", + "sp-io", + "sp-runtime", + "staging-parachain-info", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "substrate-wasm-builder", + "xcm-runtime-apis", +] + +[[package]] +name = "assets-common" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c540587f89a03003946b14decef4fcadb083edc4e62f968de245b82e5402e923" +dependencies = [ + "cumulus-primitives-core", + "frame-support", + "impl-trait-for-tuples", + "log", + "pallet-asset-conversion", + "pallet-assets", + "pallet-xcm", + "parachains-common", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-runtime", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "substrate-wasm-builder", +] + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite 0.2.16", +] + +[[package]] +name = "async-executor" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand 2.3.0", + "futures-lite 2.6.0", + "slab", +] + +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "blocking", + "futures-lite 1.13.0", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.28", + "slab", + "socket2 0.4.10", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" +dependencies = [ + "async-lock 3.4.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.6.0", + "parking", + "polling 3.7.4", + "rustix 0.38.44", + "slab", + "tracing", "windows-sys 0.59.0", ] +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + [[package]] name = "async-lock" version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 5.3.1", + "event-listener 5.4.0", "event-listener-strategy", - "pin-project-lite", + "pin-project-lite 0.2.16", +] + +[[package]] +name = "async-net" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12f" +dependencies = [ + "async-io 1.13.0", + "blocking", + "futures-lite 1.13.0", +] + +[[package]] +name = "async-process" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +dependencies = [ + "async-io 1.13.0", + "async-lock 2.8.0", + "async-signal", + "blocking", + "cfg-if", + "event-listener 3.1.0", + "futures-lite 1.13.0", + "rustix 0.38.44", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-signal" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" +dependencies = [ + "async-io 2.4.0", + "async-lock 3.4.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.44", + "signal-hook-registry", + "slab", + "windows-sys 0.59.0", ] +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + [[package]] name = "async-trait" -version = "0.1.83" +version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] @@ -481,13 +1041,19 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4057f2c32adbb2fc158e22fb38433c8e9bbf76b75a4732c7c0cbaf695fb65568" dependencies = [ - "bytes", + "bytes 1.10.0", "futures-sink", "futures-util", "memchr", - "pin-project-lite", + "pin-project-lite 0.2.16", ] +[[package]] +name = "atomic-take" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8ab6b55fe97976e46f91ddbed8d147d966475dc29b2032757ba47e02376fbc3" + [[package]] name = "atomic-waker" version = "1.1.2" @@ -505,6 +1071,17 @@ dependencies = [ "url", ] +[[package]] +name = "auto_impl" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e12882f59de5360c748c4cbf569a042d5fb0eb515f7bea9c1f470b47f6ffbd73" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "autocfg" version = "1.4.0" @@ -562,6 +1139,16 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +[[package]] +name = "binary-merkle-tree" +version = "15.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "336bf780dd7526a9a4bc1521720b25c1994dc132cccd59553431923fa4d1a693" +dependencies = [ + "hash-db", + "log", +] + [[package]] name = "bincode" version = "1.3.3" @@ -583,15 +1170,39 @@ dependencies = [ "lazy_static", "lazycell", "peeking_take_while", - "prettyplease 0.2.25", + "prettyplease 0.2.29", "proc-macro2", "quote", "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.91", + "syn 2.0.98", +] + +[[package]] +name = "bip39" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33415e24172c1b7d6066f6d999545375ab8e1d95421d6784bdfff9496f292387" +dependencies = [ + "bitcoin_hashes", +] + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", ] +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + [[package]] name = "bitcoin-internals" version = "0.2.0" @@ -616,9 +1227,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" [[package]] name = "bitvec" @@ -628,6 +1239,7 @@ checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", "radium", + "serde", "tap", "wyz", ] @@ -653,26 +1265,36 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "blake2-rfc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" +dependencies = [ + "arrayvec 0.4.12", + "constant_time_eq 0.1.5", +] + [[package]] name = "blake2b_simd" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" +checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" dependencies = [ "arrayref", - "arrayvec", - "constant_time_eq", + "arrayvec 0.7.6", + "constant_time_eq 0.3.1", ] [[package]] name = "blake2s_simd" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" +checksum = "e90f7deecfac93095eb874a40febd69427776e24e1bd7f87f33ac62d6f0174df" dependencies = [ "arrayref", - "arrayvec", - "constant_time_eq", + "arrayvec 0.7.6", + "constant_time_eq 0.3.1", ] [[package]] @@ -682,10 +1304,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8ee0c1824c4dea5b5f81736aff91bae041d2c07ee1192bec91054e10e3e601e" dependencies = [ "arrayref", - "arrayvec", + "arrayvec 0.7.6", "cc", "cfg-if", - "constant_time_eq", + "constant_time_eq 0.3.1", ] [[package]] @@ -706,6 +1328,19 @@ dependencies = [ "generic-array 0.14.7", ] +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel 2.3.1", + "async-task", + "futures-io", + "futures-lite 2.6.0", + "piper", +] + [[package]] name = "bounded-collections" version = "0.2.2" @@ -719,58 +1354,386 @@ dependencies = [ ] [[package]] -name = "bs58" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" - -[[package]] -name = "bs58" -version = "0.5.1" +name = "bounded-vec" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +checksum = "68534a48cbf63a4b1323c433cf21238c9ec23711e0df13b08c33e5c2082663ce" dependencies = [ - "tinyvec", + "thiserror 1.0.69", ] [[package]] -name = "build-helper" -version = "0.1.1" +name = "bp-header-chain" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdce191bf3fa4995ce948c8c83b4640a1745457a149e73c6db75b4ffe36aad5f" +checksum = "890df97cea17ee61ff982466bb9e90cb6b1462adb45380999019388d05e4b92d" dependencies = [ - "semver 0.6.0", + "bp-runtime", + "finality-grandpa", + "frame-support", + "parity-scale-codec", + "scale-info", + "serde", + "sp-consensus-grandpa", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] -name = "bumpalo" -version = "3.16.0" +name = "bp-messages" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "7efabf94339950b914ba87249497f1a0e35a73849934d164fecae4b275928cf6" +dependencies = [ + "bp-header-chain", + "bp-runtime", + "frame-support", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-std", +] [[package]] -name = "byte-slice-cast" -version = "1.2.2" +name = "bp-parachains" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" +checksum = "9011e5c12c15caf3c4129a98f4f4916ea9165db8daf6ed85867c3106075f40df" +dependencies = [ + "bp-header-chain", + "bp-polkadot-core", + "bp-runtime", + "frame-support", + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", + "sp-std", +] [[package]] -name = "byte-tools" -version = "0.3.1" +name = "bp-polkadot" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" +checksum = "fa6277dd4333917ecfbcc35e9332a9f11682e0a506e76b617c336224660fce33" +dependencies = [ + "bp-header-chain", + "bp-polkadot-core", + "bp-runtime", + "frame-support", + "sp-api", + "sp-std", +] [[package]] -name = "byte-unit" -version = "4.0.19" +name = "bp-polkadot-core" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da78b32057b8fdfc352504708feeba7216dcd65a2c9ab02978cbd288d1279b6c" +checksum = "345cf472bac11ef79d403e4846a666b7d22a13cd16d9c85b62cd6b5e16c4a042" dependencies = [ - "utf8-width", + "bp-messages", + "bp-runtime", + "frame-support", + "frame-system", + "parity-scale-codec", + "parity-util-mem", + "scale-info", + "serde", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] -name = "bytemuck" +name = "bp-relayers" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9465ad727e466d67d64244a1aa7bb19933a297913fdde34b8e9bda0a341bdeb" +dependencies = [ + "bp-header-chain", + "bp-messages", + "bp-parachains", + "bp-runtime", + "frame-support", + "frame-system", + "pallet-utility", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "bp-runtime" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "746d9464f912b278f8a5e2400f10541f95da7fc6c7d688a2788b9a46296146ee" +dependencies = [ + "frame-support", + "frame-system", + "hash-db", + "impl-trait-for-tuples", + "log", + "num-traits", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-trie", + "trie-db", +] + +[[package]] +name = "bp-test-utils" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e659078b54c0b6bd79896738212a305842ad37168976363233516754337826" +dependencies = [ + "bp-header-chain", + "bp-parachains", + "bp-polkadot-core", + "bp-runtime", + "ed25519-dalek", + "finality-grandpa", + "parity-scale-codec", + "sp-application-crypto", + "sp-consensus-grandpa", + "sp-core", + "sp-runtime", + "sp-std", + "sp-trie", +] + +[[package]] +name = "bp-xcm-bridge-hub" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0873c54562b3d492541cbc8a7974c6854a5157d07880a2a71f8ba888a69e17e9" +dependencies = [ + "bp-messages", + "bp-runtime", + "frame-support", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-std", + "staging-xcm", +] + +[[package]] +name = "bp-xcm-bridge-hub-router" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9284820ca704f5c065563cad77d2e3d069a23cc9cb3a29db9c0de8dd3b173a87" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", + "staging-xcm", +] + +[[package]] +name = "bridge-hub-common" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b53c53d627e2da38f8910807944bf3121e154b5c0ac9e122995af9dfb13ed" +dependencies = [ + "cumulus-primitives-core", + "frame-support", + "pallet-message-queue", + "parity-scale-codec", + "scale-info", + "snowbridge-core", + "sp-core", + "sp-runtime", + "sp-std", + "staging-xcm", +] + +[[package]] +name = "bridge-hub-test-utils" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de0b3aa5fd8481a06ca16e47fd3d2d9c6abe76b27d922ec8980a853f242173b3" +dependencies = [ + "asset-test-utils 18.0.0", + "bp-header-chain", + "bp-messages", + "bp-parachains", + "bp-polkadot-core", + "bp-relayers", + "bp-runtime", + "bp-test-utils", + "bp-xcm-bridge-hub", + "bridge-runtime-common", + "cumulus-pallet-parachain-system", + "cumulus-pallet-xcmp-queue", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-balances", + "pallet-bridge-grandpa", + "pallet-bridge-messages", + "pallet-bridge-parachains", + "pallet-bridge-relayers", + "pallet-timestamp", + "pallet-utility", + "pallet-xcm", + "pallet-xcm-bridge-hub", + "parachains-common", + "parachains-runtimes-test-utils 17.0.0", + "parity-scale-codec", + "sp-core", + "sp-io", + "sp-keyring", + "sp-runtime", + "sp-tracing", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", +] + +[[package]] +name = "bridge-hub-test-utils" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "329b98c9cfa8a36beb65eebe197460e06dc3b041baf84d16c2c9862b99d1e7d2" +dependencies = [ + "asset-test-utils 20.0.0", + "bp-header-chain", + "bp-messages", + "bp-parachains", + "bp-polkadot-core", + "bp-relayers", + "bp-runtime", + "bp-test-utils", + "bp-xcm-bridge-hub", + "bridge-runtime-common", + "cumulus-pallet-parachain-system", + "cumulus-pallet-xcmp-queue", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-balances", + "pallet-bridge-grandpa", + "pallet-bridge-messages", + "pallet-bridge-parachains", + "pallet-bridge-relayers", + "pallet-timestamp", + "pallet-utility", + "pallet-xcm", + "pallet-xcm-bridge-hub", + "parachains-common", + "parachains-runtimes-test-utils 19.0.0", + "parity-scale-codec", + "sp-core", + "sp-io", + "sp-keyring", + "sp-runtime", + "sp-tracing", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", +] + +[[package]] +name = "bridge-runtime-common" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86cf718057e18ce3e5f2c8e3fc318c38ad71d47ada91dc4b841c0f69c214ef04" +dependencies = [ + "bp-header-chain", + "bp-messages", + "bp-parachains", + "bp-polkadot-core", + "bp-relayers", + "bp-runtime", + "bp-xcm-bridge-hub", + "frame-support", + "frame-system", + "log", + "pallet-bridge-grandpa", + "pallet-bridge-messages", + "pallet-bridge-parachains", + "pallet-bridge-relayers", + "pallet-transaction-payment", + "pallet-utility", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", + "sp-trie", + "staging-xcm", + "tuplex", +] + +[[package]] +name = "bs58" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "build-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdce191bf3fa4995ce948c8c83b4640a1745457a149e73c6db75b4ffe36aad5f" +dependencies = [ + "semver 0.6.0", +] + +[[package]] +name = "bumpalo" +version = "3.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "byte-unit" +version = "4.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da78b32057b8fdfc352504708feeba7216dcd65a2c9ab02978cbd288d1279b6c" +dependencies = [ + "utf8-width", +] + +[[package]] +name = "bytemuck" version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" @@ -783,9 +1746,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.9.0" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" + +[[package]] +name = "bytes" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" [[package]] name = "bzip2-sys" @@ -834,7 +1803,7 @@ checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" dependencies = [ "camino", "cargo-platform", - "semver 1.0.24", + "semver 1.0.25", "serde", "serde_json", "thiserror 1.0.69", @@ -842,9 +1811,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.5" +version = "1.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31a0499c1dc64f458ad13872de75c0eb7e3fdb0e67964610c914b034fc5956e" +checksum = "c7777341816418c02e033934a09f20dc0ccaf65a5201ef8a450ae0105a573fda" dependencies = [ "jobserver", "libc", @@ -853,7 +1822,7 @@ dependencies = [ [[package]] name = "cere-cli" -version = "7.2.0" +version = "7.3.0" dependencies = [ "cere-client", "cere-service", @@ -871,15 +1840,17 @@ dependencies = [ [[package]] name = "cere-client" -version = "7.2.0" +version = "7.3.0" dependencies = [ "cere-dev-runtime", "cere-runtime", + "ddc-primitives", "frame-benchmarking", "frame-system", "frame-system-rpc-runtime-api", - "futures", - "node-primitives", + "futures 0.3.31", + "pallet-ismp", + "pallet-ismp-runtime-api", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", "sc-client-api", @@ -892,6 +1863,7 @@ dependencies = [ "sp-consensus", "sp-consensus-babe", "sp-consensus-grandpa", + "sp-core", "sp-inherents", "sp-io", "sp-offchain", @@ -904,21 +1876,24 @@ dependencies = [ [[package]] name = "cere-dev-runtime" -version = "7.2.0" +version = "7.3.0" dependencies = [ + "anyhow", "cere-runtime-common", "ddc-primitives", "frame-benchmarking", "frame-election-provider-support", "frame-executive", + "frame-metadata-hash-extension", "frame-support", "frame-system", "frame-system-benchmarking", "frame-system-rpc-runtime-api", "frame-try-runtime", "hex-literal 0.4.1", + "ismp", + "ismp-grandpa", "log", - "node-primitives", "pallet-authority-discovery", "pallet-authorship", "pallet-babe", @@ -945,10 +1920,13 @@ dependencies = [ "pallet-erc721", "pallet-fast-unstake", "pallet-grandpa", + "pallet-hyperbridge", "pallet-identity", "pallet-im-online", "pallet-indices", "pallet-insecure-randomness-collective-flip", + "pallet-ismp", + "pallet-ismp-runtime-api", "pallet-membership", "pallet-multisig", "pallet-nomination-pools", @@ -969,6 +1947,7 @@ dependencies = [ "pallet-sudo", "pallet-timestamp", "pallet-tips", + "pallet-token-gateway", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", "pallet-treasury", @@ -986,10 +1965,11 @@ dependencies = [ "sp-genesis-builder", "sp-inherents", "sp-io", + "sp-mmr-primitives", "sp-offchain", "sp-runtime", "sp-session", - "sp-staking", + "sp-staking 36.0.0", "sp-std", "sp-storage", "sp-transaction-pool", @@ -1000,10 +1980,12 @@ dependencies = [ [[package]] name = "cere-rpc" -version = "7.2.0" +version = "7.3.0" dependencies = [ + "ddc-primitives", "jsonrpsee", - "node-primitives", + "pallet-ismp-rpc", + "pallet-ismp-runtime-api", "pallet-transaction-payment-rpc", "sc-chain-spec", "sc-client-api", @@ -1021,6 +2003,7 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-babe", + "sp-core", "sp-keystore", "sp-runtime", "substrate-frame-rpc-system", @@ -1029,21 +2012,24 @@ dependencies = [ [[package]] name = "cere-runtime" -version = "7.2.0" +version = "7.3.0" dependencies = [ + "anyhow", "cere-runtime-common", "ddc-primitives", "frame-benchmarking", "frame-election-provider-support", "frame-executive", + "frame-metadata-hash-extension", "frame-support", "frame-system", "frame-system-benchmarking", "frame-system-rpc-runtime-api", "frame-try-runtime", "hex-literal 0.3.4", + "ismp", + "ismp-grandpa", "log", - "node-primitives", "pallet-authority-discovery", "pallet-authorship", "pallet-babe", @@ -1070,10 +2056,13 @@ dependencies = [ "pallet-erc721", "pallet-fast-unstake", "pallet-grandpa", + "pallet-hyperbridge", "pallet-identity", "pallet-im-online", "pallet-indices", "pallet-insecure-randomness-collective-flip", + "pallet-ismp", + "pallet-ismp-runtime-api", "pallet-membership", "pallet-multisig", "pallet-nomination-pools", @@ -1094,6 +2083,7 @@ dependencies = [ "pallet-sudo", "pallet-timestamp", "pallet-tips", + "pallet-token-gateway", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", "pallet-treasury", @@ -1111,10 +2101,11 @@ dependencies = [ "sp-genesis-builder", "sp-inherents", "sp-io", + "sp-mmr-primitives", "sp-offchain", "sp-runtime", "sp-session", - "sp-staking", + "sp-staking 36.0.0", "sp-std", "sp-storage", "sp-transaction-pool", @@ -1125,12 +2116,12 @@ dependencies = [ [[package]] name = "cere-runtime-common" -version = "7.2.0" +version = "7.3.0" dependencies = [ + "ddc-primitives", "frame-support", "frame-system", "log", - "node-primitives", "pallet-contracts", "pallet-referenda", "pallet-session", @@ -1140,13 +2131,13 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-staking", + "sp-staking 36.0.0", "sp-std", ] [[package]] name = "cere-service" -version = "7.2.0" +version = "7.3.0" dependencies = [ "cere-client", "cere-dev-runtime", @@ -1155,9 +2146,8 @@ dependencies = [ "cere-runtime-common", "ddc-primitives", "frame-benchmarking-cli", - "futures", + "futures 0.3.31", "jsonrpsee", - "node-primitives", "pallet-im-online", "rand", "sc-authority-discovery", @@ -1192,6 +2182,12 @@ dependencies = [ "sp-trie", ] +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + [[package]] name = "cexpr" version = "0.6.0" @@ -1317,6 +2313,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ckb-merkle-mountain-range" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ccb671c5921be8a84686e6212ca184cb1d7c51cadcdbfcbd1cc3f042f5dfb8" +dependencies = [ + "cfg-if", +] + [[package]] name = "clang-sys" version = "1.8.1" @@ -1330,9 +2335,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.23" +version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" +checksum = "3e77c3243bd94243c03672cb5154667347c457ca271254724f9f393aee1c05ff" dependencies = [ "clap_builder", "clap_derive", @@ -1340,9 +2345,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.23" +version = "4.5.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" +checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" dependencies = [ "anstream", "anstyle", @@ -1353,14 +2358,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.18" +version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] @@ -1369,6 +2374,17 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +[[package]] +name = "coarsetime" +version = "0.1.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4252bf230cb600c19826a575b31c8c9c84c6f11acfab6dfcad2e941b10b6f8e2" +dependencies = [ + "libc", + "wasix", + "wasm-bindgen", +] + [[package]] name = "codespan-reporting" version = "0.11.1" @@ -1379,6 +2395,27 @@ dependencies = [ "unicode-width 0.1.14", ] +[[package]] +name = "color-print" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3aa954171903797d5623e047d9ab69d91b493657917bdfb8c2c80ecaf9cdb6f4" +dependencies = [ + "color-print-proc-macro", +] + +[[package]] +name = "color-print-proc-macro" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692186b5ebe54007e45a59aea47ece9eb4108e141326c304cdc91699a7118a22" +dependencies = [ + "nom", + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "colorchoice" version = "1.0.3" @@ -1391,18 +2428,17 @@ version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ - "bytes", + "bytes 1.10.0", "memchr", ] [[package]] name = "comfy-table" -version = "7.1.3" +version = "7.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24f165e7b643266ea80cb858aed492ad9280e3e05ce24d4a99d7d7b889b6a4d9" +checksum = "4a65ebfec4fb190b6f90e944a817d60499ee0744e582530e2c9900a22e591d9a" dependencies = [ - "strum 0.26.3", - "strum_macros 0.26.4", + "unicode-segmentation", "unicode-width 0.2.0", ] @@ -1434,6 +2470,19 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "const-hex" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b0485bab839b018a8f1723fc5391819fea5f8f0f32288ef8a735fd096b6160c" +dependencies = [ + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", +] + [[package]] name = "const-oid" version = "0.9.6" @@ -1455,14 +2504,40 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ - "getrandom", + "getrandom 0.2.15", "once_cell", "tiny-keccak", ] [[package]] -name = "constant_time_eq" -version = "0.3.1" +name = "const_format" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "constant_time_eq" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" @@ -1512,11 +2587,21 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "cpu-time" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e393a7668fe1fad3075085b86c781883000b4ede868f43627b34a87c8b7ded" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "cpufeatures" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -1662,6 +2747,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.21" @@ -1670,9 +2764,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "crypto-bigint" @@ -1727,5282 +2821,5199 @@ dependencies = [ ] [[package]] -name = "curve25519-dalek" -version = "4.1.3" +name = "cumulus-client-cli" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +checksum = "60076ec03541dcbda35fd856a3a20362d951ec0e0dc5c8e84184bf0d237f2875" dependencies = [ - "cfg-if", - "cpufeatures", - "curve25519-dalek-derive", - "digest 0.10.7", - "fiat-crypto", - "rustc_version 0.4.1", - "subtle 2.6.1", - "zeroize", + "clap", + "parity-scale-codec", + "sc-chain-spec", + "sc-cli", + "sc-client-api", + "sc-service", + "sp-blockchain", + "sp-core", + "sp-runtime", + "url", ] [[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" +name = "cumulus-client-collator" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +checksum = "cd2f3384550119f0062b235fcf88dd54f666e16f1c31117410d003c3aca2052c" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.91", + "cumulus-client-consensus-common", + "cumulus-client-network", + "cumulus-primitives-core", + "futures 0.3.31", + "parity-scale-codec", + "parking_lot 0.12.3", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-overseer", + "polkadot-primitives 16.0.0", + "sc-client-api", + "sp-api", + "sp-consensus", + "sp-core", + "sp-runtime", + "tracing", ] [[package]] -name = "cxx" -version = "1.0.135" +name = "cumulus-client-consensus-aura" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d44ff199ff93242c3afe480ab588d544dd08d72e92885e152ffebc670f076ad" +checksum = "a2dae64e214def806571a245bd3343956fdaf59fab51594f5b86a848bafd1ece" dependencies = [ - "cc", - "cxxbridge-cmd", - "cxxbridge-flags", - "cxxbridge-macro", - "foldhash", - "link-cplusplus", + "async-trait", + "cumulus-client-collator", + "cumulus-client-consensus-common", + "cumulus-client-consensus-proposer", + "cumulus-client-parachain-inherent", + "cumulus-primitives-aura", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "futures 0.3.31", + "parity-scale-codec", + "parking_lot 0.12.3", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-overseer", + "polkadot-primitives 16.0.0", + "sc-client-api", + "sc-consensus", + "sc-consensus-aura", + "sc-consensus-babe", + "sc-consensus-slots", + "sc-telemetry", + "sc-utils", + "schnellru", + "sp-api", + "sp-application-crypto", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-aura", + "sp-core", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "sp-state-machine", + "sp-timestamp", + "substrate-prometheus-endpoint", + "tokio 1.43.0", + "tracing", ] [[package]] -name = "cxx-build" -version = "1.0.135" +name = "cumulus-client-consensus-common" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66fd8f17ad454fc1e4f4ab83abffcc88a532e90350d3ffddcb73030220fcbd52" +checksum = "409a411123448177e01a2c77c7e47b54b654513346eff9e56f1eefcef603a634" dependencies = [ - "cc", - "codespan-reporting", - "proc-macro2", - "quote", - "scratch", - "syn 2.0.91", + "async-trait", + "cumulus-client-pov-recovery", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "dyn-clone", + "futures 0.3.31", + "log", + "parity-scale-codec", + "polkadot-primitives 16.0.0", + "sc-client-api", + "sc-consensus", + "sc-consensus-babe", + "schnellru", + "sp-blockchain", + "sp-consensus", + "sp-consensus-slots", + "sp-core", + "sp-runtime", + "sp-timestamp", + "sp-trie", + "sp-version", + "substrate-prometheus-endpoint", + "tracing", ] [[package]] -name = "cxxbridge-cmd" -version = "1.0.135" +name = "cumulus-client-consensus-proposer" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4717c9c806a9e07fdcb34c84965a414ea40fafe57667187052cf1eb7f5e8a8a9" +checksum = "9f69ea8e87c79b3dd51687a5672d1df3694a939c0be98639d2ef7cedf1d4a08b" dependencies = [ - "clap", - "codespan-reporting", - "proc-macro2", - "quote", - "syn 2.0.91", + "anyhow", + "async-trait", + "cumulus-primitives-parachain-inherent", + "sp-consensus", + "sp-inherents", + "sp-runtime", + "sp-state-machine", + "thiserror 1.0.69", ] [[package]] -name = "cxxbridge-flags" -version = "1.0.135" +name = "cumulus-client-consensus-relay-chain" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f6515329bf3d98f4073101c7866ff2bec4e635a13acb82e3f3753fff0bf43cb" +checksum = "7520a6aa8dcfdf89cc68324ef1dab4bf237911641ce109093483d690d1520feb" +dependencies = [ + "async-trait", + "cumulus-client-consensus-common", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "futures 0.3.31", + "parking_lot 0.12.3", + "sc-consensus", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-inherents", + "sp-runtime", + "substrate-prometheus-endpoint", + "tracing", +] [[package]] -name = "cxxbridge-macro" -version = "1.0.135" +name = "cumulus-client-network" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb93e6a7ce8ec985c02bbb758237a31598b340acbbc3c19c5a4fa6adaaac92ab" +checksum = "0a69c9a77f60150ca6d08e129b3e3740d7b29175e3f6a0b5d0efb74b936fbaaa" dependencies = [ - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.91", + "async-trait", + "cumulus-relay-chain-interface", + "futures 0.3.31", + "futures-timer", + "parity-scale-codec", + "parking_lot 0.12.3", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "sc-client-api", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-runtime", + "sp-state-machine", + "sp-version", + "tracing", ] [[package]] -name = "darling" -version = "0.20.10" +name = "cumulus-client-parachain-inherent" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "62e003d5756b4b8e1c59a7f9a19e1c1469ecfdec34e6fcf6511a7d4bc57500b0" dependencies = [ - "darling_core", - "darling_macro", + "async-trait", + "cumulus-primitives-core", + "cumulus-primitives-parachain-inherent", + "cumulus-relay-chain-interface", + "cumulus-test-relay-sproof-builder", + "parity-scale-codec", + "sc-client-api", + "sp-api", + "sp-crypto-hashing", + "sp-inherents", + "sp-runtime", + "sp-state-machine", + "sp-storage", + "sp-trie", + "tracing", ] [[package]] -name = "darling_core" -version = "0.20.10" +name = "cumulus-client-pov-recovery" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "0eebbe8c37e9dafa779b2072178aae631fb0586c1b6ab4e201ed19c07c9c6d0d" dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.91", + "async-trait", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "futures 0.3.31", + "futures-timer", + "parity-scale-codec", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-overseer", + "polkadot-primitives 16.0.0", + "rand", + "sc-client-api", + "sc-consensus", + "sp-api", + "sp-consensus", + "sp-maybe-compressed-blob", + "sp-runtime", + "sp-version", + "tracing", ] [[package]] -name = "darling_macro" -version = "0.20.10" +name = "cumulus-client-service" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" -dependencies = [ - "darling_core", - "quote", - "syn 2.0.91", +checksum = "922fb437dfa3c8c3e4c1fb887921ff7d336760b6d747042873798fbedf87e0ce" +dependencies = [ + "cumulus-client-cli", + "cumulus-client-collator", + "cumulus-client-consensus-common", + "cumulus-client-network", + "cumulus-client-pov-recovery", + "cumulus-primitives-core", + "cumulus-primitives-proof-size-hostfunction", + "cumulus-relay-chain-inprocess-interface", + "cumulus-relay-chain-interface", + "cumulus-relay-chain-minimal-node", + "futures 0.3.31", + "polkadot-primitives 16.0.0", + "sc-client-api", + "sc-consensus", + "sc-network", + "sc-network-sync", + "sc-network-transactions", + "sc-rpc", + "sc-service", + "sc-sysinfo", + "sc-telemetry", + "sc-transaction-pool", + "sc-utils", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-io", + "sp-runtime", + "sp-transaction-pool", ] [[package]] -name = "dashmap" -version = "5.5.3" +name = "cumulus-pallet-aura-ext" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +checksum = "2cbe2735fc7cf2b6521eab00cb1a1ab025abc1575cc36887b36dc8c5cb1c9434" dependencies = [ - "cfg-if", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core 0.9.10", + "cumulus-pallet-parachain-system", + "frame-support", + "frame-system", + "pallet-aura", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-consensus-aura", + "sp-runtime", ] [[package]] -name = "data-encoding" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" - -[[package]] -name = "data-encoding-macro" -version = "0.1.15" +name = "cumulus-pallet-dmp-queue" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1559b6cba622276d6d63706db152618eeb15b89b3e4041446b05876e352e639" +checksum = "97263a8e758d201ebe81db7cea7b278b4fb869c11442f77acef70138ac1a252f" dependencies = [ - "data-encoding", - "data-encoding-macro-internal", + "cumulus-primitives-core", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "staging-xcm", ] [[package]] -name = "data-encoding-macro-internal" -version = "0.1.13" +name = "cumulus-pallet-parachain-system" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "332d754c0af53bc87c108fed664d121ecf59207ec4196041f04d6ab9002ad33f" -dependencies = [ - "data-encoding", - "syn 1.0.109", -] - -[[package]] -name = "ddc-primitives" -version = "7.2.0" +checksum = "546403ee1185f4051a74cc9c9d76e82c63cac3fb68e1bf29f61efb5604c96488" dependencies = [ - "blake2 0.10.6", + "bytes 1.10.0", + "cumulus-pallet-parachain-system-proc-macro", + "cumulus-primitives-core", + "cumulus-primitives-parachain-inherent", + "cumulus-primitives-proof-size-hostfunction", + "environmental", + "frame-benchmarking", "frame-support", "frame-system", - "hex", + "impl-trait-for-tuples", "log", + "pallet-message-queue", "parity-scale-codec", - "polkadot-ckb-merkle-mountain-range", + "polkadot-parachain-primitives", + "polkadot-runtime-common", + "polkadot-runtime-parachains", "scale-info", - "serde", - "sp-application-crypto", "sp-core", + "sp-externalities", + "sp-inherents", "sp-io", "sp-runtime", + "sp-state-machine", "sp-std", + "sp-trie", + "sp-version", + "staging-xcm", + "staging-xcm-builder", + "trie-db", ] [[package]] -name = "der" -version = "0.7.9" +name = "cumulus-pallet-parachain-system-proc-macro" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +checksum = "befbaf3a1ce23ac8476481484fef5f4d500cbd15b4dad6380ce1d28134b0c1f7" dependencies = [ - "const-oid", - "zeroize", + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "der-parser" -version = "8.2.0" +name = "cumulus-pallet-session-benchmarking" +version = "19.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" +checksum = "18168570689417abfb514ac8812fca7e6429764d01942750e395d7d8ce0716ef" dependencies = [ - "asn1-rs 0.5.2", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-session", + "parity-scale-codec", + "sp-runtime", ] [[package]] -name = "der-parser" -version = "9.0.0" +name = "cumulus-pallet-solo-to-para" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" +checksum = "6f42c74548c8cab75da6f2479a953f044b582cfce98479862344a24df7bbd215" dependencies = [ - "asn1-rs 0.6.2", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", + "cumulus-pallet-parachain-system", + "frame-support", + "frame-system", + "pallet-sudo", + "parity-scale-codec", + "polkadot-primitives 16.0.0", + "scale-info", + "sp-runtime", ] [[package]] -name = "deranged" -version = "0.3.11" +name = "cumulus-pallet-xcm" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "e49231f6cd8274438b078305dc8ce44c54c0d3f4a28e902589bcbaa53d954608" dependencies = [ - "powerfmt", + "cumulus-primitives-core", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "staging-xcm", ] [[package]] -name = "derivative" -version = "2.2.0" +name = "cumulus-pallet-xcmp-queue" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +checksum = "6f788bdac9474795ea13ba791b55798fb664b2e3da8c3a7385b480c9af4e6539" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "bounded-collections", + "bp-xcm-bridge-hub-router", + "cumulus-primitives-core", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-message-queue", + "parity-scale-codec", + "polkadot-runtime-common", + "polkadot-runtime-parachains", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", ] [[package]] -name = "derive-syn-parse" -version = "0.2.0" +name = "cumulus-ping" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" +checksum = "f47128f797359951723e2d106a80e592d007bb7446c299958cdbafb1489ddbf0" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.91", + "cumulus-pallet-xcm", + "cumulus-primitives-core", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "staging-xcm", ] [[package]] -name = "derive_more" -version = "0.99.18" +name = "cumulus-primitives-aura" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +checksum = "11e7825bcf3cc6c962a5b9b9f47e02dc381109e521d0bc00cad785c65da18471" dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version 0.4.1", - "syn 2.0.91", + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-primitives 15.0.0", + "sp-api", + "sp-consensus-aura", + "sp-runtime", ] [[package]] -name = "derive_more" -version = "1.0.0" +name = "cumulus-primitives-core" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +checksum = "9c6b5221a4a3097f2ebef66c84c1e6d7a0b8ec7e63f2bd5ae04c1e6d3fc7514e" dependencies = [ - "derive_more-impl", + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "scale-info", + "sp-api", + "sp-runtime", + "sp-trie", + "staging-xcm", ] [[package]] -name = "derive_more-impl" -version = "1.0.0" +name = "cumulus-primitives-parachain-inherent" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +checksum = "842a694901e04a62d88995418dec35c22f7dba2b34d32d2b8de37d6b92f973ff" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.91", + "async-trait", + "cumulus-primitives-core", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-inherents", + "sp-trie", ] [[package]] -name = "difflib" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" - -[[package]] -name = "digest" -version = "0.8.1" +name = "cumulus-primitives-proof-size-hostfunction" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +checksum = "421f03af054aac7c89e87a49e47964886e53a8d7395990eab27b6f201d42524f" dependencies = [ - "generic-array 0.12.4", + "sp-externalities", + "sp-runtime-interface", + "sp-trie", ] [[package]] -name = "digest" -version = "0.9.0" +name = "cumulus-primitives-storage-weight-reclaim" +version = "8.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +checksum = "6fc49dfec0ba3438afad73787736cc0dba88d15b5855881f12a4d8b812a72927" dependencies = [ - "generic-array 0.14.7", + "cumulus-primitives-core", + "cumulus-primitives-proof-size-hostfunction", + "docify", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-runtime", ] [[package]] -name = "digest" -version = "0.10.7" +name = "cumulus-primitives-timestamp" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "33cffb8f010f39ac36b31d38994b8f9d9256d9b5e495d96b4ec59d3e30852d53" dependencies = [ - "block-buffer 0.10.4", - "const-oid", - "crypto-common", - "subtle 2.6.1", + "cumulus-primitives-core", + "sp-inherents", + "sp-timestamp", ] [[package]] -name = "directories" -version = "5.0.1" +name = "cumulus-primitives-utility" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +checksum = "0bdcf4d46dd93f1e6d5dd6d379133566a44042ba6476d04bdcbdb4981c622ae4" dependencies = [ - "dirs-sys", + "cumulus-primitives-core", + "frame-support", + "log", + "pallet-asset-conversion", + "parity-scale-codec", + "polkadot-runtime-common", + "sp-runtime", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", ] [[package]] -name = "directories-next" -version = "2.0.0" +name = "cumulus-relay-chain-inprocess-interface" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" +checksum = "38c72e40d43cacb597b2db6a859d0f8d7942a446ab2c960e3597828986f86e2b" dependencies = [ - "cfg-if", - "dirs-sys-next", + "async-trait", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "futures 0.3.31", + "futures-timer", + "polkadot-cli", + "polkadot-service", + "sc-cli", + "sc-client-api", + "sc-sysinfo", + "sc-telemetry", + "sc-tracing", + "sp-api", + "sp-consensus", + "sp-core", + "sp-runtime", + "sp-state-machine", ] [[package]] -name = "dirs-sys" -version = "0.4.1" +name = "cumulus-relay-chain-interface" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +checksum = "46f81e7a7df8c68a764a99aacdb24d88663c403be26aee2cd8dae176bbb6285c" dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", + "async-trait", + "cumulus-primitives-core", + "futures 0.3.31", + "jsonrpsee-core", + "parity-scale-codec", + "polkadot-overseer", + "sc-client-api", + "sp-api", + "sp-blockchain", + "sp-state-machine", + "sp-version", + "thiserror 1.0.69", ] [[package]] -name = "dirs-sys-next" -version = "0.1.2" +name = "cumulus-relay-chain-minimal-node" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +checksum = "62f2a29797f55774e83e5656071fb6537ee5fb837eeca6477bedbe2c8f390d0d" dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.91", + "array-bytes", + "async-trait", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "cumulus-relay-chain-rpc-interface", + "futures 0.3.31", + "polkadot-core-primitives", + "polkadot-network-bridge", + "polkadot-node-network-protocol", + "polkadot-node-subsystem-util", + "polkadot-overseer", + "polkadot-primitives 16.0.0", + "polkadot-service", + "sc-authority-discovery", + "sc-client-api", + "sc-network", + "sc-network-common", + "sc-service", + "sc-tracing", + "sc-utils", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-runtime", + "substrate-prometheus-endpoint", + "tokio 1.43.0", + "tracing", ] [[package]] -name = "docify" -version = "0.2.9" +name = "cumulus-relay-chain-rpc-interface" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a772b62b1837c8f060432ddcc10b17aae1453ef17617a99bc07789252d2a5896" +checksum = "2a34e18890c56e2b88a1bf18901c632dbfd642bbae7381ab184b2790133baf94" dependencies = [ - "docify_macros", + "async-trait", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "either", + "futures 0.3.31", + "futures-timer", + "jsonrpsee", + "parity-scale-codec", + "pin-project", + "polkadot-overseer", + "rand", + "sc-client-api", + "sc-rpc-api", + "sc-service", + "schnellru", + "serde", + "serde_json", + "smoldot", + "smoldot-light", + "sp-api", + "sp-authority-discovery", + "sp-consensus-babe", + "sp-core", + "sp-runtime", + "sp-state-machine", + "sp-storage", + "sp-version", + "thiserror 1.0.69", + "tokio 1.43.0", + "tokio-util", + "tracing", + "url", ] [[package]] -name = "docify_macros" -version = "0.2.9" +name = "cumulus-test-relay-sproof-builder" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60e6be249b0a462a14784a99b19bf35a667bb5e09de611738bb7362fa4c95ff7" +checksum = "e570e41c3f05a8143ebff967bbb0c7dcaaa6f0bebd8639b9418b8005b13eda03" dependencies = [ - "common-path", - "derive-syn-parse", - "once_cell", - "proc-macro2", - "quote", - "regex", - "syn 2.0.91", - "termcolor", - "toml 0.8.19", - "walkdir", + "cumulus-primitives-core", + "parity-scale-codec", + "polkadot-primitives 16.0.0", + "sp-runtime", + "sp-state-machine", + "sp-trie", ] [[package]] -name = "downcast" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" - -[[package]] -name = "downcast-rs" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" - -[[package]] -name = "dtoa" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" - -[[package]] -name = "dyn-clonable" -version = "0.9.0" +name = "curve25519-dalek" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ - "dyn-clonable-impl", - "dyn-clone", + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rustc_version 0.4.1", + "subtle 2.6.1", + "zeroize", ] [[package]] -name = "dyn-clonable-impl" -version = "0.9.0" +name = "curve25519-dalek-derive" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.98", ] [[package]] -name = "dyn-clone" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" - -[[package]] -name = "ecdsa" -version = "0.16.9" +name = "curve25519-dalek-ng" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" dependencies = [ - "der", - "digest 0.10.7", - "elliptic-curve", - "rfc6979", - "serdect", - "signature", - "spki", + "byteorder", + "digest 0.9.0", + "rand_core", + "subtle-ng", + "zeroize", ] [[package]] -name = "ed25519" -version = "2.2.3" +name = "cxx" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +checksum = "dc49567e08c72902f4cbc7242ee8d874ec9cbe97fbabf77b4e0e1f447513e13a" dependencies = [ - "pkcs8", - "signature", + "cc", + "cxxbridge-cmd", + "cxxbridge-flags", + "cxxbridge-macro", + "foldhash", + "link-cplusplus", ] [[package]] -name = "ed25519-dalek" -version = "2.1.1" +name = "cxx-build" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +checksum = "fe46b5309c99e9775e7a338c98e4097455f52db5b684fd793ca22848fde6e371" dependencies = [ - "curve25519-dalek", - "ed25519", - "rand_core", - "serde", - "sha2 0.10.8", - "subtle 2.6.1", - "zeroize", + "cc", + "codespan-reporting", + "proc-macro2", + "quote", + "scratch", + "syn 2.0.98", ] [[package]] -name = "ed25519-zebra" -version = "4.0.3" +name = "cxxbridge-cmd" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" +checksum = "4315c4ce8d23c26d87f2f83698725fd5718d8e6ace4a9093da2664d23294d372" dependencies = [ - "curve25519-dalek", - "ed25519", - "hashbrown 0.14.5", - "hex", - "rand_core", - "sha2 0.10.8", - "zeroize", + "clap", + "codespan-reporting", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "either" -version = "1.13.0" +name = "cxxbridge-flags" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "f55d69deb3a92f610a60ecc524a72c7374b6dc822f8fb7bb4e5d9473f10530c4" [[package]] -name = "elliptic-curve" -version = "0.13.8" +name = "cxxbridge-macro" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +checksum = "5bee7a1d9b5091462002c2b8de2a4ed0f0fde011d503cc272633f66075bd5141" dependencies = [ - "base16ct", - "crypto-bigint", - "digest 0.10.7", - "ff", - "generic-array 0.14.7", - "group", - "pkcs8", - "rand_core", - "sec1", - "serdect", - "subtle 2.6.1", - "zeroize", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.98", ] [[package]] -name = "encode_unicode" -version = "1.0.0" +name = "darling" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] [[package]] -name = "enum-as-inner" -version = "0.5.1" +name = "darling_core" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ - "heck 0.4.1", + "fnv", + "ident_case", "proc-macro2", "quote", - "syn 1.0.109", + "strsim", + "syn 2.0.98", ] [[package]] -name = "enum-as-inner" -version = "0.6.1" +name = "darling_macro" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ - "heck 0.5.0", - "proc-macro2", + "darling_core", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] -name = "enumflags2" -version = "0.7.10" +name = "dashmap" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ - "enumflags2_derive", + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core 0.9.10", ] [[package]] -name = "enumflags2_derive" -version = "0.7.10" +name = "data-encoding" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.91", -] +checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" [[package]] -name = "env_logger" -version = "0.10.2" +name = "data-encoding-macro" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +checksum = "9f9724adfcf41f45bf652b3995837669d73c4d49a1b5ac1ff82905ac7d9b5558" dependencies = [ - "humantime", - "is-terminal", - "log", - "regex", - "termcolor", + "data-encoding", + "data-encoding-macro-internal", ] [[package]] -name = "environmental" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" +name = "data-encoding-macro-internal" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18e4fdb82bd54a12e42fb58a800dcae6b9e13982238ce2296dc3570b92148e1f" +dependencies = [ + "data-encoding", + "syn 2.0.98", +] [[package]] -name = "equivalent" -version = "1.0.1" +name = "ddc-primitives" +version = "7.3.0" +dependencies = [ + "blake2 0.10.6", + "frame-support", + "frame-system", + "hex", + "log", + "parity-scale-codec", + "polkadot-ckb-merkle-mountain-range", + "scale-info", + "serde", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "der" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "zeroize", +] [[package]] -name = "errno" -version = "0.3.10" +name = "der-parser" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ - "libc", - "windows-sys 0.59.0", + "asn1-rs 0.5.2", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", ] [[package]] -name = "event-listener" -version = "2.5.3" +name = "der-parser" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" +dependencies = [ + "asn1-rs 0.6.2", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] [[package]] -name = "event-listener" -version = "5.3.1" +name = "deranged" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", + "powerfmt", ] [[package]] -name = "event-listener-strategy" -version = "0.5.3" +name = "derivative" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "event-listener 5.3.1", - "pin-project-lite", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "exit-future" +name = "derive-syn-parse" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5" +checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" dependencies = [ - "futures", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "expander" -version = "2.2.1" +name = "derive_more" +version = "0.99.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2c470c71d91ecbd179935b24170459e926382eaaa86b590b78814e180d8a8e2" +checksum = "3da29a38df43d6f156149c9b43ded5e018ddff2a855cf2cfd62e8cd7d079c69f" dependencies = [ - "blake2 0.10.6", - "file-guard", - "fs-err", - "prettyplease 0.2.25", + "convert_case", "proc-macro2", "quote", - "syn 2.0.91", + "rustc_version 0.4.1", + "syn 2.0.98", ] [[package]] -name = "fallible-iterator" -version = "0.2.0" +name = "derive_more" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] [[package]] -name = "fallible-iterator" -version = "0.3.0" +name = "derive_more-impl" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "unicode-xid", +] [[package]] -name = "fastrand" -version = "2.3.0" +name = "difflib" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" [[package]] -name = "fdlimit" -version = "0.3.0" +name = "digest" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182f7dbc2ef73d9ef67351c5fbbea084729c48362d3ce9dd44c28e32e277fe5" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" dependencies = [ - "libc", - "thiserror 1.0.69", + "generic-array 0.12.4", ] [[package]] -name = "ff" -version = "0.13.0" +name = "digest" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "rand_core", - "subtle 2.6.1", + "generic-array 0.14.7", ] [[package]] -name = "fiat-crypto" -version = "0.2.9" +name = "digest" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle 2.6.1", +] [[package]] -name = "file-guard" -version = "0.2.0" +name = "directories" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21ef72acf95ec3d7dbf61275be556299490a245f017cf084bd23b4f68cf9407c" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" dependencies = [ - "libc", - "winapi", + "dirs-sys", ] [[package]] -name = "file-per-thread-logger" -version = "0.1.6" +name = "directories-next" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" +checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" dependencies = [ - "env_logger", - "log", + "cfg-if", + "dirs-sys-next", ] [[package]] -name = "filetime" -version = "0.2.25" +name = "dirs-sys" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ - "cfg-if", "libc", - "libredox", - "windows-sys 0.59.0", + "option-ext", + "redox_users", + "windows-sys 0.48.0", ] [[package]] -name = "finality-grandpa" -version = "0.16.2" +name = "dirs-sys-next" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ - "either", - "futures", - "futures-timer", - "log", - "num-traits", - "parity-scale-codec", - "parking_lot 0.12.3", - "scale-info", + "libc", + "redox_users", + "winapi", ] [[package]] -name = "fixed-hash" -version = "0.8.0" +name = "displaydoc" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ - "byteorder", - "rand", - "rustc-hex", - "static_assertions", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "fixedbitset" -version = "0.4.2" +name = "docify" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +checksum = "a772b62b1837c8f060432ddcc10b17aae1453ef17617a99bc07789252d2a5896" +dependencies = [ + "docify_macros", +] [[package]] -name = "float-cmp" -version = "0.9.0" +name = "docify_macros" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +checksum = "60e6be249b0a462a14784a99b19bf35a667bb5e09de611738bb7362fa4c95ff7" dependencies = [ - "num-traits", + "common-path", + "derive-syn-parse", + "once_cell", + "proc-macro2", + "quote", + "regex", + "syn 2.0.98", + "termcolor", + "toml 0.8.20", + "walkdir", ] [[package]] -name = "fnv" -version = "1.0.7" +name = "downcast" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" [[package]] -name = "foldhash" -version = "0.1.4" +name = "downcast-rs" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] -name = "foreign-types" -version = "0.3.2" +name = "dtoa" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" [[package]] -name = "foreign-types-shared" -version = "0.1.1" +name = "dunce" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] -name = "fork-tree" -version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "dyn-clonable" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a36efbb9bfd58e1723780aa04b61aba95ace6a05d9ffabfdb0b43672552f0805" dependencies = [ - "parity-scale-codec", + "dyn-clonable-impl", + "dyn-clone", ] [[package]] -name = "form_urlencoded" -version = "1.2.1" +name = "dyn-clonable-impl" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "7e8671d54058979a37a26f3511fbf8d198ba1aa35ffb202c42587d918d77213a" dependencies = [ - "percent-encoding", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "forwarded-header-value" -version = "0.1.1" +name = "dyn-clone" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9" +checksum = "feeef44e73baff3a26d371801df019877a9866a8c493d315ab00177843314f35" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ - "nonempty", - "thiserror 1.0.69", + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "serdect", + "signature", + "spki", ] [[package]] -name = "fragile" -version = "2.0.0" +name = "ed25519" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "signature", +] [[package]] -name = "frame-benchmarking" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "ed25519-dalek" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" dependencies = [ - "frame-support", - "frame-support-procedural", - "frame-system", - "linregress", - "log", - "parity-scale-codec", - "paste", - "scale-info", + "curve25519-dalek", + "ed25519", + "rand_core", "serde", - "sp-api", - "sp-application-crypto", - "sp-core", - "sp-io", - "sp-runtime", - "sp-runtime-interface", - "sp-storage", - "static_assertions", + "sha2 0.10.8", + "subtle 2.6.1", + "zeroize", ] [[package]] -name = "frame-benchmarking-cli" -version = "43.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "ed25519-zebra" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" dependencies = [ - "Inflector", - "array-bytes", - "chrono", - "clap", - "comfy-table", - "frame-benchmarking", - "frame-support", - "frame-system", - "gethostname", - "handlebars", - "itertools 0.11.0", - "lazy_static", - "linked-hash-map", - "log", - "parity-scale-codec", - "rand", - "rand_pcg", - "sc-block-builder", - "sc-chain-spec", - "sc-cli", - "sc-client-api", - "sc-client-db", - "sc-executor", - "sc-service", - "sc-sysinfo", - "serde", - "serde_json", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-database", - "sp-externalities", - "sp-genesis-builder", - "sp-inherents", - "sp-io", - "sp-keystore", - "sp-runtime", - "sp-state-machine", - "sp-storage", - "sp-trie", - "sp-wasm-interface", - "thiserror 1.0.69", - "thousands", + "curve25519-dalek", + "ed25519", + "hashbrown 0.14.5", + "hex", + "rand_core", + "sha2 0.10.8", + "zeroize", ] [[package]] -name = "frame-election-provider-solution-type" -version = "14.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ - "proc-macro-crate 3.2.0", - "proc-macro2", - "quote", - "syn 2.0.91", + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array 0.14.7", + "group", + "pkcs8", + "rand_core", + "sec1", + "serdect", + "subtle 2.6.1", + "zeroize", ] [[package]] -name = "frame-election-provider-support" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + +[[package]] +name = "enum-as-inner" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" dependencies = [ - "frame-election-provider-solution-type", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-npos-elections", - "sp-runtime", + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "frame-executive" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "enum-as-inner" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" dependencies = [ - "aquamarine", - "frame-support", - "frame-system", - "frame-try-runtime", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-tracing", + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "frame-metadata" -version = "16.0.0" +name = "enumflags2" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" +checksum = "ba2f4b465f5318854c6f8dd686ede6c0a9dc67d4b1ac241cf0eb51521a309147" dependencies = [ - "cfg-if", - "parity-scale-codec", - "scale-info", - "serde", + "enumflags2_derive", ] [[package]] -name = "frame-support" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "enumflags2_derive" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc4caf64a58d7a6d65ab00639b046ff54399a39f5f2554728895ace4b297cd79" dependencies = [ - "aquamarine", - "array-bytes", - "bitflags 1.3.2", - "docify", - "environmental", - "frame-metadata", - "frame-support-procedural", - "impl-trait-for-tuples", - "k256", - "log", - "macro_magic", - "parity-scale-codec", - "paste", - "scale-info", - "serde", - "serde_json", - "smallvec", - "sp-api", - "sp-arithmetic", - "sp-core", - "sp-crypto-hashing-proc-macro", - "sp-debug-derive", - "sp-genesis-builder", - "sp-inherents", - "sp-io", - "sp-metadata-ir", - "sp-runtime", - "sp-staking", - "sp-state-machine", - "sp-std", - "sp-tracing", - "sp-weights", - "static_assertions", - "tt-call", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "frame-support-procedural" -version = "30.0.3" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" -dependencies = [ - "Inflector", - "cfg-expr", - "derive-syn-parse", - "docify", - "expander", - "frame-support-procedural-tools", - "itertools 0.11.0", - "macro_magic", - "proc-macro-warning 1.0.2", - "proc-macro2", - "quote", - "sp-crypto-hashing", - "syn 2.0.91", -] - -[[package]] -name = "frame-support-procedural-tools" -version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" -dependencies = [ - "frame-support-procedural-tools-derive", - "proc-macro-crate 3.2.0", - "proc-macro2", - "quote", - "syn 2.0.91", -] - -[[package]] -name = "frame-support-procedural-tools-derive" -version = "12.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "enumn" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] -name = "frame-system" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "env_logger" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" dependencies = [ - "cfg-if", - "docify", - "frame-support", + "humantime", + "is-terminal", "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-version", - "sp-weights", + "regex", + "termcolor", ] [[package]] -name = "frame-system-benchmarking" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", -] +name = "environmental" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" [[package]] -name = "frame-system-rpc-runtime-api" -version = "34.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" -dependencies = [ - "docify", - "parity-scale-codec", - "sp-api", -] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] -name = "frame-try-runtime" -version = "0.44.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "errno" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ - "frame-support", - "parity-scale-codec", - "sp-api", - "sp-runtime", + "libc", + "windows-sys 0.59.0", ] [[package]] -name = "fs-err" -version = "2.11.0" +name = "ethabi-decode" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +checksum = "09d398648d65820a727d6a81e58b962f874473396a047e4c30bafe3240953417" dependencies = [ - "autocfg", + "ethereum-types", + "tiny-keccak", ] [[package]] -name = "fs2" -version = "0.4.3" +name = "ethbloom" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" dependencies = [ - "libc", - "winapi", + "crunchy", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", + "tiny-keccak", ] [[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "futures" -version = "0.3.31" +name = "ethereum-types" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", + "ethbloom", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "primitive-types", + "scale-info", + "uint", ] [[package]] -name = "futures-bounded" -version = "0.1.0" +name = "event-listener" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b07bbbe7d7e78809544c6f718d875627addc73a7c3582447abc052cd3dc67e0" -dependencies = [ - "futures-timer", - "futures-util", -] +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] -name = "futures-channel" -version = "0.3.31" +name = "event-listener" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" dependencies = [ - "futures-core", - "futures-sink", + "concurrent-queue", + "parking", + "pin-project-lite 0.2.16", ] [[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-executor" -version = "0.3.31" +name = "event-listener" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" dependencies = [ - "futures-core", - "futures-task", - "futures-util", - "num_cpus", + "concurrent-queue", + "parking", + "pin-project-lite 0.2.16", ] [[package]] -name = "futures-io" -version = "0.3.31" +name = "event-listener-strategy" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +dependencies = [ + "event-listener 5.4.0", + "pin-project-lite 0.2.16", +] [[package]] -name = "futures-lite" -version = "2.5.0" +name = "exit-future" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" +checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5" dependencies = [ - "futures-core", - "pin-project-lite", + "futures 0.3.31", ] [[package]] -name = "futures-macro" -version = "0.3.31" +name = "expander" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e2c470c71d91ecbd179935b24170459e926382eaaa86b590b78814e180d8a8e2" dependencies = [ + "blake2 0.10.6", + "file-guard", + "fs-err", + "prettyplease 0.2.29", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] -name = "futures-rustls" -version = "0.24.0" +name = "fallible-iterator" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd3cf68c183738046838e300353e4716c674dc5e56890de4826801a6622a28" -dependencies = [ - "futures-io", - "rustls 0.21.12", -] +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] -name = "futures-sink" -version = "0.3.31" +name = "fallible-iterator" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" [[package]] -name = "futures-task" -version = "0.3.31" +name = "fastrand" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] [[package]] -name = "futures-timer" -version = "3.0.3" +name = "fastrand" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] -name = "futures-util" -version = "0.3.31" +name = "fastrlp" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", + "arrayvec 0.7.6", + "auto_impl", + "bytes 1.10.0", ] [[package]] -name = "fxhash" -version = "0.2.1" +name = "fastrlp" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" dependencies = [ - "byteorder", + "arrayvec 0.7.6", + "auto_impl", + "bytes 1.10.0", ] [[package]] -name = "generic-array" -version = "0.12.4" +name = "fatality" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +checksum = "ec6f82451ff7f0568c6181287189126d492b5654e30a788add08027b6363d019" dependencies = [ - "typenum", + "fatality-proc-macro", + "thiserror 1.0.69", ] [[package]] -name = "generic-array" -version = "0.14.7" +name = "fatality-proc-macro" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "eb42427514b063d97ce21d5199f36c0c307d981434a6be32582bc79fe5bd2303" dependencies = [ - "typenum", - "version_check", - "zeroize", + "expander", + "indexmap 2.7.1", + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "gethostname" -version = "0.2.3" +name = "fdlimit" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +checksum = "e182f7dbc2ef73d9ef67351c5fbbea084729c48362d3ce9dd44c28e32e277fe5" dependencies = [ "libc", - "winapi", + "thiserror 1.0.69", ] [[package]] -name = "getrandom" -version = "0.2.15" +name = "ff" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ - "cfg-if", - "libc", - "wasi", + "rand_core", + "subtle 2.6.1", ] [[package]] -name = "getrandom_or_panic" -version = "0.0.3" +name = "fiat-crypto" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea1015b5a70616b688dc230cfe50c8af89d972cb132d5a622814d29773b10b9" -dependencies = [ - "rand", - "rand_core", -] +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] -name = "ghash" -version = "0.5.1" +name = "file-guard" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +checksum = "21ef72acf95ec3d7dbf61275be556299490a245f017cf084bd23b4f68cf9407c" dependencies = [ - "opaque-debug 0.3.1", - "polyval", + "libc", + "winapi", ] [[package]] -name = "gimli" -version = "0.27.3" +name = "file-per-thread-logger" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" dependencies = [ - "fallible-iterator 0.2.0", - "indexmap 1.9.3", - "stable_deref_trait", + "env_logger", + "log", ] [[package]] -name = "gimli" -version = "0.28.1" +name = "filetime" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" dependencies = [ - "fallible-iterator 0.3.0", - "stable_deref_trait", + "cfg-if", + "libc", + "libredox", + "windows-sys 0.59.0", ] [[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "governor" -version = "0.6.3" +name = "finality-grandpa" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a7f542ee6b35af73b06abc0dad1c1bae89964e4e253bc4b587b91c9637867b" +checksum = "36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3" dependencies = [ - "cfg-if", - "dashmap", - "futures", + "either", + "futures 0.3.31", "futures-timer", - "no-std-compat", - "nonzero_ext", + "log", + "num-traits", + "parity-scale-codec", "parking_lot 0.12.3", - "portable-atomic", - "quanta", - "rand", - "smallvec", - "spinning_top", + "scale-info", ] [[package]] -name = "group" -version = "0.13.0" +name = "fixed-hash" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ - "ff", - "rand_core", - "subtle 2.6.1", + "byteorder", + "rand", + "rustc-hex", + "static_assertions", ] [[package]] -name = "h2" -version = "0.3.26" +name = "fixedbitset" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap 2.7.0", - "slab", - "tokio", - "tokio-util", - "tracing", -] +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] -name = "h2" -version = "0.4.7" +name = "float-cmp" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http 1.2.0", - "indexmap 2.7.0", - "slab", - "tokio", - "tokio-util", - "tracing", + "num-traits", ] [[package]] -name = "handlebars" -version = "5.1.2" +name = "fnv" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d08485b96a0e6393e9e4d1b8d48cf74ad6c063cd905eb33f42c1ce3f0377539b" -dependencies = [ - "log", - "pest", - "pest_derive", - "serde", - "serde_json", - "thiserror 1.0.69", -] +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] -name = "hash-db" -version = "0.16.0" +name = "foldhash" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e7d7786361d7425ae2fe4f9e407eb0efaa0840f5212d109cc018c40c35c6ab4" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" [[package]] -name = "hash256-std-hasher" -version = "0.15.2" +name = "foreign-types" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "crunchy", + "foreign-types-shared", ] [[package]] -name = "hashbrown" -version = "0.12.3" +name = "foreign-types-shared" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] -name = "hashbrown" -version = "0.13.2" +name = "fork-tree" +version = "13.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +checksum = "e6736bef9fd175fafbb97495565456651c43ccac2ae550faee709e11534e3621" dependencies = [ - "ahash", + "parity-scale-codec", ] [[package]] -name = "hashbrown" -version = "0.14.5" +name = "form_urlencoded" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ - "ahash", - "allocator-api2", + "percent-encoding", ] [[package]] -name = "hashbrown" -version = "0.15.2" +name = "fortuples" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "87630a8087e9cac4b7edfb6ee5e250ddca9112b57b6b17d8f5107375a3a8eace" dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "hashlink" -version = "0.8.4" +name = "forwarded-header-value" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +checksum = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9" dependencies = [ - "hashbrown 0.14.5", + "nonempty", + "thiserror 1.0.69", ] [[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "hermit-abi" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" - -[[package]] -name = "hex" -version = "0.4.3" +name = "fragile" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] -name = "hex-conservative" -version = "0.1.2" +name = "frame-benchmarking" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" +checksum = "a01bdd47c2d541b38bd892da647d1e972c9d85b4ecd7094ad64f7600175da54d" +dependencies = [ + "frame-support", + "frame-support-procedural", + "frame-system", + "linregress", + "log", + "parity-scale-codec", + "paste", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-runtime", + "sp-runtime-interface", + "sp-storage", + "static_assertions", +] [[package]] -name = "hex-literal" -version = "0.3.4" +name = "frame-benchmarking-cli" +version = "43.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" - +checksum = "c9767c33709062605ba6876fcc3e5f31fb37da393c1ab384813614870209dd94" +dependencies = [ + "Inflector", + "array-bytes", + "chrono", + "clap", + "comfy-table", + "frame-benchmarking", + "frame-support", + "frame-system", + "gethostname", + "handlebars", + "itertools 0.11.0", + "lazy_static", + "linked-hash-map", + "log", + "parity-scale-codec", + "rand", + "rand_pcg", + "sc-block-builder", + "sc-chain-spec", + "sc-cli", + "sc-client-api", + "sc-client-db", + "sc-executor", + "sc-service", + "sc-sysinfo", + "serde", + "serde_json", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-database", + "sp-externalities", + "sp-genesis-builder", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-state-machine", + "sp-storage", + "sp-trie", + "sp-wasm-interface", + "thiserror 1.0.69", + "thousands", +] + [[package]] -name = "hex-literal" -version = "0.4.1" +name = "frame-benchmarking-pallet-pov" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" +checksum = "6ffde6f573a63eeb1ccb7d2667c5741a11ce93bc30f33712e5326b9d8a811c29" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", +] [[package]] -name = "hkdf" -version = "0.12.4" +name = "frame-election-provider-solution-type" +version = "14.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +checksum = "8156f209055d352994ecd49e19658c6b469d7c6de923bd79868957d0dcfb6f71" dependencies = [ - "hmac 0.12.1", + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "hmac" -version = "0.8.1" +name = "frame-election-provider-support" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +checksum = "c36f5116192c63d39f1b4556fa30ac7db5a6a52575fa241b045f7dfa82ecc2be" dependencies = [ - "crypto-mac 0.8.0", - "digest 0.9.0", + "frame-election-provider-solution-type", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-npos-elections", + "sp-runtime", ] [[package]] -name = "hmac" -version = "0.12.1" +name = "frame-executive" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "c365bf3879de25bbee28e9584096955a02fbe8d7e7624e10675800317f1cee5b" dependencies = [ - "digest 0.10.7", + "aquamarine", + "frame-support", + "frame-system", + "frame-try-runtime", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-tracing", ] [[package]] -name = "hmac-drbg" -version = "0.3.0" +name = "frame-metadata" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" dependencies = [ - "digest 0.9.0", - "generic-array 0.14.7", - "hmac 0.8.1", + "cfg-if", + "parity-scale-codec", + "scale-info", + "serde", ] [[package]] -name = "home" -version = "0.5.9" +name = "frame-metadata-hash-extension" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "56ac71dbd97039c49fdd69f416a4dd5d8da3652fdcafc3738b45772ad79eb4ec" dependencies = [ - "windows-sys 0.52.0", + "array-bytes", + "docify", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-runtime", ] [[package]] -name = "hostname" -version = "0.3.1" +name = "frame-support" +version = "38.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +checksum = "f7dd8b9f161a8289e3b9fe6c1068519358dbff2270d38097a923d3d1b4459dca" dependencies = [ - "libc", - "match_cfg", - "winapi", + "aquamarine", + "array-bytes", + "bitflags 1.3.2", + "docify", + "environmental", + "frame-metadata", + "frame-support-procedural", + "impl-trait-for-tuples", + "k256", + "log", + "macro_magic", + "parity-scale-codec", + "paste", + "scale-info", + "serde", + "serde_json", + "smallvec", + "sp-api", + "sp-arithmetic", + "sp-core", + "sp-crypto-hashing-proc-macro", + "sp-debug-derive", + "sp-genesis-builder", + "sp-inherents", + "sp-io", + "sp-metadata-ir", + "sp-runtime", + "sp-staking 36.0.0", + "sp-state-machine", + "sp-std", + "sp-tracing", + "sp-weights", + "static_assertions", + "tt-call", ] [[package]] -name = "http" -version = "0.2.12" +name = "frame-support-procedural" +version = "30.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +checksum = "8da784d943f2a945be923ab081a7c0837355b38045c50945d7ec1a138e2f3c52" dependencies = [ - "bytes", - "fnv", - "itoa", + "Inflector", + "cfg-expr", + "derive-syn-parse", + "docify", + "expander", + "frame-support-procedural-tools", + "itertools 0.11.0", + "macro_magic", + "proc-macro-warning 1.0.2", + "proc-macro2", + "quote", + "sp-crypto-hashing", + "syn 2.0.98", ] [[package]] -name = "http" -version = "1.2.0" +name = "frame-support-procedural-tools" +version = "13.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +checksum = "81a088fd6fda5f53ff0c17fc7551ce8bd0ead14ba742228443c8196296a7369b" dependencies = [ - "bytes", - "fnv", - "itoa", + "frame-support-procedural-tools-derive", + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "http-body" -version = "0.4.6" +name = "frame-support-procedural-tools-derive" +version = "12.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "ed971c6435503a099bdac99fe4c5bea08981709e5b5a0a8535a1856f48561191" dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "http-body" -version = "1.0.1" +name = "frame-system" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "e3c7fa02f8c305496d2ae52edaecdb9d165f11afa965e05686d7d7dd1ce93611" dependencies = [ - "bytes", - "http 1.2.0", + "cfg-if", + "docify", + "frame-support", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-version", + "sp-weights", ] [[package]] -name = "http-body-util" -version = "0.1.2" +name = "frame-system-benchmarking" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +checksum = "9693b2a736beb076e673520e1e8dee4fc128b8d35b020ef3e8a4b1b5ad63d9f2" dependencies = [ - "bytes", - "futures-util", - "http 1.2.0", - "http-body 1.0.1", - "pin-project-lite", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", ] [[package]] -name = "httparse" -version = "1.9.5" +name = "frame-system-rpc-runtime-api" +version = "34.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" +checksum = "475c4f8604ba7e4f05cd2c881ba71105093e638b9591ec71a8db14a64b3b4ec3" +dependencies = [ + "docify", + "parity-scale-codec", + "sp-api", +] [[package]] -name = "httpdate" -version = "1.0.3" +name = "frame-try-runtime" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "83c811a5a1f5429c7fb5ebbf6cf9502d8f9b673fd395c12cf46c44a30a7daf0e" +dependencies = [ + "frame-support", + "parity-scale-codec", + "sp-api", + "sp-runtime", +] [[package]] -name = "humantime" -version = "2.1.0" +name = "fs-err" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] [[package]] -name = "hyper" -version = "0.14.32" +name = "fs2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2 0.5.8", - "tokio", - "tower-service", - "tracing", - "want", + "libc", + "winapi", ] [[package]] -name = "hyper" -version = "1.5.2" +name = "fs4" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" +checksum = "29f9df8a11882c4e3335eb2d18a0137c505d9ca927470b0cac9c6f0ae07d28f7" dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "h2 0.4.7", - "http 1.2.0", - "http-body 1.0.1", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "smallvec", - "tokio", + "rustix 0.38.44", + "windows-sys 0.48.0", ] [[package]] -name = "hyper-rustls" -version = "0.24.2" +name = "funty" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", "futures-util", - "http 0.2.12", - "hyper 0.14.32", - "log", - "rustls 0.21.12", - "rustls-native-certs", - "tokio", - "tokio-rustls", ] [[package]] -name = "hyper-util" -version = "0.1.10" +name = "futures-bounded" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +checksum = "8b07bbbe7d7e78809544c6f718d875627addc73a7c3582447abc052cd3dc67e0" dependencies = [ - "bytes", + "futures-timer", "futures-util", - "http 1.2.0", - "http-body 1.0.1", - "hyper 1.5.2", - "pin-project-lite", - "tokio", - "tower-service", ] [[package]] -name = "iana-time-zone" -version = "0.1.61" +name = "futures-channel" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core 0.52.0", + "futures-core", + "futures-sink", ] [[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" +name = "futures-core" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] -name = "icu_collections" -version = "1.5.0" +name = "futures-executor" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ - "displaydoc", - "yoke", - "zerofrom", - "zerovec", + "futures-core", + "futures-task", + "futures-util", + "num_cpus", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "futures-io" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite 0.2.16", + "waker-fn", ] [[package]] -name = "icu_locid_transform" -version = "1.5.0" +name = "futures-lite" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", + "fastrand 2.3.0", + "futures-core", + "futures-io", + "parking", + "pin-project-lite 0.2.16", ] [[package]] -name = "icu_locid_transform_data" -version = "1.5.0" +name = "futures-macro" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] [[package]] -name = "icu_normalizer" -version = "1.5.0" +name = "futures-rustls" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "35bd3cf68c183738046838e300353e4716c674dc5e56890de4826801a6622a28" dependencies = [ - "displaydoc", - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "utf16_iter", - "utf8_iter", - "write16", - "zerovec", + "futures-io", + "rustls 0.21.12", ] [[package]] -name = "icu_normalizer_data" -version = "1.5.0" +name = "futures-sink" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] -name = "icu_properties" -version = "1.5.1" +name = "futures-task" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_locid_transform", - "icu_properties_data", - "icu_provider", - "tinystr", - "zerovec", -] +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] -name = "icu_properties_data" -version = "1.5.0" +name = "futures-timer" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] -name = "icu_provider" -version = "1.5.0" +name = "futures-util" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ - "displaydoc", - "icu_locid", - "icu_provider_macros", - "stable_deref_trait", - "tinystr", - "writeable", - "yoke", - "zerofrom", - "zerovec", + "futures 0.1.31", + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite 0.2.16", + "pin-utils", + "slab", ] [[package]] -name = "icu_provider_macros" -version = "1.5.0" +name = "fxhash" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.91", + "byteorder", ] [[package]] -name = "ident_case" -version = "1.0.1" +name = "generic-array" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] [[package]] -name = "idna" -version = "0.2.3" +name = "generic-array" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", + "typenum", + "version_check", + "zeroize", ] [[package]] -name = "idna" -version = "0.4.0" +name = "gethostname" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "libc", + "winapi", ] [[package]] -name = "idna" -version = "1.0.3" +name = "getrandom" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", ] [[package]] -name = "idna_adapter" -version = "1.2.0" +name = "getrandom" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" dependencies = [ - "icu_normalizer", - "icu_properties", + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets 0.52.6", ] [[package]] -name = "if-addrs" -version = "0.10.2" +name = "getrandom_or_panic" +version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a" +checksum = "6ea1015b5a70616b688dc230cfe50c8af89d972cb132d5a622814d29773b10b9" dependencies = [ - "libc", - "windows-sys 0.48.0", + "rand", + "rand_core", ] [[package]] -name = "if-watch" -version = "3.2.1" +name = "ghash" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf9d64cfcf380606e64f9a0bcf493616b65331199f984151a6fa11a7b3cde38" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" dependencies = [ - "async-io", - "core-foundation", - "fnv", - "futures", - "if-addrs", - "ipnet", - "log", - "netlink-packet-core", - "netlink-packet-route", - "netlink-proto", - "netlink-sys", - "rtnetlink", - "system-configuration", - "tokio", - "windows", + "opaque-debug 0.3.1", + "polyval", ] [[package]] -name = "igd-next" -version = "0.14.3" +name = "gimli" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "064d90fec10d541084e7b39ead8875a5a80d9114a2b18791565253bae25f49e4" +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" dependencies = [ - "async-trait", - "attohttpc", - "bytes", - "futures", - "http 0.2.12", - "hyper 0.14.32", - "log", - "rand", - "tokio", - "url", - "xmltree", + "fallible-iterator 0.2.0", + "indexmap 1.9.3", + "stable_deref_trait", ] [[package]] -name = "impl-codec" -version = "0.6.0" +name = "gimli" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" dependencies = [ - "parity-scale-codec", + "fallible-iterator 0.3.0", + "stable_deref_trait", ] [[package]] -name = "impl-serde" -version = "0.4.0" +name = "gimli" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glob" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + +[[package]] +name = "governor" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68a7f542ee6b35af73b06abc0dad1c1bae89964e4e253bc4b587b91c9637867b" +dependencies = [ + "cfg-if", + "dashmap", + "futures 0.3.31", + "futures-timer", + "no-std-compat", + "nonzero_ext", + "parking_lot 0.12.3", + "portable-atomic", + "quanta", + "rand", + "smallvec", + "spinning_top", +] + +[[package]] +name = "grandpa-verifier" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b523e0b77db180cd6030df9633cfa66f3b2d1156a600d5d39a98cc7b7614d2a5" dependencies = [ + "anyhow", + "derive_more 0.99.19", + "finality-grandpa", + "grandpa-verifier-primitives", + "parity-scale-codec", + "polkadot-sdk 0.7.0", "serde", + "substrate-state-machine", ] [[package]] -name = "impl-trait-for-tuples" -version = "0.2.3" +name = "grandpa-verifier-primitives" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" +checksum = "9b198f373796f7f996115cf362cdb875f406ecd89db9464987e3c75973d4a483" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.91", + "anyhow", + "finality-grandpa", + "ismp", + "log", + "parity-scale-codec", + "polkadot-sdk 0.7.0", ] [[package]] -name = "include_dir" -version = "0.7.4" +name = "group" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ - "include_dir_macros", + "ff", + "rand_core", + "subtle 2.6.1", ] [[package]] -name = "include_dir_macros" -version = "0.7.4" +name = "h2" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ - "proc-macro2", - "quote", + "bytes 1.10.0", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.7.1", + "slab", + "tokio 1.43.0", + "tokio-util", + "tracing", ] [[package]] -name = "indexmap" -version = "1.9.3" +name = "h2" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", + "atomic-waker", + "bytes 1.10.0", + "fnv", + "futures-core", + "futures-sink", + "http 1.2.0", + "indexmap 2.7.1", + "slab", + "tokio 1.43.0", + "tokio-util", + "tracing", ] [[package]] -name = "indexmap" -version = "2.7.0" +name = "handlebars" +version = "5.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +checksum = "d08485b96a0e6393e9e4d1b8d48cf74ad6c063cd905eb33f42c1ce3f0377539b" dependencies = [ - "equivalent", - "hashbrown 0.15.2", + "log", + "pest", + "pest_derive", + "serde", + "serde_json", + "thiserror 1.0.69", ] [[package]] -name = "indexmap-nostd" -version = "0.4.0" +name = "hash-db" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" +checksum = "8e7d7786361d7425ae2fe4f9e407eb0efaa0840f5212d109cc018c40c35c6ab4" [[package]] -name = "inout" -version = "0.1.3" +name = "hash256-std-hasher" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +checksum = "92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2" dependencies = [ - "generic-array 0.14.7", + "crunchy", ] [[package]] -name = "instant" -version = "0.1.13" +name = "hashbrown" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "cfg-if", + "ahash 0.7.8", ] [[package]] -name = "integer-sqrt" -version = "0.1.5" +name = "hashbrown" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "num-traits", + "ahash 0.8.11", ] [[package]] -name = "io-lifetimes" -version = "1.0.11" +name = "hashbrown" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.48.0", + "ahash 0.8.11", + "allocator-api2", + "serde", ] [[package]] -name = "ip_network" -version = "0.4.1" +name = "hashbrown" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] [[package]] -name = "ipconfig" -version = "0.3.2" +name = "hashlink" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" dependencies = [ - "socket2 0.5.8", - "widestring", - "windows-sys 0.48.0", - "winreg", + "hashbrown 0.14.5", ] [[package]] -name = "ipnet" -version = "2.10.1" +name = "heck" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] -name = "is-terminal" -version = "0.4.13" +name = "heck" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" -dependencies = [ - "hermit-abi 0.4.0", - "libc", - "windows-sys 0.52.0", -] +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] -name = "is_terminal_polyfill" -version = "1.70.1" +name = "hermit-abi" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] -name = "itertools" -version = "0.10.5" +name = "hermit-abi" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" [[package]] -name = "itertools" -version = "0.11.0" +name = "hex" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] -name = "itertools" -version = "0.12.1" +name = "hex-conservative" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] +checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" [[package]] -name = "itertools" -version = "0.13.0" +name = "hex-literal" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] +checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" [[package]] -name = "itoa" -version = "1.0.14" +name = "hex-literal" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" [[package]] -name = "jobserver" -version = "0.1.32" +name = "hkdf" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" dependencies = [ - "libc", + "hmac 0.12.1", ] [[package]] -name = "js-sys" -version = "0.3.76" +name = "hmac" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" dependencies = [ - "once_cell", - "wasm-bindgen", + "crypto-mac 0.8.0", + "digest 0.9.0", ] [[package]] -name = "jsonrpsee" -version = "0.24.7" +name = "hmac" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5c71d8c1a731cc4227c2f698d377e7848ca12c8a48866fc5e6951c43a4db843" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "jsonrpsee-core", - "jsonrpsee-proc-macros", - "jsonrpsee-server", - "jsonrpsee-types", - "tokio", - "tracing", + "digest 0.10.7", ] [[package]] -name = "jsonrpsee-core" -version = "0.24.7" +name = "hmac-drbg" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2882f6f8acb9fdaec7cefc4fd607119a9bd709831df7d7672a1d3b644628280" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http 1.2.0", - "http-body 1.0.1", - "http-body-util", - "jsonrpsee-types", - "parking_lot 0.12.3", - "rand", - "rustc-hash 2.1.0", - "serde", - "serde_json", - "thiserror 1.0.69", - "tokio", - "tracing", + "digest 0.9.0", + "generic-array 0.14.7", + "hmac 0.8.1", ] [[package]] -name = "jsonrpsee-proc-macros" -version = "0.24.7" +name = "home" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06c01ae0007548e73412c08e2285ffe5d723195bf268bce67b1b77c3bb2a14d" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "heck 0.5.0", - "proc-macro-crate 3.2.0", - "proc-macro2", - "quote", - "syn 2.0.91", + "windows-sys 0.59.0", ] [[package]] -name = "jsonrpsee-server" -version = "0.24.7" +name = "hostname" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82ad8ddc14be1d4290cd68046e7d1d37acd408efed6d3ca08aefcc3ad6da069c" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" dependencies = [ - "futures-util", - "http 1.2.0", - "http-body 1.0.1", - "http-body-util", - "hyper 1.5.2", - "hyper-util", - "jsonrpsee-core", - "jsonrpsee-types", - "pin-project", - "route-recognizer", - "serde", - "serde_json", - "soketto", - "thiserror 1.0.69", - "tokio", - "tokio-stream", - "tokio-util", - "tower", - "tracing", + "libc", + "match_cfg", + "winapi", ] [[package]] -name = "jsonrpsee-types" -version = "0.24.7" +name = "http" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a178c60086f24cc35bb82f57c651d0d25d99c4742b4d335de04e97fa1f08a8a1" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ - "http 1.2.0", - "serde", - "serde_json", - "thiserror 1.0.69", + "bytes 1.10.0", + "fnv", + "itoa", ] [[package]] -name = "k256" -version = "0.13.4" +name = "http" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "once_cell", - "serdect", - "sha2 0.10.8", + "bytes 1.10.0", + "fnv", + "itoa", ] [[package]] -name = "keccak" -version = "0.1.5" +name = "http-body" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ - "cpufeatures", + "bytes 1.10.0", + "http 0.2.12", + "pin-project-lite 0.2.16", ] [[package]] -name = "keystream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" - -[[package]] -name = "kvdb" -version = "0.13.0" +name = "http-body" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d770dcb02bf6835887c3a979b5107a04ff4bbde97a5f0928d27404a155add9" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ - "smallvec", + "bytes 1.10.0", + "http 1.2.0", ] [[package]] -name = "kvdb-memorydb" -version = "0.13.0" +name = "http-body-util" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ - "kvdb", - "parking_lot 0.12.3", + "bytes 1.10.0", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "pin-project-lite 0.2.16", ] [[package]] -name = "kvdb-rocksdb" -version = "0.19.0" +name = "httparse" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b644c70b92285f66bfc2032922a79000ea30af7bc2ab31902992a5dcb9b434f6" -dependencies = [ - "kvdb", - "num_cpus", - "parking_lot 0.12.3", - "regex", - "rocksdb", - "smallvec", -] +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" [[package]] -name = "lazy_static" -version = "1.5.0" +name = "httpdate" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] -name = "lazycell" -version = "1.3.0" +name = "humantime" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] -name = "libc" -version = "0.2.169" +name = "hyper" +version = "0.14.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes 1.10.0", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite 0.2.16", + "socket2 0.5.8", + "tokio 1.43.0", + "tower-service", + "tracing", + "want", +] [[package]] -name = "libloading" -version = "0.8.6" +name = "hyper" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ - "cfg-if", - "windows-targets 0.52.6", + "bytes 1.10.0", + "futures-channel", + "futures-util", + "h2 0.4.7", + "http 1.2.0", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite 0.2.16", + "smallvec", + "tokio 1.43.0", ] [[package]] -name = "libm" -version = "0.2.11" +name = "hyper-rustls" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" - -[[package]] -name = "libp2p" -version = "0.52.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94495eb319a85b70a68b85e2389a95bb3555c71c49025b78c691a854a7e6464" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ - "bytes", - "either", - "futures", - "futures-timer", - "getrandom", - "instant", - "libp2p-allow-block-list", - "libp2p-connection-limits", - "libp2p-core", - "libp2p-dns", - "libp2p-identify", - "libp2p-identity", - "libp2p-kad", - "libp2p-mdns", - "libp2p-metrics", - "libp2p-noise", - "libp2p-ping", - "libp2p-quic", - "libp2p-request-response", - "libp2p-swarm", - "libp2p-tcp", - "libp2p-upnp", - "libp2p-wasm-ext", - "libp2p-websocket", - "libp2p-yamux", - "multiaddr 0.18.2", - "pin-project", - "rw-stream-sink", - "thiserror 1.0.69", + "futures-util", + "http 0.2.12", + "hyper 0.14.32", + "log", + "rustls 0.21.12", + "rustls-native-certs 0.6.3", + "tokio 1.43.0", + "tokio-rustls 0.24.1", ] [[package]] -name = "libp2p-allow-block-list" -version = "0.2.0" +name = "hyper-util" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55b46558c5c0bf99d3e2a1a38fd54ff5476ca66dd1737b12466a1824dd219311" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "void", + "bytes 1.10.0", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "hyper 1.6.0", + "pin-project-lite 0.2.16", + "tokio 1.43.0", + "tower-service", ] [[package]] -name = "libp2p-connection-limits" -version = "0.2.1" +name = "iana-time-zone" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f5107ad45cb20b2f6c3628c7b6014b996fcb13a88053f4569c872c6e30abf58" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "void", + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core 0.52.0", ] [[package]] -name = "libp2p-core" -version = "0.40.1" +name = "iana-time-zone-haiku" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd44289ab25e4c9230d9246c475a22241e301b23e8f4061d3bdef304a1a99713" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ - "either", - "fnv", - "futures", - "futures-timer", - "instant", - "libp2p-identity", - "log", - "multiaddr 0.18.2", - "multihash 0.19.3", - "multistream-select", - "once_cell", - "parking_lot 0.12.3", - "pin-project", - "quick-protobuf", - "rand", - "rw-stream-sink", - "smallvec", - "thiserror 1.0.69", - "unsigned-varint 0.7.2", - "void", + "cc", ] [[package]] -name = "libp2p-dns" -version = "0.40.1" +name = "icu_collections" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6a18db73084b4da2871438f6239fef35190b05023de7656e877c18a00541a3b" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" dependencies = [ - "async-trait", - "futures", - "libp2p-core", - "libp2p-identity", - "log", - "parking_lot 0.12.3", - "smallvec", - "trust-dns-resolver", + "displaydoc", + "yoke", + "zerofrom", + "zerovec", ] [[package]] -name = "libp2p-identify" -version = "0.43.1" +name = "icu_locid" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a96638a0a176bec0a4bcaebc1afa8cf909b114477209d7456ade52c61cd9cd" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" dependencies = [ - "asynchronous-codec", - "either", - "futures", - "futures-bounded", - "futures-timer", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "log", - "lru", - "quick-protobuf", - "quick-protobuf-codec", - "smallvec", - "thiserror 1.0.69", - "void", + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", ] [[package]] -name = "libp2p-identity" -version = "0.2.10" +name = "icu_locid_transform" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "257b5621d159b32282eac446bed6670c39c7dc68a200a992d8f056afa0066f6d" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" dependencies = [ - "bs58 0.5.1", - "ed25519-dalek", - "hkdf", - "multihash 0.19.3", - "quick-protobuf", - "rand", - "sha2 0.10.8", - "thiserror 1.0.69", - "tracing", - "zeroize", + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", ] [[package]] -name = "libp2p-kad" -version = "0.44.6" +name = "icu_locid_transform_data" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16ea178dabba6dde6ffc260a8e0452ccdc8f79becf544946692fff9d412fc29d" -dependencies = [ - "arrayvec", - "asynchronous-codec", - "bytes", - "either", - "fnv", - "futures", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "log", - "quick-protobuf", - "quick-protobuf-codec", - "rand", - "sha2 0.10.8", - "smallvec", - "thiserror 1.0.69", - "uint", - "unsigned-varint 0.7.2", - "void", -] +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" [[package]] -name = "libp2p-mdns" -version = "0.44.0" +name = "icu_normalizer" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42a2567c305232f5ef54185e9604579a894fd0674819402bb0ac0246da82f52a" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" dependencies = [ - "data-encoding", - "futures", - "if-watch", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "log", - "rand", + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", "smallvec", - "socket2 0.5.8", - "tokio", - "trust-dns-proto 0.22.0", - "void", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", ] [[package]] -name = "libp2p-metrics" -version = "0.13.1" +name = "icu_normalizer_data" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239ba7d28f8d0b5d77760dc6619c05c7e88e74ec8fbbe97f856f20a56745e620" -dependencies = [ - "instant", - "libp2p-core", - "libp2p-identify", - "libp2p-identity", - "libp2p-kad", - "libp2p-ping", - "libp2p-swarm", - "once_cell", - "prometheus-client", -] +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" [[package]] -name = "libp2p-noise" -version = "0.43.2" +name = "icu_properties" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2eeec39ad3ad0677551907dd304b2f13f17208ccebe333bef194076cd2e8921" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" dependencies = [ - "bytes", - "curve25519-dalek", - "futures", - "libp2p-core", - "libp2p-identity", - "log", - "multiaddr 0.18.2", - "multihash 0.19.3", - "once_cell", - "quick-protobuf", - "rand", - "sha2 0.10.8", - "snow", - "static_assertions", - "thiserror 1.0.69", - "x25519-dalek", - "zeroize", + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", ] [[package]] -name = "libp2p-ping" -version = "0.43.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e702d75cd0827dfa15f8fd92d15b9932abe38d10d21f47c50438c71dd1b5dae3" -dependencies = [ - "either", - "futures", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "log", - "rand", - "void", -] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" [[package]] -name = "libp2p-quic" -version = "0.9.3" +name = "icu_provider" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "130d451d83f21b81eb7b35b360bc7972aeafb15177784adc56528db082e6b927" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" dependencies = [ - "bytes", - "futures", - "futures-timer", - "if-watch", - "libp2p-core", - "libp2p-identity", - "libp2p-tls", - "log", - "parking_lot 0.12.3", - "quinn 0.10.2", - "rand", - "ring 0.16.20", - "rustls 0.21.12", - "socket2 0.5.8", - "thiserror 1.0.69", - "tokio", + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", ] [[package]] -name = "libp2p-request-response" -version = "0.25.3" +name = "icu_provider_macros" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e3b4d67870478db72bac87bfc260ee6641d0734e0e3e275798f089c3fecfd4" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ - "async-trait", - "futures", - "instant", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "log", - "rand", - "smallvec", - "void", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "libp2p-swarm" -version = "0.43.7" +name = "ident_case" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "580189e0074af847df90e75ef54f3f30059aedda37ea5a1659e8b9fca05c0141" -dependencies = [ - "either", - "fnv", - "futures", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm-derive", - "log", - "multistream-select", - "once_cell", - "rand", - "smallvec", - "tokio", - "void", -] +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] -name = "libp2p-swarm-derive" -version = "0.33.0" +name = "idna" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4d5ec2a3df00c7836d7696c136274c9c59705bac69133253696a6c932cd1d74" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" dependencies = [ - "heck 0.4.1", - "proc-macro-warning 0.4.2", - "proc-macro2", - "quote", - "syn 2.0.91", + "matches", + "unicode-bidi", + "unicode-normalization", ] [[package]] -name = "libp2p-tcp" -version = "0.40.1" +name = "idna" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b558dd40d1bcd1aaaed9de898e9ec6a436019ecc2420dd0016e712fbb61c5508" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ - "futures", - "futures-timer", - "if-watch", - "libc", - "libp2p-core", - "libp2p-identity", - "log", - "socket2 0.5.8", - "tokio", + "unicode-bidi", + "unicode-normalization", ] [[package]] -name = "libp2p-tls" -version = "0.2.1" +name = "idna" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8218d1d5482b122ccae396bbf38abdcb283ecc96fa54760e1dfd251f0546ac61" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "futures", - "futures-rustls", - "libp2p-core", - "libp2p-identity", - "rcgen", - "ring 0.16.20", - "rustls 0.21.12", - "rustls-webpki", - "thiserror 1.0.69", - "x509-parser 0.15.1", - "yasna", + "idna_adapter", + "smallvec", + "utf8_iter", ] [[package]] -name = "libp2p-upnp" -version = "0.1.1" +name = "idna_adapter" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82775a47b34f10f787ad3e2a22e2c1541e6ebef4fe9f28f3ac553921554c94c1" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ - "futures", - "futures-timer", - "igd-next", - "libp2p-core", - "libp2p-swarm", - "log", - "tokio", - "void", + "icu_normalizer", + "icu_properties", ] [[package]] -name = "libp2p-wasm-ext" -version = "0.40.0" +name = "if-addrs" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e5d8e3a9e07da0ef5b55a9f26c009c8fb3c725d492d8bb4b431715786eea79c" +checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a" dependencies = [ - "futures", - "js-sys", - "libp2p-core", - "send_wrapper", - "wasm-bindgen", - "wasm-bindgen-futures", + "libc", + "windows-sys 0.48.0", ] [[package]] -name = "libp2p-websocket" -version = "0.42.2" +name = "if-watch" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "004ee9c4a4631435169aee6aad2f62e3984dc031c43b6d29731e8e82a016c538" +checksum = "cdf9d64cfcf380606e64f9a0bcf493616b65331199f984151a6fa11a7b3cde38" dependencies = [ - "either", - "futures", - "futures-rustls", - "libp2p-core", - "libp2p-identity", + "async-io 2.4.0", + "core-foundation", + "fnv", + "futures 0.3.31", + "if-addrs", + "ipnet", "log", - "parking_lot 0.12.3", - "pin-project-lite", - "rw-stream-sink", - "soketto", - "thiserror 1.0.69", - "url", - "webpki-roots", + "netlink-packet-core", + "netlink-packet-route", + "netlink-proto", + "netlink-sys", + "rtnetlink", + "system-configuration", + "tokio 1.43.0", + "windows", ] [[package]] -name = "libp2p-yamux" -version = "0.44.1" +name = "igd-next" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eedcb62824c4300efb9cfd4e2a6edaf3ca097b9e68b36dabe45a44469fd6a85" +checksum = "064d90fec10d541084e7b39ead8875a5a80d9114a2b18791565253bae25f49e4" dependencies = [ - "futures", - "libp2p-core", + "async-trait", + "attohttpc", + "bytes 1.10.0", + "futures 0.3.31", + "http 0.2.12", + "hyper 0.14.32", "log", - "thiserror 1.0.69", - "yamux", + "rand", + "tokio 1.43.0", + "url", + "xmltree", ] [[package]] -name = "libredox" -version = "0.1.3" +name = "impl-codec" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" dependencies = [ - "bitflags 2.6.0", - "libc", - "redox_syscall 0.5.8", + "parity-scale-codec", ] [[package]] -name = "librocksdb-sys" -version = "0.11.0+8.1.1" +name = "impl-rlp" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e" +checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" dependencies = [ - "bindgen", - "bzip2-sys", - "cc", - "glob", - "libc", - "libz-sys", - "tikv-jemalloc-sys", + "rlp", ] [[package]] -name = "libsecp256k1" -version = "0.7.1" +name = "impl-serde" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" dependencies = [ - "arrayref", - "base64 0.13.1", - "digest 0.9.0", - "hmac-drbg", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", - "rand", "serde", - "sha2 0.9.9", - "typenum", ] [[package]] -name = "libsecp256k1-core" -version = "0.3.0" +name = "impl-trait-for-tuples" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ - "crunchy", - "digest 0.9.0", - "subtle 2.6.1", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.3.0" +name = "include_dir" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" dependencies = [ - "libsecp256k1-core", + "include_dir_macros", ] [[package]] -name = "libsecp256k1-gen-genmult" -version = "0.3.0" +name = "include_dir_macros" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" dependencies = [ - "libsecp256k1-core", + "proc-macro2", + "quote", ] [[package]] -name = "libz-sys" -version = "1.1.20" +name = "indexmap" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ - "cc", - "pkg-config", - "vcpkg", + "autocfg", + "hashbrown 0.12.3", + "serde", ] [[package]] -name = "link-cplusplus" -version = "1.0.9" +name = "indexmap" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d240c6f7e1ba3a28b0249f774e6a9dd0175054b52dfbb61b16eb8505c3785c9" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ - "cc", + "equivalent", + "hashbrown 0.15.2", ] [[package]] -name = "linked-hash-map" -version = "0.5.6" +name = "indexmap-nostd" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" [[package]] -name = "linked_hash_set" -version = "0.1.5" +name = "inout" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae85b5be22d9843c80e5fc80e9b64c8a3b1f98f867c709956eca3efff4e92e2" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "linked-hash-map", + "generic-array 0.14.7", ] [[package]] -name = "linregress" -version = "0.5.4" +name = "instant" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9eda9dcf4f2a99787827661f312ac3219292549c2ee992bf9a6248ffb066bf7" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ - "nalgebra", + "cfg-if", ] [[package]] -name = "linux-raw-sys" -version = "0.1.4" +name = "integer-encoding" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" [[package]] -name = "linux-raw-sys" -version = "0.4.14" +name = "integer-sqrt" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" +dependencies = [ + "num-traits", +] [[package]] -name = "lioness" -version = "0.1.2" +name = "io-lifetimes" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "arrayref", - "blake2 0.8.1", - "chacha", - "keystream", + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", ] [[package]] -name = "litemap" -version = "0.7.4" +name = "ip_network" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" [[package]] -name = "litep2p" -version = "0.6.2" +name = "ipconfig" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f46c51c205264b834ceed95c8b195026e700494bc3991aaba3b4ea9e20626d9" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "async-trait", - "bs58 0.4.0", - "bytes", - "cid 0.10.1", - "ed25519-dalek", - "futures", - "futures-timer", - "hex-literal 0.4.1", - "indexmap 2.7.0", - "libc", - "mockall 0.12.1", - "multiaddr 0.17.1", - "multihash 0.17.0", - "network-interface", - "nohash-hasher", - "parking_lot 0.12.3", - "pin-project", - "prost 0.12.6", - "prost-build 0.11.9", - "quinn 0.9.4", - "rand", - "rcgen", - "ring 0.16.20", - "rustls 0.20.9", - "serde", - "sha2 0.10.8", - "simple-dns", - "smallvec", - "snow", "socket2 0.5.8", - "static_assertions", - "str0m", - "thiserror 1.0.69", - "tokio", - "tokio-stream", - "tokio-tungstenite", - "tokio-util", - "tracing", - "trust-dns-resolver", - "uint", - "unsigned-varint 0.8.0", - "url", - "webpki", - "x25519-dalek", - "x509-parser 0.16.0", - "yasna", - "zeroize", -] - -[[package]] -name = "lock_api" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" -dependencies = [ - "autocfg", - "scopeguard", + "widestring", + "windows-sys 0.48.0", + "winreg", ] [[package]] -name = "log" -version = "0.4.22" +name = "ipnet" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] -name = "lru" -version = "0.12.5" +name = "is-terminal" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +checksum = "e19b23d53f35ce9f56aebc7d1bb4e6ac1e9c0db7ac85c8d1760c04379edced37" dependencies = [ - "hashbrown 0.15.2", + "hermit-abi 0.4.0", + "libc", + "windows-sys 0.59.0", ] [[package]] -name = "lru-cache" -version = "0.1.2" +name = "is_executable" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +checksum = "d4a1b5bad6f9072935961dfbf1cced2f3d129963d091b6f69f007fe04e758ae2" dependencies = [ - "linked-hash-map", + "winapi", ] [[package]] -name = "lz4" -version = "1.28.0" +name = "is_terminal_polyfill" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d1febb2b4a79ddd1980eede06a8f7902197960aa0383ffcfdd62fe723036725" -dependencies = [ - "lz4-sys", -] +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] -name = "lz4-sys" -version = "1.11.1+lz4-1.10.0" +name = "ismp" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bd8c0d6c6ed0cd30b3652886bb8711dc4bb01d637a68105a3d5158039b418e6" +checksum = "3bc8967dc96f847dc8c4a39e0c48d174a6be8add82f9f79199fc2c7a689bab5a" dependencies = [ - "cc", - "libc", + "anyhow", + "derive_more 1.0.0", + "displaydoc", + "hex", + "parity-scale-codec", + "primitive-types", + "scale-info", + "serde", + "serde-hex-utils", + "serde_json", + "thiserror 2.0.11", ] [[package]] -name = "mach" -version = "0.3.2" +name = "ismp-grandpa" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +checksum = "6ea462acc5d17aeb2499ebb9ac95f11c351bbfe127b9851689b83a1f3613741c" dependencies = [ - "libc", + "anyhow", + "ckb-merkle-mountain-range", + "finality-grandpa", + "grandpa-verifier", + "grandpa-verifier-primitives", + "ismp", + "pallet-ismp", + "parity-scale-codec", + "polkadot-sdk 0.7.0", + "primitive-types", + "scale-info", + "substrate-state-machine", ] [[package]] -name = "macro_magic" -version = "0.5.1" +name = "itertools" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc33f9f0351468d26fbc53d9ce00a096c8522ecb42f19b50f34f2c422f76d21d" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ - "macro_magic_core", - "macro_magic_macros", - "quote", - "syn 2.0.91", + "either", ] [[package]] -name = "macro_magic_core" -version = "0.5.1" +name = "itertools" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1687dc887e42f352865a393acae7cf79d98fab6351cde1f58e9e057da89bf150" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" dependencies = [ - "const-random", - "derive-syn-parse", - "macro_magic_core_macros", - "proc-macro2", - "quote", - "syn 2.0.91", + "either", ] [[package]] -name = "macro_magic_core_macros" -version = "0.5.1" +name = "itertools" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b02abfe41815b5bd98dbd4260173db2c116dda171dc0fe7838cb206333b83308" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.91", + "either", ] [[package]] -name = "macro_magic_macros" -version = "0.5.1" +name = "itertools" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73ea28ee64b88876bf45277ed9a5817c1817df061a74f2b988971a12570e5869" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ - "macro_magic_core", - "quote", - "syn 2.0.91", + "either", ] [[package]] -name = "match_cfg" -version = "0.1.0" +name = "itoa" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] -name = "matchers" -version = "0.1.0" +name = "jni" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" dependencies = [ - "regex-automata 0.1.10", + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror 1.0.69", + "walkdir", ] [[package]] -name = "matches" -version = "0.1.10" +name = "jni-sys" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] -name = "matrixmultiply" -version = "0.3.9" +name = "jobserver" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ - "autocfg", - "rawpointer", + "libc", ] [[package]] -name = "memchr" -version = "2.7.4" +name = "js-sys" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - -[[package]] -name = "memfd" -version = "0.6.4" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "jsonrpsee" +version = "0.24.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" +checksum = "834af00800e962dee8f7bfc0f60601de215e73e78e5497d733a2919da837d3c8" dependencies = [ - "rustix 0.38.42", + "jsonrpsee-core", + "jsonrpsee-proc-macros", + "jsonrpsee-server", + "jsonrpsee-types", + "jsonrpsee-ws-client", + "tokio 1.43.0", + "tracing", ] [[package]] -name = "memmap2" -version = "0.5.10" +name = "jsonrpsee-client-transport" +version = "0.24.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +checksum = "def0fd41e2f53118bd1620478d12305b2c75feef57ea1f93ef70568c98081b7e" dependencies = [ - "libc", + "base64 0.22.1", + "futures-util", + "http 1.2.0", + "jsonrpsee-core", + "pin-project", + "rustls 0.23.22", + "rustls-pki-types", + "rustls-platform-verifier", + "soketto 0.8.1", + "thiserror 1.0.69", + "tokio 1.43.0", + "tokio-rustls 0.26.1", + "tokio-util", + "tracing", + "url", ] [[package]] -name = "memmap2" -version = "0.9.5" +name = "jsonrpsee-core" +version = "0.24.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" +checksum = "76637f6294b04e747d68e69336ef839a3493ca62b35bf488ead525f7da75c5bb" dependencies = [ - "libc", + "async-trait", + "bytes 1.10.0", + "futures-timer", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "http-body-util", + "jsonrpsee-types", + "parking_lot 0.12.3", + "pin-project", + "rand", + "rustc-hash 2.1.1", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio 1.43.0", + "tokio-stream", + "tracing", ] [[package]] -name = "memoffset" -version = "0.8.0" +name = "jsonrpsee-proc-macros" +version = "0.24.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +checksum = "6fcae0c6c159e11541080f1f829873d8f374f81eda0abc67695a13fc8dc1a580" dependencies = [ - "autocfg", + "heck 0.5.0", + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "memory-db" -version = "0.32.0" +name = "jsonrpsee-server" +version = "0.24.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808b50db46293432a45e63bc15ea51e0ab4c0a1647b8eb114e31a3e698dd6fbe" +checksum = "66b7a3df90a1a60c3ed68e7ca63916b53e9afa928e33531e87f61a9c8e9ae87b" dependencies = [ - "hash-db", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.6.0", + "hyper-util", + "jsonrpsee-core", + "jsonrpsee-types", + "pin-project", + "route-recognizer", + "serde", + "serde_json", + "soketto 0.8.1", + "thiserror 1.0.69", + "tokio 1.43.0", + "tokio-stream", + "tokio-util", + "tower", + "tracing", ] [[package]] -name = "merlin" -version = "3.0.0" +name = "jsonrpsee-types" +version = "0.24.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +checksum = "ddb81adb1a5ae9182df379e374a79e24e992334e7346af4d065ae5b2acb8d4c6" dependencies = [ - "byteorder", - "keccak", - "rand_core", - "zeroize", + "http 1.2.0", + "serde", + "serde_json", + "thiserror 1.0.69", ] [[package]] -name = "minimal-lexical" -version = "0.2.1" +name = "jsonrpsee-ws-client" +version = "0.24.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +checksum = "6f4f3642a292f5b76d8a16af5c88c16a0860f2ccc778104e5c848b28183d9538" +dependencies = [ + "http 1.2.0", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", + "url", +] [[package]] -name = "miniz_oxide" -version = "0.8.2" +name = "k256" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" dependencies = [ - "adler2", + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "serdect", + "sha2 0.10.8", ] [[package]] -name = "mio" -version = "1.0.3" +name = "keccak" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" dependencies = [ - "libc", - "wasi", - "windows-sys 0.52.0", + "cpufeatures", ] [[package]] -name = "mixnet" -version = "0.7.0" +name = "keccak-asm" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa3eb39495d8e2e2947a1d862852c90cc6a4a8845f8b41c8829cb9fcc047f4a" +checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" dependencies = [ - "arrayref", - "arrayvec", - "bitflags 1.3.2", - "blake2 0.10.6", - "c2-chacha", - "curve25519-dalek", - "either", - "hashlink", - "lioness", - "log", - "parking_lot 0.12.3", - "rand", - "rand_chacha", - "rand_distr", - "subtle 2.6.1", - "thiserror 1.0.69", - "zeroize", + "digest 0.10.7", + "sha3-asm", ] [[package]] -name = "mockall" -version = "0.11.4" +name = "keystream" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" +checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" + +[[package]] +name = "kvdb" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7d770dcb02bf6835887c3a979b5107a04ff4bbde97a5f0928d27404a155add9" dependencies = [ - "cfg-if", - "downcast", - "fragile", - "lazy_static", - "mockall_derive 0.11.4", - "predicates 2.1.5", - "predicates-tree", + "smallvec", ] [[package]] -name = "mockall" -version = "0.12.1" +name = "kvdb-memorydb" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43766c2b5203b10de348ffe19f7e54564b64f3d6018ff7648d1e2d6d3a0f0a48" +checksum = "bf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2" dependencies = [ - "cfg-if", - "downcast", - "fragile", - "lazy_static", - "mockall_derive 0.12.1", - "predicates 3.1.3", - "predicates-tree", + "kvdb", + "parking_lot 0.12.3", ] [[package]] -name = "mockall_derive" -version = "0.11.4" +name = "kvdb-rocksdb" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" +checksum = "b644c70b92285f66bfc2032922a79000ea30af7bc2ab31902992a5dcb9b434f6" dependencies = [ - "cfg-if", - "proc-macro2", - "quote", - "syn 1.0.109", + "kvdb", + "num_cpus", + "parking_lot 0.12.3", + "regex", + "rocksdb", + "smallvec", ] [[package]] -name = "mockall_derive" -version = "0.12.1" +name = "landlock" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af7cbce79ec385a1d4f54baa90a76401eb15d9cab93685f62e7e9f942aa00ae2" +checksum = "9baa9eeb6e315942429397e617a190f4fdc696ef1ee0342939d641029cbb4ea7" dependencies = [ - "cfg-if", - "proc-macro2", - "quote", - "syn 2.0.91", + "enumflags2", + "libc", + "thiserror 1.0.69", ] [[package]] -name = "multi-stash" -version = "0.2.0" +name = "lazy_static" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685a9ac4b61f4e728e1d2c6a7844609c16527aeb5e6c865915c08e619c16410f" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] -name = "multiaddr" -version = "0.17.1" +name = "lazycell" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" -dependencies = [ - "arrayref", - "byteorder", - "data-encoding", - "log", - "multibase", - "multihash 0.17.0", - "percent-encoding", - "serde", - "static_assertions", - "unsigned-varint 0.7.2", - "url", -] +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] -name = "multiaddr" -version = "0.18.2" +name = "libc" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6351f60b488e04c1d21bc69e56b89cb3f5e8f5d22557d6e8031bdfd79b6961" -dependencies = [ - "arrayref", - "byteorder", - "data-encoding", - "libp2p-identity", - "multibase", - "multihash 0.19.3", - "percent-encoding", - "serde", - "static_assertions", - "unsigned-varint 0.8.0", - "url", -] +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] -name = "multibase" -version = "0.9.1" +name = "libloading" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ - "base-x", - "data-encoding", - "data-encoding-macro", + "cfg-if", + "windows-targets 0.52.6", ] [[package]] -name = "multihash" -version = "0.17.0" +name = "libm" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" -dependencies = [ - "blake2b_simd", - "blake2s_simd", - "blake3", - "core2", - "digest 0.10.7", - "multihash-derive", - "sha2 0.10.8", - "sha3", - "unsigned-varint 0.7.2", -] +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" [[package]] -name = "multihash" -version = "0.18.1" +name = "libp2p" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfd8a792c1694c6da4f68db0a9d707c72bd260994da179e6030a5dcee00bb815" +checksum = "e94495eb319a85b70a68b85e2389a95bb3555c71c49025b78c691a854a7e6464" dependencies = [ - "blake2b_simd", - "blake2s_simd", - "blake3", - "core2", - "digest 0.10.7", - "multihash-derive", - "sha2 0.10.8", - "sha3", - "unsigned-varint 0.7.2", + "bytes 1.10.0", + "either", + "futures 0.3.31", + "futures-timer", + "getrandom 0.2.15", + "instant", + "libp2p-allow-block-list", + "libp2p-connection-limits", + "libp2p-core", + "libp2p-dns", + "libp2p-identify", + "libp2p-identity", + "libp2p-kad", + "libp2p-mdns", + "libp2p-metrics", + "libp2p-noise", + "libp2p-ping", + "libp2p-quic", + "libp2p-request-response", + "libp2p-swarm", + "libp2p-tcp", + "libp2p-upnp", + "libp2p-wasm-ext", + "libp2p-websocket", + "libp2p-yamux", + "multiaddr 0.18.2", + "pin-project", + "rw-stream-sink", + "thiserror 1.0.69", ] [[package]] -name = "multihash" -version = "0.19.3" +name = "libp2p-allow-block-list" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" +checksum = "55b46558c5c0bf99d3e2a1a38fd54ff5476ca66dd1737b12466a1824dd219311" dependencies = [ - "core2", - "unsigned-varint 0.8.0", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", ] [[package]] -name = "multihash-derive" -version = "0.8.1" +name = "libp2p-connection-limits" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" +checksum = "2f5107ad45cb20b2f6c3628c7b6014b996fcb13a88053f4569c872c6e30abf58" dependencies = [ - "proc-macro-crate 1.1.3", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", - "synstructure 0.12.6", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", ] [[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "multimap" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" - -[[package]] -name = "multistream-select" -version = "0.13.0" +name = "libp2p-core" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea0df8e5eec2298a62b326ee4f0d7fe1a6b90a09dfcf9df37b38f947a8c42f19" +checksum = "dd44289ab25e4c9230d9246c475a22241e301b23e8f4061d3bdef304a1a99713" dependencies = [ - "bytes", - "futures", + "either", + "fnv", + "futures 0.3.31", + "futures-timer", + "instant", + "libp2p-identity", "log", + "multiaddr 0.18.2", + "multihash 0.19.3", + "multistream-select", + "once_cell", + "parking_lot 0.12.3", "pin-project", + "quick-protobuf", + "rand", + "rw-stream-sink", "smallvec", + "thiserror 1.0.69", "unsigned-varint 0.7.2", + "void", ] [[package]] -name = "nalgebra" -version = "0.33.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26aecdf64b707efd1310e3544d709c5c0ac61c13756046aaaba41be5c4f66a3b" -dependencies = [ - "approx", - "matrixmultiply", - "num-complex", - "num-rational", - "num-traits", - "simba", - "typenum", -] - -[[package]] -name = "names" -version = "0.14.0" +name = "libp2p-dns" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bddcd3bf5144b6392de80e04c347cd7fab2508f6df16a85fc496ecd5cec39bc" +checksum = "e6a18db73084b4da2871438f6239fef35190b05023de7656e877c18a00541a3b" dependencies = [ - "rand", + "async-trait", + "futures 0.3.31", + "libp2p-core", + "libp2p-identity", + "log", + "parking_lot 0.12.3", + "smallvec", + "trust-dns-resolver", ] [[package]] -name = "netlink-packet-core" -version = "0.7.0" +name = "libp2p-identify" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" +checksum = "45a96638a0a176bec0a4bcaebc1afa8cf909b114477209d7456ade52c61cd9cd" dependencies = [ - "anyhow", - "byteorder", - "netlink-packet-utils", + "asynchronous-codec", + "either", + "futures 0.3.31", + "futures-bounded", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "log", + "lru 0.12.5", + "quick-protobuf", + "quick-protobuf-codec", + "smallvec", + "thiserror 1.0.69", + "void", ] [[package]] -name = "netlink-packet-route" -version = "0.17.1" +name = "libp2p-identity" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" +checksum = "257b5621d159b32282eac446bed6670c39c7dc68a200a992d8f056afa0066f6d" dependencies = [ - "anyhow", - "bitflags 1.3.2", - "byteorder", - "libc", - "netlink-packet-core", - "netlink-packet-utils", + "bs58 0.5.1", + "ed25519-dalek", + "hkdf", + "multihash 0.19.3", + "quick-protobuf", + "rand", + "sha2 0.10.8", + "thiserror 1.0.69", + "tracing", + "zeroize", ] [[package]] -name = "netlink-packet-utils" -version = "0.5.2" +name = "libp2p-kad" +version = "0.44.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" +checksum = "16ea178dabba6dde6ffc260a8e0452ccdc8f79becf544946692fff9d412fc29d" dependencies = [ - "anyhow", - "byteorder", - "paste", + "arrayvec 0.7.6", + "asynchronous-codec", + "bytes 1.10.0", + "either", + "fnv", + "futures 0.3.31", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "log", + "quick-protobuf", + "quick-protobuf-codec", + "rand", + "sha2 0.10.8", + "smallvec", "thiserror 1.0.69", + "uint", + "unsigned-varint 0.7.2", + "void", ] [[package]] -name = "netlink-proto" -version = "0.11.3" +name = "libp2p-mdns" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b33524dc0968bfad349684447bfce6db937a9ac3332a1fe60c0c5a5ce63f21" +checksum = "42a2567c305232f5ef54185e9604579a894fd0674819402bb0ac0246da82f52a" dependencies = [ - "bytes", - "futures", + "data-encoding", + "futures 0.3.31", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", "log", - "netlink-packet-core", - "netlink-sys", - "thiserror 1.0.69", - "tokio", + "rand", + "smallvec", + "socket2 0.5.8", + "tokio 1.43.0", + "trust-dns-proto 0.22.0", + "void", ] [[package]] -name = "netlink-sys" -version = "0.8.7" +name = "libp2p-metrics" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" +checksum = "239ba7d28f8d0b5d77760dc6619c05c7e88e74ec8fbbe97f856f20a56745e620" dependencies = [ - "bytes", - "futures", - "libc", - "log", - "tokio", + "instant", + "libp2p-core", + "libp2p-identify", + "libp2p-identity", + "libp2p-kad", + "libp2p-ping", + "libp2p-swarm", + "once_cell", + "prometheus-client", ] [[package]] -name = "network-interface" -version = "1.1.4" +name = "libp2p-noise" +version = "0.43.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a43439bf756eed340bdf8feba761e2d50c7d47175d87545cd5cbe4a137c4d1" +checksum = "d2eeec39ad3ad0677551907dd304b2f13f17208ccebe333bef194076cd2e8921" dependencies = [ - "cc", - "libc", + "bytes 1.10.0", + "curve25519-dalek", + "futures 0.3.31", + "libp2p-core", + "libp2p-identity", + "log", + "multiaddr 0.18.2", + "multihash 0.19.3", + "once_cell", + "quick-protobuf", + "rand", + "sha2 0.10.8", + "snow", + "static_assertions", "thiserror 1.0.69", - "winapi", + "x25519-dalek", + "zeroize", ] [[package]] -name = "nix" -version = "0.26.4" +name = "libp2p-ping" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +checksum = "e702d75cd0827dfa15f8fd92d15b9932abe38d10d21f47c50438c71dd1b5dae3" dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", + "either", + "futures 0.3.31", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "log", + "rand", + "void", ] [[package]] -name = "no-std-compat" -version = "0.4.1" +name = "libp2p-quic" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" - -[[package]] -name = "node-primitives" -version = "2.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +checksum = "130d451d83f21b81eb7b35b360bc7972aeafb15177784adc56528db082e6b927" dependencies = [ - "sp-core", - "sp-runtime", + "bytes 1.10.0", + "futures 0.3.31", + "futures-timer", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-tls", + "log", + "parking_lot 0.12.3", + "quinn 0.10.2", + "rand", + "ring 0.16.20", + "rustls 0.21.12", + "socket2 0.5.8", + "thiserror 1.0.69", + "tokio 1.43.0", ] [[package]] -name = "nohash-hasher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" - -[[package]] -name = "nom" -version = "7.1.3" +name = "libp2p-request-response" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +checksum = "d8e3b4d67870478db72bac87bfc260ee6641d0734e0e3e275798f089c3fecfd4" dependencies = [ - "memchr", - "minimal-lexical", + "async-trait", + "futures 0.3.31", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "log", + "rand", + "smallvec", + "void", ] [[package]] -name = "nonempty" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" - -[[package]] -name = "nonzero_ext" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" - -[[package]] -name = "normalize-line-endings" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" +name = "libp2p-swarm" +version = "0.43.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "580189e0074af847df90e75ef54f3f30059aedda37ea5a1659e8b9fca05c0141" dependencies = [ - "overload", - "winapi", + "either", + "fnv", + "futures 0.3.31", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm-derive", + "log", + "multistream-select", + "once_cell", + "rand", + "smallvec", + "tokio 1.43.0", + "void", ] [[package]] -name = "num-bigint" -version = "0.4.6" +name = "libp2p-swarm-derive" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "c4d5ec2a3df00c7836d7696c136274c9c59705bac69133253696a6c932cd1d74" dependencies = [ - "num-integer", - "num-traits", + "heck 0.4.1", + "proc-macro-warning 0.4.2", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "num-complex" -version = "0.4.6" +name = "libp2p-tcp" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +checksum = "b558dd40d1bcd1aaaed9de898e9ec6a436019ecc2420dd0016e712fbb61c5508" dependencies = [ - "num-traits", + "futures 0.3.31", + "futures-timer", + "if-watch", + "libc", + "libp2p-core", + "libp2p-identity", + "log", + "socket2 0.5.8", + "tokio 1.43.0", ] [[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] -name = "num-derive" -version = "0.4.2" +name = "libp2p-tls" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +checksum = "8218d1d5482b122ccae396bbf38abdcb283ecc96fa54760e1dfd251f0546ac61" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.91", + "futures 0.3.31", + "futures-rustls", + "libp2p-core", + "libp2p-identity", + "rcgen", + "ring 0.16.20", + "rustls 0.21.12", + "rustls-webpki 0.101.7", + "thiserror 1.0.69", + "x509-parser 0.15.1", + "yasna", ] [[package]] -name = "num-format" -version = "0.4.4" +name = "libp2p-upnp" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" +checksum = "82775a47b34f10f787ad3e2a22e2c1541e6ebef4fe9f28f3ac553921554c94c1" dependencies = [ - "arrayvec", - "itoa", + "futures 0.3.31", + "futures-timer", + "igd-next", + "libp2p-core", + "libp2p-swarm", + "log", + "tokio 1.43.0", + "void", ] [[package]] -name = "num-integer" -version = "0.1.46" +name = "libp2p-wasm-ext" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "1e5d8e3a9e07da0ef5b55a9f26c009c8fb3c725d492d8bb4b431715786eea79c" dependencies = [ - "num-traits", + "futures 0.3.31", + "js-sys", + "libp2p-core", + "send_wrapper", + "wasm-bindgen", + "wasm-bindgen-futures", ] [[package]] -name = "num-rational" -version = "0.4.2" +name = "libp2p-websocket" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +checksum = "004ee9c4a4631435169aee6aad2f62e3984dc031c43b6d29731e8e82a016c538" dependencies = [ - "num-bigint", - "num-integer", - "num-traits", + "either", + "futures 0.3.31", + "futures-rustls", + "libp2p-core", + "libp2p-identity", + "log", + "parking_lot 0.12.3", + "pin-project-lite 0.2.16", + "rw-stream-sink", + "soketto 0.8.1", + "thiserror 1.0.69", + "url", + "webpki-roots 0.25.4", ] [[package]] -name = "num-traits" -version = "0.2.19" +name = "libp2p-yamux" +version = "0.44.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +checksum = "8eedcb62824c4300efb9cfd4e2a6edaf3ca097b9e68b36dabe45a44469fd6a85" dependencies = [ - "autocfg", - "libm", + "futures 0.3.31", + "libp2p-core", + "log", + "thiserror 1.0.69", + "yamux", ] [[package]] -name = "num_cpus" -version = "1.16.0" +name = "libredox" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "hermit-abi 0.3.9", + "bitflags 2.8.0", "libc", + "redox_syscall 0.5.8", ] [[package]] -name = "object" -version = "0.30.4" +name = "librocksdb-sys" +version = "0.11.0+8.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" +checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e" dependencies = [ - "crc32fast", - "hashbrown 0.13.2", - "indexmap 1.9.3", - "memchr", + "bindgen", + "bzip2-sys", + "cc", + "glob", + "libc", + "libz-sys", + "tikv-jemalloc-sys", ] [[package]] -name = "object" -version = "0.32.2" +name = "libsecp256k1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" dependencies = [ - "memchr", + "arrayref", + "base64 0.13.1", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand", + "serde", + "sha2 0.9.9", + "typenum", ] [[package]] -name = "object" -version = "0.36.7" +name = "libsecp256k1-core" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" dependencies = [ - "memchr", + "crunchy", + "digest 0.9.0", + "subtle 2.6.1", ] [[package]] -name = "oid-registry" -version = "0.6.1" +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" dependencies = [ - "asn1-rs 0.5.2", + "libsecp256k1-core", ] [[package]] -name = "oid-registry" -version = "0.7.1" +name = "libsecp256k1-gen-genmult" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" dependencies = [ - "asn1-rs 0.6.2", + "libsecp256k1-core", ] [[package]] -name = "once_cell" -version = "1.20.2" +name = "libz-sys" +version = "1.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "df9b68e50e6e0b26f672573834882eb57759f6db9b3be2ea3c35c91188bb4eaa" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] [[package]] -name = "opaque-debug" -version = "0.2.3" +name = "link-cplusplus" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" +checksum = "9d240c6f7e1ba3a28b0249f774e6a9dd0175054b52dfbb61b16eb8505c3785c9" +dependencies = [ + "cc", +] [[package]] -name = "opaque-debug" -version = "0.3.1" +name = "linked-hash-map" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] -name = "openssl" -version = "0.10.68" +name = "linked_hash_set" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +checksum = "bae85b5be22d9843c80e5fc80e9b64c8a3b1f98f867c709956eca3efff4e92e2" dependencies = [ - "bitflags 2.6.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", + "linked-hash-map", ] [[package]] -name = "openssl-macros" -version = "0.1.1" +name = "linregress" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +checksum = "a9eda9dcf4f2a99787827661f312ac3219292549c2ee992bf9a6248ffb066bf7" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.91", + "nalgebra", ] [[package]] -name = "openssl-probe" -version = "0.1.5" +name = "linux-raw-sys" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" [[package]] -name = "openssl-src" -version = "300.4.1+3.4.0" +name = "linux-raw-sys" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faa4eac4138c62414b5622d1b31c5c304f34b406b013c079c2bbc652fdd6678c" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "lioness" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" dependencies = [ - "cc", + "arrayref", + "blake2 0.8.1", + "chacha", + "keystream", ] [[package]] -name = "openssl-sys" -version = "0.9.104" +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + +[[package]] +name = "litep2p" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +checksum = "0f46c51c205264b834ceed95c8b195026e700494bc3991aaba3b4ea9e20626d9" dependencies = [ - "cc", + "async-trait", + "bs58 0.4.0", + "bytes 1.10.0", + "cid 0.10.1", + "ed25519-dalek", + "futures 0.3.31", + "futures-timer", + "hex-literal 0.4.1", + "indexmap 2.7.1", "libc", - "openssl-src", - "pkg-config", - "vcpkg", + "mockall 0.12.1", + "multiaddr 0.17.1", + "multihash 0.17.0", + "network-interface", + "nohash-hasher", + "parking_lot 0.12.3", + "pin-project", + "prost 0.12.6", + "prost-build 0.11.9", + "quinn 0.9.4", + "rand", + "rcgen", + "ring 0.16.20", + "rustls 0.20.9", + "serde", + "sha2 0.10.8", + "simple-dns", + "smallvec", + "snow", + "socket2 0.5.8", + "static_assertions", + "str0m", + "thiserror 1.0.69", + "tokio 1.43.0", + "tokio-stream", + "tokio-tungstenite", + "tokio-util", + "tracing", + "trust-dns-resolver", + "uint", + "unsigned-varint 0.8.0", + "url", + "webpki", + "x25519-dalek", + "x509-parser 0.16.0", + "yasna", + "zeroize", ] [[package]] -name = "option-ext" -version = "0.2.0" +name = "lock_api" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] [[package]] -name = "overload" -version = "0.1.1" +name = "log" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] -name = "pallet-asset-conversion" -version = "20.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "lru" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", + "hashbrown 0.12.3", ] [[package]] -name = "pallet-authority-discovery" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "lru" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a83fb7698b3643a0e34f9ae6f2e8f0178c0fd42f8b59d493aa271ff3a5bf21" + +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "frame-support", - "frame-system", - "pallet-session", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-authority-discovery", - "sp-runtime", + "hashbrown 0.15.2", ] [[package]] -name = "pallet-authorship" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "lru-cache" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" dependencies = [ - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "parity-scale-codec", - "scale-info", - "sp-runtime", + "linked-hash-map", ] [[package]] -name = "pallet-babe" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "lz4" +version = "1.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a20b523e860d03443e98350ceaac5e71c6ba89aea7d960769ec3ce37f4de5af4" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-authorship", - "pallet-session", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-consensus-babe", - "sp-core", - "sp-io", - "sp-runtime", - "sp-session", - "sp-staking", + "lz4-sys", ] [[package]] -name = "pallet-bags-list" -version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "lz4-sys" +version = "1.11.1+lz4-1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bd8c0d6c6ed0cd30b3652886bb8711dc4bb01d637a68105a3d5158039b418e6" dependencies = [ - "aquamarine", - "docify", - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-tracing", + "cc", + "libc", ] [[package]] -name = "pallet-balances" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" dependencies = [ - "docify", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-runtime", + "libc", ] [[package]] -name = "pallet-bounties" -version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "macro_magic" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc33f9f0351468d26fbc53d9ce00a096c8522ecb42f19b50f34f2c422f76d21d" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-treasury", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", + "macro_magic_core", + "macro_magic_macros", + "quote", + "syn 2.0.98", ] [[package]] -name = "pallet-chainbridge" -version = "7.2.0" +name = "macro_magic_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1687dc887e42f352865a393acae7cf79d98fab6351cde1f58e9e057da89bf150" dependencies = [ - "frame-support", - "frame-system", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "const-random", + "derive-syn-parse", + "macro_magic_core_macros", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "pallet-child-bounties" -version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "macro_magic_core_macros" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b02abfe41815b5bd98dbd4260173db2c116dda171dc0fe7838cb206333b83308" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-bounties", - "pallet-treasury", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "pallet-collective" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "macro_magic_macros" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ea28ee64b88876bf45277ed9a5817c1817df061a74f2b988971a12570e5869" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", + "macro_magic_core", + "quote", + "syn 2.0.98", ] [[package]] -name = "pallet-contracts" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "bitflags 1.3.2", - "environmental", - "frame-benchmarking", - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "log", - "pallet-balances", - "pallet-contracts-proc-macro", - "pallet-contracts-uapi", - "parity-scale-codec", - "paste", - "rand", - "rand_pcg", - "scale-info", - "serde", - "smallvec", - "sp-api", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "staging-xcm", - "staging-xcm-builder", - "wasm-instrument", - "wasmi", + "regex-automata 0.1.10", ] [[package]] -name = "pallet-contracts-proc-macro" -version = "23.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "matrixmultiply" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.91", + "autocfg", + "rawpointer", ] [[package]] -name = "pallet-contracts-uapi" -version = "12.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memfd" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" dependencies = [ - "bitflags 1.3.2", - "parity-scale-codec", - "paste", - "polkavm-derive", - "scale-info", + "rustix 0.38.44", ] [[package]] -name = "pallet-conviction-voting" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" dependencies = [ - "assert_matches", - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "serde", - "sp-io", - "sp-runtime", + "libc", ] [[package]] -name = "pallet-ddc-clusters" -version = "7.2.0" +name = "memmap2" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" dependencies = [ - "ddc-primitives", - "frame-benchmarking", - "frame-support", - "frame-system", - "hex-literal 0.4.1", - "log", - "pallet-balances", - "pallet-contracts", - "pallet-ddc-nodes", - "pallet-insecure-randomness-collective-flip", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-tracing", - "substrate-test-utils", + "libc", ] [[package]] -name = "pallet-ddc-clusters-gov" -version = "7.2.0" +name = "memoffset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" dependencies = [ - "ddc-primitives", - "frame-benchmarking", - "frame-support", - "frame-system", - "hex-literal 0.4.1", - "lazy_static", - "log", - "pallet-balances", - "pallet-contracts", - "pallet-conviction-voting", - "pallet-ddc-clusters", - "pallet-ddc-nodes", - "pallet-ddc-staking", - "pallet-insecure-randomness-collective-flip", - "pallet-preimage", - "pallet-referenda", - "pallet-scheduler", - "pallet-timestamp", - "parity-scale-codec", - "parking_lot 0.12.3", - "scale-info", - "serde", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-tracing", - "substrate-test-utils", + "autocfg", ] [[package]] -name = "pallet-ddc-customers" -version = "7.2.0" +name = "memory-db" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808b50db46293432a45e63bc15ea51e0ab4c0a1647b8eb114e31a3e698dd6fbe" dependencies = [ - "ddc-primitives", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-timestamp", - "parity-scale-codec", - "rand_chacha", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-tracing", - "substrate-test-utils", + "hash-db", ] [[package]] -name = "pallet-ddc-nodes" -version = "7.2.0" +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" dependencies = [ - "ddc-primitives", - "frame-benchmarking", - "frame-support", - "frame-system", - "hex", - "log", - "pallet-balances", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-tracing", - "substrate-test-utils", + "byteorder", + "keccak", + "rand_core", + "zeroize", ] [[package]] -name = "pallet-ddc-payouts" -version = "7.2.0" +name = "mick-jaeger" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69672161530e8aeca1d1400fbf3f1a1747ff60ea604265a4e906c2442df20532" dependencies = [ - "byte-unit", - "chrono", - "ddc-primitives", - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "hex", - "log", - "pallet-balances", - "pallet-ddc-verification", - "parity-scale-codec", - "polkadot-ckb-merkle-mountain-range", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", - "sp-tracing", - "substrate-test-utils", + "futures 0.3.31", + "rand", + "thrift", ] [[package]] -name = "pallet-ddc-staking" -version = "7.2.0" +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" dependencies = [ - "ddc-primitives", - "frame-benchmarking", - "frame-support", - "frame-system", - "hex-literal 0.4.1", - "lazy_static", - "log", - "pallet-balances", - "pallet-contracts", - "pallet-ddc-clusters", - "pallet-ddc-nodes", - "pallet-insecure-randomness-collective-flip", - "pallet-timestamp", - "parity-scale-codec", - "parking_lot 0.12.3", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-tracing", - "substrate-test-utils", + "adler2", ] [[package]] -name = "pallet-ddc-verification" -version = "7.2.0" +name = "mio" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ - "array-bytes", - "base64ct", - "byte-unit", - "ddc-primitives", - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "hex", - "itertools 0.13.0", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + +[[package]] +name = "mixnet" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa3eb39495d8e2e2947a1d862852c90cc6a4a8845f8b41c8829cb9fcc047f4a" +dependencies = [ + "arrayref", + "arrayvec 0.7.6", + "bitflags 1.3.2", + "blake2 0.10.6", + "c2-chacha", + "curve25519-dalek", + "either", + "hashlink", + "lioness", "log", - "pallet-balances", - "pallet-session", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-timestamp", - "parity-scale-codec", - "polkadot-ckb-merkle-mountain-range", - "prost 0.13.4", - "prost-build 0.13.4", + "parking_lot 0.12.3", "rand", - "scale-info", - "scopeguard", - "serde", - "serde_json", - "serde_with", - "sp-application-crypto", - "sp-core", - "sp-io", - "sp-keystore", - "sp-runtime", - "sp-staking", - "sp-std", + "rand_chacha", + "rand_distr", + "subtle 2.6.1", + "thiserror 1.0.69", + "zeroize", ] [[package]] -name = "pallet-delegated-staking" -version = "5.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "mmr-gadget" +version = "40.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cde89da4b1632fcc9ca6abbe34525589f4a49e9f78f19f7e30e44da000e23fd5" dependencies = [ - "frame-support", - "frame-system", + "futures 0.3.31", "log", "parity-scale-codec", - "scale-info", - "sp-io", + "sc-client-api", + "sc-offchain", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-consensus-beefy", + "sp-core", + "sp-mmr-primitives", "sp-runtime", - "sp-staking", ] [[package]] -name = "pallet-democracy" +name = "mmr-rpc" version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d22406b7326c857113e02916e4e39358598f110e0b50c7c646e146c8b273e530" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", + "jsonrpsee", "parity-scale-codec", - "scale-info", "serde", + "sp-api", + "sp-blockchain", "sp-core", - "sp-io", + "sp-mmr-primitives", "sp-runtime", ] [[package]] -name = "pallet-election-provider-multi-phase" -version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "mockall" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-election-provider-support-benchmarking", - "parity-scale-codec", - "rand", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-npos-elections", - "sp-runtime", - "strum 0.26.3", + "cfg-if", + "downcast", + "fragile", + "lazy_static", + "mockall_derive 0.11.4", + "predicates 2.1.5", + "predicates-tree", ] [[package]] -name = "pallet-election-provider-support-benchmarking" -version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "mockall" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43766c2b5203b10de348ffe19f7e54564b64f3d6018ff7648d1e2d6d3a0f0a48" dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-system", - "parity-scale-codec", - "sp-npos-elections", - "sp-runtime", + "cfg-if", + "downcast", + "fragile", + "lazy_static", + "mockall_derive 0.12.1", + "predicates 3.1.3", + "predicates-tree", ] [[package]] -name = "pallet-elections-phragmen" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "mockall_derive" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-npos-elections", - "sp-runtime", - "sp-staking", + "cfg-if", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "pallet-erc20" -version = "7.2.0" +name = "mockall_derive" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af7cbce79ec385a1d4f54baa90a76401eb15d9cab93685f62e7e9f942aa00ae2" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "pallet-chainbridge", - "pallet-erc721", - "parity-scale-codec", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "cfg-if", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "pallet-erc721" -version = "7.2.0" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "pallet-chainbridge", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] +name = "multi-stash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685a9ac4b61f4e728e1d2c6a7844609c16527aeb5e6c865915c08e619c16410f" [[package]] -name = "pallet-fast-unstake" -version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "multiaddr" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" dependencies = [ - "docify", - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", + "arrayref", + "byteorder", + "data-encoding", "log", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-staking", + "multibase", + "multihash 0.17.0", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint 0.7.2", + "url", ] [[package]] -name = "pallet-grandpa" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "multiaddr" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6351f60b488e04c1d21bc69e56b89cb3f5e8f5d22557d6e8031bdfd79b6961" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-authorship", - "pallet-session", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-consensus-grandpa", - "sp-core", - "sp-io", - "sp-runtime", - "sp-session", - "sp-staking", + "arrayref", + "byteorder", + "data-encoding", + "libp2p-identity", + "multibase", + "multihash 0.19.3", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint 0.8.0", + "url", ] [[package]] -name = "pallet-identity" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "multibase" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" dependencies = [ - "enumflags2", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", + "base-x", + "data-encoding", + "data-encoding-macro", ] [[package]] -name = "pallet-im-online" -version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "multihash" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-authorship", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", + "blake2b_simd", + "blake2s_simd", + "blake3", + "core2", + "digest 0.10.7", + "multihash-derive", + "sha2 0.10.8", + "sha3", + "unsigned-varint 0.7.2", ] [[package]] -name = "pallet-indices" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "multihash" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfd8a792c1694c6da4f68db0a9d707c72bd260994da179e6030a5dcee00bb815" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-keyring", - "sp-runtime", + "blake2b_simd", + "blake2s_simd", + "blake3", + "core2", + "digest 0.10.7", + "multihash-derive", + "sha2 0.10.8", + "sha3", + "unsigned-varint 0.7.2", ] [[package]] -name = "pallet-insecure-randomness-collective-flip" -version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "multihash" +version = "0.19.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "safe-mix", - "scale-info", - "sp-runtime", + "core2", + "unsigned-varint 0.8.0", ] [[package]] -name = "pallet-membership" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "multihash-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", + "proc-macro-crate 1.1.3", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure 0.12.6", ] [[package]] -name = "pallet-multisig" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", -] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] -name = "pallet-nomination-pools" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "multimap" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" + +[[package]] +name = "multistream-select" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea0df8e5eec2298a62b326ee4f0d7fe1a6b90a09dfcf9df37b38f947a8c42f19" dependencies = [ - "frame-support", - "frame-system", + "bytes 1.10.0", + "futures 0.3.31", "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-tracing", + "pin-project", + "smallvec", + "unsigned-varint 0.7.2", ] [[package]] -name = "pallet-nomination-pools-benchmarking" -version = "36.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "nalgebra" +version = "0.33.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26aecdf64b707efd1310e3544d709c5c0ac61c13756046aaaba41be5c4f66a3b" dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "pallet-bags-list", - "pallet-delegated-staking", - "pallet-nomination-pools", - "pallet-staking", - "parity-scale-codec", - "scale-info", - "sp-runtime", - "sp-runtime-interface", - "sp-staking", + "approx", + "matrixmultiply", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", ] [[package]] -name = "pallet-nomination-pools-runtime-api" -version = "33.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "names" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bddcd3bf5144b6392de80e04c347cd7fab2508f6df16a85fc496ecd5cec39bc" dependencies = [ - "pallet-nomination-pools", - "parity-scale-codec", - "sp-api", + "rand", ] [[package]] -name = "pallet-offences" -version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" + +[[package]] +name = "netlink-packet-core" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" dependencies = [ - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "sp-runtime", - "sp-staking", + "anyhow", + "byteorder", + "netlink-packet-utils", ] [[package]] -name = "pallet-offences-benchmarking" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "netlink-packet-route" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-babe", - "pallet-balances", - "pallet-grandpa", - "pallet-im-online", - "pallet-offences", - "pallet-session", - "pallet-staking", - "parity-scale-codec", - "scale-info", - "sp-runtime", - "sp-staking", + "anyhow", + "bitflags 1.3.2", + "byteorder", + "libc", + "netlink-packet-core", + "netlink-packet-utils", ] [[package]] -name = "pallet-origins" -version = "7.2.0" +name = "netlink-packet-utils" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" dependencies = [ - "cere-runtime-common", - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-runtime", - "sp-std", + "anyhow", + "byteorder", + "paste", + "thiserror 1.0.69", ] [[package]] -name = "pallet-preimage" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "netlink-proto" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72452e012c2f8d612410d89eea01e2d9b56205274abb35d53f60200b2ec41d60" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", + "bytes 1.10.0", + "futures 0.3.31", "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", + "netlink-packet-core", + "netlink-sys", + "thiserror 2.0.11", ] [[package]] -name = "pallet-proxy" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "netlink-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", + "bytes 1.10.0", + "futures 0.3.31", + "libc", + "log", + "tokio 1.43.0", ] [[package]] -name = "pallet-recovery" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "network-interface" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a43439bf756eed340bdf8feba761e2d50c7d47175d87545cd5cbe4a137c4d1" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", + "cc", + "libc", + "thiserror 1.0.69", + "winapi", ] [[package]] -name = "pallet-referenda" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" dependencies = [ - "assert_matches", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-arithmetic", - "sp-io", - "sp-runtime", + "bitflags 1.3.2", + "cfg-if", + "libc", ] [[package]] -name = "pallet-scheduler" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "nix" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" dependencies = [ - "docify", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-weights", + "bitflags 2.8.0", + "cfg-if", + "cfg_aliases", + "libc", ] [[package]] -name = "pallet-session" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" -dependencies = [ - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "log", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-session", - "sp-staking", - "sp-state-machine", - "sp-trie", -] +name = "no-std-compat" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" [[package]] -name = "pallet-session-benchmarking" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-session", - "pallet-staking", - "parity-scale-codec", - "rand", - "sp-runtime", - "sp-session", -] +name = "no-std-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" [[package]] -name = "pallet-staking" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-authorship", - "pallet-session", - "parity-scale-codec", - "rand_chacha", - "scale-info", - "serde", - "sp-application-crypto", - "sp-io", - "sp-runtime", - "sp-staking", -] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" [[package]] -name = "pallet-staking-reward-curve" -version = "12.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" -dependencies = [ - "proc-macro-crate 3.2.0", - "proc-macro2", - "quote", - "syn 2.0.91", -] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] -name = "pallet-sudo" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ - "docify", - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", + "memchr", + "minimal-lexical", ] [[package]] -name = "pallet-timestamp" -version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" -dependencies = [ - "docify", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-storage", - "sp-timestamp", -] +name = "nonempty" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" [[package]] -name = "pallet-tips" -version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-treasury", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", -] +name = "nonzero_ext" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" [[package]] -name = "pallet-transaction-payment" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", -] +name = "normalize-line-endings" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" [[package]] -name = "pallet-transaction-payment-rpc" -version = "41.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" dependencies = [ - "jsonrpsee", - "pallet-transaction-payment-rpc-runtime-api", - "parity-scale-codec", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-rpc", - "sp-runtime", - "sp-weights", + "overload", + "winapi", ] [[package]] -name = "pallet-transaction-payment-rpc-runtime-api" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "pallet-transaction-payment", - "parity-scale-codec", - "sp-api", - "sp-runtime", - "sp-weights", + "num-integer", + "num-traits", ] [[package]] -name = "pallet-treasury" -version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ - "docify", - "frame-benchmarking", - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-runtime", + "num-traits", ] [[package]] -name = "pallet-utility" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", -] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] -name = "pallet-vesting" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-runtime", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "pallet-whitelist" -version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "num-format" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-runtime", + "arrayvec 0.7.6", + "itoa", ] [[package]] -name = "parity-bip39" -version = "2.0.1" +name = "num-integer" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "bitcoin_hashes", - "rand", - "rand_core", - "serde", - "unicode-normalization", + "num-traits", ] [[package]] -name = "parity-db" -version = "0.4.13" +name = "num-rational" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "592a28a24b09c9dc20ac8afaa6839abc417c720afe42c12e1e4a9d6aa2508d2e" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "blake2 0.10.6", - "crc32fast", - "fs2", - "hex", - "libc", - "log", - "lz4", - "memmap2 0.5.10", - "parking_lot 0.12.3", - "rand", - "siphasher", - "snap", - "winapi", + "num-bigint", + "num-integer", + "num-traits", ] [[package]] -name = "parity-scale-codec" -version = "3.6.12" +name = "num-traits" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ - "arrayvec", - "bitvec", - "byte-slice-cast", - "bytes", - "impl-trait-for-tuples", - "parity-scale-codec-derive", - "serde", + "autocfg", + "libm", ] [[package]] -name = "parity-scale-codec-derive" -version = "3.6.12" +name = "num_cpus" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "proc-macro-crate 3.2.0", - "proc-macro2", - "quote", - "syn 1.0.109", + "hermit-abi 0.3.9", + "libc", ] [[package]] -name = "parity-wasm" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" - -[[package]] -name = "parking" -version = "2.2.1" +name = "object" +version = "0.30.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" +checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" +dependencies = [ + "crc32fast", + "hashbrown 0.13.2", + "indexmap 1.9.3", + "memchr", +] [[package]] -name = "parking_lot" -version = "0.11.2" +name = "object" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", + "memchr", ] [[package]] -name = "parking_lot" -version = "0.12.3" +name = "object" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ - "lock_api", - "parking_lot_core 0.9.10", + "memchr", ] [[package]] -name = "parking_lot_core" -version = "0.8.6" +name = "oid-registry" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", + "asn1-rs 0.5.2", ] [[package]] -name = "parking_lot_core" -version = "0.9.10" +name = "oid-registry" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.5.8", - "smallvec", - "windows-targets 0.52.6", + "asn1-rs 0.6.2", ] [[package]] -name = "partial_sort" -version = "0.2.0" +name = "once_cell" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7924d1d0ad836f665c9065e26d016c673ece3993f30d340068b16f282afc1156" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] -name = "password-hash" -version = "0.5.0" +name = "opaque-debug" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" -dependencies = [ - "base64ct", - "rand_core", - "subtle 2.6.1", -] +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" [[package]] -name = "paste" -version = "1.0.15" +name = "opaque-debug" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] -name = "pbkdf2" -version = "0.12.2" +name = "openssl" +version = "0.10.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +checksum = "61cfb4e166a8bb8c9b55c500bc2308550148ece889be90f609377e58140f42c6" dependencies = [ - "digest 0.10.7", - "password-hash", + "bitflags 2.8.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", ] [[package]] -name = "peeking_take_while" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" - -[[package]] -name = "pem" -version = "1.1.1" +name = "openssl-macros" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ - "base64 0.13.1", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "pest" -version = "2.7.15" +name = "openssl-probe" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" -dependencies = [ - "memchr", - "thiserror 2.0.9", - "ucd-trie", -] +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] -name = "pest_derive" -version = "2.7.15" +name = "openssl-src" +version = "300.4.1+3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e" +checksum = "faa4eac4138c62414b5622d1b31c5c304f34b406b013c079c2bbc652fdd6678c" dependencies = [ - "pest", - "pest_generator", + "cc", ] [[package]] -name = "pest_generator" -version = "2.7.15" +name = "openssl-sys" +version = "0.9.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b" +checksum = "8b22d5b84be05a8d6947c7cb71f7c849aa0f112acd4bf51c2a7c1c988ac0a9dc" dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 2.0.91", + "cc", + "libc", + "openssl-src", + "pkg-config", + "vcpkg", ] [[package]] -name = "pest_meta" -version = "2.7.15" +name = "option-ext" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea" -dependencies = [ - "once_cell", - "pest", - "sha2 0.10.8", -] +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] -name = "petgraph" -version = "0.6.5" +name = "orchestra" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +checksum = "41f6bbacc8c189a3f2e45e0fd0436e5d97f194db888e721bdbc3973e7dbed4c2" dependencies = [ - "fixedbitset", - "indexmap 2.7.0", + "async-trait", + "dyn-clonable", + "futures 0.3.31", + "futures-timer", + "orchestra-proc-macro", + "pin-project", + "prioritized-metered-channel", + "thiserror 1.0.69", + "tracing", ] [[package]] -name = "pin-project" -version = "1.1.7" +name = "orchestra-proc-macro" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" +checksum = "f7b1d40dd8f367db3c65bec8d3dd47d4a604ee8874480738f93191bddab4e0e0" dependencies = [ - "pin-project-internal", + "expander", + "indexmap 2.7.1", + "itertools 0.11.0", + "petgraph", + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "pin-project-internal" -version = "1.1.7" +name = "ordered-float" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" +checksum = "3305af35278dd29f46fcdd139e0b1fbfae2153f0e5928b39b035542dd31e37b7" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.91", + "num-traits", ] [[package]] -name = "pin-project-lite" -version = "0.2.15" +name = "overload" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] -name = "pin-utils" -version = "0.1.0" +name = "pallet-alliance" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "59378a648a0aa279a4b10650366c3389cd0a1239b1876f74bfecd268eecb086b" +dependencies = [ + "array-bytes", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-collective", + "pallet-identity", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-crypto-hashing", + "sp-io", + "sp-runtime", +] [[package]] -name = "pkcs8" -version = "0.10.2" +name = "pallet-asset-conversion" +version = "20.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +checksum = "33f0078659ae95efe6a1bf138ab5250bc41ab98f22ff3651d0208684f08ae797" dependencies = [ - "der", - "spki", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] -name = "pkg-config" -version = "0.3.31" +name = "pallet-asset-conversion-ops" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "3edbeda834bcd6660f311d4eead3dabdf6d385b7308ac75b0fae941a960e6c3a" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-asset-conversion", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", +] [[package]] -name = "polkadot-ckb-merkle-mountain-range" -version = "0.7.0" +name = "pallet-asset-conversion-tx-payment" +version = "20.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4b44320e5f7ce2c18227537a3032ae5b2c476a7e8eddba45333e1011fc31b92" +checksum = "1ab66c4c22ac0f20e620a954ce7ba050118d6d8011e2d02df599309502064e98" dependencies = [ - "cfg-if", - "itertools 0.10.5", + "frame-support", + "frame-system", + "pallet-asset-conversion", + "pallet-transaction-payment", + "parity-scale-codec", + "scale-info", + "sp-runtime", ] [[package]] -name = "polkadot-core-primitives" -version = "15.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-asset-rate" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71b2149aa741bc39466bbcc92d9d0ab6e9adcf39d2790443a735ad573b3191e7" dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", "sp-core", @@ -7010,2031 +8021,6985 @@ dependencies = [ ] [[package]] -name = "polkadot-parachain-primitives" -version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-asset-tx-payment" +version = "38.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406a486466d15acc48c99420191f96f1af018f3381fde829c467aba489030f18" dependencies = [ - "bounded-collections", - "derive_more 0.99.18", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-transaction-payment", "parity-scale-codec", - "polkadot-core-primitives", "scale-info", "serde", "sp-core", + "sp-io", "sp-runtime", - "sp-weights", ] [[package]] -name = "polkavm" -version = "0.9.3" +name = "pallet-assets" +version = "40.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a3693e5efdb2bf74e449cd25fd777a28bd7ed87e41f5d5da75eb31b4de48b94" +checksum = "f45f4eb6027fc34c4650e0ed6a7e57ed3335cc364be74b4531f714237676bcee" dependencies = [ - "libc", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", "log", - "polkavm-assembler", - "polkavm-common", - "polkavm-linux-raw", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", ] [[package]] -name = "polkavm-assembler" -version = "0.9.0" +name = "pallet-assets-freezer" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa96d6d868243acc12de813dd48e756cbadcc8e13964c70d272753266deadc1" +checksum = "127adc2250b89416b940850ce2175dab10a9297b503b1fcb05dc555bd9bd3207" dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", "log", + "pallet-assets", + "parity-scale-codec", + "scale-info", + "sp-runtime", ] [[package]] -name = "polkavm-common" -version = "0.9.0" +name = "pallet-atomic-swap" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d9428a5cfcc85c5d7b9fc4b6a18c4b802d0173d768182a51cc7751640f08b92" +checksum = "15906a685adeabe6027e49c814a34066222dd6136187a8a79c213d0d739b6634" dependencies = [ - "log", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] -name = "polkavm-derive" -version = "0.9.1" +name = "pallet-aura" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8c4bea6f3e11cd89bb18bcdddac10bd9a24015399bd1c485ad68a985a19606" +checksum = "b31da6e794d655d1f9c4da6557a57399538d75905a7862a2ed3f7e5fb711d7e4" dependencies = [ - "polkavm-derive-impl-macro", + "frame-support", + "frame-system", + "log", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-consensus-aura", + "sp-runtime", ] [[package]] -name = "polkavm-derive-impl" -version = "0.9.0" +name = "pallet-authority-discovery" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4fdfc49717fb9a196e74a5d28e0bc764eb394a2c803eb11133a31ac996c60c" +checksum = "ffb0208f0538d58dcb78ce1ff5e6e8641c5f37b23b20b05587e51da30ab13541" dependencies = [ - "polkavm-common", - "proc-macro2", - "quote", - "syn 2.0.91", + "frame-support", + "frame-system", + "pallet-session", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-authority-discovery", + "sp-runtime", ] [[package]] -name = "polkavm-derive-impl-macro" -version = "0.9.0" +name = "pallet-authorship" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ba81f7b5faac81e528eb6158a6f3c9e0bb1008e0ffa19653bc8dea925ecb429" +checksum = "625d47577cabbe1318ccec5d612e2379002d1b6af1ab6edcef3243c66ec246df" dependencies = [ - "polkavm-derive-impl", - "syn 2.0.91", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "sp-runtime", ] [[package]] -name = "polkavm-linker" -version = "0.9.2" +name = "pallet-babe" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7be503e60cf56c0eb785f90aaba4b583b36bff00e93997d93fef97f9553c39" +checksum = "4ee096c0def13832475b340d00121025e0225de29604d44bc6dfcaa294c995b4" dependencies = [ - "gimli 0.28.1", - "hashbrown 0.14.5", + "frame-benchmarking", + "frame-support", + "frame-system", "log", - "object 0.32.2", - "polkavm-common", - "regalloc2 0.9.3", - "rustc-demangle", + "pallet-authorship", + "pallet-session", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-consensus-babe", + "sp-core", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking 36.0.0", ] [[package]] -name = "polkavm-linux-raw" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26e85d3456948e650dff0cfc85603915847faf893ed1e66b020bb82ef4557120" - -[[package]] -name = "polling" -version = "3.7.4" +name = "pallet-bags-list" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +checksum = "0fd23a6f94ba9c1e57c8a7f8a41327d132903a79c55c0c83f36cbae19946cf10" dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi 0.4.0", - "pin-project-lite", - "rustix 0.38.42", - "tracing", - "windows-sys 0.59.0", + "aquamarine", + "docify", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-tracing", ] [[package]] -name = "poly1305" -version = "0.8.0" +name = "pallet-balances" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +checksum = "5c6945b078919acb14d126490e4b0973a688568b30142476ca69c6df2bed27ad" dependencies = [ - "cpufeatures", - "opaque-debug 0.3.1", - "universal-hash", + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-runtime", ] [[package]] -name = "polyval" -version = "0.6.2" +name = "pallet-beefy" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +checksum = "014d177a3aba19ac144fc6b2b5eb94930b9874734b91fd014902b6706288bb5f" dependencies = [ - "cfg-if", - "cpufeatures", - "opaque-debug 0.3.1", - "universal-hash", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-session", + "parity-scale-codec", + "scale-info", + "serde", + "sp-consensus-beefy", + "sp-runtime", + "sp-session", + "sp-staking 36.0.0", ] [[package]] -name = "portable-atomic" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.20" +name = "pallet-beefy-mmr" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "9c64f536e7f04cf3a0a17fdf20870ddb3d63a7690419c40f75cfd2f72b6e6d22" dependencies = [ - "zerocopy", + "array-bytes", + "binary-merkle-tree", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-beefy", + "pallet-mmr", + "pallet-session", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-consensus-beefy", + "sp-core", + "sp-io", + "sp-runtime", + "sp-state-machine", ] [[package]] -name = "predicates" -version = "2.1.5" +name = "pallet-bounties" +version = "37.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" +checksum = "59f3d032f78624b12238a31b6e80ab3e112381a7bc222df152650e33bb2ce190" dependencies = [ - "difflib", - "float-cmp", - "itertools 0.10.5", - "normalize-line-endings", - "predicates-core", - "regex", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-treasury", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] -name = "predicates" -version = "3.1.3" +name = "pallet-bridge-grandpa" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" +checksum = "1d825fbed9fb68bc5d344311653dc0f69caeabe647365abf79a539310b2245f6" dependencies = [ - "anstyle", - "predicates-core", + "bp-header-chain", + "bp-runtime", + "bp-test-utils", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-consensus-grandpa", + "sp-runtime", + "sp-std", ] [[package]] -name = "predicates-core" -version = "1.0.9" +name = "pallet-bridge-messages" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" +checksum = "a1decdc9fb885e46eb17f850aa14f8cf39e17f31574aa6a5fa1a9e603cc526a2" +dependencies = [ + "bp-header-chain", + "bp-messages", + "bp-runtime", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std", + "sp-trie", +] [[package]] -name = "predicates-tree" -version = "1.0.12" +name = "pallet-bridge-parachains" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" +checksum = "41450a8d214f20eaff57aeca8e647b20c0df7d66871ee2262609b90824bd4cca" dependencies = [ - "predicates-core", - "termtree", + "bp-header-chain", + "bp-parachains", + "bp-polkadot-core", + "bp-runtime", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-bridge-grandpa", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std", ] [[package]] -name = "prettyplease" -version = "0.1.25" +name = "pallet-bridge-relayers" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +checksum = "0fe3be7077b7ddee7178b1b12e9171435da73778d093788e10b1bdfad1e10962" dependencies = [ - "proc-macro2", - "syn 1.0.109", + "bp-header-chain", + "bp-messages", + "bp-relayers", + "bp-runtime", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-bridge-grandpa", + "pallet-bridge-messages", + "pallet-bridge-parachains", + "pallet-transaction-payment", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-runtime", + "sp-std", ] [[package]] -name = "prettyplease" -version = "0.2.25" +name = "pallet-broker" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" +checksum = "018b477d7d464c451b1d09a4ce9e792c3c65b15fd764b23da38ff9980e786065" dependencies = [ - "proc-macro2", - "syn 2.0.91", + "bitvec", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-arithmetic", + "sp-core", + "sp-runtime", ] [[package]] -name = "primitive-types" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +name = "pallet-chainbridge" +version = "7.3.0" dependencies = [ - "fixed-hash", - "impl-codec", - "impl-serde", + "frame-support", + "frame-system", + "pallet-balances", + "parity-scale-codec", "scale-info", - "uint", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "proc-macro-crate" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" -dependencies = [ - "thiserror 1.0.69", - "toml 0.5.11", -] - -[[package]] -name = "proc-macro-crate" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" -dependencies = [ - "toml_edit", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" +name = "pallet-child-bounties" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +checksum = "c7f3bc38ae6584b5f57e4de3e49e5184bfc0f20692829530ae1465ffe04e09e7" dependencies = [ - "proc-macro2", - "quote", - "version_check", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-bounties", + "pallet-treasury", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] -name = "proc-macro-warning" -version = "0.4.2" +name = "pallet-collator-selection" +version = "19.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1eaa7fa0aa1929ffdf7eeb6eac234dde6268914a14ad44d23521ab6a9b258e" +checksum = "658798d70c9054165169f6a6a96cfa9d6a5e7d24a524bc19825bf17fcbc5cc5a" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.91", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-balances", + "pallet-session", + "parity-scale-codec", + "rand", + "scale-info", + "sp-runtime", + "sp-staking 36.0.0", ] [[package]] -name = "proc-macro-warning" -version = "1.0.2" +name = "pallet-collective" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "834da187cfe638ae8abb0203f0b33e5ccdb02a28e7199f2f47b3e2754f50edca" +checksum = "8e149f1aefd444c9a1da6ec5a94bc8a7671d7a33078f85dd19ae5b06e3438e60" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.91", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] -name = "proc-macro2" -version = "1.0.92" +name = "pallet-collective-content" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "38a6a5cbe781d9c711be74855ba32ef138f3779d6c54240c08e6d1b4bbba4d1d" dependencies = [ - "unicode-ident", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", ] [[package]] -name = "prometheus" -version = "0.13.4" +name = "pallet-contracts" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" +checksum = "5df77077745d891c822b4275f273f336077a97e69e62a30134776aa721c96fee" dependencies = [ - "cfg-if", - "fnv", - "lazy_static", - "memchr", - "parking_lot 0.12.3", - "thiserror 1.0.69", + "bitflags 1.3.2", + "environmental", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-balances", + "pallet-contracts-proc-macro", + "pallet-contracts-uapi", + "parity-scale-codec", + "paste", + "rand", + "rand_pcg", + "scale-info", + "serde", + "smallvec", + "sp-api", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "staging-xcm", + "staging-xcm-builder", + "wasm-instrument", + "wasmi 0.32.3", ] [[package]] -name = "prometheus-client" -version = "0.21.2" +name = "pallet-contracts-mock-network" +version = "14.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c99afa9a01501019ac3a14d71d9f94050346f55ca471ce90c799a15c58f61e2" +checksum = "309666537ed001c61a99f59fa7b98680f4a6e4e361ed3bc64f7b0237da3e3e06" dependencies = [ - "dtoa", - "itoa", - "parking_lot 0.12.3", - "prometheus-client-derive-encode", + "frame-support", + "frame-system", + "pallet-assets", + "pallet-balances", + "pallet-contracts", + "pallet-contracts-proc-macro", + "pallet-contracts-uapi", + "pallet-insecure-randomness-collective-flip", + "pallet-message-queue", + "pallet-proxy", + "pallet-timestamp", + "pallet-utility", + "pallet-xcm", + "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "polkadot-runtime-parachains", + "scale-info", + "sp-api", + "sp-core", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-tracing", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "xcm-simulator", ] [[package]] -name = "prometheus-client-derive-encode" -version = "0.4.2" +name = "pallet-contracts-proc-macro" +version = "23.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" +checksum = "3170e2f4a3d95f2ace274b703a72630294f0a27c687a4adbad9590e2b3e5fe82" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] -name = "prost" -version = "0.11.9" +name = "pallet-contracts-uapi" +version = "12.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +checksum = "2d3e13d72cda1a30083a1c080acc56fc5f286d09c89d9d91e8e4942a230c58c8" dependencies = [ - "bytes", - "prost-derive 0.11.9", + "bitflags 1.3.2", + "parity-scale-codec", + "paste", + "scale-info", ] [[package]] -name = "prost" -version = "0.12.6" +name = "pallet-conviction-voting" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" +checksum = "999c242491b74395b8c5409ef644e782fe426d87ae36ad92240ffbf21ff0a76e" dependencies = [ - "bytes", - "prost-derive 0.12.6", + "assert_matches", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "sp-io", + "sp-runtime", ] [[package]] -name = "prost" -version = "0.13.4" +name = "pallet-core-fellowship" +version = "22.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c0fef6c4230e4ccf618a35c59d7ede15dea37de8427500f50aff708806e42ec" +checksum = "93052dd8d5910e1b939441541cec416e629b2c0ab92680124c2e5a137e12c285" dependencies = [ - "bytes", - "prost-derive 0.13.4", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-ranked-collective", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] -name = "prost-build" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" +name = "pallet-ddc-clusters" +version = "7.3.0" dependencies = [ - "bytes", - "heck 0.4.1", - "itertools 0.10.5", - "lazy_static", + "ddc-primitives", + "frame-benchmarking", + "frame-support", + "frame-system", + "hex-literal 0.4.1", "log", - "multimap 0.8.3", - "petgraph", - "prettyplease 0.1.25", - "prost 0.11.9", - "prost-types 0.11.9", - "regex", - "syn 1.0.109", - "tempfile", - "which", + "pallet-balances", + "pallet-contracts", + "pallet-ddc-nodes", + "pallet-insecure-randomness-collective-flip", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-tracing", + "substrate-test-utils", ] [[package]] -name = "prost-build" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" +name = "pallet-ddc-clusters-gov" +version = "7.3.0" dependencies = [ - "bytes", - "heck 0.5.0", - "itertools 0.12.1", + "ddc-primitives", + "frame-benchmarking", + "frame-support", + "frame-system", + "hex-literal 0.4.1", + "lazy_static", "log", - "multimap 0.10.0", - "once_cell", - "petgraph", - "prettyplease 0.2.25", - "prost 0.12.6", - "prost-types 0.12.6", - "regex", - "syn 2.0.91", - "tempfile", + "pallet-balances", + "pallet-contracts", + "pallet-conviction-voting", + "pallet-ddc-clusters", + "pallet-ddc-nodes", + "pallet-ddc-staking", + "pallet-insecure-randomness-collective-flip", + "pallet-preimage", + "pallet-referenda", + "pallet-scheduler", + "pallet-timestamp", + "parity-scale-codec", + "parking_lot 0.12.3", + "scale-info", + "serde", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-tracing", + "substrate-test-utils", ] [[package]] -name = "prost-build" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f3e5beed80eb580c68e2c600937ac2c4eedabdfd5ef1e5b7ea4f3fba84497b" +name = "pallet-ddc-customers" +version = "7.3.0" dependencies = [ - "heck 0.5.0", - "itertools 0.13.0", + "ddc-primitives", + "frame-benchmarking", + "frame-support", + "frame-system", "log", - "multimap 0.10.0", - "once_cell", - "petgraph", - "prettyplease 0.2.25", - "prost 0.13.4", - "prost-types 0.13.4", - "regex", - "syn 2.0.91", - "tempfile", + "pallet-balances", + "pallet-timestamp", + "parity-scale-codec", + "rand_chacha", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-tracing", + "substrate-test-utils", ] [[package]] -name = "prost-derive" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +name = "pallet-ddc-nodes" +version = "7.3.0" dependencies = [ - "anyhow", - "itertools 0.10.5", - "proc-macro2", - "quote", - "syn 1.0.109", + "ddc-primitives", + "frame-benchmarking", + "frame-support", + "frame-system", + "hex", + "log", + "pallet-balances", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-tracing", + "substrate-test-utils", ] [[package]] -name = "prost-derive" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" +name = "pallet-ddc-payouts" +version = "7.3.0" dependencies = [ - "anyhow", - "itertools 0.12.1", - "proc-macro2", - "quote", - "syn 2.0.91", + "byte-unit", + "chrono", + "ddc-primitives", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "hex", + "log", + "pallet-balances", + "pallet-ddc-verification", + "parity-scale-codec", + "polkadot-ckb-merkle-mountain-range", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking 36.0.0", + "sp-std", + "sp-tracing", + "substrate-test-utils", ] [[package]] -name = "prost-derive" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "157c5a9d7ea5c2ed2d9fb8f495b64759f7816c7eaea54ba3978f0d63000162e3" +name = "pallet-ddc-staking" +version = "7.3.0" dependencies = [ - "anyhow", - "itertools 0.13.0", - "proc-macro2", - "quote", - "syn 2.0.91", + "ddc-primitives", + "frame-benchmarking", + "frame-support", + "frame-system", + "hex-literal 0.4.1", + "lazy_static", + "log", + "pallet-balances", + "pallet-contracts", + "pallet-ddc-clusters", + "pallet-ddc-nodes", + "pallet-insecure-randomness-collective-flip", + "pallet-timestamp", + "parity-scale-codec", + "parking_lot 0.12.3", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-tracing", + "substrate-test-utils", ] [[package]] -name = "prost-types" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +name = "pallet-ddc-verification" +version = "7.3.0" dependencies = [ - "prost 0.11.9", + "array-bytes", + "base64ct", + "byte-unit", + "ddc-primitives", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "hex", + "itertools 0.13.0", + "log", + "pallet-balances", + "pallet-session", + "pallet-staking", + "pallet-staking-reward-curve", + "pallet-timestamp", + "parity-scale-codec", + "polkadot-ckb-merkle-mountain-range", + "prost 0.13.4", + "prost-build 0.13.4", + "rand", + "scale-info", + "scopeguard", + "serde", + "serde_json", + "serde_with", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-staking 36.0.0", + "sp-std", ] [[package]] -name = "prost-types" -version = "0.12.6" +name = "pallet-delegated-staking" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" +checksum = "117f003a97f980514c6db25a50c22aaec2a9ccb5664b3cb32f52fb990e0b0c12" dependencies = [ - "prost 0.12.6", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-staking 36.0.0", ] [[package]] -name = "prost-types" -version = "0.13.4" +name = "pallet-democracy" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2f1e56baa61e93533aebc21af4d2134b70f66275e0fcdf3cbe43d77ff7e8fc" +checksum = "f6d1dc655f50b7c65bb2fb14086608ba11af02ef2936546f7a67db980ec1f133" dependencies = [ - "prost 0.13.4", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] -name = "psm" -version = "0.1.24" +name = "pallet-dev-mode" +version = "20.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" +checksum = "ae1d8050c09c5e003d502c1addc7fdfbde21a854bd57787e94447078032710c8" dependencies = [ - "cc", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", ] [[package]] -name = "quanta" -version = "0.12.4" +name = "pallet-election-provider-multi-phase" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773ce68d0bb9bc7ef20be3536ffe94e223e1f365bd374108b2659fac0c65cfe6" +checksum = "62f9ad5ae0c13ba3727183dadf1825b6b7b0b0598ed5c366f8697e13fd540f7d" dependencies = [ - "crossbeam-utils", - "libc", - "once_cell", - "raw-cpuid", - "wasi", - "web-sys", - "winapi", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-election-provider-support-benchmarking", + "parity-scale-codec", + "rand", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-npos-elections", + "sp-runtime", + "strum 0.26.3", ] [[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - -[[package]] -name = "quick-protobuf" -version = "0.8.1" +name = "pallet-election-provider-support-benchmarking" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +checksum = "d4111d0d27545c260c9dd0d6fc504961db59c1ec4b42e1bcdc28ebd478895c22" dependencies = [ - "byteorder", + "frame-benchmarking", + "frame-election-provider-support", + "frame-system", + "parity-scale-codec", + "sp-npos-elections", + "sp-runtime", ] [[package]] -name = "quick-protobuf-codec" -version = "0.2.0" +name = "pallet-elections-phragmen" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ededb1cd78531627244d51dd0c7139fbe736c7d57af0092a76f0ffb2f56e98" +checksum = "705c66d6c231340c6d085a0df0319a6ce42a150f248171e88e389ab1e3ce20f5" dependencies = [ - "asynchronous-codec", - "bytes", - "quick-protobuf", - "thiserror 1.0.69", - "unsigned-varint 0.7.2", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-npos-elections", + "sp-runtime", + "sp-staking 36.0.0", ] [[package]] -name = "quinn" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e8b432585672228923edbbf64b8b12c14e1112f62e88737655b4a083dbcd78e" +name = "pallet-erc20" +version = "7.3.0" dependencies = [ - "bytes", - "pin-project-lite", - "quinn-proto 0.9.6", - "quinn-udp 0.3.2", - "rustc-hash 1.1.0", - "rustls 0.20.9", - "thiserror 1.0.69", - "tokio", - "tracing", - "webpki", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-chainbridge", + "pallet-erc721", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "quinn" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cc2c5017e4b43d5995dcea317bc46c1e09404c0a9664d2908f7f02dfe943d75" +name = "pallet-erc721" +version = "7.3.0" dependencies = [ - "bytes", - "futures-io", - "pin-project-lite", - "quinn-proto 0.10.6", - "quinn-udp 0.4.1", - "rustc-hash 1.1.0", - "rustls 0.21.12", - "thiserror 1.0.69", - "tokio", - "tracing", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-chainbridge", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "quinn-proto" -version = "0.9.6" +name = "pallet-fast-unstake" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b0b33c13a79f669c85defaf4c275dc86a0c0372807d0ca3d78e0bb87274863" +checksum = "e0ee60e8ef10b3936f2700bd61fa45dcc190c61124becc63bed787addcfa0d20" dependencies = [ - "bytes", - "rand", - "ring 0.16.20", - "rustc-hash 1.1.0", - "rustls 0.20.9", - "slab", - "thiserror 1.0.69", - "tinyvec", - "tracing", - "webpki", + "docify", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-staking 36.0.0", ] [[package]] -name = "quinn-proto" -version = "0.10.6" +name = "pallet-glutton" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "141bf7dfde2fbc246bfd3fe12f2455aa24b0fbd9af535d8c86c7bd1381ff2b1a" +checksum = "a1c79ab340890f6ab088a638c350ac1173a1b2a79c18004787523032025582b4" dependencies = [ - "bytes", - "rand", - "ring 0.16.20", - "rustc-hash 1.1.0", - "rustls 0.21.12", - "slab", - "thiserror 1.0.69", - "tinyvec", - "tracing", + "blake2 0.10.6", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-inherents", + "sp-io", + "sp-runtime", ] [[package]] -name = "quinn-udp" -version = "0.3.2" +name = "pallet-grandpa" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "641538578b21f5e5c8ea733b736895576d0fe329bb883b937db6f4d163dbaaf4" +checksum = "6d3a570a4aac3173ea46b600408183ca2bcfdaadc077f802f11e6055963e2449" dependencies = [ - "libc", - "quinn-proto 0.9.6", - "socket2 0.4.10", - "tracing", - "windows-sys 0.42.0", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-session", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-consensus-grandpa", + "sp-core", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking 36.0.0", ] [[package]] -name = "quinn-udp" -version = "0.4.1" +name = "pallet-hyperbridge" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7" +checksum = "7b7d0c1b1f2395dddf8033c787b94e780423627b42380cb78533b72ec7126607" dependencies = [ - "bytes", - "libc", - "socket2 0.5.8", - "tracing", - "windows-sys 0.48.0", + "anyhow", + "ismp", + "pallet-ismp", + "parity-scale-codec", + "polkadot-sdk 0.7.0", + "primitive-types", + "scale-info", ] [[package]] -name = "quote" -version = "1.0.37" +name = "pallet-identity" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "e3a4288548de9a755e39fcb82ffb9024b6bb1ba0f582464a44423038dd7a892e" dependencies = [ - "proc-macro2", + "enumflags2", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", ] [[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.8.5" +name = "pallet-im-online" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "c6fd95270cf029d16cb40fe6bd9f8ab9c78cd966666dccbca4d8bfec35c5bba5" dependencies = [ - "libc", - "rand_chacha", - "rand_core", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking 36.0.0", ] [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "pallet-indices" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "c5e4b97de630427a39d50c01c9e81ab8f029a00e56321823958b39b438f7b940" dependencies = [ - "ppv-lite86", - "rand_core", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-keyring", + "sp-runtime", ] [[package]] -name = "rand_core" -version = "0.6.4" +name = "pallet-insecure-randomness-collective-flip" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "dce7ad80675d78bd38a7a66ecbbf2d218dd32955e97f8e301d0afe6c87b0f251" dependencies = [ - "getrandom", + "frame-support", + "frame-system", + "parity-scale-codec", + "safe-mix", + "scale-info", + "sp-runtime", ] [[package]] -name = "rand_distr" -version = "0.4.3" +name = "pallet-ismp" +version = "16.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +checksum = "f7ef3014cf5399263391004babb5e8877889b8bc942ece79e55a661b4665775c" dependencies = [ - "num-traits", - "rand", + "anyhow", + "fortuples", + "ismp", + "log", + "parity-scale-codec", + "polkadot-sdk 0.9.0", + "scale-info", + "serde", + "sp-io", ] [[package]] -name = "rand_pcg" -version = "0.3.1" +name = "pallet-ismp-rpc" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" +checksum = "979ff7d05f9b0df4e1b7709f32069799f6747ad46481cf2ac8ad782ae2bcd31b" dependencies = [ - "rand_core", + "anyhow", + "hash-db", + "hex", + "hex-literal 0.4.1", + "ismp", + "jsonrpsee", + "pallet-ismp", + "pallet-ismp-runtime-api", + "parity-scale-codec", + "polkadot-sdk 0.7.0", + "serde", + "serde_json", + "tower", + "trie-db", ] [[package]] -name = "raw-cpuid" -version = "11.2.0" +name = "pallet-ismp-runtime-api" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ab240315c661615f2ee9f0f2cd32d5a7343a84d5ebcccb99d46e6637565e7b0" +checksum = "26428655a11ba9752244e1ca30936cbdf4b6407911ce246c1cbfee9a43feae60" dependencies = [ - "bitflags 2.6.0", + "ismp", + "pallet-ismp", + "parity-scale-codec", + "polkadot-sdk 0.7.0", + "primitive-types", + "serde", ] [[package]] -name = "rawpointer" -version = "0.2.1" +name = "pallet-lottery" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" - -[[package]] -name = "rayon" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "ae0920ee53cf7b0665cfb6d275759ae0537dc3850ec78da5f118d814c99d3562" dependencies = [ - "either", - "rayon-core", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-runtime", ] [[package]] -name = "rayon-core" -version = "1.12.1" +name = "pallet-membership" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "1868b5dca4bbfd1f4a222cbb80735a5197020712a71577b496bbb7e19aaa5394" dependencies = [ - "crossbeam-deque", - "crossbeam-utils", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] -name = "rcgen" -version = "0.10.0" +name = "pallet-message-queue" +version = "41.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" +checksum = "983f7d1be18e9a089a3e23670918f5085705b4403acd3fdde31878d57b76a1a8" dependencies = [ - "pem", - "ring 0.16.20", - "time", - "yasna", + "environmental", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-weights", ] [[package]] -name = "redox_syscall" -version = "0.2.16" +name = "pallet-migrations" +version = "8.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "9b417fc975636bce94e7c6d707e42d0706d67dfa513e72f5946918e1044beef1" dependencies = [ - "bitflags 1.3.2", + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", ] [[package]] -name = "redox_syscall" -version = "0.5.8" +name = "pallet-mixnet" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +checksum = "cf3fa2b7f759a47f698a403ab40c54bc8935e2969387947224cbdb4e2bc8a28a" dependencies = [ - "bitflags 2.6.0", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-application-crypto", + "sp-arithmetic", + "sp-io", + "sp-mixnet", + "sp-runtime", ] [[package]] -name = "redox_users" -version = "0.4.6" +name = "pallet-mmr" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +checksum = "f6932dfb85f77a57c2d1fdc28a7b3a59ffe23efd8d5bb02dc3039d91347e4a3b" dependencies = [ - "getrandom", - "libredox", - "thiserror 1.0.69", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-mmr-primitives", + "sp-runtime", ] [[package]] -name = "ref-cast" -version = "1.0.23" +name = "pallet-multisig" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" +checksum = "0e5099c9a4442efcc1568d88ca1d22d624e81ab96358f99f616c67fbd82532d2" dependencies = [ - "ref-cast-impl", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", ] [[package]] -name = "ref-cast-impl" -version = "1.0.23" +name = "pallet-nft-fractionalization" +version = "21.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" +checksum = "168792cf95a32fa3baf9b874efec82a45124da0a79cee1ae3c98a823e6841959" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.91", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-assets", + "pallet-nfts", + "parity-scale-codec", + "scale-info", + "sp-runtime", ] [[package]] -name = "regalloc2" -version = "0.6.1" +name = "pallet-nfts" +version = "32.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80535183cae11b149d618fbd3c37e38d7cda589d82d7769e196ca9a9042d7621" +checksum = "59e2aad461a0849d7f0471576eeb1fe3151795bcf2ec9e15eca5cca5b9d743b2" dependencies = [ - "fxhash", + "enumflags2", + "frame-benchmarking", + "frame-support", + "frame-system", "log", - "slice-group-by", - "smallvec", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] -name = "regalloc2" -version = "0.9.3" +name = "pallet-nfts-runtime-api" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad156d539c879b7a24a363a2016d77961786e71f48f2e2fc8302a92abd2429a6" +checksum = "a7a1f50c217e19dc50ff586a71eb5915df6a05bc0b25564ea20674c8cd182c1f" dependencies = [ - "hashbrown 0.13.2", - "log", - "rustc-hash 1.1.0", - "slice-group-by", - "smallvec", + "pallet-nfts", + "parity-scale-codec", + "sp-api", ] [[package]] -name = "regex" -version = "1.11.1" +name = "pallet-nis" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "8ac349e119880b7df1a7c4c36d919b33a498d0e9548af3c237365c654ae0c73d" dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-runtime", ] [[package]] -name = "regex-automata" -version = "0.1.10" +name = "pallet-node-authorization" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +checksum = "39ec3133be9e767b8feafbb26edd805824faa59956da008d2dc7fcf4b4720e56" dependencies = [ - "regex-syntax 0.6.29", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] -name = "regex-automata" -version = "0.4.9" +name = "pallet-nomination-pools" +version = "35.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "50d04f050ab02af6cbe058e101abb8706be7f8ea7958e5bf1d4cd8caa6b66c71" dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.8.5", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking 36.0.0", + "sp-tracing", ] [[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - -[[package]] -name = "resolv-conf" -version = "0.7.0" +name = "pallet-nomination-pools-benchmarking" +version = "36.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +checksum = "38d2eaca0349bcda923343226b8b64d25a80b67e0a1ebaaa5b0ab1e1b3b225bc" dependencies = [ - "hostname", - "quick-error", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "pallet-bags-list", + "pallet-delegated-staking", + "pallet-nomination-pools", + "pallet-staking", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-runtime-interface", + "sp-staking 36.0.0", ] [[package]] -name = "rfc6979" -version = "0.4.0" +name = "pallet-nomination-pools-runtime-api" +version = "33.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +checksum = "03eea431eba0658ca763a078bd849e0622c37c85eddd011b8e886460b50c0827" dependencies = [ - "hmac 0.12.1", - "subtle 2.6.1", + "pallet-nomination-pools", + "parity-scale-codec", + "sp-api", ] [[package]] -name = "ring" -version = "0.16.20" +name = "pallet-offences" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +checksum = "6c4379cf853465696c1c5c03e7e8ce80aeaca0a6139d698abe9ecb3223fd732a" dependencies = [ - "cc", - "libc", - "once_cell", - "spin 0.5.2", - "untrusted 0.7.1", - "web-sys", - "winapi", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "sp-runtime", + "sp-staking 36.0.0", ] [[package]] -name = "ring" -version = "0.17.8" +name = "pallet-offences-benchmarking" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "69aa1b24cdffc3fa8c89cdea32c83f1bf9c1c82a87fa00e57ae4be8e85f5e24f" dependencies = [ - "cc", - "cfg-if", - "getrandom", - "libc", - "spin 0.9.8", - "untrusted 0.9.0", - "windows-sys 0.52.0", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-babe", + "pallet-balances", + "pallet-grandpa", + "pallet-im-online", + "pallet-offences", + "pallet-session", + "pallet-staking", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-staking 36.0.0", ] [[package]] -name = "rocksdb" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffe" +name = "pallet-origins" +version = "7.3.0" dependencies = [ - "libc", - "librocksdb-sys", + "cere-runtime-common", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] -name = "route-recognizer" -version = "0.3.1" +name = "pallet-paged-list" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" +checksum = "c8e099fb116068836b17ca4232dc52f762b69dc8cd4e33f509372d958de278b0" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-metadata-ir", + "sp-runtime", +] [[package]] -name = "rpassword" -version = "7.3.1" +name = "pallet-parameters" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f" +checksum = "b9aba424d55e17b2a2bec766a41586eab878137704d4803c04bebd6a4743db7b" dependencies = [ - "libc", - "rtoolbox", - "windows-sys 0.48.0", + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "paste", + "scale-info", + "serde", + "sp-core", + "sp-runtime", ] [[package]] -name = "rtnetlink" -version = "0.13.1" +name = "pallet-preimage" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a552eb82d19f38c3beed3f786bd23aa434ceb9ac43ab44419ca6d67a7e186c0" +checksum = "407828bc48c6193ac076fdf909b2fadcaaecd65f42b0b0a04afe22fe8e563834" dependencies = [ - "futures", + "frame-benchmarking", + "frame-support", + "frame-system", "log", - "netlink-packet-core", - "netlink-packet-route", - "netlink-packet-utils", - "netlink-proto", - "netlink-sys", - "nix", - "thiserror 1.0.69", - "tokio", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] -name = "rtoolbox" -version = "0.0.2" +name = "pallet-proxy" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" +checksum = "d39df395f0dbcf07dafe842916adea3266a87ce36ed87b5132184b6bcd746393" dependencies = [ - "libc", - "windows-sys 0.48.0", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", ] [[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustc-hash" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" - -[[package]] -name = "rustc-hex" -version = "2.1.0" +name = "pallet-ranked-collective" +version = "38.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +checksum = "15a640e732164203eb5298823cc8c29cfc563763c43c9114e76153b3166b8b9d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", +] [[package]] -name = "rustc_version" -version = "0.2.3" +name = "pallet-recovery" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +checksum = "406a116aa6d05f88f3c10d79ff89cf577323680a48abd8e5550efb47317e67fa" dependencies = [ - "semver 0.9.0", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", ] [[package]] -name = "rustc_version" -version = "0.4.1" +name = "pallet-referenda" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +checksum = "c3008c20531d1730c9b457ae77ecf0e3c9b07aaf8c4f5d798d61ef6f0b9e2d4b" dependencies = [ - "semver 1.0.24", + "assert_matches", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-arithmetic", + "sp-io", + "sp-runtime", ] [[package]] -name = "rusticata-macros" -version = "4.1.0" +name = "pallet-remark" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +checksum = "a3e8cae0e20888065ec73dda417325c6ecabf797f4002329484b59c25ecc34d4" dependencies = [ - "nom", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] -name = "rustix" -version = "0.36.17" +name = "pallet-revive" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "305efbd14fde4139eb501df5f136994bb520b033fa9fbdce287507dc23b8c7ed" +checksum = "be02c94dcbadd206a910a244ec19b493aac793eed95e23d37d6699547234569f" dependencies = [ "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.1.4", - "windows-sys 0.45.0", + "environmental", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-balances", + "pallet-revive-fixtures", + "pallet-revive-proc-macro", + "pallet-revive-uapi", + "parity-scale-codec", + "paste", + "polkavm 0.10.0", + "scale-info", + "serde", + "sp-api", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "staging-xcm", + "staging-xcm-builder", ] [[package]] -name = "rustix" -version = "0.38.42" +name = "pallet-revive-fixtures" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" +checksum = "8a38c27f1531f36e5327f3084eb24cf1c9dd46b372e030c0169e843ce363105e" dependencies = [ - "bitflags 2.6.0", - "errno", - "libc", - "linux-raw-sys 0.4.14", - "windows-sys 0.59.0", + "anyhow", + "frame-system", + "parity-wasm", + "polkavm-linker 0.10.0", + "sp-runtime", + "tempfile", + "toml 0.8.20", ] [[package]] -name = "rustls" -version = "0.20.9" +name = "pallet-revive-mock-network" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" +checksum = "60e74591d44dbd78db02c8593f5caa75bd61bcc4d63999302150223fb969ae37" dependencies = [ - "ring 0.16.20", - "sct", - "webpki", + "frame-support", + "frame-system", + "pallet-assets", + "pallet-balances", + "pallet-message-queue", + "pallet-proxy", + "pallet-revive", + "pallet-revive-proc-macro", + "pallet-revive-uapi", + "pallet-timestamp", + "pallet-utility", + "pallet-xcm", + "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "polkadot-runtime-parachains", + "scale-info", + "sp-api", + "sp-core", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-tracing", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "xcm-simulator", ] [[package]] -name = "rustls" -version = "0.21.12" +name = "pallet-revive-proc-macro" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +checksum = "b8aee42afa416be6324cf6650c137da9742f27dc7be3c7ed39ad9748baf3b9ae" dependencies = [ - "log", - "ring 0.17.8", - "rustls-webpki", - "sct", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "rustls-native-certs" -version = "0.6.3" +name = "pallet-revive-uapi" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +checksum = "ecb4686c8415619cc13e43fadef146ffff46424d9b4d037fe4c069de52708aac" dependencies = [ - "openssl-probe", - "rustls-pemfile", - "schannel", - "security-framework", + "bitflags 1.3.2", + "parity-scale-codec", + "paste", + "polkavm-derive 0.10.0", + "scale-info", ] [[package]] -name = "rustls-pemfile" -version = "1.0.4" +name = "pallet-root-offences" +version = "35.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +checksum = "b35774b830928daaeeca7196cead7c56eeed952a6616ad6dc5ec068d8c85c81a" dependencies = [ - "base64 0.21.7", + "frame-support", + "frame-system", + "pallet-session", + "pallet-staking", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-staking 36.0.0", ] [[package]] -name = "rustls-webpki" -version = "0.101.7" +name = "pallet-root-testing" +version = "14.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "be95e7c320ac1d381715364cd721e67ab3152ab727f8e4defd3a92e41ebbc880" dependencies = [ - "ring 0.17.8", - "untrusted 0.9.0", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] -name = "rustversion" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" - -[[package]] -name = "rw-stream-sink" -version = "0.4.0" +name = "pallet-safe-mode" +version = "19.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8c9026ff5d2f23da5e45bbc283f156383001bfb09c4e44256d02c1a685fe9a1" +checksum = "6d3e67dd4644c168cedbf257ac3dd2527aad81acf4a0d413112197094e549f76" dependencies = [ - "futures", - "pin-project", - "static_assertions", + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-proxy", + "pallet-utility", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-runtime", ] [[package]] -name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - -[[package]] -name = "safe-mix" -version = "1.0.1" +name = "pallet-salary" +version = "23.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d3d055a2582e6b00ed7a31c1524040aa391092bf636328350813f3a0605215c" +checksum = "3af2d92b1fef1c379c0692113b505c108c186e09c25c72b38e879b6e0f172ebe" dependencies = [ - "rustc_version 0.2.3", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-ranked-collective", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] -name = "safe_arch" -version = "0.7.4" +name = "pallet-scheduler" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" +checksum = "26899a331e7ab5f7d5966cbf203e1cf5bd99cd110356d7ddcaa7597087cdc0b5" dependencies = [ - "bytemuck", + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-weights", ] [[package]] -name = "same-file" -version = "1.0.6" +name = "pallet-scored-pool" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +checksum = "9f84b48bb4702712c902f43931c4077d3a1cb6773c8d8c290d4a6251f6bc2a5c" dependencies = [ - "winapi-util", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", ] [[package]] -name = "sc-allocator" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-session" +version = "38.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8474b62b6b7622f891e83d922a589e2ad5be5471f5ca47d45831a797dba0b3f4" dependencies = [ + "frame-support", + "frame-system", + "impl-trait-for-tuples", "log", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", "sp-core", - "sp-wasm-interface", - "thiserror 1.0.69", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking 36.0.0", + "sp-state-machine", + "sp-trie", ] [[package]] -name = "sc-authority-discovery" -version = "0.45.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-session-benchmarking" +version = "38.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8aadce7df0fee981721983795919642648b846dab5ab9096f82c2cea781007d0" dependencies = [ - "async-trait", - "futures", - "futures-timer", - "ip_network", - "libp2p", - "linked_hash_set", - "log", - "multihash 0.19.3", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-session", + "pallet-staking", "parity-scale-codec", - "prost 0.12.6", - "prost-build 0.12.6", "rand", - "sc-client-api", - "sc-network", - "sc-network-types", - "sp-api", - "sp-authority-discovery", - "sp-blockchain", - "sp-core", - "sp-keystore", "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror 1.0.69", + "sp-session", ] [[package]] -name = "sc-basic-authorship" -version = "0.45.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-skip-feeless-payment" +version = "13.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8c2cb0dae13d2c2d2e76373f337d408468f571459df1900cbd7458f21cf6c01" dependencies = [ - "futures", - "futures-timer", - "log", + "frame-support", + "frame-system", "parity-scale-codec", - "sc-block-builder", - "sc-proposer-metrics", - "sc-telemetry", - "sc-transaction-pool-api", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-inherents", + "scale-info", "sp-runtime", - "substrate-prometheus-endpoint", ] [[package]] -name = "sc-block-builder" -version = "0.42.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-society" +version = "38.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1dc69fea8a8de343e71691f009d5fece6ae302ed82b7bb357882b2ea6454143" dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", "parity-scale-codec", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-core", - "sp-inherents", + "rand_chacha", + "scale-info", + "sp-arithmetic", + "sp-io", "sp-runtime", - "sp-trie", ] [[package]] -name = "sc-chain-spec" +name = "pallet-staking" version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c870d123f4f053b56af808a4beae1ffc4309a696e829796c26837936c926db3b" dependencies = [ - "array-bytes", - "docify", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", "log", - "memmap2 0.9.5", + "pallet-authorship", + "pallet-session", "parity-scale-codec", - "sc-chain-spec-derive", - "sc-client-api", - "sc-executor", - "sc-network", - "sc-telemetry", + "rand_chacha", + "scale-info", "serde", - "serde_json", - "sp-blockchain", - "sp-core", - "sp-crypto-hashing", - "sp-genesis-builder", + "sp-application-crypto", "sp-io", "sp-runtime", - "sp-state-machine", - "sp-tracing", + "sp-staking 36.0.0", ] [[package]] -name = "sc-chain-spec-derive" +name = "pallet-staking-reward-curve" version = "12.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db5e6b1d8ee9d3f6894c5abd8c3e17737ed738c9854f87bfd16239741b7f4d5d" dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] -name = "sc-cli" -version = "0.47.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-staking-reward-fn" +version = "22.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "988a7ebeacc84d4bdb0b12409681e956ffe35438447d8f8bc78db547cffb6ebc" dependencies = [ - "array-bytes", - "chrono", - "clap", - "fdlimit", - "futures", - "itertools 0.11.0", - "libp2p-identity", "log", - "names", - "parity-bip39", - "parity-scale-codec", - "rand", - "regex", - "rpassword", - "sc-client-api", - "sc-client-db", - "sc-keystore", - "sc-mixnet", - "sc-network", - "sc-service", - "sc-telemetry", - "sc-tracing", - "sc-utils", - "serde", - "serde_json", - "sp-blockchain", - "sp-core", - "sp-keyring", - "sp-keystore", - "sp-panic-handler", - "sp-runtime", - "sp-version", - "thiserror 1.0.69", - "tokio", + "sp-arithmetic", ] [[package]] -name = "sc-client-api" -version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-staking-runtime-api" +version = "24.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7298559ef3a6b2f5dfbe9a3b8f3d22f2ff9b073c97f4c4853d2b316d973e72d" dependencies = [ - "fnv", - "futures", - "log", "parity-scale-codec", - "parking_lot 0.12.3", - "sc-executor", - "sc-transaction-pool-api", - "sc-utils", "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-database", - "sp-externalities", - "sp-runtime", - "sp-state-machine", - "sp-statement-store", - "sp-storage", - "sp-trie", - "substrate-prometheus-endpoint", + "sp-staking 36.0.0", ] [[package]] -name = "sc-client-db" -version = "0.44.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-state-trie-migration" +version = "40.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138c15b4200b9dc4c3e031def6a865a235cdc76ff91ee96fba19ca1787c9dda6" dependencies = [ - "hash-db", - "kvdb", - "kvdb-memorydb", - "kvdb-rocksdb", - "linked-hash-map", + "frame-benchmarking", + "frame-support", + "frame-system", "log", - "parity-db", "parity-scale-codec", - "parking_lot 0.12.3", - "sc-client-api", - "sc-state-db", - "schnellru", - "sp-arithmetic", - "sp-blockchain", + "scale-info", "sp-core", - "sp-database", + "sp-io", "sp-runtime", - "sp-state-machine", - "sp-trie", ] [[package]] -name = "sc-consensus" -version = "0.44.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-statement" +version = "20.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e03e147efa900e75cd106337f36da3d7dcd185bd9e5f5c3df474c08c3c37d16" dependencies = [ - "async-trait", - "futures", + "frame-support", + "frame-system", "log", - "mockall 0.11.4", - "parking_lot 0.12.3", - "sc-client-api", - "sc-network-types", - "sc-utils", - "serde", + "parity-scale-codec", + "scale-info", "sp-api", - "sp-blockchain", - "sp-consensus", "sp-core", + "sp-io", "sp-runtime", - "sp-state-machine", - "substrate-prometheus-endpoint", - "thiserror 1.0.69", + "sp-statement-store", ] [[package]] -name = "sc-consensus-babe" -version = "0.45.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-sudo" +version = "38.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1574fe2aed3d52db4a389b77b53d8c9758257b121e3e7bbe24c4904e11681e0e" dependencies = [ - "async-trait", - "fork-tree", - "futures", + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-timestamp" +version = "37.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9ba9b71bbfd33ae672f23ba7efaeed2755fdac37b8f946cb7474fc37841b7e1" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", "log", - "num-bigint", - "num-rational", - "num-traits", "parity-scale-codec", - "parking_lot 0.12.3", - "sc-client-api", - "sc-consensus", - "sc-consensus-epochs", - "sc-consensus-slots", - "sc-telemetry", - "sc-transaction-pool-api", - "sp-api", - "sp-application-crypto", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", - "sp-consensus-slots", - "sp-core", - "sp-crypto-hashing", + "scale-info", "sp-inherents", - "sp-keystore", + "sp-io", "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror 1.0.69", + "sp-storage", + "sp-timestamp", ] [[package]] -name = "sc-consensus-babe-rpc" -version = "0.45.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-tips" +version = "37.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa1d4371a70c309ba11624933f8f5262fe4edad0149c556361d31f26190da936" dependencies = [ - "futures", - "jsonrpsee", - "sc-consensus-babe", - "sc-consensus-epochs", - "sc-rpc-api", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-treasury", + "parity-scale-codec", + "scale-info", "serde", - "sp-api", - "sp-application-crypto", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", "sp-core", - "sp-keystore", + "sp-io", "sp-runtime", - "thiserror 1.0.69", ] [[package]] -name = "sc-consensus-epochs" -version = "0.44.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-token-gateway" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c17357388a6e6440e7b0784b24e114d8cb34a698142cd00d6200731053a2dfc" dependencies = [ - "fork-tree", + "alloy-primitives 0.7.7", + "alloy-sol-macro 0.7.7", + "alloy-sol-types 0.7.7", + "anyhow", + "ismp", + "log", + "pallet-hyperbridge", + "pallet-ismp", "parity-scale-codec", - "sc-client-api", - "sc-consensus", - "sp-blockchain", - "sp-runtime", + "polkadot-sdk 0.7.0", + "primitive-types", + "scale-info", + "token-gateway-primitives", ] [[package]] -name = "sc-consensus-grandpa" -version = "0.30.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-transaction-payment" +version = "38.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cdb86580c72b58145f9cddba21a0c1814742ca56abc9caac3c1ac72f6bde649" dependencies = [ - "ahash", - "array-bytes", - "async-trait", - "dyn-clone", - "finality-grandpa", - "fork-tree", - "futures", - "futures-timer", - "log", + "frame-support", + "frame-system", "parity-scale-codec", - "parking_lot 0.12.3", - "rand", - "sc-block-builder", - "sc-chain-spec", - "sc-client-api", - "sc-consensus", - "sc-network", - "sc-network-common", - "sc-network-gossip", - "sc-network-sync", - "sc-network-types", - "sc-telemetry", - "sc-transaction-pool-api", - "sc-utils", - "serde_json", - "sp-api", - "sp-application-crypto", - "sp-arithmetic", - "sp-blockchain", - "sp-consensus", - "sp-consensus-grandpa", + "scale-info", + "serde", "sp-core", - "sp-crypto-hashing", - "sp-keystore", + "sp-io", "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror 1.0.69", ] [[package]] -name = "sc-consensus-grandpa-rpc" -version = "0.30.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-transaction-payment-rpc" +version = "41.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291a021e6828d43b5165042d31691c5c20b5748ea8d5fc51e0359752482a04c2" dependencies = [ - "finality-grandpa", - "futures", "jsonrpsee", - "log", + "pallet-transaction-payment-rpc-runtime-api", "parity-scale-codec", - "sc-client-api", - "sc-consensus-grandpa", - "sc-rpc", - "serde", + "sp-api", "sp-blockchain", "sp-core", + "sp-rpc", "sp-runtime", - "thiserror 1.0.69", + "sp-weights", ] [[package]] -name = "sc-consensus-slots" -version = "0.44.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-transaction-payment-rpc-runtime-api" +version = "38.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49fdf5ab71e9dbcadcf7139736b6ea6bac8ec4a83985d46cbd130e1eec770e41" dependencies = [ - "async-trait", - "futures", - "futures-timer", - "log", + "pallet-transaction-payment", "parity-scale-codec", - "sc-client-api", - "sc-consensus", - "sc-telemetry", - "sp-arithmetic", - "sp-blockchain", - "sp-consensus", - "sp-consensus-slots", - "sp-core", - "sp-inherents", + "sp-api", "sp-runtime", - "sp-state-machine", + "sp-weights", ] [[package]] -name = "sc-executor" -version = "0.40.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-transaction-storage" +version = "37.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8c337a972a6a796c0a0acc6c03b5e02901c43ad721ce79eb87b45717d75c93b" dependencies = [ + "array-bytes", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", "parity-scale-codec", - "parking_lot 0.12.3", - "sc-executor-common", - "sc-executor-polkavm", - "sc-executor-wasmtime", - "schnellru", - "sp-api", - "sp-core", - "sp-externalities", + "scale-info", + "serde", + "sp-inherents", "sp-io", - "sp-panic-handler", - "sp-runtime-interface", - "sp-trie", - "sp-version", - "sp-wasm-interface", - "tracing", + "sp-runtime", + "sp-transaction-storage-proof", ] [[package]] -name = "sc-executor-common" -version = "0.35.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-treasury" +version = "37.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98bfdd3bb9b58fb010bcd419ff5bf940817a8e404cdbf7886a53ac730f5dda2b" dependencies = [ - "polkavm", - "sc-allocator", - "sp-maybe-compressed-blob", - "sp-wasm-interface", - "thiserror 1.0.69", - "wasm-instrument", + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-runtime", ] [[package]] -name = "sc-executor-polkavm" -version = "0.32.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-tx-pause" +version = "19.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cee153f5be5efc84ebd53aa581e5361cde17dc3669ef80d8ad327f4041d89ebe" dependencies = [ - "log", - "polkavm", - "sc-executor-common", - "sp-wasm-interface", + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-proxy", + "pallet-utility", + "parity-scale-codec", + "scale-info", + "sp-runtime", ] [[package]] -name = "sc-executor-wasmtime" -version = "0.35.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-uniques" +version = "38.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2b13cdaedf2d5bd913a5f6e637cb52b5973d8ed4b8d45e56d921bc4d627006f" dependencies = [ - "anyhow", - "cfg-if", - "libc", + "frame-benchmarking", + "frame-support", + "frame-system", "log", - "parking_lot 0.12.3", - "rustix 0.36.17", - "sc-allocator", - "sc-executor-common", - "sp-runtime-interface", - "sp-wasm-interface", - "wasmtime", + "parity-scale-codec", + "scale-info", + "sp-runtime", ] [[package]] -name = "sc-informant" -version = "0.44.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-utility" +version = "38.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fdcade6efc0b66fc7fc4138964802c02d0ffb7380d894e26b9dd5073727d2b3" dependencies = [ - "console", - "futures", - "futures-timer", - "log", - "sc-client-api", - "sc-network", - "sc-network-common", - "sc-network-sync", - "sp-blockchain", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", "sp-runtime", ] [[package]] -name = "sc-keystore" -version = "33.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-vesting" +version = "38.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "807df2ef13ab6bf940879352c3013bfa00b670458b4c125c2f60e5753f68e3d5" dependencies = [ - "array-bytes", - "parking_lot 0.12.3", - "serde_json", - "sp-application-crypto", - "sp-core", - "sp-keystore", - "thiserror 1.0.69", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-runtime", ] [[package]] -name = "sc-mixnet" -version = "0.15.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-whitelist" +version = "37.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ef17df925290865cf37096dd0cb76f787df11805bba01b1d0ca3e106d06280b" dependencies = [ - "array-bytes", - "arrayvec", - "blake2 0.10.6", - "bytes", - "futures", - "futures-timer", - "log", - "mixnet", - "multiaddr 0.18.2", + "frame-benchmarking", + "frame-support", + "frame-system", "parity-scale-codec", - "parking_lot 0.12.3", - "sc-client-api", - "sc-network", - "sc-network-types", - "sc-transaction-pool-api", + "scale-info", "sp-api", - "sp-consensus", - "sp-core", - "sp-keystore", - "sp-mixnet", "sp-runtime", - "thiserror 1.0.69", ] [[package]] -name = "sc-network" -version = "0.45.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-xcm" +version = "17.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "989676964dbda5f5275650fbdcd3894fe7fac626d113abf89d572b4952adcc36" dependencies = [ - "array-bytes", - "async-channel", - "async-trait", - "asynchronous-codec", - "bytes", - "cid 0.9.0", - "either", - "fnv", - "futures", - "futures-timer", - "ip_network", - "libp2p", - "linked_hash_set", - "litep2p", + "bounded-collections", + "frame-benchmarking", + "frame-support", + "frame-system", "log", - "mockall 0.11.4", - "once_cell", + "pallet-balances", "parity-scale-codec", - "parking_lot 0.12.3", - "partial_sort", - "pin-project", - "prost 0.12.6", - "prost-build 0.12.6", - "rand", - "sc-client-api", - "sc-network-common", - "sc-network-types", - "sc-utils", - "schnellru", + "scale-info", "serde", - "serde_json", - "smallvec", - "sp-arithmetic", - "sp-blockchain", "sp-core", + "sp-io", "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror 1.0.69", - "tokio", - "tokio-stream", - "unsigned-varint 0.7.2", - "void", - "wasm-timer", - "zeroize", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "tracing", + "xcm-runtime-apis", ] [[package]] -name = "sc-network-common" -version = "0.44.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-xcm-benchmarks" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2da423463933b42f4a4c74175f9e9295a439de26719579b894ce533926665e4a" dependencies = [ - "async-trait", - "bitflags 1.3.2", - "futures", - "libp2p-identity", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", "parity-scale-codec", - "prost-build 0.12.6", - "sc-consensus", - "sc-network-types", - "sp-consensus", - "sp-consensus-grandpa", + "scale-info", + "sp-io", "sp-runtime", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", ] [[package]] -name = "sc-network-gossip" -version = "0.45.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-xcm-bridge-hub" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f336403f9e9bf22a0e1fdb90aa5093c52599c9a0639591fbcc1e979b58862d1b" dependencies = [ - "ahash", - "futures", - "futures-timer", + "bp-messages", + "bp-runtime", + "bp-xcm-bridge-hub", + "frame-support", + "frame-system", "log", - "sc-network", - "sc-network-common", - "sc-network-sync", - "sc-network-types", - "schnellru", + "pallet-bridge-messages", + "parity-scale-codec", + "scale-info", + "sp-core", "sp-runtime", - "substrate-prometheus-endpoint", - "tracing", + "sp-std", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", ] [[package]] -name = "sc-network-light" -version = "0.44.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "pallet-xcm-bridge-hub-router" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabf1fdcf451ac79995f11cb9b6a0761924c57bb79442c2d91b3bbefe4dfa081" dependencies = [ - "array-bytes", - "async-channel", - "futures", + "bp-xcm-bridge-hub-router", + "frame-benchmarking", + "frame-support", + "frame-system", "log", "parity-scale-codec", - "prost 0.12.6", - "prost-build 0.12.6", - "sc-client-api", - "sc-network", - "sc-network-types", - "sp-blockchain", + "scale-info", "sp-core", "sp-runtime", - "thiserror 1.0.69", + "sp-std", + "staging-xcm", + "staging-xcm-builder", ] [[package]] -name = "sc-network-sync" -version = "0.44.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "parachains-common" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9460a69f409be27c62161d8b4d36ffc32735d09a4f9097f9c789db0cca7196c" dependencies = [ - "array-bytes", - "async-channel", - "async-trait", - "fork-tree", - "futures", - "futures-timer", - "libp2p", + "cumulus-primitives-core", + "cumulus-primitives-utility", + "frame-support", + "frame-system", "log", - "mockall 0.11.4", + "pallet-asset-tx-payment", + "pallet-assets", + "pallet-authorship", + "pallet-balances", + "pallet-collator-selection", + "pallet-message-queue", + "pallet-xcm", "parity-scale-codec", - "prost 0.12.6", - "prost-build 0.12.6", - "sc-client-api", - "sc-consensus", - "sc-network", - "sc-network-common", - "sc-network-types", - "sc-utils", - "schnellru", - "smallvec", - "sp-arithmetic", - "sp-blockchain", - "sp-consensus", - "sp-consensus-grandpa", + "polkadot-primitives 16.0.0", + "scale-info", + "sp-consensus-aura", "sp-core", + "sp-io", "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror 1.0.69", - "tokio", - "tokio-stream", + "staging-parachain-info", + "staging-xcm", + "staging-xcm-executor", + "substrate-wasm-builder", ] [[package]] -name = "sc-network-transactions" -version = "0.44.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "parachains-runtimes-test-utils" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287d2db0a2d19466caa579a69f021bfdc6fa352f382c8395dade58d1d0c6adfe" dependencies = [ - "array-bytes", - "futures", - "log", + "cumulus-pallet-parachain-system", + "cumulus-pallet-xcmp-queue", + "cumulus-primitives-core", + "cumulus-primitives-parachain-inherent", + "cumulus-test-relay-sproof-builder", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-collator-selection", + "pallet-session", + "pallet-timestamp", + "pallet-xcm", "parity-scale-codec", - "sc-network", - "sc-network-common", - "sc-network-sync", - "sc-network-types", - "sc-utils", - "sp-consensus", + "polkadot-parachain-primitives", + "sp-consensus-aura", + "sp-core", + "sp-io", "sp-runtime", - "substrate-prometheus-endpoint", + "sp-tracing", + "staging-parachain-info", + "staging-xcm", + "staging-xcm-executor", + "substrate-wasm-builder", ] [[package]] -name = "sc-network-types" -version = "0.12.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "parachains-runtimes-test-utils" +version = "19.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d37c6a0fe791b244282e445c7ae2534217b05781a7e47ef9e391860cf3412210" dependencies = [ - "bs58 0.5.1", - "ed25519-dalek", - "libp2p-identity", - "litep2p", - "log", - "multiaddr 0.18.2", - "multihash 0.19.3", + "cumulus-pallet-parachain-system", + "cumulus-pallet-xcmp-queue", + "cumulus-primitives-core", + "cumulus-primitives-parachain-inherent", + "cumulus-test-relay-sproof-builder", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-collator-selection", + "pallet-session", + "pallet-timestamp", + "pallet-xcm", + "parachains-common", + "parity-scale-codec", + "polkadot-parachain-primitives", + "sp-consensus-aura", + "sp-core", + "sp-io", + "sp-runtime", + "sp-tracing", + "staging-parachain-info", + "staging-xcm", + "staging-xcm-executor", + "substrate-wasm-builder", + "xcm-runtime-apis", +] + +[[package]] +name = "parity-bip39" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" +dependencies = [ + "bitcoin_hashes", "rand", - "thiserror 1.0.69", - "zeroize", + "rand_core", + "serde", + "unicode-normalization", ] [[package]] -name = "sc-offchain" -version = "40.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "parity-bytes" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b56e3a2420138bdb970f84dfb9c774aea80fa0e7371549eedec0d80c209c67" + +[[package]] +name = "parity-db" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "592a28a24b09c9dc20ac8afaa6839abc417c720afe42c12e1e4a9d6aa2508d2e" dependencies = [ - "array-bytes", - "bytes", - "fnv", - "futures", - "futures-timer", - "hyper 0.14.32", - "hyper-rustls", + "blake2 0.10.6", + "crc32fast", + "fs2", + "hex", + "libc", "log", - "num_cpus", - "once_cell", - "parity-scale-codec", + "lz4", + "memmap2 0.5.10", "parking_lot 0.12.3", "rand", - "sc-client-api", - "sc-network", - "sc-network-common", - "sc-network-types", - "sc-transaction-pool-api", - "sc-utils", - "sp-api", - "sp-core", - "sp-externalities", - "sp-keystore", - "sp-offchain", - "sp-runtime", - "threadpool", - "tracing", + "siphasher", + "snap", + "winapi", ] [[package]] -name = "sc-proposer-metrics" -version = "0.18.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "parity-scale-codec" +version = "3.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9fde3d0718baf5bc92f577d652001da0f8d54cd03a7974e118d04fc888dc23d" dependencies = [ - "log", - "substrate-prometheus-endpoint", + "arrayvec 0.7.6", + "bitvec", + "byte-slice-cast", + "bytes 1.10.0", + "const_format", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "rustversion", + "serde", ] [[package]] -name = "sc-rpc" -version = "40.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "parity-scale-codec-derive" +version = "3.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581c837bb6b9541ce7faa9377c20616e4fb7650f6b0f68bc93c827ee504fb7b3" dependencies = [ - "futures", - "jsonrpsee", - "log", - "parity-scale-codec", - "parking_lot 0.12.3", - "sc-block-builder", - "sc-chain-spec", - "sc-client-api", - "sc-mixnet", - "sc-rpc-api", - "sc-tracing", - "sc-transaction-pool-api", - "sc-utils", - "serde_json", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-keystore", - "sp-offchain", - "sp-rpc", - "sp-runtime", - "sp-session", - "sp-statement-store", - "sp-version", - "tokio", + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] -name = "sc-rpc-api" -version = "0.44.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "parity-util-mem" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d32c34f4f5ca7f9196001c0aba5a1f9a5a12382c8944b8b0f90233282d1e8f8" dependencies = [ - "jsonrpsee", - "parity-scale-codec", - "sc-chain-spec", - "sc-mixnet", - "sc-transaction-pool-api", - "scale-info", - "serde", - "serde_json", - "sp-core", - "sp-rpc", - "sp-runtime", - "sp-version", - "thiserror 1.0.69", + "cfg-if", + "ethereum-types", + "hashbrown 0.12.3", + "impl-trait-for-tuples", + "lru 0.8.1", + "parity-util-mem-derive", + "parking_lot 0.12.3", + "primitive-types", + "smallvec", + "winapi", ] [[package]] -name = "sc-rpc-server" -version = "17.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "parity-util-mem-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f557c32c6d268a07c921471619c0295f5efad3a0e76d4f97a05c091a51d110b2" dependencies = [ - "dyn-clone", - "forwarded-header-value", - "futures", - "governor", - "http 1.2.0", - "http-body-util", - "hyper 1.5.2", - "ip_network", - "jsonrpsee", - "log", - "sc-rpc-api", - "serde", - "serde_json", - "substrate-prometheus-endpoint", - "tokio", - "tower", - "tower-http", + "proc-macro2", + "syn 1.0.109", + "synstructure 0.12.6", ] [[package]] -name = "sc-rpc-spec-v2" +name = "parity-wasm" version = "0.45.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ - "array-bytes", - "futures", - "futures-util", - "hex", - "jsonrpsee", - "log", - "parity-scale-codec", - "parking_lot 0.12.3", - "rand", - "sc-chain-spec", - "sc-client-api", - "sc-rpc", - "sc-transaction-pool-api", - "sc-utils", - "schnellru", - "serde", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-rpc", - "sp-runtime", - "sp-version", - "thiserror 1.0.69", - "tokio", - "tokio-stream", + "instant", + "lock_api", + "parking_lot_core 0.8.6", ] [[package]] -name = "sc-service" -version = "0.46.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ - "async-trait", - "directories", - "exit-future", - "futures", - "futures-timer", + "lock_api", + "parking_lot_core 0.9.10", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.8", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "partial_sort" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7924d1d0ad836f665c9065e26d016c673ece3993f30d340068b16f282afc1156" + +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core", + "subtle 2.6.1", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest 0.10.7", + "password-hash", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" +dependencies = [ + "memchr", + "thiserror 2.0.11", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "pest_meta" +version = "2.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea" +dependencies = [ + "once_cell", + "pest", + "sha2 0.10.8", +] + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap 2.7.1", +] + +[[package]] +name = "pin-project" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "pin-project-lite" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand 2.3.0", + "futures-io", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + +[[package]] +name = "polkadot-approval-distribution" +version = "18.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cbdb30b1d98d691a7ce51aeae7c3c955daa6efb1ba3eb7bdd90dc56830e098c" +dependencies = [ + "bitvec", + "futures 0.3.31", + "futures-timer", + "itertools 0.11.0", + "polkadot-node-jaeger", + "polkadot-node-metrics", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives 16.0.0", + "rand", + "tracing-gum", +] + +[[package]] +name = "polkadot-availability-bitfield-distribution" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db7a5b8334ab6863759e53d19ba06fbc4e9dee3b13e8acec7df27003790b5592" +dependencies = [ + "always-assert", + "futures 0.3.31", + "futures-timer", + "polkadot-node-network-protocol", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives 16.0.0", + "rand", + "tracing-gum", +] + +[[package]] +name = "polkadot-availability-distribution" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29356a544f192801d5557b4afd6da7af9381c7c664ec72c964dc3a4ae5d8d3d3" +dependencies = [ + "derive_more 0.99.19", + "fatality", + "futures 0.3.31", + "parity-scale-codec", + "polkadot-erasure-coding", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives 16.0.0", + "rand", + "sc-network", + "schnellru", + "sp-core", + "sp-keystore", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-availability-recovery" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abde3abc21e1613f412f65a284a161ec1789a417a438deaa35680f1208e4958a" +dependencies = [ + "async-trait", + "fatality", + "futures 0.3.31", + "parity-scale-codec", + "polkadot-erasure-coding", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives 16.0.0", + "rand", + "sc-network", + "schnellru", + "thiserror 1.0.69", + "tokio 1.43.0", + "tracing-gum", +] + +[[package]] +name = "polkadot-ckb-merkle-mountain-range" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4b44320e5f7ce2c18227537a3032ae5b2c476a7e8eddba45333e1011fc31b92" +dependencies = [ + "cfg-if", + "itertools 0.10.5", +] + +[[package]] +name = "polkadot-cli" +version = "19.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dceee236f55425731b9e2a50c3562010d4f2f3edb8bd1246197df58ef5e87ba" +dependencies = [ + "cfg-if", + "clap", + "frame-benchmarking-cli", + "futures 0.3.31", + "log", + "polkadot-node-metrics", + "polkadot-node-primitives", + "polkadot-service", + "sc-cli", + "sc-executor", + "sc-service", + "sc-storage-monitor", + "sc-sysinfo", + "sc-tracing", + "sp-core", + "sp-io", + "sp-keyring", + "sp-maybe-compressed-blob", + "sp-runtime", + "substrate-build-script-utils", + "thiserror 1.0.69", +] + +[[package]] +name = "polkadot-collator-protocol" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aefc0cfe00804ff29a0104322bb63c3502f118e4e97589b549be7e27207aa53" +dependencies = [ + "bitvec", + "fatality", + "futures 0.3.31", + "futures-timer", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives 16.0.0", + "schnellru", + "sp-core", + "sp-keystore", + "sp-runtime", + "thiserror 1.0.69", + "tokio-util", + "tracing-gum", +] + +[[package]] +name = "polkadot-core-primitives" +version = "15.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2900d3b857e34c480101618a950c3a4fbcddc8c0d50573d48553376185908b8" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "polkadot-dispute-distribution" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f41576c30b80391c0a6200165e1e494475e4fdc970d8485f5a041ccc8d83658" +dependencies = [ + "derive_more 0.99.19", + "fatality", + "futures 0.3.31", + "futures-timer", + "indexmap 2.7.1", + "parity-scale-codec", + "polkadot-erasure-coding", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives 16.0.0", + "sc-network", + "schnellru", + "sp-application-crypto", + "sp-keystore", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-erasure-coding" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f22a4783d8d45f989144a2676b59bf5b88fc813e17a8d72013a679acc6a60c0c" +dependencies = [ + "parity-scale-codec", + "polkadot-node-primitives", + "polkadot-primitives 16.0.0", + "reed-solomon-novelpoly", + "sp-core", + "sp-trie", + "thiserror 1.0.69", +] + +[[package]] +name = "polkadot-gossip-support" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a80abff1a5f549369be61acb1ab289d9de38295edfcc83e19a4432e85165e4b" +dependencies = [ + "futures 0.3.31", + "futures-timer", + "polkadot-node-network-protocol", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives 16.0.0", + "rand", + "rand_chacha", + "sc-network", + "sc-network-common", + "sp-application-crypto", + "sp-core", + "sp-crypto-hashing", + "sp-keystore", + "tracing-gum", +] + +[[package]] +name = "polkadot-network-bridge" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "081b6cfb14f9d44c0175963564cae452674b42a0912ad0fe40e0b5dd512a8d2c" +dependencies = [ + "always-assert", + "async-trait", + "bytes 1.10.0", + "fatality", + "futures 0.3.31", + "parity-scale-codec", + "parking_lot 0.12.3", + "polkadot-node-metrics", + "polkadot-node-network-protocol", + "polkadot-node-subsystem", + "polkadot-overseer", + "polkadot-primitives 16.0.0", + "sc-network", + "sp-consensus", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-collation-generation" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e867cd7c5bf585fab4a079114a643b584b2c38de64a863316b9f7378715f9fdb" +dependencies = [ + "futures 0.3.31", + "parity-scale-codec", + "polkadot-erasure-coding", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives 16.0.0", + "sp-core", + "sp-maybe-compressed-blob", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-approval-voting" +version = "18.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6befa336bd2df0401270af97cb2c0f2327f431c69139c4c5acafdf688cc66b4f" +dependencies = [ + "bitvec", + "derive_more 0.99.19", + "futures 0.3.31", + "futures-timer", + "itertools 0.11.0", + "kvdb", + "merlin", + "parity-scale-codec", + "polkadot-node-jaeger", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-overseer", + "polkadot-primitives 16.0.0", + "rand", + "rand_chacha", + "rand_core", + "sc-keystore", + "schnellru", + "schnorrkel 0.11.4", + "sp-application-crypto", + "sp-consensus", + "sp-consensus-slots", + "sp-runtime", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-av-store" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e95fde8aebd8b4d821a0dd1442a4e31be254a089846c775b4cbab24c9afe2d33" +dependencies = [ + "bitvec", + "futures 0.3.31", + "futures-timer", + "kvdb", + "parity-scale-codec", + "polkadot-erasure-coding", + "polkadot-node-jaeger", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-overseer", + "polkadot-primitives 16.0.0", + "sp-consensus", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-backing" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db222783464ebea4c176144ce25ae08789a0f73c73305ae72d7446abd8b6c6be" +dependencies = [ + "bitvec", + "fatality", + "futures 0.3.31", + "polkadot-erasure-coding", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives 16.0.0", + "polkadot-statement-table", + "schnellru", + "sp-keystore", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-bitfield-signing" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5b448ec9f15191877d464d85b7be920e1e3931e737d7fb3b21b1fb9a812656" +dependencies = [ + "futures 0.3.31", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives 16.0.0", + "sp-keystore", + "thiserror 1.0.69", + "tracing-gum", + "wasm-timer", +] + +[[package]] +name = "polkadot-node-core-candidate-validation" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11af75adabcbf763d0ffe08661e11310367ba62d9607ba9aa54f8f3c853c2149" +dependencies = [ + "async-trait", + "futures 0.3.31", + "futures-timer", + "parity-scale-codec", + "polkadot-node-core-pvf", + "polkadot-node-metrics", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-overseer", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "sp-application-crypto", + "sp-keystore", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-chain-api" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d5339db671c286bca959bf4a1c3b9c53635cee33d1f1a09fc546c77a2ec85db" +dependencies = [ + "futures 0.3.31", + "polkadot-node-metrics", + "polkadot-node-subsystem", + "polkadot-node-subsystem-types", + "sc-client-api", + "sc-consensus-babe", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-chain-selection" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab33715dfd6d01f1c816253cc4affe707ff4bcb0efd562eeebea64f50443f92f" +dependencies = [ + "futures 0.3.31", + "futures-timer", + "kvdb", + "parity-scale-codec", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives 16.0.0", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-dispute-coordinator" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2861f5eb6c1c40408e1af6e743d791a8602a46da5eb4f0a7082aed57f6bece25" +dependencies = [ + "fatality", + "futures 0.3.31", + "kvdb", + "parity-scale-codec", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives 16.0.0", + "sc-keystore", + "schnellru", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-parachains-inherent" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c644d5e4f6b2f1dbde76a259a768d81c0808f2234441460a7eb48c7858a54447" +dependencies = [ + "async-trait", + "futures 0.3.31", + "futures-timer", + "polkadot-node-subsystem", + "polkadot-overseer", + "polkadot-primitives 16.0.0", + "sp-blockchain", + "sp-inherents", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-prospective-parachains" +version = "17.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f9dc0302646ad511e4386845f5d5eb1297037a046d141d950f4d382ec324c55" +dependencies = [ + "fatality", + "futures 0.3.31", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives 16.0.0", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-provisioner" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90c14bcb0bbac0f5b7fa0c653db305512a13e8ed0333a0c777caa3b2d60aee00" +dependencies = [ + "bitvec", + "fatality", + "futures 0.3.31", + "futures-timer", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives 16.0.0", + "schnellru", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-pvf" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb2044064baabdad1989724ee3a815e3346c4dcc71ead52bcaea4bbbc3ba022e" +dependencies = [ + "always-assert", + "array-bytes", + "blake3", + "cfg-if", + "futures 0.3.31", + "futures-timer", + "parity-scale-codec", + "pin-project", + "polkadot-core-primitives", + "polkadot-node-core-pvf-common", + "polkadot-node-metrics", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "rand", + "slotmap", + "sp-core", + "tempfile", + "thiserror 1.0.69", + "tokio 1.43.0", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-pvf-checker" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ef3fda7bde415f157ed3b2ab9a17ff7950dde8207e06091fac52ef0815d0f75" +dependencies = [ + "futures 0.3.31", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-overseer", + "polkadot-primitives 16.0.0", + "sp-keystore", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-pvf-common" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0f1e2538d34762b935913278817be923cd0142ba31830cdb9d7a57208ee51e5" +dependencies = [ + "cpu-time", + "futures 0.3.31", + "landlock", + "libc", + "nix 0.28.0", + "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "sc-executor", + "sc-executor-common", + "sc-executor-wasmtime", + "seccompiler", + "sp-core", + "sp-crypto-hashing", + "sp-externalities", + "sp-io", + "sp-tracing", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-runtime-api" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a51bbce66c3537de89f2a72e710415a0ef626eea2faf727cdc5aade46901d1cd" +dependencies = [ + "futures 0.3.31", + "polkadot-node-metrics", + "polkadot-node-subsystem", + "polkadot-node-subsystem-types", + "polkadot-primitives 16.0.0", + "schnellru", + "sp-consensus-babe", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-jaeger" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aec0858f5c7c56b0be14617dcf59cc677af974867f830dbed56856038db0573d" +dependencies = [ + "lazy_static", + "log", + "mick-jaeger", + "parity-scale-codec", + "parking_lot 0.12.3", + "polkadot-node-primitives", + "polkadot-primitives 16.0.0", + "sc-network", + "sc-network-types", + "sp-core", + "thiserror 1.0.69", + "tokio 1.43.0", +] + +[[package]] +name = "polkadot-node-metrics" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8e6b06460d46a50e047bff26053814cd1a229e2777ca195a3c170c94c33d01d" +dependencies = [ + "bs58 0.5.1", + "futures 0.3.31", + "futures-timer", + "log", + "parity-scale-codec", + "polkadot-primitives 16.0.0", + "prioritized-metered-channel", + "sc-cli", + "sc-service", + "sc-tracing", + "substrate-prometheus-endpoint", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-network-protocol" +version = "18.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbe99038f17af97de479c3bfd199a6b85c059cc871571288c0636de8073e9c0d" +dependencies = [ + "async-channel 1.9.0", + "async-trait", + "bitvec", + "derive_more 0.99.19", + "fatality", + "futures 0.3.31", + "hex", + "parity-scale-codec", + "polkadot-node-jaeger", + "polkadot-node-primitives", + "polkadot-primitives 16.0.0", + "rand", + "sc-authority-discovery", + "sc-network", + "sc-network-types", + "sp-runtime", + "strum 0.26.3", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-primitives" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7715edbb050a88a84714e4a33b9a10352dadb3f24766f0d76426428fbf00408e" +dependencies = [ + "bitvec", + "bounded-vec", + "futures 0.3.31", + "futures-timer", + "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "sc-keystore", + "schnorrkel 0.11.4", + "serde", + "sp-application-crypto", + "sp-consensus-babe", + "sp-consensus-slots", + "sp-core", + "sp-keystore", + "sp-maybe-compressed-blob", + "sp-runtime", + "thiserror 1.0.69", + "zstd 0.12.4", +] + +[[package]] +name = "polkadot-node-subsystem" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6782181161740053d5515fe1157390bd897d206c0df5e1bcdd0307ff1a21017c" +dependencies = [ + "polkadot-node-jaeger", + "polkadot-node-subsystem-types", + "polkadot-overseer", +] + +[[package]] +name = "polkadot-node-subsystem-types" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "278215f74d7135ebca5323af3aeb8c78bbb1b093903210bf711a86a0393a7c8e" +dependencies = [ + "async-trait", + "bitvec", + "derive_more 0.99.19", + "fatality", + "futures 0.3.31", + "orchestra", + "polkadot-node-jaeger", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-primitives 16.0.0", + "polkadot-statement-table", + "sc-client-api", + "sc-network", + "sc-network-types", + "sc-transaction-pool-api", + "smallvec", + "sp-api", + "sp-authority-discovery", + "sp-blockchain", + "sp-consensus-babe", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", +] + +[[package]] +name = "polkadot-node-subsystem-util" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f89411ad9434968bfb563d87c734b76128c52497b3c180f56c938bbc10bed265" +dependencies = [ + "async-trait", + "derive_more 0.99.19", + "fatality", + "futures 0.3.31", + "futures-channel", + "itertools 0.11.0", + "kvdb", + "parity-db", + "parity-scale-codec", + "parking_lot 0.12.3", + "pin-project", + "polkadot-erasure-coding", + "polkadot-node-jaeger", + "polkadot-node-metrics", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-types", + "polkadot-overseer", + "polkadot-primitives 16.0.0", + "prioritized-metered-channel", + "rand", + "sc-client-api", + "schnellru", + "sp-application-crypto", + "sp-core", + "sp-keystore", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-overseer" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f113021bb4bff684f3b42fe2358a83fc6931024b36ac7e919af19512318bea1" +dependencies = [ + "async-trait", + "futures 0.3.31", + "futures-timer", + "orchestra", + "parking_lot 0.12.3", + "polkadot-node-metrics", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem-types", + "polkadot-primitives 16.0.0", + "sc-client-api", + "sp-api", + "sp-core", + "tikv-jemalloc-ctl", + "tracing-gum", +] + +[[package]] +name = "polkadot-parachain-lib" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e04d4d64337b3f5470857521eb87dd809a4cb515877f67b426c66d6d3b53b0e7" +dependencies = [ + "async-trait", + "clap", + "color-print", + "cumulus-client-cli", + "cumulus-client-collator", + "cumulus-client-consensus-aura", + "cumulus-client-consensus-common", + "cumulus-client-consensus-proposer", + "cumulus-client-consensus-relay-chain", + "cumulus-client-parachain-inherent", + "cumulus-client-service", + "cumulus-primitives-aura", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "docify", + "frame-benchmarking", + "frame-benchmarking-cli", + "frame-support", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "futures 0.3.31", + "jsonrpsee", + "log", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc", + "pallet-transaction-payment-rpc-runtime-api", + "parachains-common", + "parity-scale-codec", + "polkadot-cli", + "polkadot-primitives 16.0.0", + "sc-basic-authorship", + "sc-chain-spec", + "sc-cli", + "sc-client-api", + "sc-client-db", + "sc-consensus", + "sc-executor", + "sc-network", + "sc-rpc", + "sc-service", + "sc-sysinfo", + "sc-telemetry", + "sc-tracing", + "sc-transaction-pool", + "serde", + "serde_json", + "sp-api", + "sp-block-builder", + "sp-consensus-aura", + "sp-core", + "sp-genesis-builder", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "sp-session", + "sp-timestamp", + "sp-transaction-pool", + "sp-version", + "sp-weights", + "substrate-frame-rpc-system", + "substrate-prometheus-endpoint", + "substrate-state-trie-migration-rpc", +] + +[[package]] +name = "polkadot-parachain-primitives" +version = "14.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52b5648a2e8ce1f9a0f8c41c38def670cefd91932cd793468e1a5b0b0b4e4af1" +dependencies = [ + "bounded-collections", + "derive_more 0.99.19", + "parity-scale-codec", + "polkadot-core-primitives", + "scale-info", + "serde", + "sp-core", + "sp-runtime", + "sp-weights", +] + +[[package]] +name = "polkadot-primitives" +version = "15.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b57bc055fa389372ec5fc0001b99aeffd50f3fd379280ce572d935189bb58dd8" +dependencies = [ + "bitvec", + "hex-literal 0.4.1", + "log", + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-parachain-primitives", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-authority-discovery", + "sp-consensus-slots", + "sp-core", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-staking 34.0.0", +] + +[[package]] +name = "polkadot-primitives" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bb20b75d33212150242d39890d7ededab55f1084160c337f15d0eb8ca8c3ad4" +dependencies = [ + "bitvec", + "hex-literal 0.4.1", + "log", + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-parachain-primitives", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-authority-discovery", + "sp-consensus-slots", + "sp-core", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-staking 36.0.0", +] + +[[package]] +name = "polkadot-rpc" +version = "19.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59f9c2afc4e401e76e3438514bdf2a22137ce908ad413ebaca9c8c3db4de0d70" +dependencies = [ + "jsonrpsee", + "mmr-rpc", + "pallet-transaction-payment-rpc", + "polkadot-primitives 16.0.0", + "sc-chain-spec", + "sc-client-api", + "sc-consensus-babe", + "sc-consensus-babe-rpc", + "sc-consensus-beefy", + "sc-consensus-beefy-rpc", + "sc-consensus-epochs", + "sc-consensus-grandpa", + "sc-consensus-grandpa-rpc", + "sc-rpc", + "sc-rpc-spec-v2", + "sc-sync-state-rpc", + "sc-transaction-pool-api", + "sp-api", + "sp-application-crypto", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-consensus-beefy", + "sp-keystore", + "sp-runtime", + "substrate-frame-rpc-system", + "substrate-state-trie-migration-rpc", +] + +[[package]] +name = "polkadot-runtime-common" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc15154ba5ca55d323fcf7af0f5dcd39d58dcb4dfac3d9b30404840a6d8bbde4" +dependencies = [ + "bitvec", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "libsecp256k1", + "log", + "pallet-asset-rate", + "pallet-authorship", + "pallet-babe", + "pallet-balances", + "pallet-broker", + "pallet-election-provider-multi-phase", + "pallet-fast-unstake", + "pallet-identity", + "pallet-session", + "pallet-staking", + "pallet-staking-reward-fn", + "pallet-timestamp", + "pallet-transaction-payment", + "pallet-treasury", + "pallet-vesting", + "parity-scale-codec", + "polkadot-primitives 16.0.0", + "polkadot-runtime-parachains", + "rustc-hex", + "scale-info", + "serde", + "serde_derive", + "slot-range-helper", + "sp-api", + "sp-core", + "sp-inherents", + "sp-io", + "sp-npos-elections", + "sp-runtime", + "sp-session", + "sp-staking 36.0.0", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "static_assertions", +] + +[[package]] +name = "polkadot-runtime-metrics" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c306f1ace7644a24de860479f92cf8d6467393bb0c9b0777c57e2d42c9d452a" +dependencies = [ + "bs58 0.5.1", + "frame-benchmarking", + "parity-scale-codec", + "polkadot-primitives 16.0.0", + "sp-tracing", +] + +[[package]] +name = "polkadot-runtime-parachains" +version = "17.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d4cdf181c2419b35c2cbde813da2d8ee777b69b4a6fa346b962d144e3521976" +dependencies = [ + "bitflags 1.3.2", + "bitvec", + "derive_more 0.99.19", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-authority-discovery", + "pallet-authorship", + "pallet-babe", + "pallet-balances", + "pallet-broker", + "pallet-message-queue", + "pallet-mmr", + "pallet-session", + "pallet-staking", + "pallet-timestamp", + "pallet-vesting", + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "polkadot-runtime-metrics", + "rand", + "rand_chacha", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-core", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-session", + "sp-staking 36.0.0", + "sp-std", + "staging-xcm", + "staging-xcm-executor", + "static_assertions", +] + +[[package]] +name = "polkadot-sdk" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb819108697967452fa6d8d96ab4c0d48cbaa423b3156499dcb24f1cf95d6775" +dependencies = [ + "asset-test-utils 18.0.0", + "assets-common", + "binary-merkle-tree", + "bp-header-chain", + "bp-messages", + "bp-parachains", + "bp-polkadot", + "bp-polkadot-core", + "bp-relayers", + "bp-runtime", + "bp-test-utils", + "bp-xcm-bridge-hub", + "bp-xcm-bridge-hub-router", + "bridge-hub-common", + "bridge-hub-test-utils 0.18.0", + "bridge-runtime-common", + "cumulus-pallet-aura-ext", + "cumulus-pallet-dmp-queue", + "cumulus-pallet-parachain-system", + "cumulus-pallet-parachain-system-proc-macro", + "cumulus-pallet-session-benchmarking", + "cumulus-pallet-solo-to-para", + "cumulus-pallet-xcm", + "cumulus-pallet-xcmp-queue", + "cumulus-ping", + "cumulus-primitives-aura", + "cumulus-primitives-core", + "cumulus-primitives-parachain-inherent", + "cumulus-primitives-proof-size-hostfunction", + "cumulus-primitives-storage-weight-reclaim", + "cumulus-primitives-timestamp", + "cumulus-primitives-utility", + "cumulus-test-relay-sproof-builder", + "frame-benchmarking", + "frame-benchmarking-cli", + "frame-benchmarking-pallet-pov", + "frame-election-provider-support", + "frame-executive", + "frame-metadata-hash-extension", + "frame-support", + "frame-support-procedural", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "pallet-alliance", + "pallet-asset-conversion", + "pallet-asset-conversion-ops", + "pallet-asset-conversion-tx-payment", + "pallet-asset-rate", + "pallet-asset-tx-payment", + "pallet-assets", + "pallet-assets-freezer", + "pallet-atomic-swap", + "pallet-aura", + "pallet-authority-discovery", + "pallet-authorship", + "pallet-babe", + "pallet-bags-list", + "pallet-balances", + "pallet-beefy", + "pallet-beefy-mmr", + "pallet-bounties", + "pallet-bridge-grandpa", + "pallet-bridge-messages", + "pallet-bridge-parachains", + "pallet-bridge-relayers", + "pallet-broker", + "pallet-child-bounties", + "pallet-collator-selection", + "pallet-collective", + "pallet-collective-content", + "pallet-contracts", + "pallet-contracts-mock-network", + "pallet-conviction-voting", + "pallet-core-fellowship", + "pallet-delegated-staking", + "pallet-democracy", + "pallet-dev-mode", + "pallet-election-provider-multi-phase", + "pallet-election-provider-support-benchmarking", + "pallet-elections-phragmen", + "pallet-fast-unstake", + "pallet-glutton", + "pallet-grandpa", + "pallet-identity", + "pallet-im-online", + "pallet-indices", + "pallet-insecure-randomness-collective-flip", + "pallet-lottery", + "pallet-membership", + "pallet-message-queue", + "pallet-migrations", + "pallet-mixnet", + "pallet-mmr", + "pallet-multisig", + "pallet-nft-fractionalization", + "pallet-nfts", + "pallet-nfts-runtime-api", + "pallet-nis", + "pallet-node-authorization", + "pallet-nomination-pools", + "pallet-nomination-pools-benchmarking", + "pallet-nomination-pools-runtime-api", + "pallet-offences", + "pallet-offences-benchmarking", + "pallet-paged-list", + "pallet-parameters", + "pallet-preimage", + "pallet-proxy", + "pallet-ranked-collective", + "pallet-recovery", + "pallet-referenda", + "pallet-remark", + "pallet-revive", + "pallet-revive-fixtures", + "pallet-revive-mock-network", + "pallet-root-offences", + "pallet-root-testing", + "pallet-safe-mode", + "pallet-salary", + "pallet-scheduler", + "pallet-scored-pool", + "pallet-session", + "pallet-session-benchmarking", + "pallet-skip-feeless-payment", + "pallet-society", + "pallet-staking", + "pallet-staking-reward-fn", + "pallet-staking-runtime-api", + "pallet-state-trie-migration", + "pallet-statement", + "pallet-sudo", + "pallet-timestamp", + "pallet-tips", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "pallet-transaction-storage", + "pallet-treasury", + "pallet-tx-pause", + "pallet-uniques", + "pallet-utility", + "pallet-vesting", + "pallet-whitelist", + "pallet-xcm", + "pallet-xcm-benchmarks", + "pallet-xcm-bridge-hub", + "pallet-xcm-bridge-hub-router", + "parachains-common", + "parachains-runtimes-test-utils 17.0.0", + "polkadot-cli", + "polkadot-core-primitives", + "polkadot-node-metrics", + "polkadot-parachain-lib", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "polkadot-runtime-common", + "polkadot-runtime-metrics", + "polkadot-runtime-parachains", + "polkadot-sdk-frame", + "polkadot-service", + "sc-client-api", + "sc-client-db", + "sc-executor", + "sc-rpc", + "sc-service", + "slot-range-helper", + "snowbridge-beacon-primitives", + "snowbridge-core", + "snowbridge-ethereum", + "snowbridge-outbound-queue-merkle-tree", + "snowbridge-outbound-queue-runtime-api", + "snowbridge-pallet-ethereum-client", + "snowbridge-pallet-ethereum-client-fixtures", + "snowbridge-pallet-inbound-queue", + "snowbridge-pallet-inbound-queue-fixtures", + "snowbridge-pallet-outbound-queue", + "snowbridge-pallet-system", + "snowbridge-router-primitives", + "snowbridge-runtime-common", + "snowbridge-runtime-test-common 0.10.0", + "snowbridge-system-runtime-api", + "sp-api", + "sp-api-proc-macro", + "sp-application-crypto", + "sp-arithmetic", + "sp-authority-discovery", + "sp-block-builder", + "sp-blockchain", + "sp-consensus-aura", + "sp-consensus-babe", + "sp-consensus-beefy", + "sp-consensus-grandpa", + "sp-consensus-pow", + "sp-consensus-slots", + "sp-core", + "sp-core-hashing", + "sp-crypto-ec-utils", + "sp-crypto-hashing", + "sp-debug-derive", + "sp-externalities", + "sp-genesis-builder", + "sp-inherents", + "sp-io", + "sp-keyring", + "sp-keystore", + "sp-metadata-ir", + "sp-mixnet", + "sp-mmr-primitives", + "sp-npos-elections", + "sp-offchain", + "sp-runtime", + "sp-runtime-interface", + "sp-session", + "sp-staking 36.0.0", + "sp-state-machine", + "sp-statement-store", + "sp-std", + "sp-storage", + "sp-timestamp", + "sp-tracing", + "sp-transaction-pool", + "sp-transaction-storage-proof", + "sp-trie", + "sp-version", + "sp-wasm-interface", + "sp-weights", + "staging-node-inspect", + "staging-parachain-info", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "substrate-bip39", + "testnet-parachains-constants", + "xcm-runtime-apis", +] + +[[package]] +name = "polkadot-sdk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c074731c33587245be64bc13bbc31399ab8fbdc79241c225726bc42264fdf9" +dependencies = [ + "asset-test-utils 20.0.0", + "assets-common", + "binary-merkle-tree", + "bp-header-chain", + "bp-messages", + "bp-parachains", + "bp-polkadot", + "bp-polkadot-core", + "bp-relayers", + "bp-runtime", + "bp-test-utils", + "bp-xcm-bridge-hub", + "bp-xcm-bridge-hub-router", + "bridge-hub-common", + "bridge-hub-test-utils 0.20.0", + "bridge-runtime-common", + "cumulus-pallet-aura-ext", + "cumulus-pallet-dmp-queue", + "cumulus-pallet-parachain-system", + "cumulus-pallet-parachain-system-proc-macro", + "cumulus-pallet-session-benchmarking", + "cumulus-pallet-solo-to-para", + "cumulus-pallet-xcm", + "cumulus-pallet-xcmp-queue", + "cumulus-ping", + "cumulus-primitives-aura", + "cumulus-primitives-core", + "cumulus-primitives-parachain-inherent", + "cumulus-primitives-proof-size-hostfunction", + "cumulus-primitives-storage-weight-reclaim", + "cumulus-primitives-timestamp", + "cumulus-primitives-utility", + "cumulus-test-relay-sproof-builder", + "frame-benchmarking", + "frame-benchmarking-pallet-pov", + "frame-election-provider-support", + "frame-executive", + "frame-metadata-hash-extension", + "frame-support", + "frame-support-procedural", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "pallet-alliance", + "pallet-asset-conversion", + "pallet-asset-conversion-ops", + "pallet-asset-conversion-tx-payment", + "pallet-asset-rate", + "pallet-asset-tx-payment", + "pallet-assets", + "pallet-assets-freezer", + "pallet-atomic-swap", + "pallet-aura", + "pallet-authority-discovery", + "pallet-authorship", + "pallet-babe", + "pallet-bags-list", + "pallet-balances", + "pallet-beefy", + "pallet-beefy-mmr", + "pallet-bounties", + "pallet-bridge-grandpa", + "pallet-bridge-messages", + "pallet-bridge-parachains", + "pallet-bridge-relayers", + "pallet-broker", + "pallet-child-bounties", + "pallet-collator-selection", + "pallet-collective", + "pallet-collective-content", + "pallet-contracts", + "pallet-contracts-mock-network", + "pallet-conviction-voting", + "pallet-core-fellowship", + "pallet-delegated-staking", + "pallet-democracy", + "pallet-dev-mode", + "pallet-election-provider-multi-phase", + "pallet-election-provider-support-benchmarking", + "pallet-elections-phragmen", + "pallet-fast-unstake", + "pallet-glutton", + "pallet-grandpa", + "pallet-identity", + "pallet-im-online", + "pallet-indices", + "pallet-insecure-randomness-collective-flip", + "pallet-lottery", + "pallet-membership", + "pallet-message-queue", + "pallet-migrations", + "pallet-mixnet", + "pallet-mmr", + "pallet-multisig", + "pallet-nft-fractionalization", + "pallet-nfts", + "pallet-nfts-runtime-api", + "pallet-nis", + "pallet-node-authorization", + "pallet-nomination-pools", + "pallet-nomination-pools-benchmarking", + "pallet-nomination-pools-runtime-api", + "pallet-offences", + "pallet-offences-benchmarking", + "pallet-paged-list", + "pallet-parameters", + "pallet-preimage", + "pallet-proxy", + "pallet-ranked-collective", + "pallet-recovery", + "pallet-referenda", + "pallet-remark", + "pallet-revive", + "pallet-revive-fixtures", + "pallet-revive-mock-network", + "pallet-root-offences", + "pallet-root-testing", + "pallet-safe-mode", + "pallet-salary", + "pallet-scheduler", + "pallet-scored-pool", + "pallet-session", + "pallet-session-benchmarking", + "pallet-skip-feeless-payment", + "pallet-society", + "pallet-staking", + "pallet-staking-reward-fn", + "pallet-staking-runtime-api", + "pallet-state-trie-migration", + "pallet-statement", + "pallet-sudo", + "pallet-timestamp", + "pallet-tips", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "pallet-transaction-storage", + "pallet-treasury", + "pallet-tx-pause", + "pallet-uniques", + "pallet-utility", + "pallet-vesting", + "pallet-whitelist", + "pallet-xcm", + "pallet-xcm-benchmarks", + "pallet-xcm-bridge-hub", + "pallet-xcm-bridge-hub-router", + "parachains-common", + "parachains-runtimes-test-utils 19.0.0", + "polkadot-cli", + "polkadot-core-primitives", + "polkadot-parachain-lib", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "polkadot-runtime-common", + "polkadot-runtime-metrics", + "polkadot-runtime-parachains", + "polkadot-sdk-frame", + "polkadot-service", + "sc-executor", + "slot-range-helper", + "snowbridge-beacon-primitives", + "snowbridge-core", + "snowbridge-ethereum", + "snowbridge-outbound-queue-merkle-tree", + "snowbridge-outbound-queue-runtime-api", + "snowbridge-pallet-ethereum-client", + "snowbridge-pallet-ethereum-client-fixtures", + "snowbridge-pallet-inbound-queue", + "snowbridge-pallet-inbound-queue-fixtures", + "snowbridge-pallet-outbound-queue", + "snowbridge-pallet-system", + "snowbridge-router-primitives", + "snowbridge-runtime-common", + "snowbridge-runtime-test-common 0.12.0", + "snowbridge-system-runtime-api", + "sp-api", + "sp-api-proc-macro", + "sp-application-crypto", + "sp-arithmetic", + "sp-authority-discovery", + "sp-block-builder", + "sp-consensus-aura", + "sp-consensus-babe", + "sp-consensus-beefy", + "sp-consensus-grandpa", + "sp-consensus-pow", + "sp-consensus-slots", + "sp-core", + "sp-core-hashing", + "sp-crypto-ec-utils", + "sp-crypto-hashing", + "sp-debug-derive", + "sp-externalities", + "sp-genesis-builder", + "sp-inherents", + "sp-io", + "sp-keyring", + "sp-keystore", + "sp-metadata-ir", + "sp-mixnet", + "sp-mmr-primitives", + "sp-npos-elections", + "sp-offchain", + "sp-runtime", + "sp-runtime-interface", + "sp-session", + "sp-staking 36.0.0", + "sp-state-machine", + "sp-statement-store", + "sp-std", + "sp-storage", + "sp-timestamp", + "sp-tracing", + "sp-transaction-pool", + "sp-transaction-storage-proof", + "sp-trie", + "sp-version", + "sp-wasm-interface", + "sp-weights", + "staging-parachain-info", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "substrate-bip39", + "testnet-parachains-constants", + "xcm-runtime-apis", +] + +[[package]] +name = "polkadot-sdk-frame" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbdeb15ce08142082461afe1a62c15f7ce10a731d91b203ad6a8dc8d2e4a6a54" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-executive", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "log", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-arithmetic", + "sp-block-builder", + "sp-consensus-aura", + "sp-consensus-grandpa", + "sp-core", + "sp-inherents", + "sp-io", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-storage", + "sp-transaction-pool", + "sp-version", +] + +[[package]] +name = "polkadot-service" +version = "19.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3338467fb48aa540b67400c1eb3e92a34a718948c2ba6ea4b28d16146a7922e8" +dependencies = [ + "async-trait", + "frame-benchmarking", + "frame-benchmarking-cli", + "frame-system", + "frame-system-rpc-runtime-api", + "futures 0.3.31", + "is_executable", + "kvdb", + "kvdb-rocksdb", + "log", + "mmr-gadget", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "parity-db", + "parity-scale-codec", + "parking_lot 0.12.3", + "polkadot-approval-distribution", + "polkadot-availability-bitfield-distribution", + "polkadot-availability-distribution", + "polkadot-availability-recovery", + "polkadot-collator-protocol", + "polkadot-core-primitives", + "polkadot-dispute-distribution", + "polkadot-gossip-support", + "polkadot-network-bridge", + "polkadot-node-collation-generation", + "polkadot-node-core-approval-voting", + "polkadot-node-core-av-store", + "polkadot-node-core-backing", + "polkadot-node-core-bitfield-signing", + "polkadot-node-core-candidate-validation", + "polkadot-node-core-chain-api", + "polkadot-node-core-chain-selection", + "polkadot-node-core-dispute-coordinator", + "polkadot-node-core-parachains-inherent", + "polkadot-node-core-prospective-parachains", + "polkadot-node-core-provisioner", + "polkadot-node-core-pvf", + "polkadot-node-core-pvf-checker", + "polkadot-node-core-runtime-api", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-types", + "polkadot-node-subsystem-util", + "polkadot-overseer", + "polkadot-primitives 16.0.0", + "polkadot-rpc", + "polkadot-runtime-parachains", + "polkadot-statement-distribution", + "rococo-runtime", + "sc-authority-discovery", + "sc-basic-authorship", + "sc-chain-spec", + "sc-client-api", + "sc-consensus", + "sc-consensus-babe", + "sc-consensus-beefy", + "sc-consensus-grandpa", + "sc-consensus-slots", + "sc-executor", + "sc-keystore", + "sc-network", + "sc-network-sync", + "sc-offchain", + "sc-service", + "sc-sync-state-rpc", + "sc-sysinfo", + "sc-telemetry", + "sc-transaction-pool", + "sc-transaction-pool-api", + "serde", + "serde_json", + "sp-api", + "sp-authority-discovery", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-consensus-beefy", + "sp-consensus-grandpa", + "sp-core", + "sp-genesis-builder", + "sp-inherents", + "sp-io", + "sp-keyring", + "sp-mmr-primitives", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-timestamp", + "sp-transaction-pool", + "sp-version", + "sp-weights", + "staging-xcm", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", + "tracing-gum", + "westend-runtime", + "xcm-runtime-apis", +] + +[[package]] +name = "polkadot-statement-distribution" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb84e7572afc4593517abd589d3066e931afd49dbd79cf2c5881d3733ece09dc" +dependencies = [ + "arrayvec 0.7.6", + "bitvec", + "fatality", + "futures 0.3.31", + "futures-timer", + "indexmap 2.7.1", + "parity-scale-codec", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives 16.0.0", + "sp-keystore", + "sp-staking 36.0.0", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-statement-table" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e99cde42e40c9488e2037097bf0a0fcf2fcb5b6e17348cd5327ead49da7580d" +dependencies = [ + "parity-scale-codec", + "polkadot-primitives 16.0.0", + "sp-core", + "tracing-gum", +] + +[[package]] +name = "polkavm" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a3693e5efdb2bf74e449cd25fd777a28bd7ed87e41f5d5da75eb31b4de48b94" +dependencies = [ + "libc", + "log", + "polkavm-assembler 0.9.0", + "polkavm-common 0.9.0", + "polkavm-linux-raw 0.9.0", +] + +[[package]] +name = "polkavm" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7ec0c5935f2eff23cfc4653002f4f8d12b37f87a720e0631282d188c32089d6" +dependencies = [ + "libc", + "log", + "polkavm-assembler 0.10.0", + "polkavm-common 0.10.0", + "polkavm-linux-raw 0.10.0", +] + +[[package]] +name = "polkavm-assembler" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa96d6d868243acc12de813dd48e756cbadcc8e13964c70d272753266deadc1" +dependencies = [ + "log", +] + +[[package]] +name = "polkavm-assembler" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8e4fd5a43100bf1afe9727b8130d01f966f5cfc9144d5604b21e795c2bcd80e" +dependencies = [ + "log", +] + +[[package]] +name = "polkavm-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d9428a5cfcc85c5d7b9fc4b6a18c4b802d0173d768182a51cc7751640f08b92" +dependencies = [ + "log", +] + +[[package]] +name = "polkavm-common" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0097b48bc0bedf9f3f537ce8f37e8f1202d8d83f9b621bdb21ff2c59b9097c50" +dependencies = [ + "log", + "polkavm-assembler 0.10.0", +] + +[[package]] +name = "polkavm-derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae8c4bea6f3e11cd89bb18bcdddac10bd9a24015399bd1c485ad68a985a19606" +dependencies = [ + "polkavm-derive-impl-macro 0.9.0", +] + +[[package]] +name = "polkavm-derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dcc701385c08c31bdb0569f0c51a290c580d892fa77f1dd88a7352a62679ecf" +dependencies = [ + "polkavm-derive-impl-macro 0.10.0", +] + +[[package]] +name = "polkavm-derive-impl" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c4fdfc49717fb9a196e74a5d28e0bc764eb394a2c803eb11133a31ac996c60c" +dependencies = [ + "polkavm-common 0.9.0", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "polkavm-derive-impl" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7855353a5a783dd5d09e3b915474bddf66575f5a3cf45dec8d1c5e051ba320dc" +dependencies = [ + "polkavm-common 0.10.0", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "polkavm-derive-impl-macro" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ba81f7b5faac81e528eb6158a6f3c9e0bb1008e0ffa19653bc8dea925ecb429" +dependencies = [ + "polkavm-derive-impl 0.9.0", + "syn 2.0.98", +] + +[[package]] +name = "polkavm-derive-impl-macro" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9324fe036de37c17829af233b46ef6b5562d4a0c09bb7fdb9f8378856dee30cf" +dependencies = [ + "polkavm-derive-impl 0.10.0", + "syn 2.0.98", +] + +[[package]] +name = "polkavm-linker" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c7be503e60cf56c0eb785f90aaba4b583b36bff00e93997d93fef97f9553c39" +dependencies = [ + "gimli 0.28.1", + "hashbrown 0.14.5", + "log", + "object 0.32.2", + "polkavm-common 0.9.0", + "regalloc2 0.9.3", + "rustc-demangle", +] + +[[package]] +name = "polkavm-linker" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d704edfe7bdcc876784f19436d53d515b65eb07bc9a0fae77085d552c2dbbb5" +dependencies = [ + "gimli 0.28.1", + "hashbrown 0.14.5", + "log", + "object 0.36.7", + "polkavm-common 0.10.0", + "regalloc2 0.9.3", + "rustc-demangle", +] + +[[package]] +name = "polkavm-linux-raw" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26e85d3456948e650dff0cfc85603915847faf893ed1e66b020bb82ef4557120" + +[[package]] +name = "polkavm-linux-raw" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26e45fa59c7e1bb12ef5289080601e9ec9b31435f6e32800a5c90c132453d126" + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite 0.2.16", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite 0.2.16", + "rustix 0.38.44", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug 0.3.1", + "universal-hash", +] + +[[package]] +name = "polyval" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug 0.3.1", + "universal-hash", +] + +[[package]] +name = "portable-atomic" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "predicates" +version = "2.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" +dependencies = [ + "difflib", + "float-cmp", + "itertools 0.10.5", + "normalize-line-endings", + "predicates-core", + "regex", +] + +[[package]] +name = "predicates" +version = "3.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" +dependencies = [ + "anstyle", + "predicates-core", +] + +[[package]] +name = "predicates-core" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" + +[[package]] +name = "predicates-tree" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" +dependencies = [ + "predicates-core", + "termtree", +] + +[[package]] +name = "prettyplease" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +dependencies = [ + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "prettyplease" +version = "0.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" +dependencies = [ + "proc-macro2", + "syn 2.0.98", +] + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", + "uint", +] + +[[package]] +name = "prioritized-metered-channel" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a172e6cc603231f2cf004232eabcecccc0da53ba576ab286ef7baa0cfc7927ad" +dependencies = [ + "coarsetime", + "crossbeam-queue", + "derive_more 0.99.19", + "futures 0.3.31", + "futures-timer", + "nanorand", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "proc-macro-crate" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +dependencies = [ + "toml 0.5.11", +] + +[[package]] +name = "proc-macro-crate" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +dependencies = [ + "thiserror 1.0.69", + "toml 0.5.11", +] + +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-warning" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1eaa7fa0aa1929ffdf7eeb6eac234dde6268914a14ad44d23521ab6a9b258e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "proc-macro-warning" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "834da187cfe638ae8abb0203f0b33e5ccdb02a28e7199f2f47b3e2754f50edca" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "proc-macro2" +version = "1.0.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prometheus" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot 0.12.3", + "thiserror 1.0.69", +] + +[[package]] +name = "prometheus-client" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c99afa9a01501019ac3a14d71d9f94050346f55ca471ce90c799a15c58f61e2" +dependencies = [ + "dtoa", + "itoa", + "parking_lot 0.12.3", + "prometheus-client-derive-encode", +] + +[[package]] +name = "prometheus-client-derive-encode" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "proptest" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags 2.8.0", + "lazy_static", + "num-traits", + "rand", + "rand_chacha", + "rand_xorshift", + "regex-syntax 0.8.5", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "prost" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +dependencies = [ + "bytes 1.10.0", + "prost-derive 0.11.9", +] + +[[package]] +name = "prost" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" +dependencies = [ + "bytes 1.10.0", + "prost-derive 0.12.6", +] + +[[package]] +name = "prost" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c0fef6c4230e4ccf618a35c59d7ede15dea37de8427500f50aff708806e42ec" +dependencies = [ + "bytes 1.10.0", + "prost-derive 0.13.4", +] + +[[package]] +name = "prost-build" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" +dependencies = [ + "bytes 1.10.0", + "heck 0.4.1", + "itertools 0.10.5", + "lazy_static", + "log", + "multimap 0.8.3", + "petgraph", + "prettyplease 0.1.25", + "prost 0.11.9", + "prost-types 0.11.9", + "regex", + "syn 1.0.109", + "tempfile", + "which", +] + +[[package]] +name = "prost-build" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" +dependencies = [ + "bytes 1.10.0", + "heck 0.5.0", + "itertools 0.12.1", + "log", + "multimap 0.10.0", + "once_cell", + "petgraph", + "prettyplease 0.2.29", + "prost 0.12.6", + "prost-types 0.12.6", + "regex", + "syn 2.0.98", + "tempfile", +] + +[[package]] +name = "prost-build" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0f3e5beed80eb580c68e2c600937ac2c4eedabdfd5ef1e5b7ea4f3fba84497b" +dependencies = [ + "heck 0.5.0", + "itertools 0.13.0", + "log", + "multimap 0.10.0", + "once_cell", + "petgraph", + "prettyplease 0.2.29", + "prost 0.13.4", + "prost-types 0.13.4", + "regex", + "syn 2.0.98", + "tempfile", +] + +[[package]] +name = "prost-derive" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +dependencies = [ + "anyhow", + "itertools 0.10.5", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prost-derive" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" +dependencies = [ + "anyhow", + "itertools 0.12.1", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "prost-derive" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "157c5a9d7ea5c2ed2d9fb8f495b64759f7816c7eaea54ba3978f0d63000162e3" +dependencies = [ + "anyhow", + "itertools 0.13.0", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "prost-types" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost 0.11.9", +] + +[[package]] +name = "prost-types" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" +dependencies = [ + "prost 0.12.6", +] + +[[package]] +name = "prost-types" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2f1e56baa61e93533aebc21af4d2134b70f66275e0fcdf3cbe43d77ff7e8fc" +dependencies = [ + "prost 0.13.4", +] + +[[package]] +name = "psm" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" +dependencies = [ + "cc", +] + +[[package]] +name = "quanta" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bd1fe6824cea6538803de3ff1bc0cf3949024db3d43c9643024bfb33a807c0e" +dependencies = [ + "crossbeam-utils", + "libc", + "once_cell", + "raw-cpuid", + "wasi 0.11.0+wasi-snapshot-preview1", + "web-sys", + "winapi", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quick-protobuf" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +dependencies = [ + "byteorder", +] + +[[package]] +name = "quick-protobuf-codec" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ededb1cd78531627244d51dd0c7139fbe736c7d57af0092a76f0ffb2f56e98" +dependencies = [ + "asynchronous-codec", + "bytes 1.10.0", + "quick-protobuf", + "thiserror 1.0.69", + "unsigned-varint 0.7.2", +] + +[[package]] +name = "quinn" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e8b432585672228923edbbf64b8b12c14e1112f62e88737655b4a083dbcd78e" +dependencies = [ + "bytes 1.10.0", + "pin-project-lite 0.2.16", + "quinn-proto 0.9.6", + "quinn-udp 0.3.2", + "rustc-hash 1.1.0", + "rustls 0.20.9", + "thiserror 1.0.69", + "tokio 1.43.0", + "tracing", + "webpki", +] + +[[package]] +name = "quinn" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cc2c5017e4b43d5995dcea317bc46c1e09404c0a9664d2908f7f02dfe943d75" +dependencies = [ + "bytes 1.10.0", + "futures-io", + "pin-project-lite 0.2.16", + "quinn-proto 0.10.6", + "quinn-udp 0.4.1", + "rustc-hash 1.1.0", + "rustls 0.21.12", + "thiserror 1.0.69", + "tokio 1.43.0", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94b0b33c13a79f669c85defaf4c275dc86a0c0372807d0ca3d78e0bb87274863" +dependencies = [ + "bytes 1.10.0", + "rand", + "ring 0.16.20", + "rustc-hash 1.1.0", + "rustls 0.20.9", + "slab", + "thiserror 1.0.69", + "tinyvec", + "tracing", + "webpki", +] + +[[package]] +name = "quinn-proto" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "141bf7dfde2fbc246bfd3fe12f2455aa24b0fbd9af535d8c86c7bd1381ff2b1a" +dependencies = [ + "bytes 1.10.0", + "rand", + "ring 0.16.20", + "rustc-hash 1.1.0", + "rustls 0.21.12", + "slab", + "thiserror 1.0.69", + "tinyvec", + "tracing", +] + +[[package]] +name = "quinn-udp" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "641538578b21f5e5c8ea733b736895576d0fe329bb883b937db6f4d163dbaaf4" +dependencies = [ + "libc", + "quinn-proto 0.9.6", + "socket2 0.4.10", + "tracing", + "windows-sys 0.42.0", +] + +[[package]] +name = "quinn-udp" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7" +dependencies = [ + "bytes 1.10.0", + "libc", + "socket2 0.5.8", + "tracing", + "windows-sys 0.48.0", +] + +[[package]] +name = "quote" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "rand_pcg" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core", +] + +[[package]] +name = "raw-cpuid" +version = "11.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6928fa44c097620b706542d428957635951bade7143269085389d42c8a4927e" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "rcgen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" +dependencies = [ + "pem", + "ring 0.16.20", + "time", + "yasna", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "reed-solomon-novelpoly" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87413ebb313323d431e85d0afc5a68222aaed972843537cbfe5f061cf1b4bcab" +dependencies = [ + "derive_more 0.99.19", + "fs-err", + "static_init", + "thiserror 1.0.69", +] + +[[package]] +name = "ref-cast" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "regalloc2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80535183cae11b149d618fbd3c37e38d7cda589d82d7769e196ca9a9042d7621" +dependencies = [ + "fxhash", + "log", + "slice-group-by", + "smallvec", +] + +[[package]] +name = "regalloc2" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad156d539c879b7a24a363a2016d77961786e71f48f2e2fc8302a92abd2429a6" +dependencies = [ + "hashbrown 0.13.2", + "log", + "rustc-hash 1.1.0", + "slice-group-by", + "smallvec", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "resolv-conf" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +dependencies = [ + "hostname", + "quick-error", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac 0.12.1", + "subtle 2.6.1", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted 0.7.1", + "web-sys", + "winapi", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes 1.10.0", + "rustc-hex", +] + +[[package]] +name = "rocksdb" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffe" +dependencies = [ + "libc", + "librocksdb-sys", +] + +[[package]] +name = "rococo-runtime" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "750d322f91eff5d00fde4e8bc6bf78b2d6e7d539931493ca2adf7c6c5e926374" +dependencies = [ + "binary-merkle-tree", + "bitvec", + "frame-benchmarking", + "frame-executive", + "frame-metadata-hash-extension", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "hex-literal 0.4.1", + "log", + "pallet-asset-rate", + "pallet-authority-discovery", + "pallet-authorship", + "pallet-babe", + "pallet-balances", + "pallet-beefy", + "pallet-beefy-mmr", + "pallet-bounties", + "pallet-child-bounties", + "pallet-collective", + "pallet-conviction-voting", + "pallet-democracy", + "pallet-elections-phragmen", + "pallet-grandpa", + "pallet-identity", + "pallet-indices", + "pallet-membership", + "pallet-message-queue", + "pallet-mmr", + "pallet-multisig", + "pallet-nis", + "pallet-offences", + "pallet-parameters", + "pallet-preimage", + "pallet-proxy", + "pallet-ranked-collective", + "pallet-recovery", + "pallet-referenda", + "pallet-root-testing", + "pallet-scheduler", + "pallet-session", + "pallet-society", + "pallet-staking", + "pallet-state-trie-migration", + "pallet-sudo", + "pallet-timestamp", + "pallet-tips", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "pallet-treasury", + "pallet-utility", + "pallet-vesting", + "pallet-whitelist", + "pallet-xcm", + "pallet-xcm-benchmarks", + "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "polkadot-runtime-common", + "polkadot-runtime-parachains", + "rococo-runtime-constants", + "scale-info", + "serde", + "serde_derive", + "serde_json", + "smallvec", + "sp-api", + "sp-arithmetic", + "sp-authority-discovery", + "sp-block-builder", + "sp-consensus-babe", + "sp-consensus-beefy", + "sp-consensus-grandpa", + "sp-core", + "sp-genesis-builder", + "sp-inherents", + "sp-io", + "sp-mmr-primitives", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-staking 36.0.0", + "sp-storage", + "sp-transaction-pool", + "sp-version", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "static_assertions", + "substrate-wasm-builder", + "xcm-runtime-apis", +] + +[[package]] +name = "rococo-runtime-constants" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1ec6683a2e52fe3be2eaf942a80619abd99eb36e973c5ab4489a2f3b100db5c" +dependencies = [ + "frame-support", + "polkadot-primitives 16.0.0", + "polkadot-runtime-common", + "smallvec", + "sp-core", + "sp-runtime", + "sp-weights", + "staging-xcm", + "staging-xcm-builder", +] + +[[package]] +name = "route-recognizer" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" + +[[package]] +name = "rpassword" +version = "7.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f" +dependencies = [ + "libc", + "rtoolbox", + "windows-sys 0.48.0", +] + +[[package]] +name = "rtnetlink" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a552eb82d19f38c3beed3f786bd23aa434ceb9ac43ab44419ca6d67a7e186c0" +dependencies = [ + "futures 0.3.31", + "log", + "netlink-packet-core", + "netlink-packet-route", + "netlink-packet-utils", + "netlink-proto", + "netlink-sys", + "nix 0.26.4", + "thiserror 1.0.69", + "tokio 1.43.0", +] + +[[package]] +name = "rtoolbox" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ruint" +version = "1.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5ef8fb1dd8de3870cb8400d51b4c2023854bbafd5431a3ac7e7317243e22d2f" +dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "bytes 1.10.0", + "fastrlp 0.3.1", + "fastrlp 0.4.0", + "num-bigint", + "num-integer", + "num-traits", + "parity-scale-codec", + "primitive-types", + "proptest", + "rand", + "rlp", + "ruint-macro", + "serde", + "valuable", + "zeroize", +] + +[[package]] +name = "ruint-macro" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.25", +] + +[[package]] +name = "rusticata-macros" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +dependencies = [ + "nom", +] + +[[package]] +name = "rustix" +version = "0.36.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "305efbd14fde4139eb501df5f136994bb520b033fa9fbdce287507dc23b8c7ed" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.1.4", + "windows-sys 0.45.0", +] + +[[package]] +name = "rustix" +version = "0.37.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "519165d378b97752ca44bbe15047d5d3409e875f39327546b42ac81d7e18c1b6" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags 2.8.0", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustls" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" +dependencies = [ + "ring 0.16.20", + "sct", + "webpki", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-webpki 0.101.7", + "sct", +] + +[[package]] +name = "rustls" +version = "0.23.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" +dependencies = [ + "log", + "once_cell", + "ring 0.17.8", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile 1.0.4", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.2.0", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" + +[[package]] +name = "rustls-platform-verifier" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afbb878bdfdf63a336a5e63561b1835e7a8c91524f51621db870169eac84b490" +dependencies = [ + "core-foundation", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls 0.23.22", + "rustls-native-certs 0.7.3", + "rustls-platform-verifier-android", + "rustls-webpki 0.102.8", + "security-framework", + "security-framework-sys", + "webpki-roots 0.26.8", + "winapi", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring 0.17.8", + "rustls-pki-types", + "untrusted 0.9.0", +] + +[[package]] +name = "rustversion" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" + +[[package]] +name = "rusty-fork" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + +[[package]] +name = "ruzstd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3ffab8f9715a0d455df4bbb9d21e91135aab3cd3ca187af0cd0c3c3f868fdc" +dependencies = [ + "byteorder", + "thiserror-core", + "twox-hash", +] + +[[package]] +name = "rw-stream-sink" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8c9026ff5d2f23da5e45bbc283f156383001bfb09c4e44256d02c1a685fe9a1" +dependencies = [ + "futures 0.3.31", + "pin-project", + "static_assertions", +] + +[[package]] +name = "ryu" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" + +[[package]] +name = "safe-mix" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d3d055a2582e6b00ed7a31c1524040aa391092bf636328350813f3a0605215c" +dependencies = [ + "rustc_version 0.2.3", +] + +[[package]] +name = "safe_arch" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "sc-allocator" +version = "29.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b975ee3a95eaacb611e7b415737a7fa2db4d8ad7b880cc1b97371b04e95c7903" +dependencies = [ + "log", + "sp-core", + "sp-wasm-interface", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-authority-discovery" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9ec2b6674cab85a74b607f9941b18e327edc4b2b00248d9ac8e2ca6d985569b" +dependencies = [ + "async-trait", + "futures 0.3.31", + "futures-timer", + "ip_network", + "libp2p", + "linked_hash_set", + "log", + "multihash 0.19.3", + "parity-scale-codec", + "prost 0.12.6", + "prost-build 0.12.6", + "rand", + "sc-client-api", + "sc-network", + "sc-network-types", + "sp-api", + "sp-authority-discovery", + "sp-blockchain", + "sp-core", + "sp-keystore", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-basic-authorship" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d3f4152eda19b140abc876a3b7434fce27c4c8cd47eff4095af0398d82f8141" +dependencies = [ + "futures 0.3.31", + "futures-timer", + "log", + "parity-scale-codec", + "sc-block-builder", + "sc-proposer-metrics", + "sc-telemetry", + "sc-transaction-pool-api", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-inherents", + "sp-runtime", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-block-builder" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f666f8ff11f96bf6d90676739eb7ccb6a156a4507634b7af83b94f0aa8195a50" +dependencies = [ + "parity-scale-codec", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-trie", +] + +[[package]] +name = "sc-chain-spec" +version = "38.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3534c5dc910e6c9e0f25871948e7bb683852d1aef44b8b7753062feef4235e7c" +dependencies = [ + "array-bytes", + "docify", + "log", + "memmap2 0.9.5", + "parity-scale-codec", + "sc-chain-spec-derive", + "sc-client-api", + "sc-executor", + "sc-network", + "sc-telemetry", + "serde", + "serde_json", + "sp-blockchain", + "sp-core", + "sp-crypto-hashing", + "sp-genesis-builder", + "sp-io", + "sp-runtime", + "sp-state-machine", + "sp-tracing", +] + +[[package]] +name = "sc-chain-spec-derive" +version = "12.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b18cef11d2c69703e0d7c3528202ef4ed1cd2b47a6f063e9e17cad8255b1fa94" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "sc-cli" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55a161ee7bf9d571c567f208b89ef4f2fd3c082180a54399403f7fdc44e94da5" +dependencies = [ + "array-bytes", + "chrono", + "clap", + "fdlimit", + "futures 0.3.31", + "itertools 0.11.0", + "libp2p-identity", + "log", + "names", + "parity-bip39", + "parity-scale-codec", + "rand", + "regex", + "rpassword", + "sc-client-api", + "sc-client-db", + "sc-keystore", + "sc-mixnet", + "sc-network", + "sc-service", + "sc-telemetry", + "sc-tracing", + "sc-utils", + "serde", + "serde_json", + "sp-blockchain", + "sp-core", + "sp-keyring", + "sp-keystore", + "sp-panic-handler", + "sp-runtime", + "sp-version", + "thiserror 1.0.69", + "tokio 1.43.0", +] + +[[package]] +name = "sc-client-api" +version = "37.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e73f1673cdfe658c4be6ffd5113b71c0de74616717e604455dcfd29e15781729" +dependencies = [ + "fnv", + "futures 0.3.31", + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "sc-executor", + "sc-transaction-pool-api", + "sc-utils", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-database", + "sp-externalities", + "sp-runtime", + "sp-state-machine", + "sp-statement-store", + "sp-storage", + "sp-trie", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-client-db" +version = "0.44.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5517718f03357325c6f51a780710fac652f125316f3577d1a25a7fbdc1816db2" +dependencies = [ + "hash-db", + "kvdb", + "kvdb-memorydb", + "kvdb-rocksdb", + "linked-hash-map", + "log", + "parity-db", + "parity-scale-codec", + "parking_lot 0.12.3", + "sc-client-api", + "sc-state-db", + "schnellru", + "sp-arithmetic", + "sp-blockchain", + "sp-core", + "sp-database", + "sp-runtime", + "sp-state-machine", + "sp-trie", +] + +[[package]] +name = "sc-consensus" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f64e538ab9edefbf0ddc105ff5b088344c88bc86f21650a2d2020be04a957730" +dependencies = [ + "async-trait", + "futures 0.3.31", + "log", + "mockall 0.11.4", + "parking_lot 0.12.3", + "sc-client-api", + "sc-network-types", + "sc-utils", + "serde", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-runtime", + "sp-state-machine", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-consensus-aura" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "067552bcf461c0089272b2575b2ac512fd8ca7a7bd7098aee49ccc4d67041787" +dependencies = [ + "async-trait", + "futures 0.3.31", + "log", + "parity-scale-codec", + "sc-block-builder", + "sc-client-api", + "sc-consensus", + "sc-consensus-slots", + "sc-telemetry", + "sp-api", + "sp-application-crypto", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-aura", + "sp-consensus-slots", + "sp-core", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-consensus-babe" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39a6aecbb63f5e046c83055d656cf9f203715b38e000ae0df157461582c90eba" +dependencies = [ + "async-trait", + "fork-tree", + "futures 0.3.31", + "log", + "num-bigint", + "num-rational", + "num-traits", + "parity-scale-codec", + "parking_lot 0.12.3", + "sc-client-api", + "sc-consensus", + "sc-consensus-epochs", + "sc-consensus-slots", + "sc-telemetry", + "sc-transaction-pool-api", + "sp-api", + "sp-application-crypto", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-consensus-slots", + "sp-core", + "sp-crypto-hashing", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-consensus-babe-rpc" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78556a2fc64c45518eab6f059ad379da808431fe351475df216e2bc66ac7af65" +dependencies = [ + "futures 0.3.31", + "jsonrpsee", + "sc-consensus-babe", + "sc-consensus-epochs", + "sc-rpc-api", + "serde", + "sp-api", + "sp-application-crypto", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-core", + "sp-keystore", + "sp-runtime", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-consensus-beefy" +version = "24.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8c82fe3a1afe90115a6c3c724f462fdc86962144a1eda73334894ff11a43a52" +dependencies = [ + "array-bytes", + "async-channel 1.9.0", + "async-trait", + "fnv", + "futures 0.3.31", + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "sc-client-api", + "sc-consensus", + "sc-network", + "sc-network-gossip", + "sc-network-sync", + "sc-network-types", + "sc-utils", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-consensus-beefy", + "sp-core", + "sp-crypto-hashing", + "sp-keystore", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", + "tokio 1.43.0", + "wasm-timer", +] + +[[package]] +name = "sc-consensus-beefy-rpc" +version = "24.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8edff310519f0be6ff5fac5a6643ea323fb3658ee3b1f36668940c72cdd6da30" +dependencies = [ + "futures 0.3.31", + "jsonrpsee", + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "sc-consensus-beefy", + "sc-rpc", + "serde", + "sp-application-crypto", + "sp-consensus-beefy", + "sp-core", + "sp-runtime", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-consensus-epochs" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3634e8f5dfc397e0d3fc8e3a714c21338eacb3ed276089a6df47e7aa926d51d4" +dependencies = [ + "fork-tree", + "parity-scale-codec", + "sc-client-api", + "sc-consensus", + "sp-blockchain", + "sp-runtime", +] + +[[package]] +name = "sc-consensus-grandpa" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3aaab70cf6f93ceea829ef0a4980ce95d84d5c7f4b5419b29bbed17fa04e1a6" +dependencies = [ + "ahash 0.8.11", + "array-bytes", + "async-trait", + "dyn-clone", + "finality-grandpa", + "fork-tree", + "futures 0.3.31", + "futures-timer", + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "rand", + "sc-block-builder", + "sc-chain-spec", + "sc-client-api", + "sc-consensus", + "sc-network", + "sc-network-common", + "sc-network-gossip", + "sc-network-sync", + "sc-network-types", + "sc-telemetry", + "sc-transaction-pool-api", + "sc-utils", + "serde_json", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-consensus-grandpa", + "sp-core", + "sp-crypto-hashing", + "sp-keystore", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-consensus-grandpa-rpc" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe70de1362284b9a3f2bffea380222347a252dee098c4dfccdb2c7a1a9061f91" +dependencies = [ + "finality-grandpa", + "futures 0.3.31", + "jsonrpsee", + "log", + "parity-scale-codec", + "sc-client-api", + "sc-consensus-grandpa", + "sc-rpc", + "serde", + "sp-blockchain", + "sp-core", + "sp-runtime", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-consensus-slots" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30fcce6ff513c2479c57eac880ba8d4254c146b678a0072d90f81796d47091df" +dependencies = [ + "async-trait", + "futures 0.3.31", + "futures-timer", + "log", + "parity-scale-codec", + "sc-client-api", + "sc-consensus", + "sc-telemetry", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-consensus-slots", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", +] + +[[package]] +name = "sc-executor" +version = "0.40.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f0cc0a3728fd033589183460c5a49b2e7545d09dc89a098216ef9e9aadcd9dc" +dependencies = [ + "parity-scale-codec", + "parking_lot 0.12.3", + "sc-executor-common", + "sc-executor-polkavm", + "sc-executor-wasmtime", + "schnellru", + "sp-api", + "sp-core", + "sp-externalities", + "sp-io", + "sp-panic-handler", + "sp-runtime-interface", + "sp-trie", + "sp-version", + "sp-wasm-interface", + "tracing", +] + +[[package]] +name = "sc-executor-common" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3b703a33dcb7cddf19176fdf12294b9a6408125836b0f4afee3e6969e7f190" +dependencies = [ + "polkavm 0.9.3", + "sc-allocator", + "sp-maybe-compressed-blob", + "sp-wasm-interface", + "thiserror 1.0.69", + "wasm-instrument", +] + +[[package]] +name = "sc-executor-polkavm" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26fe58d9cacfab73e5595fa84b80f7bd03efebe54a0574daaeb221a1d1f7ab80" +dependencies = [ + "log", + "polkavm 0.9.3", + "sc-executor-common", + "sp-wasm-interface", +] + +[[package]] +name = "sc-executor-wasmtime" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cd498f2f77ec1f861c30804f5bfd796d4afcc8ce44ea1f11bfbe2847551d161" +dependencies = [ + "anyhow", + "cfg-if", + "libc", + "log", + "parking_lot 0.12.3", + "rustix 0.36.17", + "sc-allocator", + "sc-executor-common", + "sp-runtime-interface", + "sp-wasm-interface", + "wasmtime", +] + +[[package]] +name = "sc-informant" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c24f636bccd2df534d75b75bd61d96d8abb68a5fe6f6c427e9faee7d7a07a96" +dependencies = [ + "console", + "futures 0.3.31", + "futures-timer", + "log", + "sc-client-api", + "sc-network", + "sc-network-common", + "sc-network-sync", + "sp-blockchain", + "sp-runtime", +] + +[[package]] +name = "sc-keystore" +version = "33.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebd4b5b5713006117641c049cb082e8a439dd6ac5e7b171e5cef5ce1c9f8af8" +dependencies = [ + "array-bytes", + "parking_lot 0.12.3", + "serde_json", + "sp-application-crypto", + "sp-core", + "sp-keystore", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-mixnet" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "781a1ffd953074e060a5f9e253f7a029bedd935fe9621bb7483cc2d442a6b1d1" +dependencies = [ + "array-bytes", + "arrayvec 0.7.6", + "blake2 0.10.6", + "bytes 1.10.0", + "futures 0.3.31", + "futures-timer", + "log", + "mixnet", + "multiaddr 0.18.2", + "parity-scale-codec", + "parking_lot 0.12.3", + "sc-client-api", + "sc-network", + "sc-network-types", + "sc-transaction-pool-api", + "sp-api", + "sp-consensus", + "sp-core", + "sp-keystore", + "sp-mixnet", + "sp-runtime", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-network" +version = "0.45.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51392c871f3c8867481e2b1d3426fa997fe14d3c739ae20e48c676aa92b9af08" +dependencies = [ + "array-bytes", + "async-channel 1.9.0", + "async-trait", + "asynchronous-codec", + "bytes 1.10.0", + "cid 0.9.0", + "either", + "fnv", + "futures 0.3.31", + "futures-timer", + "ip_network", + "libp2p", + "linked_hash_set", + "litep2p", + "log", + "mockall 0.11.4", + "once_cell", + "parity-scale-codec", + "parking_lot 0.12.3", + "partial_sort", + "pin-project", + "prost 0.12.6", + "prost-build 0.12.6", + "rand", + "sc-client-api", + "sc-network-common", + "sc-network-types", + "sc-utils", + "schnellru", + "serde", + "serde_json", + "smallvec", + "sp-arithmetic", + "sp-blockchain", + "sp-core", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", + "tokio 1.43.0", + "tokio-stream", + "unsigned-varint 0.7.2", + "void", + "wasm-timer", + "zeroize", +] + +[[package]] +name = "sc-network-common" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff059c0ca497757f633cfa13625fbaa3028f23a77a9696e94e700008f8dd5a" +dependencies = [ + "async-trait", + "bitflags 1.3.2", + "futures 0.3.31", + "libp2p-identity", + "parity-scale-codec", + "prost-build 0.12.6", + "sc-consensus", + "sc-network-types", + "sp-consensus", + "sp-consensus-grandpa", + "sp-runtime", +] + +[[package]] +name = "sc-network-gossip" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4086f4ac6b94ff2efd24f1776280c580454c5990b8665aa9f293fcd33c80630" +dependencies = [ + "ahash 0.8.11", + "futures 0.3.31", + "futures-timer", + "log", + "sc-network", + "sc-network-common", + "sc-network-sync", + "sc-network-types", + "schnellru", + "sp-runtime", + "substrate-prometheus-endpoint", + "tracing", +] + +[[package]] +name = "sc-network-light" +version = "0.44.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8150e7a09695c60b09939a7815be4cc3fb48592779c197ba9442d29c0a98f8ad" +dependencies = [ + "array-bytes", + "async-channel 1.9.0", + "futures 0.3.31", + "log", + "parity-scale-codec", + "prost 0.12.6", + "prost-build 0.12.6", + "sc-client-api", + "sc-network", + "sc-network-types", + "sp-blockchain", + "sp-core", + "sp-runtime", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-network-sync" +version = "0.44.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82cb3b9939d57083495b3ed1304094b939c99ebdc651fb779ab6d2c83428679e" +dependencies = [ + "array-bytes", + "async-channel 1.9.0", + "async-trait", + "fork-tree", + "futures 0.3.31", + "futures-timer", + "libp2p", + "log", + "mockall 0.11.4", + "parity-scale-codec", + "prost 0.12.6", + "prost-build 0.12.6", + "sc-client-api", + "sc-consensus", + "sc-network", + "sc-network-common", + "sc-network-types", + "sc-utils", + "schnellru", + "smallvec", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-consensus-grandpa", + "sp-core", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", + "tokio 1.43.0", + "tokio-stream", +] + +[[package]] +name = "sc-network-transactions" +version = "0.44.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c5bcf5f5437194d5fa9277fd4b832e187a595798f08b8df154bc62d88bbae2" +dependencies = [ + "array-bytes", + "futures 0.3.31", + "log", + "parity-scale-codec", + "sc-network", + "sc-network-common", + "sc-network-sync", + "sc-network-types", + "sc-utils", + "sp-consensus", + "sp-runtime", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-network-types" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c372dbda66644a1df0daa8c0d99c36b6f74db7dca213d2416cd84f507125224" +dependencies = [ + "bs58 0.5.1", + "ed25519-dalek", + "libp2p-identity", + "litep2p", + "log", + "multiaddr 0.18.2", + "multihash 0.19.3", + "rand", + "thiserror 1.0.69", + "zeroize", +] + +[[package]] +name = "sc-offchain" +version = "40.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9185b82ad10f21f3eb977a079f772219bd216bf4eafedad7d5e4a0ff32383c75" +dependencies = [ + "array-bytes", + "bytes 1.10.0", + "fnv", + "futures 0.3.31", + "futures-timer", + "hyper 0.14.32", + "hyper-rustls", + "log", + "num_cpus", + "once_cell", + "parity-scale-codec", + "parking_lot 0.12.3", + "rand", + "sc-client-api", + "sc-network", + "sc-network-common", + "sc-network-types", + "sc-transaction-pool-api", + "sc-utils", + "sp-api", + "sp-core", + "sp-externalities", + "sp-keystore", + "sp-offchain", + "sp-runtime", + "threadpool", + "tracing", +] + +[[package]] +name = "sc-proposer-metrics" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f680a0bed67dab19898624246376ba85d5f70a89859ba030830aacd079c28d3c" +dependencies = [ + "log", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-rpc" +version = "40.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7137ecfd837c9b6e57244b59a99320a53c7e31f160b5581a325734f3c169aaba" +dependencies = [ + "futures 0.3.31", + "jsonrpsee", + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "sc-block-builder", + "sc-chain-spec", + "sc-client-api", + "sc-mixnet", + "sc-rpc-api", + "sc-tracing", + "sc-transaction-pool-api", + "sc-utils", + "serde_json", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-keystore", + "sp-offchain", + "sp-rpc", + "sp-runtime", + "sp-session", + "sp-statement-store", + "sp-version", + "tokio 1.43.0", +] + +[[package]] +name = "sc-rpc-api" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147274633577e55db73dbdc64168c25b54cca6cac4fcde118bd9946cf7b24838" +dependencies = [ + "jsonrpsee", + "parity-scale-codec", + "sc-chain-spec", + "sc-mixnet", + "sc-transaction-pool-api", + "scale-info", + "serde", + "serde_json", + "sp-core", + "sp-rpc", + "sp-runtime", + "sp-version", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-rpc-server" +version = "17.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c769d12d80dcdfdad00890d7cf25923d5cf6e7594d91909ebcee8b1076a3c1c" +dependencies = [ + "dyn-clone", + "forwarded-header-value", + "futures 0.3.31", + "governor", + "http 1.2.0", + "http-body-util", + "hyper 1.6.0", + "ip_network", + "jsonrpsee", + "log", + "sc-rpc-api", + "serde", + "serde_json", + "substrate-prometheus-endpoint", + "tokio 1.43.0", + "tower", + "tower-http", +] + +[[package]] +name = "sc-rpc-spec-v2" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ca6bcb95e13ca0d87bd2b2e23dcc4040b671b467f5cc647169fc9c37b0ce1f7" +dependencies = [ + "array-bytes", + "futures 0.3.31", + "futures-util", + "hex", + "jsonrpsee", + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "rand", + "sc-chain-spec", + "sc-client-api", + "sc-rpc", + "sc-transaction-pool-api", + "sc-utils", + "schnellru", + "serde", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-rpc", + "sp-runtime", + "sp-version", + "thiserror 1.0.69", + "tokio 1.43.0", + "tokio-stream", +] + +[[package]] +name = "sc-service" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f438103f736c3fb4baddd3e40122191c878496671c76ca968a9fad9fcc107a28" +dependencies = [ + "async-trait", + "directories", + "exit-future", + "futures 0.3.31", + "futures-timer", "jsonrpsee", "log", "parity-scale-codec", @@ -9065,669 +15030,1265 @@ dependencies = [ "sc-utils", "schnellru", "serde", - "serde_json", - "sp-api", + "serde_json", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-externalities", + "sp-keystore", + "sp-runtime", + "sp-session", + "sp-state-machine", + "sp-storage", + "sp-transaction-pool", + "sp-transaction-storage-proof", + "sp-trie", + "sp-version", + "static_init", + "substrate-prometheus-endpoint", + "tempfile", + "thiserror 1.0.69", + "tokio 1.43.0", + "tracing", + "tracing-futures", +] + +[[package]] +name = "sc-state-db" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f689d0b97c1bbdb2ca31b5f202bda195947f85c7fef990651cad202b99de896b" +dependencies = [ + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "sp-core", +] + +[[package]] +name = "sc-storage-monitor" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d117c3945c524b9c0e30966359895f5ad551c2cd4ccbb677b53917fbad5039a" +dependencies = [ + "clap", + "fs4", + "log", + "sp-core", + "thiserror 1.0.69", + "tokio 1.43.0", +] + +[[package]] +name = "sc-sync-state-rpc" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "732368e1e11b335af0db58d654dff87605ea8531e1944d329cf22751eb23c44d" +dependencies = [ + "jsonrpsee", + "parity-scale-codec", + "sc-chain-spec", + "sc-client-api", + "sc-consensus-babe", + "sc-consensus-epochs", + "sc-consensus-grandpa", + "serde", + "serde_json", + "sp-blockchain", + "sp-runtime", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-sysinfo" +version = "38.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d78810e8fd4a91716eff951f2e80744a08efcc34f53446e60ca055d2cef2e0aa" +dependencies = [ + "derive_more 0.99.19", + "futures 0.3.31", + "libc", + "log", + "rand", + "rand_pcg", + "regex", + "sc-telemetry", + "serde", + "serde_json", + "sp-core", + "sp-crypto-hashing", + "sp-io", + "sp-std", +] + +[[package]] +name = "sc-telemetry" +version = "25.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e28cab12625bcdb8828f9a1177b8d061972f90fda89a70c10763da50e0aaa5" +dependencies = [ + "chrono", + "futures 0.3.31", + "libp2p", + "log", + "parking_lot 0.12.3", + "pin-project", + "rand", + "sc-network", + "sc-utils", + "serde", + "serde_json", + "thiserror 1.0.69", + "wasm-timer", +] + +[[package]] +name = "sc-tracing" +version = "37.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2604130246c4f6c2a2633f320bde95e7122383385c779b263eb03b714d92758a" +dependencies = [ + "chrono", + "console", + "is-terminal", + "lazy_static", + "libc", + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "rustc-hash 1.1.0", + "sc-client-api", + "sc-tracing-proc-macro", + "serde", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-rpc", + "sp-runtime", + "sp-tracing", + "thiserror 1.0.69", + "tracing", + "tracing-log", + "tracing-subscriber", +] + +[[package]] +name = "sc-tracing-proc-macro" +version = "11.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151cdf86d79abf22cf2a240a7ca95041c908dbd96c2ae9a818073042aa210964" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "sc-transaction-pool" +version = "37.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f716ef0dc78458f6ecb831cdb3b60ec804c1ed93313d7f98661beb5438dbbf71" +dependencies = [ + "async-trait", + "futures 0.3.31", + "futures-timer", + "linked-hash-map", + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "sc-client-api", + "sc-transaction-pool-api", + "sc-utils", + "serde", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-crypto-hashing", + "sp-runtime", + "sp-tracing", + "sp-transaction-pool", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-transaction-pool-api" +version = "37.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f02936289a079360935685eee5400311994b25e9edb2420a3c4247d419a77f46" +dependencies = [ + "async-trait", + "futures 0.3.31", + "log", + "parity-scale-codec", + "serde", "sp-blockchain", - "sp-consensus", "sp-core", - "sp-externalities", - "sp-keystore", "sp-runtime", - "sp-session", - "sp-state-machine", - "sp-storage", - "sp-transaction-pool", - "sp-transaction-storage-proof", - "sp-trie", - "sp-version", - "static_init", - "substrate-prometheus-endpoint", - "tempfile", "thiserror 1.0.69", - "tokio", - "tracing", - "tracing-futures", ] [[package]] -name = "sc-state-db" -version = "0.36.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "sc-utils" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acf1bad736c230f16beb1cf48af9e69564df23b13aca9e5751a61266340b4bb5" dependencies = [ + "async-channel 1.9.0", + "futures 0.3.31", + "futures-timer", + "lazy_static", "log", - "parity-scale-codec", "parking_lot 0.12.3", - "sp-core", + "prometheus", + "sp-arithmetic", ] [[package]] -name = "sc-sync-state-rpc" -version = "0.45.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "scale-info" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" dependencies = [ - "jsonrpsee", + "bitvec", + "cfg-if", + "derive_more 1.0.0", "parity-scale-codec", - "sc-chain-spec", - "sc-client-api", - "sc-consensus-babe", - "sc-consensus-epochs", - "sc-consensus-grandpa", + "scale-info-derive", "serde", - "serde_json", - "sp-blockchain", - "sp-runtime", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "schnellru" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "356285bbf17bea63d9e52e96bd18f039672ac92b55b8cb997d6162a2a37d1649" +dependencies = [ + "ahash 0.8.11", + "cfg-if", + "hashbrown 0.13.2", +] + +[[package]] +name = "schnorrkel" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "844b7645371e6ecdf61ff246ba1958c29e802881a749ae3fb1993675d210d28d" +dependencies = [ + "arrayref", + "arrayvec 0.7.6", + "curve25519-dalek-ng", + "merlin", + "rand_core", + "sha2 0.9.9", + "subtle-ng", + "zeroize", +] + +[[package]] +name = "schnorrkel" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" +dependencies = [ + "aead", + "arrayref", + "arrayvec 0.7.6", + "curve25519-dalek", + "getrandom_or_panic", + "merlin", + "rand_core", + "serde_bytes", + "sha2 0.10.8", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scratch" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "sctp-proto" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6220f78bb44c15f326b0596113305f6101097a18755d53727a575c97e09fb24" +dependencies = [ + "bytes 1.10.0", + "crc", + "fxhash", + "log", + "rand", + "slab", "thiserror 1.0.69", ] [[package]] -name = "sc-sysinfo" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array 0.14.7", + "pkcs8", + "serdect", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "seccompiler" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "345a3e4dddf721a478089d4697b83c6c0a8f5bf16086f6c13397e4534eb6e2e5" +dependencies = [ + "libc", +] + +[[package]] +name = "secp256k1" +version = "0.28.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" +dependencies = [ + "secp256k1-sys", +] + +[[package]] +name = "secp256k1-sys" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d1746aae42c19d583c3c1a8c646bfad910498e2051c551a7f2e3c0c9fbb7eb" +dependencies = [ + "cc", +] + +[[package]] +name = "secrecy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +dependencies = [ + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.8.0", + "core-foundation", + "core-foundation-sys", + "libc", + "num-bigint", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537" +dependencies = [ + "semver-parser 0.7.0", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser 0.7.0", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser 0.10.3", +] + +[[package]] +name = "semver" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "semver-parser" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" +dependencies = [ + "pest", +] + +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + +[[package]] +name = "serde" +version = "1.0.217" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-big-array" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd31f59f6fe2b0c055371bb2f16d7f0aa7d8881676c04a55b1596d1a17cd10a4" dependencies = [ - "derive_more 0.99.18", - "futures", - "libc", - "log", - "rand", - "rand_pcg", - "regex", - "sc-telemetry", "serde", - "serde_json", - "sp-core", - "sp-crypto-hashing", - "sp-io", - "sp-std", ] [[package]] -name = "sc-telemetry" -version = "25.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "serde-hex-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3d83ec090e617054c5425d2eddd4358a251104c9fba51d71bd997d05cf4915" dependencies = [ - "chrono", - "futures", - "libp2p", - "log", - "parking_lot 0.12.3", - "pin-project", - "rand", - "sc-network", - "sc-utils", + "anyhow", + "hex", "serde", - "serde_json", - "thiserror 1.0.69", - "wasm-timer", ] [[package]] -name = "sc-tracing" -version = "37.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "serde_bytes" +version = "0.11.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" dependencies = [ - "chrono", - "console", - "is-terminal", - "lazy_static", - "libc", - "log", - "parity-scale-codec", - "parking_lot 0.12.3", - "rustc-hash 1.1.0", - "sc-client-api", - "sc-tracing-proc-macro", "serde", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-rpc", - "sp-runtime", - "sp-tracing", - "thiserror 1.0.69", - "tracing", - "tracing-log", - "tracing-subscriber", ] [[package]] -name = "sc-tracing-proc-macro" -version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "serde_derive" +version = "1.0.217" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ - "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] -name = "sc-transaction-pool" -version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "serde_json" +version = "1.0.138" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" dependencies = [ - "async-trait", - "futures", - "futures-timer", - "linked-hash-map", - "log", - "parity-scale-codec", - "parking_lot 0.12.3", - "sc-client-api", - "sc-transaction-pool-api", - "sc-utils", + "itoa", + "memchr", + "ryu", "serde", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-crypto-hashing", - "sp-runtime", - "sp-tracing", - "sp-transaction-pool", - "substrate-prometheus-endpoint", - "thiserror 1.0.69", ] [[package]] -name = "sc-transaction-pool-api" -version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ - "async-trait", - "futures", - "log", - "parity-scale-codec", "serde", - "sp-blockchain", - "sp-core", - "sp-runtime", - "thiserror 1.0.69", -] - -[[package]] -name = "sc-utils" -version = "17.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" -dependencies = [ - "async-channel", - "futures", - "futures-timer", - "lazy_static", - "log", - "parking_lot 0.12.3", - "prometheus", - "sp-arithmetic", ] [[package]] -name = "scale-info" -version = "2.11.6" +name = "serde_with" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" +checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" dependencies = [ - "bitvec", - "cfg-if", - "derive_more 1.0.0", - "parity-scale-codec", - "scale-info-derive", + "base64 0.22.1", + "chrono", + "hex", "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", ] [[package]] -name = "scale-info-derive" -version = "2.11.6" +name = "serde_with_macros" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" +checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" dependencies = [ - "proc-macro-crate 3.2.0", + "darling", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] -name = "schannel" -version = "0.1.27" +name = "serdect" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" dependencies = [ - "windows-sys 0.59.0", + "base16ct", + "serde", ] [[package]] -name = "schnellru" -version = "0.2.3" +name = "sha-1" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9a8ef13a93c54d20580de1e5c413e624e53121d42fc7e2c11d10ef7f8b02367" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" dependencies = [ - "ahash", + "block-buffer 0.9.0", "cfg-if", - "hashbrown 0.13.2", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.1", ] [[package]] -name = "schnorrkel" -version = "0.11.4" +name = "sha-1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" +checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" dependencies = [ - "aead", - "arrayref", - "arrayvec", - "curve25519-dalek", - "getrandom_or_panic", - "merlin", - "rand_core", - "serde_bytes", - "sha2 0.10.8", - "subtle 2.6.1", - "zeroize", + "cfg-if", + "cpufeatures", + "digest 0.10.7", + "sha1-asm", ] [[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "scratch" -version = "1.0.7" +name = "sha1" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] [[package]] -name = "sct" -version = "0.7.1" +name = "sha1-asm" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +checksum = "286acebaf8b67c1130aedffad26f594eff0c1292389158135327d2e23aed582b" dependencies = [ - "ring 0.17.8", - "untrusted 0.9.0", + "cc", ] [[package]] -name = "sctp-proto" -version = "0.2.2" +name = "sha2" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6220f78bb44c15f326b0596113305f6101097a18755d53727a575c97e09fb24" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ - "bytes", - "crc", - "fxhash", - "log", - "rand", - "slab", - "thiserror 1.0.69", + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.1", ] [[package]] -name = "sec1" -version = "0.7.3" +name = "sha2" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ - "base16ct", - "der", - "generic-array 0.14.7", - "pkcs8", - "serdect", - "subtle 2.6.1", - "zeroize", + "cfg-if", + "cpufeatures", + "digest 0.10.7", ] [[package]] -name = "secp256k1" -version = "0.28.2" +name = "sha3" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "secp256k1-sys", + "digest 0.10.7", + "keccak", ] [[package]] -name = "secp256k1-sys" -version = "0.9.2" +name = "sha3-asm" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d1746aae42c19d583c3c1a8c646bfad910498e2051c551a7f2e3c0c9fbb7eb" +checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" dependencies = [ "cc", + "cfg-if", ] [[package]] -name = "secrecy" -version = "0.8.0" +name = "sharded-slab" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ - "zeroize", + "lazy_static", ] [[package]] -name = "security-framework" -version = "2.11.1" +name = "shlex" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags 2.6.0", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] -name = "security-framework-sys" -version = "2.13.0" +name = "signal-hook-registry" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1863fd3768cd83c56a7f60faa4dc0d403f1b6df0a38c3c25f44b7894e45370d5" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ - "core-foundation-sys", "libc", ] [[package]] -name = "semver" -version = "0.6.0" +name = "signature" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "semver-parser", + "digest 0.10.7", + "rand_core", ] [[package]] -name = "semver" +name = "simba" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +checksum = "b3a386a501cd104797982c15ae17aafe8b9261315b5d07e3ec803f2ea26be0fa" dependencies = [ - "semver-parser", + "approx", + "num-complex", + "num-traits", + "paste", + "wide", ] [[package]] -name = "semver" -version = "1.0.24" +name = "simple-dns" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" +checksum = "cae9a3fcdadafb6d97f4c0e007e4247b114ee0f119f650c3cbf3a8b3a1479694" dependencies = [ - "serde", + "bitflags 2.8.0", ] [[package]] -name = "semver-parser" -version = "0.7.0" +name = "simple-mermaid" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +checksum = "620a1d43d70e142b1d46a929af51d44f383db9c7a2ec122de2cd992ccfcf3c18" [[package]] -name = "send_wrapper" -version = "0.6.0" +name = "siphasher" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] -name = "serde" -version = "1.0.216" +name = "slab" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ - "serde_derive", + "autocfg", ] [[package]] -name = "serde_bytes" -version = "0.11.15" +name = "slice-group-by" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" + +[[package]] +name = "slot-range-helper" +version = "15.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e34f1146a457a5c554dedeae6c7273aa54c3b031f3e9eb0abd037b5511e2ce9" dependencies = [ - "serde", + "enumn", + "parity-scale-codec", + "paste", + "sp-runtime", ] [[package]] -name = "serde_derive" -version = "1.0.216" +name = "slotmap" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.91", + "version_check", ] [[package]] -name = "serde_json" -version = "1.0.134" +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "smol" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d" +checksum = "13f2b548cd8447f8de0fdf1c592929f70f4fc7039a05e47404b0d096ec6987a1" dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", + "async-channel 1.9.0", + "async-executor", + "async-fs", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-net", + "async-process", + "blocking", + "futures-lite 1.13.0", ] [[package]] -name = "serde_spanned" -version = "0.6.8" +name = "smoldot" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +checksum = "c0bb30cf57b7b5f6109ce17c3164445e2d6f270af2cb48f6e4d31c2967c9a9f5" dependencies = [ + "arrayvec 0.7.6", + "async-lock 2.8.0", + "atomic-take", + "base64 0.21.7", + "bip39", + "blake2-rfc", + "bs58 0.5.1", + "chacha20", + "crossbeam-queue", + "derive_more 0.99.19", + "ed25519-zebra", + "either", + "event-listener 2.5.3", + "fnv", + "futures-lite 1.13.0", + "futures-util", + "hashbrown 0.14.5", + "hex", + "hmac 0.12.1", + "itertools 0.11.0", + "libsecp256k1", + "merlin", + "no-std-net", + "nom", + "num-bigint", + "num-rational", + "num-traits", + "pbkdf2", + "pin-project", + "poly1305", + "rand", + "rand_chacha", + "ruzstd", + "schnorrkel 0.10.2", "serde", + "serde_json", + "sha2 0.10.8", + "sha3", + "siphasher", + "slab", + "smallvec", + "soketto 0.7.1", + "twox-hash", + "wasmi 0.31.2", + "x25519-dalek", + "zeroize", ] [[package]] -name = "serde_with" -version = "3.11.0" +name = "smoldot-light" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" +checksum = "256b5bad1d6b49045e95fe87492ce73d5af81545d8b4d8318a872d2007024c33" dependencies = [ - "base64 0.22.1", - "chrono", + "async-channel 1.9.0", + "async-lock 2.8.0", + "base64 0.21.7", + "blake2-rfc", + "derive_more 0.99.19", + "either", + "event-listener 2.5.3", + "fnv", + "futures-channel", + "futures-lite 1.13.0", + "futures-util", + "hashbrown 0.14.5", "hex", + "itertools 0.11.0", + "log", + "lru 0.11.1", + "no-std-net", + "parking_lot 0.12.3", + "pin-project", + "rand", + "rand_chacha", "serde", - "serde_derive", "serde_json", - "serde_with_macros", - "time", + "siphasher", + "slab", + "smol", + "smoldot", + "zeroize", ] [[package]] -name = "serde_with_macros" -version = "3.11.0" +name = "snap" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.91", -] +checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" [[package]] -name = "serdect" -version = "0.2.0" +name = "snow" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" +checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" dependencies = [ - "base16ct", - "serde", + "aes-gcm", + "blake2 0.10.6", + "chacha20poly1305", + "curve25519-dalek", + "rand_core", + "ring 0.17.8", + "rustc_version 0.4.1", + "sha2 0.10.8", + "subtle 2.6.1", ] [[package]] -name = "sha-1" -version = "0.10.1" +name = "snowbridge-amcl" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" +checksum = "460a9ed63cdf03c1b9847e8a12a5f5ba19c4efd5869e4a737e05be25d7c427e5" dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", - "sha1-asm", + "parity-scale-codec", + "scale-info", ] [[package]] -name = "sha1" -version = "0.10.6" +name = "snowbridge-beacon-primitives" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +checksum = "10bd720997e558beb556d354238fa90781deb38241cf31c1b6368738ef21c279" dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", + "byte-slice-cast", + "frame-support", + "hex", + "parity-scale-codec", + "rlp", + "scale-info", + "serde", + "snowbridge-ethereum", + "snowbridge-milagro-bls", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "ssz_rs", + "ssz_rs_derive", ] [[package]] -name = "sha1-asm" -version = "0.5.3" +name = "snowbridge-core" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "286acebaf8b67c1130aedffad26f594eff0c1292389158135327d2e23aed582b" +checksum = "6be61e4db95d1e253a1d5e722953b2d2f6605e5f9761f0a919e5d3fbdbff9da9" dependencies = [ - "cc", + "ethabi-decode", + "frame-support", + "frame-system", + "hex-literal 0.4.1", + "parity-scale-codec", + "polkadot-parachain-primitives", + "scale-info", + "serde", + "snowbridge-beacon-primitives", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "staging-xcm", + "staging-xcm-builder", ] [[package]] -name = "sha2" -version = "0.9.9" +name = "snowbridge-ethereum" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +checksum = "dc3d6d549c57df27cf89ec852f932fa4008eea877a6911a87e03e8002104eabd" dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.1", + "ethabi-decode", + "ethbloom", + "ethereum-types", + "hex-literal 0.4.1", + "parity-bytes", + "parity-scale-codec", + "rlp", + "scale-info", + "serde", + "serde-big-array", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "sha2" -version = "0.10.8" +name = "snowbridge-milagro-bls" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "026aa8638f690a53e3f7676024b9e913b1cab0111d1b7b92669d40a188f9d7e6" dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", + "hex", + "lazy_static", + "parity-scale-codec", + "rand", + "scale-info", + "snowbridge-amcl", + "zeroize", ] [[package]] -name = "sha3" -version = "0.10.8" +name = "snowbridge-outbound-queue-merkle-tree" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +checksum = "74c6a9b65fa61711b704f0c6afb3663c6288288e8822ddae5cc1146fe3ad9ce8" dependencies = [ - "digest 0.10.7", - "keccak", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", ] [[package]] -name = "sharded-slab" -version = "0.1.7" +name = "snowbridge-outbound-queue-runtime-api" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +checksum = "38d27b8d9cb8022637a5ce4f52692520fa75874f393e04ef5cd75bd8795087f6" dependencies = [ - "lazy_static", + "frame-support", + "parity-scale-codec", + "snowbridge-core", + "snowbridge-outbound-queue-merkle-tree", + "sp-api", + "sp-std", ] [[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "signal-hook-registry" -version = "1.4.2" +name = "snowbridge-pallet-ethereum-client" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "7d53d32d8470c643f9f8c1f508e1e34263f76297e4c9150e10e8f2e0b63992e1" dependencies = [ - "libc", + "frame-benchmarking", + "frame-support", + "frame-system", + "hex-literal 0.4.1", + "log", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "serde", + "snowbridge-beacon-primitives", + "snowbridge-core", + "snowbridge-ethereum", + "snowbridge-pallet-ethereum-client-fixtures", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "static_assertions", ] [[package]] -name = "signature" -version = "2.2.0" +name = "snowbridge-pallet-ethereum-client-fixtures" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +checksum = "3984b98465af1d862d4e87ba783e1731f2a3f851b148d6cb98d526cebd351185" dependencies = [ - "digest 0.10.7", - "rand_core", + "hex-literal 0.4.1", + "snowbridge-beacon-primitives", + "snowbridge-core", + "sp-core", + "sp-std", ] [[package]] -name = "simba" -version = "0.9.0" +name = "snowbridge-pallet-inbound-queue" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3a386a501cd104797982c15ae17aafe8b9261315b5d07e3ec803f2ea26be0fa" +checksum = "f2e6a9d00e60e3744e6b6f0c21fea6694b9c6401ac40e41340a96e561dcf1935" dependencies = [ - "approx", - "num-complex", - "num-traits", - "paste", - "wide", + "alloy-primitives 0.4.2", + "alloy-sol-types 0.4.2", + "frame-benchmarking", + "frame-support", + "frame-system", + "hex-literal 0.4.1", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "snowbridge-beacon-primitives", + "snowbridge-core", + "snowbridge-pallet-inbound-queue-fixtures", + "snowbridge-router-primitives", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "staging-xcm", + "staging-xcm-executor", ] [[package]] -name = "simple-dns" -version = "0.5.7" +name = "snowbridge-pallet-inbound-queue-fixtures" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cae9a3fcdadafb6d97f4c0e007e4247b114ee0f119f650c3cbf3a8b3a1479694" +checksum = "b1f251e579b3d3d93cf833c8e503122808742dee33e7ea53b0f292a76c024d66" dependencies = [ - "bitflags 2.6.0", + "hex-literal 0.4.1", + "snowbridge-beacon-primitives", + "snowbridge-core", + "sp-core", + "sp-std", ] [[package]] -name = "simple-mermaid" -version = "0.1.1" +name = "snowbridge-pallet-outbound-queue" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "620a1d43d70e142b1d46a929af51d44f383db9c7a2ec122de2cd992ccfcf3c18" +checksum = "c7d49478041b6512c710d0d4655675d146fe00a8e0c1624e5d8a1d6c161d490f" +dependencies = [ + "bridge-hub-common", + "ethabi-decode", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "snowbridge-core", + "snowbridge-outbound-queue-merkle-tree", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] [[package]] -name = "siphasher" -version = "0.3.11" +name = "snowbridge-pallet-system" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +checksum = "674db59b3c8013382e5c07243ad9439b64d81d2e8b3c4f08d752b55aa5de697e" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "snowbridge-core", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "staging-xcm", + "staging-xcm-executor", +] [[package]] -name = "slab" -version = "0.4.9" +name = "snowbridge-router-primitives" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +checksum = "aefe74eafeac92e1d9e46b7bb76ec297f6182b4a023f7e7eb7eb8be193f93bef" dependencies = [ - "autocfg", + "frame-support", + "hex-literal 0.4.1", + "log", + "parity-scale-codec", + "scale-info", + "snowbridge-core", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "staging-xcm", + "staging-xcm-executor", ] [[package]] -name = "slice-group-by" -version = "0.3.1" +name = "snowbridge-runtime-common" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" +checksum = "6093f0e73d6cfdd2eea8712155d1d75b5063fc9b1d854d2665b097b4bb29570d" +dependencies = [ + "frame-support", + "log", + "parity-scale-codec", + "snowbridge-core", + "sp-arithmetic", + "sp-std", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", +] [[package]] -name = "smallvec" -version = "1.13.2" +name = "snowbridge-runtime-test-common" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "893480d6cde2489051c65efb5d27fa87efe047b3b61216d8e27bb2f0509b7faf" +dependencies = [ + "cumulus-pallet-parachain-system", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-collator-selection", + "pallet-message-queue", + "pallet-session", + "pallet-timestamp", + "pallet-utility", + "pallet-xcm", + "parachains-runtimes-test-utils 17.0.0", + "parity-scale-codec", + "snowbridge-core", + "snowbridge-pallet-ethereum-client", + "snowbridge-pallet-ethereum-client-fixtures", + "snowbridge-pallet-outbound-queue", + "snowbridge-pallet-system", + "sp-core", + "sp-io", + "sp-keyring", + "sp-runtime", + "staging-parachain-info", + "staging-xcm", + "staging-xcm-executor", +] [[package]] -name = "snap" -version = "1.1.1" +name = "snowbridge-runtime-test-common" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" +checksum = "242ad550a31ebd8e29a17beb89f1e5ddf4e657ebdf667fb9e4c0660428de4e9b" +dependencies = [ + "cumulus-pallet-parachain-system", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-collator-selection", + "pallet-message-queue", + "pallet-session", + "pallet-timestamp", + "pallet-utility", + "pallet-xcm", + "parachains-runtimes-test-utils 19.0.0", + "parity-scale-codec", + "snowbridge-core", + "snowbridge-pallet-ethereum-client", + "snowbridge-pallet-ethereum-client-fixtures", + "snowbridge-pallet-outbound-queue", + "snowbridge-pallet-system", + "sp-core", + "sp-io", + "sp-keyring", + "sp-runtime", + "staging-parachain-info", + "staging-xcm", + "staging-xcm-executor", +] [[package]] -name = "snow" -version = "0.9.6" +name = "snowbridge-system-runtime-api" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" +checksum = "68b8b83b3db781c49844312a23965073e4d93341739a35eafe526c53b578d3b7" dependencies = [ - "aes-gcm", - "blake2 0.10.6", - "chacha20poly1305", - "curve25519-dalek", - "rand_core", - "ring 0.17.8", - "rustc_version 0.4.1", - "sha2 0.10.8", - "subtle 2.6.1", + "parity-scale-codec", + "snowbridge-core", + "sp-api", + "sp-std", + "staging-xcm", ] [[package]] @@ -9750,6 +16311,21 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "soketto" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" +dependencies = [ + "base64 0.13.1", + "bytes 1.10.0", + "futures 0.3.31", + "httparse", + "log", + "rand", + "sha-1 0.9.8", +] + [[package]] name = "soketto" version = "0.8.1" @@ -9757,8 +16333,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e859df029d160cb88608f5d7df7fb4753fd20fdfb4de5644f3d8b8440841721" dependencies = [ "base64 0.22.1", - "bytes", - "futures", + "bytes 1.10.0", + "futures 0.3.31", "http 1.2.0", "httparse", "log", @@ -9769,7 +16345,8 @@ dependencies = [ [[package]] name = "sp-api" version = "34.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbce492e0482134128b7729ea36f5ef1a9f9b4de2d48ff8dde7b5e464e28ce75" dependencies = [ "docify", "hash-db", @@ -9791,7 +16368,8 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "20.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9aadf9e97e694f0e343978aa632938c5de309cbcc8afed4136cb71596737278" dependencies = [ "Inflector", "blake2 0.10.6", @@ -9799,13 +16377,14 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] name = "sp-application-crypto" version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8133012faa5f75b2f0b1619d9f720c1424ac477152c143e5f7dbde2fe1a958" dependencies = [ "parity-scale-codec", "scale-info", @@ -9817,7 +16396,8 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46d0d0a4c591c421d3231ddd5e27d828618c24456d51445d21a1f79fcee97c23" dependencies = [ "docify", "integer-sqrt", @@ -9825,13 +16405,15 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", + "sp-std", "static_assertions", ] [[package]] name = "sp-authority-discovery" version = "34.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "519c33af0e25ba2dd2eb3790dc404d634b6e4ce0801bcc8fa3574e07c365e734" dependencies = [ "parity-scale-codec", "scale-info", @@ -9843,7 +16425,8 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "34.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74738809461e3d4bd707b5b94e0e0c064a623a74a6a8fe5c98514417a02858dd" dependencies = [ "sp-api", "sp-inherents", @@ -9853,9 +16436,10 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "37.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a309eecd6b5689f57e67181deaa628d9c8951db1ba0d26f07c69e14dffdc4765" dependencies = [ - "futures", + "futures 0.3.31", "parity-scale-codec", "parking_lot 0.12.3", "schnellru", @@ -9872,10 +16456,11 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.40.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce75efd1e164be667a53c20182c45b4c2abe325abcbd21fc292b82be5b9240f7" dependencies = [ "async-trait", - "futures", + "futures 0.3.31", "log", "sp-core", "sp-inherents", @@ -9884,10 +16469,28 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "sp-consensus-aura" +version = "0.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a8faaa05bbcb9c41f0cc535c4c1315abf6df472b53eae018678d1b4d811ac47" +dependencies = [ + "async-trait", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-application-crypto", + "sp-consensus-slots", + "sp-inherents", + "sp-runtime", + "sp-timestamp", +] + [[package]] name = "sp-consensus-babe" version = "0.40.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36ee95e17ee8dcd14db7d584b899a426565ca9abe5a266ab82277977fc547f86" dependencies = [ "async-trait", "parity-scale-codec", @@ -9899,13 +16502,36 @@ dependencies = [ "sp-core", "sp-inherents", "sp-runtime", - "sp-timestamp", + "sp-timestamp", +] + +[[package]] +name = "sp-consensus-beefy" +version = "22.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d97e8cd75d85d15cda6f1923cf3834e848f80d5a6de1cf4edbbc5f0ad607eb" +dependencies = [ + "lazy_static", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-crypto-hashing", + "sp-io", + "sp-keystore", + "sp-mmr-primitives", + "sp-runtime", + "sp-weights", + "strum 0.26.3", ] [[package]] name = "sp-consensus-grandpa" version = "21.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "587b791efe6c5f18e09dbbaf1ece0ee7b5fe51602c233e7151a3676b0de0260b" dependencies = [ "finality-grandpa", "log", @@ -9919,10 +16545,23 @@ dependencies = [ "sp-runtime", ] +[[package]] +name = "sp-consensus-pow" +version = "0.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fa6b7d199a1c16cea1b74ee7cee174bf08f2120ab66a87bee7b12353100b47c" +dependencies = [ + "parity-scale-codec", + "sp-api", + "sp-core", + "sp-runtime", +] + [[package]] name = "sp-consensus-slots" version = "0.40.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbafb7ed44f51c22fa277fb39b33dc601fa426133a8e2b53f3f46b10f07fba43" dependencies = [ "parity-scale-codec", "scale-info", @@ -9933,7 +16572,8 @@ dependencies = [ [[package]] name = "sp-core" version = "34.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c961a5e33fb2962fa775c044ceba43df9c6f917e2c35d63bfe23738468fa76a7" dependencies = [ "array-bytes", "bitflags 1.3.2", @@ -9942,7 +16582,7 @@ dependencies = [ "bs58 0.5.1", "dyn-clonable", "ed25519-zebra", - "futures", + "futures 0.3.31", "hash-db", "hash256-std-hasher", "impl-serde", @@ -9958,7 +16598,7 @@ dependencies = [ "primitive-types", "rand", "scale-info", - "schnorrkel", + "schnorrkel 0.11.4", "secp256k1", "secrecy", "serde", @@ -9976,10 +16616,41 @@ dependencies = [ "zeroize", ] +[[package]] +name = "sp-core-hashing" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f812cb2dff962eb378c507612a50f1c59f52d92eb97b710f35be3c2346a3cd7" +dependencies = [ + "sp-crypto-hashing", +] + +[[package]] +name = "sp-crypto-ec-utils" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acb24f8a607a48a87f0ee4c090fc5d577eee49ff39ced6a3c491e06eca03c37" +dependencies = [ + "ark-bls12-377", + "ark-bls12-377-ext", + "ark-bls12-381", + "ark-bls12-381-ext", + "ark-bw6-761", + "ark-bw6-761-ext", + "ark-ec", + "ark-ed-on-bls12-377", + "ark-ed-on-bls12-377-ext", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ed-on-bls12-381-bandersnatch-ext", + "ark-scale", + "sp-runtime-interface", +] + [[package]] name = "sp-crypto-hashing" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc9927a7f81334ed5b8a98a4a978c81324d12bd9713ec76b5c68fd410174c5eb" dependencies = [ "blake2b_simd", "byteorder", @@ -9992,17 +16663,19 @@ dependencies = [ [[package]] name = "sp-crypto-hashing-proc-macro" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b85d0f1f1e44bd8617eb2a48203ee854981229e3e79e6f468c7175d5fd37489b" dependencies = [ "quote", "sp-crypto-hashing", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] name = "sp-database" version = "10.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "722cbecdbf5b94578137dbd07feb51e95f7de221be0c1ff4dcfe0bb4cd986929" dependencies = [ "kvdb", "parking_lot 0.12.3", @@ -10011,17 +16684,19 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d09fa0a5f7299fb81ee25ae3853d26200f7a348148aed6de76be905c007dbe" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] name = "sp-externalities" version = "0.29.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a904407d61cb94228c71b55a9d3708e9d6558991f9e83bd42bd91df37a159d30" dependencies = [ "environmental", "parity-scale-codec", @@ -10031,7 +16706,8 @@ dependencies = [ [[package]] name = "sp-genesis-builder" version = "0.15.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a646ed222fd86d5680faa4a8967980eb32f644cae6c8523e1c689a6deda3e8" dependencies = [ "parity-scale-codec", "scale-info", @@ -10043,7 +16719,8 @@ dependencies = [ [[package]] name = "sp-inherents" version = "34.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afffbddc380d99a90c459ba1554bbbc01d62e892de9f1485af6940b89c4c0d57" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -10056,15 +16733,16 @@ dependencies = [ [[package]] name = "sp-io" version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ef7eb561bb4839cc8424ce58c5ea236cbcca83f26fcc0426d8decfe8aa97d4" dependencies = [ - "bytes", + "bytes 1.10.0", "docify", "ed25519-dalek", "libsecp256k1", "log", "parity-scale-codec", - "polkavm-derive", + "polkavm-derive 0.9.1", "rustversion", "secp256k1", "sp-core", @@ -10082,7 +16760,8 @@ dependencies = [ [[package]] name = "sp-keyring" version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c0e20624277f578b27f44ecfbe2ebc2e908488511ee2c900c5281599f700ab3" dependencies = [ "sp-core", "sp-runtime", @@ -10092,7 +16771,8 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.40.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0248b4d784cb4a01472276928977121fa39d977a5bb24793b6b15e64b046df42" dependencies = [ "parity-scale-codec", "parking_lot 0.12.3", @@ -10103,7 +16783,8 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c768c11afbe698a090386876911da4236af199cd38a5866748df4d8628aeff" dependencies = [ "thiserror 1.0.69", "zstd 0.12.4", @@ -10112,7 +16793,8 @@ dependencies = [ [[package]] name = "sp-metadata-ir" version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a616fa51350b35326682a472ee8e6ba742fdacb18babac38ecd46b3e05ead869" dependencies = [ "frame-metadata", "parity-scale-codec", @@ -10122,7 +16804,8 @@ dependencies = [ [[package]] name = "sp-mixnet" version = "0.12.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0b017dd54823b6e62f9f7171a1df350972e5c6d0bf17e0c2f78680b5c31942" dependencies = [ "parity-scale-codec", "scale-info", @@ -10130,10 +16813,29 @@ dependencies = [ "sp-application-crypto", ] +[[package]] +name = "sp-mmr-primitives" +version = "34.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a12dd76e368f1e48144a84b4735218b712f84b3f976970e2f25a29b30440e10" +dependencies = [ + "log", + "parity-scale-codec", + "polkadot-ckb-merkle-mountain-range", + "scale-info", + "serde", + "sp-api", + "sp-core", + "sp-debug-derive", + "sp-runtime", + "thiserror 1.0.69", +] + [[package]] name = "sp-npos-elections" version = "34.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af922f112c7c1ed199eabe14f12a82ceb75e1adf0804870eccfbcf3399492847" dependencies = [ "parity-scale-codec", "scale-info", @@ -10146,7 +16848,8 @@ dependencies = [ [[package]] name = "sp-offchain" version = "34.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d9de237d72ecffd07f90826eef18360208b16d8de939d54e61591fac0fcbf99" dependencies = [ "sp-api", "sp-core", @@ -10155,18 +16858,19 @@ dependencies = [ [[package]] name = "sp-panic-handler" -version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +version = "13.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81478b3740b357fa0ea10fcdc1ee02ebae7734e50f80342c4743476d9f78eeea" dependencies = [ "backtrace", - "lazy_static", "regex", ] [[package]] name = "sp-rpc" version = "32.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45458f0955870a92b3969098d4f1f4e9b55b4282d9f1dc112a51bb5bb6584900" dependencies = [ "rustc-hash 1.1.0", "serde", @@ -10175,8 +16879,9 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "39.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +version = "39.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e00503b83cf48fffe48746b91b9b832d6785d4e2eeb0941558371eac6baac6" dependencies = [ "docify", "either", @@ -10202,12 +16907,13 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985eb981f40c689c6a0012c937b68ed58dabb4341d06f2dfe4dfd5ed72fa4017" dependencies = [ - "bytes", + "bytes 1.10.0", "impl-trait-for-tuples", "parity-scale-codec", - "polkavm-derive", + "polkavm-derive 0.9.1", "primitive-types", "sp-externalities", "sp-runtime-interface-proc-macro", @@ -10221,20 +16927,22 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "18.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0195f32c628fee3ce1dfbbf2e7e52a30ea85f3589da9fe62a8b816d70fc06294" dependencies = [ "Inflector", "expander", "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] name = "sp-session" version = "36.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00a3a307fedc423fb8cd2a7726a3bbb99014f1b4b52f26153993e2aae3338fe6" dependencies = [ "parity-scale-codec", "scale-info", @@ -10242,13 +16950,28 @@ dependencies = [ "sp-core", "sp-keystore", "sp-runtime", - "sp-staking", + "sp-staking 36.0.0", +] + +[[package]] +name = "sp-staking" +version = "34.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "143a764cacbab58347d8b2fd4c8909031fb0888d7b02a0ec9fa44f81f780d732" +dependencies = [ + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-runtime", ] [[package]] name = "sp-staking" version = "36.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a73eedb4b85f4cd420d31764827546aa22f82ce1646d0fd258993d051de7a90" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -10261,7 +16984,8 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.43.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "930104d6ae882626e8880d9b1578da9300655d337a3ffb45e130c608b6c89660" dependencies = [ "hash-db", "log", @@ -10281,7 +17005,8 @@ dependencies = [ [[package]] name = "sp-statement-store" version = "18.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c219bc34ef4d1f9835f3ed881f965643c32034fcc030eb33b759dadbc802c1c2" dependencies = [ "aes-gcm", "curve25519-dalek", @@ -10305,12 +17030,14 @@ dependencies = [ [[package]] name = "sp-std" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f8ee986414b0a9ad741776762f4083cd3a5128449b982a3919c4df36874834" [[package]] name = "sp-storage" version = "21.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99c82989b3a4979a7e1ad848aad9f5d0b4388f1f454cc131766526601ab9e8f8" dependencies = [ "impl-serde", "parity-scale-codec", @@ -10322,7 +17049,8 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "34.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72a1cb4df653d62ccc0dbce1db45d1c9443ec60247ee9576962d24da4c9c6f07" dependencies = [ "async-trait", "parity-scale-codec", @@ -10334,7 +17062,8 @@ dependencies = [ [[package]] name = "sp-tracing" version = "17.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf641a1d17268c8fcfdb8e0fa51a79c2d4222f4cfda5f3944dbdbc384dced8d5" dependencies = [ "parity-scale-codec", "tracing", @@ -10345,7 +17074,8 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "34.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc4bf251059485a7dd38fe4afeda8792983511cc47f342ff4695e2dcae6b5247" dependencies = [ "sp-api", "sp-runtime", @@ -10354,7 +17084,8 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "34.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c765c2e9817d95f13d42a9f2295c60723464669765c6e5acbacebd2f54932f67" dependencies = [ "async-trait", "parity-scale-codec", @@ -10368,9 +17099,10 @@ dependencies = [ [[package]] name = "sp-trie" version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6282aef9f4b6ecd95a67a45bcdb67a71f4a4155c09a53c10add4ffe823db18cd" dependencies = [ - "ahash", + "ahash 0.8.11", "hash-db", "lazy_static", "memory-db", @@ -10391,7 +17123,8 @@ dependencies = [ [[package]] name = "sp-version" version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d521a405707b5be561367cd3d442ff67588993de24062ce3adefcf8437ee9fe1" dependencies = [ "impl-serde", "parity-scale-codec", @@ -10408,18 +17141,20 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aee8f6730641a65fcf0c8f9b1e448af4b3bb083d08058b47528188bccc7b7a7" dependencies = [ "parity-scale-codec", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] name = "sp-wasm-interface" version = "21.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b066baa6d57951600b14ffe1243f54c47f9c23dd89c262e17ca00ae8dca58be9" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -10431,7 +17166,8 @@ dependencies = [ [[package]] name = "sp-weights" version = "31.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93cdaf72a1dad537bbb130ba4d47307ebe5170405280ed1aa31fa712718a400e" dependencies = [ "bounded-collections", "parity-scale-codec", @@ -10488,16 +17224,73 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "ssz_rs" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "057291e5631f280978fa9c8009390663ca4613359fc1318e36a8c24c392f6d1f" +dependencies = [ + "bitvec", + "num-bigint", + "sha2 0.9.9", + "ssz_rs_derive", +] + +[[package]] +name = "ssz_rs_derive" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f07d54c4d01a1713eb363b55ba51595da15f6f1211435b71466460da022aa140" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +[[package]] +name = "staging-node-inspect" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84f45a40068df2c96a0f9d7f9f94938827a3a50358d02837d25d421cb2e75dca" +dependencies = [ + "clap", + "parity-scale-codec", + "sc-cli", + "sc-client-api", + "sc-service", + "sp-blockchain", + "sp-core", + "sp-io", + "sp-runtime", + "sp-statement-store", + "thiserror 1.0.69", +] + +[[package]] +name = "staging-parachain-info" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d28266dfddbfff721d70ad2f873380845b569adfab32f257cf97d9cedd894b68" +dependencies = [ + "cumulus-primitives-core", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-runtime", +] + [[package]] name = "staging-xcm" version = "14.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bee7cd999e9cdf10f8db72342070d456e21e82a0f5962ff3b87edbd5f2b20e" dependencies = [ "array-bytes", "bounded-collections", @@ -10515,8 +17308,9 @@ dependencies = [ [[package]] name = "staging-xcm-builder" -version = "17.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +version = "17.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f7a92cfaec55a5ed0f9cbbb9076aa8ec0aff1ba90b9804cc5c8f2369fde59c" dependencies = [ "frame-support", "frame-system", @@ -10537,8 +17331,9 @@ dependencies = [ [[package]] name = "staging-xcm-executor" -version = "17.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +version = "17.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c89045f495097293ce29df1f3f459e9ccc991ff2ee88a4a91e8110a6886d2c8" dependencies = [ "environmental", "frame-benchmarking", @@ -10597,14 +17392,14 @@ checksum = "6706347e49b13373f7ddfafad47df7583ed52083d6fc8a594eb2c80497ef959d" dependencies = [ "combine", "crc", - "fastrand", + "fastrand 2.3.0", "hmac 0.12.1", "once_cell", "openssl", "openssl-sys", "sctp-proto", "serde", - "sha-1", + "sha-1 0.10.1", "thiserror 1.0.69", "tracing", ] @@ -10664,17 +17459,18 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] name = "substrate-bip39" version = "0.6.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca58ffd742f693dc13d69bdbb2e642ae239e0053f6aab3b104252892f856700a" dependencies = [ "hmac 0.12.1", "pbkdf2", - "schnorrkel", + "schnorrkel 0.11.4", "sha2 0.10.8", "zeroize", ] @@ -10682,16 +17478,18 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b285e7d183a32732fdc119f3d81b7915790191fad602b7c709ef247073c77a2e" [[package]] name = "substrate-frame-rpc-system" version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d071d325decc80d906afd957ee83673d1cbd27b7b421a7f1c9f6132a437e17fd" dependencies = [ "docify", "frame-system-rpc-runtime-api", - "futures", + "futures 0.3.31", "jsonrpsee", "log", "parity-scale-codec", @@ -10706,22 +17504,40 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" -version = "0.17.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b6772e9c3621b8d067a706dfda6a20db6faa7cde39822c58ffc8588d16409c5" dependencies = [ "http-body-util", - "hyper 1.5.2", + "hyper 1.6.0", "hyper-util", "log", "prometheus", "thiserror 1.0.69", - "tokio", + "tokio 1.43.0", +] + +[[package]] +name = "substrate-state-machine" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e036b107ee508e0ccb4a2542c69949be3e76b7119d298681726d87a22c7c1df2" +dependencies = [ + "hash-db", + "ismp", + "pallet-ismp", + "parity-scale-codec", + "polkadot-sdk 0.7.0", + "primitive-types", + "scale-info", + "serde", ] [[package]] name = "substrate-state-trie-migration-rpc" version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26c01d7d5bab5b2c1c3ad29858646664ecba13d0e5ed3bcc2923571d49a88cec" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10738,16 +17554,30 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f46809281d923956cdfdb2f95e07fa2437884f2a18096c4371a3fa48f8d082a" +dependencies = [ + "futures 0.3.31", + "substrate-test-utils-derive", + "tokio 0.2.25", +] + +[[package]] +name = "substrate-test-utils-derive" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "988016ca49cfc763fecf97dfa9dee7dbbff1a2145b003d07681278dddefd1a0e" dependencies = [ - "futures", - "tokio", + "proc-macro-crate 0.1.5", + "quote", + "syn 1.0.109", ] [[package]] name = "substrate-wasm-builder" version = "24.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf035ffe7335fb24053edfe4d0a5780250eda772082a1b80ae25835dd4c09265" dependencies = [ "build-helper", "cargo_metadata", @@ -10755,11 +17585,11 @@ dependencies = [ "filetime", "jobserver", "parity-wasm", - "polkavm-linker", + "polkavm-linker 0.9.2", "sp-maybe-compressed-blob", "strum 0.26.3", "tempfile", - "toml 0.8.19", + "toml 0.8.20", "walkdir", "wasm-opt", ] @@ -10776,6 +17606,12 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +[[package]] +name = "subtle-ng" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" + [[package]] name = "syn" version = "1.0.109" @@ -10789,15 +17625,39 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.91" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53cbcb5a243bd33b7858b1d7f4aca2153490815872d86d955d6ea29f743c035" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "syn-solidity" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b837ef12ab88835251726eb12237655e61ec8dc8a280085d1961cdc3dfd047" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "syn-solidity" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c837dc8852cb7074e46b444afb81783140dab12c58867b49fb3898fbafedf7ea" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "synstructure" version = "0.12.6" @@ -10818,7 +17678,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] @@ -10827,7 +17687,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "core-foundation", "system-configuration-sys", ] @@ -10856,14 +17716,15 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.14.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" +checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" dependencies = [ "cfg-if", - "fastrand", + "fastrand 2.3.0", + "getrandom 0.3.1", "once_cell", - "rustix 0.38.42", + "rustix 0.38.44", "windows-sys 0.59.0", ] @@ -10882,7 +17743,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5352447f921fda68cf61b4101566c0bdb5104eff6804d0678e5227580ab6a4e9" dependencies = [ - "rustix 0.38.42", + "rustix 0.38.44", "windows-sys 0.59.0", ] @@ -10892,6 +17753,22 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" +[[package]] +name = "testnet-parachains-constants" +version = "10.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94bceae6f7c89d47daff6c7e05f712551a01379f61b07d494661941144878589" +dependencies = [ + "cumulus-primitives-core", + "frame-support", + "polkadot-core-primitives", + "rococo-runtime-constants", + "smallvec", + "sp-runtime", + "staging-xcm", + "westend-runtime-constants", +] + [[package]] name = "thiserror" version = "1.0.69" @@ -10903,11 +17780,31 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.9" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +dependencies = [ + "thiserror-impl 2.0.11", +] + +[[package]] +name = "thiserror-core" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c001ee18b7e5e3f62cbf58c7fe220119e68d902bb7443179c0c8aef30090e999" +dependencies = [ + "thiserror-core-impl", +] + +[[package]] +name = "thiserror-core-impl" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc" +checksum = "e4c60d69f36615a077cc7663b9cb8e42275722d23e58a7fa3d2c7f2915d09d04" dependencies = [ - "thiserror-impl 2.0.9", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] @@ -10918,18 +17815,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] name = "thiserror-impl" -version = "2.0.9" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] @@ -10957,6 +17854,30 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "thrift" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b82ca8f46f95b3ce96081fe3dd89160fdea970c254bb72925255d1b62aae692e" +dependencies = [ + "byteorder", + "integer-encoding", + "log", + "ordered-float", + "threadpool", +] + +[[package]] +name = "tikv-jemalloc-ctl" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "619bfed27d807b54f7f776b9430d4f8060e66ee138a28632ca898584d462c31c" +dependencies = [ + "libc", + "paste", + "tikv-jemalloc-sys", +] + [[package]] name = "tikv-jemalloc-sys" version = "0.5.4+5.3.0-patched" @@ -11021,44 +17942,85 @@ dependencies = [ name = "tinyvec" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "token-gateway-primitives" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2460ce8eabbf9f120d6d43350d6591a8a9e1f1d2c71854f35d81ad1026ca82" dependencies = [ - "tinyvec_macros", + "alloy-primitives 0.7.7", + "alloy-sol-macro 0.7.7", + "alloy-sol-types 0.7.7", + "anyhow", + "ismp", + "log", + "pallet-ismp", + "parity-scale-codec", + "polkadot-sdk 0.7.0", + "primitive-types", + "scale-info", ] [[package]] -name = "tinyvec_macros" -version = "0.1.1" +name = "tokio" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +checksum = "6703a273949a90131b290be1fe7b039d0fc884aa1935860dfcbe056f28cd8092" +dependencies = [ + "bytes 0.5.6", + "pin-project-lite 0.1.12", + "tokio-macros 0.2.6", +] [[package]] name = "tokio" -version = "1.42.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", - "bytes", + "bytes 1.10.0", "libc", "mio", "parking_lot 0.12.3", - "pin-project-lite", + "pin-project-lite 0.2.16", "signal-hook-registry", "socket2 0.5.8", - "tokio-macros", + "tokio-macros 2.5.0", "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.4.0" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "e44da00bfc73a25f814cd8d7e57a68a5c31b74b3152a0a1d1f590c97ed06265a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 1.0.109", +] + +[[package]] +name = "tokio-macros" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] @@ -11068,7 +18030,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ "rustls 0.21.12", - "tokio", + "tokio 1.43.0", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +dependencies = [ + "rustls 0.23.22", + "tokio 1.43.0", ] [[package]] @@ -11078,8 +18050,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", - "pin-project-lite", - "tokio", + "pin-project-lite 0.2.16", + "tokio 1.43.0", "tokio-util", ] @@ -11092,9 +18064,9 @@ dependencies = [ "futures-util", "log", "rustls 0.21.12", - "rustls-native-certs", - "tokio", - "tokio-rustls", + "rustls-native-certs 0.6.3", + "tokio 1.43.0", + "tokio-rustls 0.24.1", "tungstenite", ] @@ -11104,12 +18076,12 @@ version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ - "bytes", + "bytes 1.10.0", "futures-core", "futures-io", "futures-sink", - "pin-project-lite", - "tokio", + "pin-project-lite 0.2.16", + "tokio 1.43.0", ] [[package]] @@ -11123,9 +18095,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", "serde_spanned", @@ -11144,11 +18116,11 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.22" +version = "0.22.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "02a8b472d1a3d7c18e2d61a489aee3453fd9031c33e4f55bd533f4a7adca1bee" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.7.1", "serde", "serde_spanned", "toml_datetime", @@ -11164,7 +18136,7 @@ dependencies = [ "futures-core", "futures-util", "pin-project", - "pin-project-lite", + "pin-project-lite 0.2.16", "tower-layer", "tower-service", "tracing", @@ -11176,12 +18148,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.6.0", - "bytes", + "bitflags 2.8.0", + "bytes 1.10.0", "http 1.2.0", "http-body 1.0.1", "http-body-util", - "pin-project-lite", + "pin-project-lite 0.2.16", "tower-layer", "tower-service", ] @@ -11205,7 +18177,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", - "pin-project-lite", + "pin-project-lite 0.2.16", "tracing-attributes", "tracing-core", ] @@ -11218,7 +18190,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] @@ -11241,6 +18213,31 @@ dependencies = [ "tracing", ] +[[package]] +name = "tracing-gum" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a80e44b21df8263a676ddd28eb4ee4499d7e06778dbd9f5af4682c49f46c551" +dependencies = [ + "coarsetime", + "polkadot-primitives 16.0.0", + "tracing", + "tracing-gum-proc-macro", +] + +[[package]] +name = "tracing-gum-proc-macro" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f074568687ffdfd0adb6005aa8d1d96840197f2c159f80471285f08694cf0ce" +dependencies = [ + "expander", + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "tracing-log" version = "0.2.0" @@ -11314,7 +18311,7 @@ dependencies = [ "socket2 0.4.10", "thiserror 1.0.69", "tinyvec", - "tokio", + "tokio 1.43.0", "tracing", "url", ] @@ -11339,7 +18336,7 @@ dependencies = [ "smallvec", "thiserror 1.0.69", "tinyvec", - "tokio", + "tokio 1.43.0", "tracing", "url", ] @@ -11360,7 +18357,7 @@ dependencies = [ "resolv-conf", "smallvec", "thiserror 1.0.69", - "tokio", + "tokio 1.43.0", "tracing", "trust-dns-proto 0.23.2", ] @@ -11384,7 +18381,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" dependencies = [ "byteorder", - "bytes", + "bytes 1.10.0", "data-encoding", "http 0.2.12", "httparse", @@ -11397,6 +18394,12 @@ dependencies = [ "utf-8", ] +[[package]] +name = "tuplex" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "676ac81d5454c4dcf37955d34fa8626ede3490f744b86ca14a7b90168d2a08aa" + [[package]] name = "twox-hash" version = "1.6.3" @@ -11433,6 +18436,12 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + [[package]] name = "unicode-bidi" version = "0.3.18" @@ -11441,9 +18450,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.14" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" [[package]] name = "unicode-normalization" @@ -11454,6 +18463,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + [[package]] name = "unicode-width" version = "0.1.14" @@ -11489,7 +18504,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" dependencies = [ "asynchronous-codec", - "bytes", + "bytes 1.10.0", "futures-io", "futures-util", ] @@ -11500,7 +18515,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" dependencies = [ - "bytes", + "bytes 1.10.0", "tokio-util", ] @@ -11559,9 +18574,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "valuable" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "vcpkg" @@ -11590,8 +18605,8 @@ dependencies = [ "ark-bls12-377", "ark-bls12-381", "ark-ec", - "ark-ff", - "ark-serialize", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", "ark-serialize-derive", "arrayref", "constcat", @@ -11605,6 +18620,21 @@ dependencies = [ "zeroize", ] +[[package]] +name = "wait-timeout" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] + +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + [[package]] name = "walkdir" version = "2.5.0" @@ -11630,36 +18660,55 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wasix" +version = "0.12.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" +dependencies = [ + "wasi 0.11.0+wasi-snapshot-preview1", +] + [[package]] name = "wasm-bindgen" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.49" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", @@ -11670,9 +18719,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -11680,22 +18729,25 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasm-instrument" @@ -11752,7 +18804,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" dependencies = [ - "futures", + "futures 0.3.31", "js-sys", "parking_lot 0.11.2", "pin-utils", @@ -11761,34 +18813,65 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wasmi" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8281d1d660cdf54c76a3efa9ddd0c270cada1383a995db3ccb43d166456c7" +dependencies = [ + "smallvec", + "spin 0.9.8", + "wasmi_arena", + "wasmi_core 0.13.0", + "wasmparser-nostd", +] + [[package]] name = "wasmi" version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50386c99b9c32bd2ed71a55b6dd4040af2580530fae8bdb9a6576571a80d0cca" dependencies = [ - "arrayvec", + "arrayvec 0.7.6", "multi-stash", "num-derive", "num-traits", "smallvec", "spin 0.9.8", "wasmi_collections", - "wasmi_core", + "wasmi_core 0.32.3", "wasmparser-nostd", ] +[[package]] +name = "wasmi_arena" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073" + [[package]] name = "wasmi_collections" version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c128c039340ffd50d4195c3f8ce31aac357f06804cfc494c8b9508d4b30dca4" dependencies = [ - "ahash", + "ahash 0.8.11", "hashbrown 0.14.5", "string-interner", ] +[[package]] +name = "wasmi_core" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf1a7db34bff95b85c261002720c00c3a6168256dcb93041d3fa2054d19856a" +dependencies = [ + "downcast-rs", + "libm", + "num-traits", + "paste", +] + [[package]] name = "wasmi_core" version = "0.32.3" @@ -12017,9 +19100,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -12041,6 +19124,141 @@ version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +[[package]] +name = "webpki-roots" +version = "0.26.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "westend-runtime" +version = "18.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ddd83c760bea685ea0271fedbc139a26bc7cfe501027f89a51846007d8df91d" +dependencies = [ + "binary-merkle-tree", + "bitvec", + "frame-benchmarking", + "frame-election-provider-support", + "frame-executive", + "frame-metadata-hash-extension", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "hex-literal 0.4.1", + "log", + "pallet-asset-rate", + "pallet-authority-discovery", + "pallet-authorship", + "pallet-babe", + "pallet-bags-list", + "pallet-balances", + "pallet-beefy", + "pallet-beefy-mmr", + "pallet-collective", + "pallet-conviction-voting", + "pallet-delegated-staking", + "pallet-democracy", + "pallet-election-provider-multi-phase", + "pallet-election-provider-support-benchmarking", + "pallet-elections-phragmen", + "pallet-fast-unstake", + "pallet-grandpa", + "pallet-identity", + "pallet-indices", + "pallet-membership", + "pallet-message-queue", + "pallet-mmr", + "pallet-multisig", + "pallet-nomination-pools", + "pallet-nomination-pools-benchmarking", + "pallet-nomination-pools-runtime-api", + "pallet-offences", + "pallet-offences-benchmarking", + "pallet-parameters", + "pallet-preimage", + "pallet-proxy", + "pallet-recovery", + "pallet-referenda", + "pallet-root-testing", + "pallet-scheduler", + "pallet-session", + "pallet-session-benchmarking", + "pallet-society", + "pallet-staking", + "pallet-staking-runtime-api", + "pallet-state-trie-migration", + "pallet-sudo", + "pallet-timestamp", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "pallet-treasury", + "pallet-utility", + "pallet-vesting", + "pallet-whitelist", + "pallet-xcm", + "pallet-xcm-benchmarks", + "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "polkadot-runtime-common", + "polkadot-runtime-parachains", + "scale-info", + "serde", + "serde_derive", + "serde_json", + "smallvec", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-authority-discovery", + "sp-block-builder", + "sp-consensus-babe", + "sp-consensus-beefy", + "sp-consensus-grandpa", + "sp-core", + "sp-genesis-builder", + "sp-inherents", + "sp-io", + "sp-mmr-primitives", + "sp-npos-elections", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-staking 36.0.0", + "sp-storage", + "sp-transaction-pool", + "sp-version", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "substrate-wasm-builder", + "westend-runtime-constants", + "xcm-runtime-apis", +] + +[[package]] +name = "westend-runtime-constants" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06861bf945aadac59f4be23b44c85573029520ea9bd3d6c9ab21c8b306e81cdc" +dependencies = [ + "frame-support", + "polkadot-primitives 16.0.0", + "polkadot-runtime-common", + "smallvec", + "sp-core", + "sp-runtime", + "sp-weights", + "staging-xcm", + "staging-xcm-builder", +] + [[package]] name = "which" version = "4.4.2" @@ -12050,14 +19268,14 @@ dependencies = [ "either", "home", "once_cell", - "rustix 0.38.42", + "rustix 0.38.44", ] [[package]] name = "wide" -version = "0.7.30" +version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58e6db2670d2be78525979e9a5f9c69d296fd7d670549fe9ebf70f8708cb5019" +checksum = "41b5576b9a81633f3e8df296ce0063042a73507636cbe956c61133dd7034ab22" dependencies = [ "bytemuck", "safe_arch", @@ -12369,9 +19587,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.20" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +checksum = "86e376c75f4f43f44db463cf729e0d3acbf954d13e22c51e26e4c264b4ab545f" dependencies = [ "memchr", ] @@ -12386,6 +19604,15 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.8.0", +] + [[package]] name = "write16" version = "1.0.0" @@ -12456,12 +19683,51 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "10.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87fb4f14094d65c500a59bcf540cf42b99ee82c706edd6226a92e769ad60563e" dependencies = [ "Inflector", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", +] + +[[package]] +name = "xcm-runtime-apis" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f3d96bd7362d9e6884ef6762f08737d89205a358d059a0451353f3e91985ca5" +dependencies = [ + "frame-support", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-weights", + "staging-xcm", + "staging-xcm-executor", +] + +[[package]] +name = "xcm-simulator" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "058e21bfc3e1180bbd83cad3690d0e63f34f43ab309e338afe988160aa776fcf" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "paste", + "polkadot-core-primitives", + "polkadot-parachain-primitives", + "polkadot-primitives 16.0.0", + "polkadot-runtime-parachains", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", ] [[package]] @@ -12485,7 +19751,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed0164ae619f2dc144909a9f082187ebb5893693d8c0196e8085283ccd4b776" dependencies = [ - "futures", + "futures 0.3.31", "log", "nohash-hasher", "parking_lot 0.12.3", @@ -12523,7 +19789,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", "synstructure 0.13.1", ] @@ -12545,7 +19811,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] @@ -12565,7 +19831,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", "synstructure 0.13.1", ] @@ -12586,7 +19852,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] @@ -12608,7 +19874,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.98", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 1b791baab..0d040cd80 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace.package] -version = "7.2.0" +version = "7.3.0" authors = ["Cerebellum-Network"] edition = "2021" homepage = "https://cere.network/" @@ -30,6 +30,7 @@ resolver = "2" [workspace.dependencies] # 3rd-party dependencies +anyhow = { version = "1.0", default-features = false } base64ct = { version = "1.6.0" } blake2 = { version = "0.10.6", default-features = false } byte-unit = { version = "4.0.19", default-features = false, features = ["u128"] } @@ -58,123 +59,124 @@ scopeguard = { version = "1.2.0", default-features = false } # Substrate Dependencies # Please keey format such that: # dependency-name = { git = "X", tag = "Y", default-features = false } -frame-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -frame-benchmarking-cli = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -frame-election-provider-support = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -frame-executive = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -frame-support = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false, features = ["tuples-96"] } -frame-system = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -frame-system-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -frame-try-runtime = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -node-primitives = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-authority-discovery = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-authorship = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-babe = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-bags-list = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-balances = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-bounties = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-child-bounties = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-collective = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-contracts = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-democracy = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-election-provider-multi-phase = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-election-provider-support-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-elections-phragmen = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-fast-unstake = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-grandpa = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-identity = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-im-online = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-indices = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-insecure-randomness-collective-flip = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-membership = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-multisig = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-nomination-pools = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-nomination-pools-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-nomination-pools-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-offences = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-offences-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-preimage = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-proxy = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-recovery = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-scheduler = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-session = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false, features = ["historical"] } -pallet-session-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-staking = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-staking-reward-curve = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-sudo = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-timestamp = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-tips = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-transaction-payment = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-treasury = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-utility = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-vesting = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-conviction-voting = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-referenda = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -pallet-whitelist = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sc-authority-discovery = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sc-basic-authorship = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -sc-chain-spec = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -sc-cli = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -sc-client-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sc-consensus = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sc-consensus-babe = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sc-consensus-babe-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sc-consensus-epochs = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sc-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sc-consensus-grandpa-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sc-consensus-slots = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sc-executor = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -sc-network = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sc-network-common = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sc-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sc-rpc-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sc-service = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } +frame-benchmarking = { version = "38.0.0", default-features = false } +frame-benchmarking-cli = { version = "43.0.0", default-features = false } +frame-election-provider-support = { version = "38.0.0", default-features = false } +frame-executive = { version = "38.0.0", default-features = false } +frame-metadata-hash-extension = { version = "0.6.0", default-features = false } +frame-support = { version = "38.0.0", default-features = false, features = ["tuples-96"] } +frame-system = { version = "38.0.0", default-features = false } +frame-system-benchmarking = { version = "38.0.0", default-features = false } +frame-system-rpc-runtime-api = { version = "34.0.0", default-features = false } +frame-try-runtime = { version = "0.44.0", default-features = false } +pallet-authority-discovery = { version = "38.0.0", default-features = false } +pallet-authorship = { version = "38.0.0", default-features = false } +pallet-babe = { version = "38.0.0", default-features = false } +pallet-bags-list = { version = "37.0.0", default-features = false } +pallet-balances = { version = "39.0.0", default-features = false } +pallet-bounties = { version = "37.0.0", default-features = false } +pallet-child-bounties = { version = "37.0.0", default-features = false } +pallet-collective = { version = "38.0.0", default-features = false } +pallet-contracts = { version = "38.0.0", default-features = false } +pallet-democracy = { version = "38.0.0", default-features = false } +pallet-election-provider-multi-phase = { version = "37.0.0", default-features = false } +pallet-election-provider-support-benchmarking = { version = "37.0.0", default-features = false } +pallet-elections-phragmen = { version = "39.0.0", default-features = false } +pallet-fast-unstake = { version = "37.0.0", default-features = false } +pallet-grandpa = { version = "38.0.0", default-features = false } +pallet-identity = { version = "38.0.0", default-features = false } +pallet-im-online = { version = "37.0.0", default-features = false } +pallet-indices = { version = "38.0.0", default-features = false } +pallet-insecure-randomness-collective-flip = { version = "26.0.0", default-features = false } +pallet-membership = { version = "38.0.0", default-features = false } +pallet-multisig = { version = "38.0.0", default-features = false } +pallet-nomination-pools = { version = "35.0.0", default-features = false } +pallet-nomination-pools-benchmarking = { version = "36.0.0", default-features = false } +pallet-nomination-pools-runtime-api = { version = "33.0.0", default-features = false } +pallet-offences = { version = "37.0.0", default-features = false } +pallet-offences-benchmarking = { version = "38.0.0", default-features = false } +pallet-preimage = { version = "38.0.0", default-features = false } +pallet-proxy = { version = "38.0.0", default-features = false } +pallet-recovery = { version = "38.0.0", default-features = false } +pallet-scheduler = { version = "39.0.0", default-features = false } +pallet-session = { version = "38.0.0", default-features = false, features = ["historical"] } +pallet-session-benchmarking = { version = "38.0.0", default-features = false } +pallet-staking = { version = "38.0.0", default-features = false } +pallet-staking-reward-curve = { version = "12.0.0", default-features = false } +pallet-sudo = { version = "38.0.0", default-features = false } +pallet-timestamp = { version = "37.0.0", default-features = false } +pallet-tips = { version = "37.0.0", default-features = false } +pallet-transaction-payment = { version = "38.0.0", default-features = false } +pallet-transaction-payment-rpc = { version = "41.0.0", default-features = false } +pallet-transaction-payment-rpc-runtime-api = { version = "38.0.0", default-features = false } +pallet-treasury = { version = "37.0.0", default-features = false } +pallet-utility = { version = "38.0.0", default-features = false } +pallet-vesting = { version = "38.0.0", default-features = false } +pallet-conviction-voting = { version = "38.0.0", default-features = false } +pallet-referenda = { version = "38.0.0", default-features = false } +pallet-whitelist = { version = "37.0.0", default-features = false } +sc-authority-discovery = { version = "0.45.0", default-features = false } +sc-basic-authorship = { version = "0.45.0", default-features = false } +sc-chain-spec = { version = "38.0.0", default-features = false } +sc-cli = { version = "0.47.0", default-features = false } +sc-client-api = { version = "37.0.0", default-features = false } +sc-consensus = { version = "0.44.0", default-features = false } +sc-consensus-babe = { version = "0.45.0", default-features = false } +sc-consensus-babe-rpc = { version = "0.45.0", default-features = false } +sc-consensus-epochs = { version = "0.44.0", default-features = false } +sc-consensus-grandpa = { version = "0.30.0", default-features = false } +sc-consensus-grandpa-rpc = { version = "0.30.0", default-features = false } +sc-consensus-slots = { version = "0.44.0", default-features = false } +sc-executor = { version = "0.40.1", default-features = false } +sc-network = { version = "0.45.0", default-features = false } +sc-network-common = { version = "0.44.0", default-features = false } +sc-rpc = { version = "40.0.0", default-features = false } +sc-rpc-api = { version = "0.44.0", default-features = false } +sc-service = { version = "0.46.0", default-features = false } sc-sync-state = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -sc-sync-state-rpc = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -sc-sysinfo = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sc-telemetry = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sc-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sc-transaction-pool-api = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -sc-offchain = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -sp-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-application-crypto = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-arithmetic = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-authority-discovery = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-block-builder = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -sp-blockchain = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-consensus = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-consensus-babe = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } +sc-sync-state-rpc = { version = "0.45.0", default-features = false } +sc-sysinfo = { version = "38.0.0", default-features = false } +sc-telemetry = { version = "25.0.0", default-features = false } +sc-transaction-pool = { version = "37.0.0", default-features = false } +sc-transaction-pool-api = { version = "37.0.0", default-features = false } +sc-offchain = { version = "40.0.0", default-features = false } +sp-api = { version = "34.0.0", default-features = false } +sp-application-crypto = { version = "38.0.0", default-features = false } +sp-arithmetic = { version = "26.0.0", default-features = false } +sp-authority-discovery = { version = "34.0.0", default-features = false } +sp-block-builder = { version = "34.0.0", default-features = false } +sp-blockchain = { version = "37.0.1", default-features = false } +sp-consensus = { version = "0.40.0", default-features = false } +sp-consensus-babe = { version = "0.40.0", default-features = false } sp-consensus-babe-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } sp-consensus-epochs = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } +sp-consensus-grandpa = { version = "21.0.0", default-features = false } sp-consensus-grandpa-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-core = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false, features = ["serde"] } -sp-inherents = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-io = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-keystore = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-offchain = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } +sp-core = { version = "34.0.0", default-features = false, features = ["serde"] } +sp-inherents = { version = "34.0.0", default-features = false } +sp-io = { version = "38.0.0", default-features = false } +sp-keystore = { version = "0.40.0", default-features = false } +sp-mmr-primitives = { version = "34.1.0", default-features = false } +sp-offchain = { version = "34.0.0", default-features = false } +sp-rpc = { version = "32.0.0", default-features = false } sp-rpc-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-runtime = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-genesis-builder = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-session = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-staking = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-std = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-storage = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -sp-timestamp = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-tracing = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-transaction-storage-proof = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-trie = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -sp-version = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false } -substrate-build-script-utils = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -substrate-frame-rpc-system = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -substrate-state-trie-migration-rpc = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -substrate-test-utils = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } -substrate-wasm-builder = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2409", default-features = false } +sp-runtime = { version = "39.0.1", default-features = false } +sp-genesis-builder = { version = "0.15.1", default-features = false } +sp-session = { version = "36.0.0", default-features = false } +sp-staking = { version = "36.0.0", default-features = false } +sp-std = { version = "14.0.0", default-features = false } +sp-storage = { version = "21.0.0", default-features = false } +sp-timestamp = { version = "34.0.0", default-features = false } +sp-tracing = { version = "17.0.1", default-features = false } +sp-transaction-pool = { version = "34.0.0", default-features = false } +sp-transaction-storage-proof = { version = "34.0.0", default-features = false } +sp-trie = { version = "37.0.0", default-features = false } +sp-version = { version = "37.0.0", default-features = false } +substrate-build-script-utils = { version = "11.0.0", default-features = false } +substrate-frame-rpc-system = { version = "39.0.0", default-features = false } +substrate-state-trie-migration-rpc = { version = "38.0.0", default-features = false } +substrate-test-utils = { version = "3.0.0", default-features = false } +substrate-wasm-builder = { version = "24.0.1", default-features = false } # Cere Dependenies cere-client = { path = "node/client" } @@ -196,5 +198,14 @@ pallet-erc20 = { path = "pallets/erc20", default-features = false } pallet-erc721 = { path = "pallets/erc721", default-features = false } pallet-origins = { path = "pallets/origins", default-features = false } +# Hyperbridge +ismp = { default-features = false, version = "0.2.2" } +ismp-grandpa = { default-features = false, version = "16.0.0" } +pallet-hyperbridge = { default-features = false, version = "16.0.0" } +pallet-ismp = { default-features = false, version = "16.1.0" } +pallet-ismp-rpc = { default-features = false, version = "16.0.0" } +pallet-ismp-runtime-api = { default-features = false, version = "16.0.0" } +pallet-token-gateway = { default-features = false, version = "16.0.0" } + [profile.release] panic = "unwind" diff --git a/README.md b/README.md index 4ef451ec0..ca9df8b54 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ First, complete the [basic Rust setup instructions](./docs/rust-setup.md). Use the following command to build the node without launching it: ```sh -cargo +1.79.0 build --release +cargo +1.81.0 build --release ``` ## Run diff --git a/node/cli/src/command.rs b/node/cli/src/command.rs index 5026f4c4b..aea7e400b 100644 --- a/node/cli/src/command.rs +++ b/node/cli/src/command.rs @@ -80,7 +80,9 @@ macro_rules! unwrap_client { /// Parse and run command line arguments pub fn run() -> sc_cli::Result<()> { - let cli = Cli::from_args(); + let mut cli = Cli::from_args(); + + cli.run.base.offchain_worker_params.indexing_enabled = true; match &cli.subcommand { Some(Subcommand::Key(cmd)) => cmd.run(&cli), diff --git a/node/client/Cargo.toml b/node/client/Cargo.toml index cb8febb61..bb5f63f1b 100644 --- a/node/client/Cargo.toml +++ b/node/client/Cargo.toml @@ -13,10 +13,10 @@ repository.workspace = true futures = { workspace = true } # Substrate dependencies +ddc-primitives = { workspace = true, default-features = true } frame-benchmarking = { workspace = true, default-features = true } frame-system = { workspace = true, default-features = true } frame-system-rpc-runtime-api = { workspace = true, default-features = true } -node-primitives = { workspace = true, default-features = true } pallet-transaction-payment = { workspace = true, default-features = true } pallet-transaction-payment-rpc-runtime-api = { workspace = true, default-features = true } sc-client-api = { workspace = true, default-features = true } @@ -29,6 +29,7 @@ sp-blockchain = { workspace = true, default-features = true } sp-consensus = { workspace = true, default-features = true } sp-consensus-babe = { workspace = true, default-features = true } sp-consensus-grandpa = { workspace = true, default-features = true } +sp-core = { workspace = true, default-features = true } sp-inherents = { workspace = true, default-features = true } sp-io = { workspace = true, default-features = true } sp-offchain = { workspace = true, default-features = true } @@ -42,6 +43,9 @@ sp-transaction-pool = { workspace = true, default-features = true } cere-dev-runtime = { workspace = true, optional = true } cere-runtime = { workspace = true, optional = true } +pallet-ismp = { workspace = true, default-features = true } +pallet-ismp-runtime-api = { workspace = true, default-features = true } + [features] default = ["cere"] cere = ["cere-runtime"] diff --git a/node/client/src/lib.rs b/node/client/src/lib.rs index c476f3a10..7b2baf124 100644 --- a/node/client/src/lib.rs +++ b/node/client/src/lib.rs @@ -1,7 +1,7 @@ use std::sync::Arc; -use node_primitives::Nonce; -pub use node_primitives::{AccountId, Balance, Block, BlockNumber, Hash, Header, Signature}; +use ddc_primitives::Nonce; +pub use ddc_primitives::{AccountId, Balance, Block, BlockNumber, Hash, Header, Signature}; use sc_client_api::{ AuxStore, Backend as BackendT, BlockchainEvents, KeysIter, MerkleValue, PairsIter, UsageProvider, @@ -10,6 +10,7 @@ use sc_executor::WasmExecutor; use sp_api::{CallApiAt, ProvideRuntimeApi}; use sp_blockchain::{HeaderBackend, HeaderMetadata}; use sp_consensus::BlockStatus; +use sp_core::H256; use sp_runtime::{ generic::SignedBlock, traits::{BlakeTwo256, Block as BlockT, NumberFor}, @@ -484,6 +485,7 @@ pub trait RuntimeApiCollection: + sp_block_builder::BlockBuilder + frame_system_rpc_runtime_api::AccountNonceApi + pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi + + pallet_ismp_runtime_api::IsmpRuntimeApi + sp_api::Metadata + sp_offchain::OffchainWorkerApi + sp_session::SessionKeys @@ -499,6 +501,7 @@ impl RuntimeApiCollection for Api where + sp_block_builder::BlockBuilder + frame_system_rpc_runtime_api::AccountNonceApi + pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi + + pallet_ismp_runtime_api::IsmpRuntimeApi + sp_api::Metadata + sp_offchain::OffchainWorkerApi + sp_session::SessionKeys diff --git a/node/rpc/Cargo.toml b/node/rpc/Cargo.toml index 955650257..65f3d3507 100644 --- a/node/rpc/Cargo.toml +++ b/node/rpc/Cargo.toml @@ -13,7 +13,7 @@ repository.workspace = true jsonrpsee = { workspace = true, default-features = true } # Substrate dependencies -node-primitives = { workspace = true, default-features = true } +ddc-primitives = { workspace = true, default-features = true } pallet-transaction-payment-rpc = { workspace = true, default-features = true } sc-chain-spec = { workspace = true, default-features = true } sc-client-api = { workspace = true, default-features = true } @@ -31,7 +31,11 @@ sp-block-builder = { workspace = true, default-features = true } sp-blockchain = { workspace = true, default-features = true } sp-consensus = { workspace = true, default-features = true } sp-consensus-babe = { workspace = true, default-features = true } +sp-core = { workspace = true, default-features = true } sp-keystore = { workspace = true, default-features = true } sp-runtime = { workspace = true, default-features = true } substrate-frame-rpc-system = { workspace = true, default-features = true } substrate-state-trie-migration-rpc = { workspace = true, default-features = true } + +pallet-ismp-rpc = { workspace = true, default-features = true } +pallet-ismp-runtime-api = { workspace = true, default-features = true } diff --git a/node/rpc/src/lib.rs b/node/rpc/src/lib.rs index 371c8ee0f..a76cf76ef 100644 --- a/node/rpc/src/lib.rs +++ b/node/rpc/src/lib.rs @@ -7,9 +7,10 @@ use std::sync::Arc; +use ddc_primitives::{AccountId, Balance, Block, BlockNumber, Hash, Nonce}; use jsonrpsee::RpcModule; -use node_primitives::{AccountId, Balance, Block, BlockNumber, Hash, Nonce}; -use sc_client_api::AuxStore; +use pallet_ismp_rpc::{IsmpApiServer, IsmpRpcHandler}; +use sc_client_api::{AuxStore, BlockBackend, ProofProvider}; use sc_consensus_grandpa::{ FinalityProofProvider, GrandpaJustificationStream, SharedAuthoritySet, SharedVoterState, }; @@ -21,6 +22,7 @@ use sp_block_builder::BlockBuilder; use sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata}; use sp_consensus::SelectChain; use sp_consensus_babe::BabeApi; +use sp_core::H256; use sp_keystore::KeystorePtr; /// Extra dependencies for BABE. @@ -58,12 +60,14 @@ pub struct FullDeps { pub babe: BabeDeps, /// GRANDPA specific dependencies. pub grandpa: GrandpaDeps, + /// Backend used by the node. + pub backend: Arc, } /// Instantiate all full RPC extensions. pub fn create_full( deps: FullDeps, - backend: Arc, + _backend: Arc, ) -> Result, Box> where C: ProvideRuntimeApi @@ -74,10 +78,13 @@ where + Sync + Send + 'static, + C: BlockBackend, + C: ProofProvider, C::Api: substrate_frame_rpc_system::AccountNonceApi, C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi, C::Api: BabeApi, C::Api: BlockBuilder, + C::Api: pallet_ismp_runtime_api::IsmpRuntimeApi, P: TransactionPool + 'static, SC: SelectChain + 'static, B: sc_client_api::Backend + Send + Sync + 'static, @@ -92,7 +99,7 @@ where use substrate_state_trie_migration_rpc::StateMigrationApiServer; let mut io = RpcModule::new(()); - let FullDeps { client, pool, select_chain, chain_spec, babe, grandpa, .. } = deps; + let FullDeps { client, pool, select_chain, chain_spec, babe, grandpa, backend } = deps; let BabeDeps { babe_worker_handle, keystore } = babe; let GrandpaDeps { @@ -128,9 +135,11 @@ where )?; io.merge( - substrate_state_trie_migration_rpc::StateMigration::new(client.clone(), backend).into_rpc(), + substrate_state_trie_migration_rpc::StateMigration::new(client.clone(), backend.clone()) + .into_rpc(), )?; - io.merge(Dev::new(client).into_rpc())?; + io.merge(Dev::new(client.clone()).into_rpc())?; + io.merge(IsmpRpcHandler::new(client, backend)?.into_rpc())?; Ok(io) } diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index 80f19aff1..d2256530b 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -16,8 +16,8 @@ rand = { workspace = true, default-features = true } serde = { workspace = true, default-features = true } # Substrate dependencies +ddc-primitives = { workspace = true } frame-benchmarking-cli = { workspace = true } -node-primitives = { workspace = true } pallet-im-online = { workspace = true } sc-authority-discovery = { workspace = true } sc-basic-authorship = { workspace = true } @@ -56,7 +56,6 @@ cere-runtime-common = { workspace = true, optional = true } cere-dev-runtime = { workspace = true, optional = true } cere-runtime = { workspace = true, optional = true } -ddc-primitives = { workspace = true } [features] default = ["cere-native"] diff --git a/node/service/src/chain_spec.rs b/node/service/src/chain_spec.rs index 0a0564684..f8f3dcbf5 100644 --- a/node/service/src/chain_spec.rs +++ b/node/service/src/chain_spec.rs @@ -7,8 +7,8 @@ use cere_runtime_common::constants::currency::DOLLARS as TEST_UNITS; #[cfg(feature = "cere-native")] use cere_runtime_common::constants::currency::DOLLARS; use ddc_primitives::sr25519::AuthorityId as DdcVerificationId; +pub use ddc_primitives::{AccountId, Balance, Block, Signature}; use jsonrpsee::core::__reexports::serde_json; -pub use node_primitives::{AccountId, Balance, Block, Signature}; use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use sc_chain_spec::ChainSpecExtension; use sc_service::ChainType; diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index 6e2f652b9..5720c8c3b 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -29,7 +29,7 @@ pub use cere_client::{ RuntimeApiCollection, }; pub use chain_spec::{CereChainSpec, CereDevChainSpec}; -pub use node_primitives::{Block, BlockNumber}; +pub use ddc_primitives::{Block, BlockNumber}; use sc_executor::{HeapAllocStrategy, DEFAULT_HEAP_ALLOC_STRATEGY}; pub use sc_service::ChainSpec; use sc_transaction_pool_api::OffchainTransactionPoolFactory; @@ -230,6 +230,7 @@ where subscription_executor, finality_provider: finality_proof_provider.clone(), }, + backend: rpc_backend.clone(), }; cere_rpc::create_full(deps, rpc_backend.clone()).map_err(Into::into) diff --git a/pallets/chainbridge/src/lib.rs b/pallets/chainbridge/src/lib.rs index 12d48340a..0d2122a3f 100644 --- a/pallets/chainbridge/src/lib.rs +++ b/pallets/chainbridge/src/lib.rs @@ -1,7 +1,7 @@ #![allow(clippy::all)] // Ensure we're `no_std` when compiling for Wasm. #![cfg_attr(not(feature = "std"), no_std)] - +#![allow(clippy::manual_inspect)] pub mod weights; use crate::weights::WeightInfo; diff --git a/pallets/ddc-clusters-gov/src/lib.rs b/pallets/ddc-clusters-gov/src/lib.rs index 85660c1bc..070f9c807 100644 --- a/pallets/ddc-clusters-gov/src/lib.rs +++ b/pallets/ddc-clusters-gov/src/lib.rs @@ -13,7 +13,7 @@ #![cfg_attr(not(feature = "std"), no_std)] #![recursion_limit = "256"] - +#![allow(clippy::manual_inspect)] use codec::{Decode, Encode}; #[cfg(feature = "runtime-benchmarks")] use ddc_primitives::traits::staking::StakerCreator; diff --git a/pallets/ddc-clusters/src/lib.rs b/pallets/ddc-clusters/src/lib.rs index 6f556d104..319bcfaff 100644 --- a/pallets/ddc-clusters/src/lib.rs +++ b/pallets/ddc-clusters/src/lib.rs @@ -12,7 +12,7 @@ //! `GenesisConfig` is optional and allow to set some initial nodes in DDC. #![cfg_attr(not(feature = "std"), no_std)] #![recursion_limit = "256"] - +#![allow(clippy::manual_inspect)] pub mod weights; use crate::weights::WeightInfo; diff --git a/pallets/ddc-customers/src/lib.rs b/pallets/ddc-customers/src/lib.rs index 91547c0a5..35002fb8b 100644 --- a/pallets/ddc-customers/src/lib.rs +++ b/pallets/ddc-customers/src/lib.rs @@ -1,6 +1,6 @@ #![cfg_attr(not(feature = "std"), no_std)] #![recursion_limit = "256"] - +#![allow(clippy::manual_inspect)] pub mod weights; use crate::weights::WeightInfo; diff --git a/pallets/ddc-nodes/src/lib.rs b/pallets/ddc-nodes/src/lib.rs index df472d824..a1e4e54dd 100644 --- a/pallets/ddc-nodes/src/lib.rs +++ b/pallets/ddc-nodes/src/lib.rs @@ -13,7 +13,7 @@ #![cfg_attr(not(feature = "std"), no_std)] #![recursion_limit = "256"] - +#![allow(clippy::manual_inspect)] #[cfg(test)] pub(crate) mod mock; #[cfg(test)] diff --git a/pallets/ddc-payouts/src/lib.rs b/pallets/ddc-payouts/src/lib.rs index 3d296d872..b8c28c17b 100644 --- a/pallets/ddc-payouts/src/lib.rs +++ b/pallets/ddc-payouts/src/lib.rs @@ -13,7 +13,7 @@ #![cfg_attr(not(feature = "std"), no_std)] #![recursion_limit = "256"] - +#![allow(clippy::manual_inspect)] // todo(yahortsaryk) tests for DAC v4 payments should be completely revised // #[cfg(test)] // pub(crate) mod mock; diff --git a/pallets/ddc-staking/src/lib.rs b/pallets/ddc-staking/src/lib.rs index 25d33fd89..91e1d3c34 100644 --- a/pallets/ddc-staking/src/lib.rs +++ b/pallets/ddc-staking/src/lib.rs @@ -12,7 +12,7 @@ //! `GenesisConfig` is optional and allow to set some initial stakers in DDC. #![cfg_attr(not(feature = "std"), no_std)] #![recursion_limit = "256"] - +#![allow(clippy::manual_inspect)] #[cfg(feature = "runtime-benchmarks")] pub mod benchmarking; #[cfg(any(feature = "runtime-benchmarks", test))] diff --git a/pallets/ddc-verification/src/benchmarking.rs b/pallets/ddc-verification/src/benchmarking.rs index c4bca621d..4cb599a5a 100644 --- a/pallets/ddc-verification/src/benchmarking.rs +++ b/pallets/ddc-verification/src/benchmarking.rs @@ -22,7 +22,7 @@ mod benchmarks { fn create_validator_account() -> T::AccountId { let validator = create_account::("validator_account", 0, 0); - ValidatorToStashKey::::insert(&validator.clone(), &validator.clone()); + ValidatorToStashKey::::insert(validator.clone(), validator.clone()); ValidatorSet::::put(vec![validator.clone()]); validator } diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index b56d775d2..f1589e127 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -8,7 +8,7 @@ #![allow(clippy::missing_docs_in_private_items)] #![cfg_attr(not(feature = "std"), no_std)] #![recursion_limit = "256"] - +#![allow(clippy::manual_inspect)] use core::str; use base64ct::{Base64, Encoding}; @@ -3401,7 +3401,8 @@ pub mod pallet { fn fetch_inspection_receipts( cluster_id: &ClusterId, ehd_id: EHDId, - ) -> Result, OCWError> { + ) -> Result, OCWError> + { // todo(yahortsaryk): infer the node deterministically let g_collector = Self::get_g_collectors_nodes(cluster_id) .map_err(|_| OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })? diff --git a/pallets/origins/src/lib.rs b/pallets/origins/src/lib.rs index a8ae6d921..a502cf481 100644 --- a/pallets/origins/src/lib.rs +++ b/pallets/origins/src/lib.rs @@ -1,7 +1,7 @@ //! Custom origins for governance interventions. #![cfg_attr(not(feature = "std"), no_std)] - +#![allow(clippy::manual_inspect)] pub use pallet::*; #[frame_support::pallet] diff --git a/primitives/src/lib.rs b/primitives/src/lib.rs index 18f87adc7..a14f8237a 100644 --- a/primitives/src/lib.rs +++ b/primitives/src/lib.rs @@ -10,7 +10,11 @@ use scale_info::{ }; use serde::{Deserialize, Serialize}; use sp_core::{crypto::KeyTypeId, hash::H160, H256}; -use sp_runtime::{AccountId32, Perquintill, RuntimeDebug}; +use sp_runtime::{ + generic, + traits::{BlakeTwo256, IdentifyAccount, Verify}, + AccountId32, MultiSignature, OpaqueExtrinsic, Perquintill, RuntimeDebug, +}; use sp_std::collections::btree_set::BTreeSet; pub mod traits; use sp_std::str::FromStr; @@ -22,6 +26,35 @@ parameter_types! { pub MaxDomainLen: u8 = 255; } +/// An index to a block. +pub type BlockNumber = u32; +/// Alias to 512-bit hash when used in the context of a transaction signature on the chain. +pub type Signature = MultiSignature; +/// Some way of identifying an account on the chain. We intentionally make it equivalent +/// to the public key of our transaction signing scheme. +pub type AccountId = <::Signer as IdentifyAccount>::AccountId; +/// The type for looking up accounts. We don't expect more than 4 billion of them. +pub type AccountIndex = u32; +/// Balance of an account. +pub type Balance = u128; +/// Type used for expressing timestamp. +pub type Moment = u64; +/// Index of a transaction in the chain. +pub type Nonce = u32; +/// A hash of some data used by the chain. +pub type Hash = sp_core::H256; +/// A timestamp: milliseconds since the unix epoch. +/// `u64` is enough to represent a duration of half a billion years, when the +/// time scale is milliseconds. +pub type Timestamp = u64; +/// Digest item type. +pub type DigestItem = generic::DigestItem; +/// Header type. +pub type Header = generic::Header; +/// Block type. +pub type Block = generic::Block; +/// Block ID. +pub type BlockId = generic::BlockId; pub const MAX_PAYOUT_BATCH_COUNT: u16 = 1000; pub const MAX_PAYOUT_BATCH_SIZE: u16 = 500; pub const MILLICENTS: u128 = 100_000; diff --git a/runtime/cere-dev/Cargo.toml b/runtime/cere-dev/Cargo.toml index e20db126f..58832ec58 100644 --- a/runtime/cere-dev/Cargo.toml +++ b/runtime/cere-dev/Cargo.toml @@ -28,7 +28,6 @@ frame-system = { workspace = true } frame-system-benchmarking = { workspace = true, optional = true } frame-system-rpc-runtime-api = { workspace = true } frame-try-runtime = { workspace = true, optional = true } -node-primitives = { workspace = true } pallet-authority-discovery = { workspace = true } pallet-authorship = { workspace = true } pallet-babe = { workspace = true } @@ -107,6 +106,17 @@ pallet-erc20 = { workspace = true } pallet-erc721 = { workspace = true } pallet-origins = { workspace = true } +# Hyperbridge Depedencies +anyhow = { workspace = true } +frame-metadata-hash-extension = { workspace = true } +ismp = { workspace = true } +ismp-grandpa = { workspace = true } +pallet-hyperbridge = { workspace = true } +pallet-ismp = { workspace = true, features = ["unsigned"] } +pallet-ismp-runtime-api = { workspace = true } +pallet-token-gateway = { workspace = true } +sp-mmr-primitives = { workspace = true } + [build-dependencies] substrate-wasm-builder = { workspace = true, default-features = true } @@ -123,7 +133,7 @@ std = [ "frame-system-rpc-runtime-api/std", "frame-system/std", "frame-try-runtime/std", - "node-primitives/std", + "ddc-primitives/std", "pallet-collective/std", "pallet-contracts/std", "pallet-democracy/std", @@ -195,6 +205,14 @@ std = [ "pallet-ddc-clusters-gov/std", "sp-arithmetic/std", "pallet-origins/std", + "pallet-hyperbridge/std", + "ismp/std", + "pallet-ismp/std", + "pallet-ismp-runtime-api/std", + "ismp-grandpa/std", + "anyhow/std", + "frame-metadata-hash-extension/std", + "pallet-token-gateway/std", ] runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", @@ -248,6 +266,7 @@ runtime-benchmarks = [ "pallet-ddc-clusters-gov/runtime-benchmarks", "pallet-origins/runtime-benchmarks", "pallet-ddc-verification/runtime-benchmarks", + "pallet-token-gateway/runtime-benchmarks", ] try-runtime = [ "frame-executive/try-runtime", @@ -303,4 +322,8 @@ try-runtime = [ "pallet-origins/try-runtime", "pallet-ddc-clusters-gov/try-runtime", "pallet-ddc-verification/try-runtime", + "pallet-ismp/try-runtime", + "pallet-hyperbridge/try-runtime", + "ismp-grandpa/try-runtime", + "pallet-token-gateway/try-runtime", ] diff --git a/runtime/cere-dev/src/hyperbridge_ismp.rs b/runtime/cere-dev/src/hyperbridge_ismp.rs new file mode 100644 index 000000000..ffde474fc --- /dev/null +++ b/runtime/cere-dev/src/hyperbridge_ismp.rs @@ -0,0 +1,240 @@ +use frame_support::parameter_types; +use frame_system::EnsureRoot; +use ismp::{error::Error, host::StateMachine, module::IsmpModule, router::IsmpRouter}; +use ismp_grandpa::consensus::GrandpaConsensusClient; +use pallet_token_gateway::types::EvmToSubstrate; +use sp_core::H160; + +use super::*; + +parameter_types! { + // The hyperbridge parachain on Polkadot + pub const Coprocessor: Option = Some(StateMachine::Kusama(4009)); + // The host state machine of this pallet, this must be unique to all every solochain + pub const HostStateMachine: StateMachine = StateMachine::Substrate(*b"cere"); // your unique chain id here +} + +impl pallet_ismp::Config for Runtime { + // Configure the runtime event + type RuntimeEvent = RuntimeEvent; + // Permissioned origin who can create or update consensus clients + type AdminOrigin = EnsureRoot; + // The state machine identifier for this state machine + type HostStateMachine = HostStateMachine; + // The pallet_timestamp pallet + type TimestampProvider = Timestamp; + // The currency implementation that is offered to relayers + // this could also be `frame_support::traits::tokens::fungible::ItemOf` + type Currency = Balances; + // The balance type for the currency implementation + type Balance = Balance; + // Router implementation for routing requests/responses to their respective modules + type Router = ModuleRouter; + // Optional coprocessor for incoming requests/responses + type Coprocessor = Coprocessor; + // Supported consensus clients + type ConsensusClients = ( + // Add the grandpa consensus client here + GrandpaConsensusClient, + ); + // Offchain database implementation. Outgoing requests and responses are + // inserted in this database, while their commitments are stored onchain. + // + // The default implementation for `()` should suffice + type OffchainDB = (); + // Weight provider for local modules + type WeightProvider = (); +} + +impl pallet_hyperbridge::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type IsmpHost = Ismp; +} + +#[derive(Default)] +pub struct ModuleRouter; + +impl IsmpRouter for ModuleRouter { + fn module_for_id(&self, id: Vec) -> Result, anyhow::Error> { + return match id.as_slice() { + id if TokenGateway::is_token_gateway(id) => Ok(Box::new(TokenGateway::default())), + pallet_hyperbridge::PALLET_HYPERBRIDGE_ID => + Ok(Box::new(pallet_hyperbridge::Pallet::::default())), + _ => Err(Error::ModuleNotFound(id).into()), + }; + } +} + +impl ismp_grandpa::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type IsmpHost = Ismp; + type WeightInfo = weights::ismp_grandpa::WeightInfo; +} + +parameter_types! { + // A constant that should represent the native asset id, this id must be unique to the native currency + pub const NativeAssetId: u32 = 0; + // Set the correct decimals for the native currency + pub const Decimals: u8 = 10; +} + +/// Should provide an account that is funded and can be used to pay for asset creation +pub struct AssetAdmin; +impl Get for AssetAdmin { + fn get() -> AccountId { + Treasury::account_id() + } +} + +pub struct MockAssets; + +impl fungibles::metadata::Inspect for MockAssets { + fn name(_asset: Self::AssetId) -> Vec { + vec![] + } + + fn symbol(_asset: Self::AssetId) -> Vec { + vec![] + } + + fn decimals(_asset: Self::AssetId) -> u8 { + 0 + } +} +impl Unbalanced for MockAssets { + fn handle_dust(_dust: Dust) {} + + fn write_balance( + _asset: Self::AssetId, + _who: &AccountId, + _amount: Self::Balance, + ) -> Result, DispatchError> { + Ok(None) + } + + fn set_total_issuance(_asset: Self::AssetId, _amount: Self::Balance) {} +} + +impl fungibles::Mutate for MockAssets {} + +impl Inspect for MockAssets { + type AssetId = Balance; + type Balance = Balance; + + fn total_issuance(_asset: Self::AssetId) -> Self::Balance { + 0 + } + + fn minimum_balance(_asset: Self::AssetId) -> Self::Balance { + 0 + } + + fn total_balance(_asset: Self::AssetId, _who: &AccountId) -> Self::Balance { + 0 + } + + fn balance(_asset: Self::AssetId, _who: &AccountId) -> Self::Balance { + 0 + } + + fn reducible_balance( + _asset: Self::AssetId, + _who: &AccountId, + _preservation: Preservation, + _force: Fortitude, + ) -> Self::Balance { + 0 + } + + fn can_deposit( + _asset: Self::AssetId, + _who: &AccountId, + _amount: Self::Balance, + _provenance: Provenance, + ) -> DepositConsequence { + DepositConsequence::UnknownAsset + } + + fn can_withdraw( + _asset: Self::AssetId, + _who: &AccountId, + _amount: Self::Balance, + ) -> WithdrawConsequence { + WithdrawConsequence::UnknownAsset + } + + fn asset_exists(_asset: Self::AssetId) -> bool { + false + } +} + +impl fungibles::Create for MockAssets { + fn create( + _id: Self::AssetId, + _admin: AccountId, + _is_sufficient: bool, + _min_balance: Self::Balance, + ) -> DispatchResult { + Ok(()) + } +} + +impl fungibles::metadata::Mutate for MockAssets { + fn set( + _asset: Self::AssetId, + _from: &AccountId, + _name: Vec, + _symbol: Vec, + _decimals: u8, + ) -> frame_support::dispatch::DispatchResult { + Ok(()) + } +} + +impl fungibles::roles::Inspect for MockAssets { + fn owner(_asset: Self::AssetId) -> Option { + None + } + + fn issuer(_asset: Self::AssetId) -> Option { + None + } + + fn admin(_asset: Self::AssetId) -> Option { + None + } + + fn freezer(_asset: Self::AssetId) -> Option { + None + } +} + +pub struct EvmToSubstrateFactory; + +impl EvmToSubstrate for EvmToSubstrateFactory { + fn convert(addr: H160) -> AccountId { + let mut account = [0u8; 32]; + account[12..].copy_from_slice(&addr.0); + account.into() + } +} + +impl pallet_token_gateway::Config for Runtime { + // configure the runtime event + type RuntimeEvent = RuntimeEvent; + // Configured as Pallet Ismp + type Dispatcher = pallet_hyperbridge::Pallet; + // Configured as Pallet Assets + type Assets = MockAssets; + // Configured as Pallet balances + type NativeCurrency = Balances; + // AssetAdmin account + type AssetAdmin = AssetAdmin; + // The Native asset Id + type NativeAssetId = NativeAssetId; + // The precision of the native asset + type Decimals = Decimals; + type EvmToSubstrate = EvmToSubstrateFactory; + type WeightInfo = weights::pallet_token_gateway::SubstrateWeight; + type CreateOrigin = EnsureSigned; +} diff --git a/runtime/cere-dev/src/lib.rs b/runtime/cere-dev/src/lib.rs index bd6958a8d..d0995dd20 100644 --- a/runtime/cere-dev/src/lib.rs +++ b/runtime/cere-dev/src/lib.rs @@ -20,13 +20,15 @@ #![cfg_attr(not(feature = "std"), no_std)] // `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. -#![recursion_limit = "256"] +#![recursion_limit = "512"] use codec::{Decode, Encode, MaxEncodedLen}; use ddc_primitives::{ traits::pallet::{GetDdcOrigin, PalletVisitor}, - MAX_PAYOUT_BATCH_COUNT, MAX_PAYOUT_BATCH_SIZE, + AccountIndex, Balance, BlockNumber, Hash, Moment, Nonce, MAX_PAYOUT_BATCH_COUNT, + MAX_PAYOUT_BATCH_SIZE, }; +pub use ddc_primitives::{AccountId, Signature}; use frame_election_provider_support::{ bounds::ElectionBoundsBuilder, onchain, BalancingConfig, SequentialPhragmen, VoteWeight, }; @@ -38,7 +40,12 @@ use frame_support::{ parameter_types, traits::{ fungible::HoldConsideration, - tokens::{PayFromAccount, UnityAssetBalanceConversion}, + fungibles, + fungibles::{Dust, Inspect, Unbalanced}, + tokens::{ + DepositConsequence, Fortitude, PayFromAccount, Preservation, Provenance, + UnityAssetBalanceConversion, WithdrawConsequence, + }, ConstBool, ConstU128, ConstU16, ConstU32, Currency, EitherOf, EitherOfDiverse, EqualPrivilegeOnly, Imbalance, InstanceFilter, KeyOwnerProofSystem, LinearStoragePrice, Nothing, OnUnbalanced, VariantCountOf, WithdrawReasons, @@ -57,8 +64,6 @@ use frame_system::{ limits::{BlockLength, BlockWeights}, EnsureRoot, EnsureSigned, }; -pub use node_primitives::{AccountId, Signature}; -use node_primitives::{AccountIndex, Balance, BlockNumber, Hash, Moment, Nonce}; #[cfg(any(feature = "std", test))] pub use pallet_balances::Call as BalancesCall; pub use pallet_chainbridge; @@ -102,8 +107,8 @@ use sp_runtime::{ StaticLookup, Verify, }, transaction_validity::{TransactionPriority, TransactionSource, TransactionValidity}, - ApplyExtrinsicResult, FixedPointNumber, FixedU128, Perbill, Percent, Permill, Perquintill, - RuntimeDebug, + ApplyExtrinsicResult, DispatchError, DispatchResult, FixedPointNumber, FixedU128, Perbill, + Percent, Permill, Perquintill, RuntimeDebug, }; use sp_std::{marker::PhantomData, prelude::*}; #[cfg(any(feature = "std", test))] @@ -130,6 +135,14 @@ use governance::{ /// Generated voter bag information. mod voter_bags; +use ismp::{ + consensus::{ConsensusClientId, StateMachineHeight, StateMachineId}, + host::StateMachine, + router::{Request, Response}, +}; +use sp_core::H256; +mod hyperbridge_ismp; +mod weights; // Make the WASM binary available. #[cfg(feature = "std")] @@ -155,7 +168,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 72007, + spec_version: 73000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 24, @@ -961,6 +974,7 @@ where frame_system::CheckNonce::::from(nonce), frame_system::CheckWeight::::new(), pallet_transaction_payment::ChargeTransactionPayment::::from(tip), + frame_metadata_hash_extension::CheckMetadataHash::new(false), ); let raw_payload = SignedPayload::new(call, extra) .map_err(|e| { @@ -1506,6 +1520,19 @@ mod runtime { #[runtime::pallet_index(46)] pub type DdcClustersGov = pallet_ddc_clusters_gov::Pallet; + + #[runtime::pallet_index(47)] + pub type Ismp = pallet_ismp::Pallet; + + #[runtime::pallet_index(48)] + pub type IsmpGrandpa = ismp_grandpa::Pallet; + + // End OpenGov. + #[runtime::pallet_index(49)] + pub type Hyperbridge = pallet_hyperbridge::Pallet; + + #[runtime::pallet_index(50)] + pub type TokenGateway = pallet_token_gateway::Pallet; } /// The address format for describing accounts. @@ -1532,6 +1559,7 @@ pub type SignedExtra = ( frame_system::CheckNonce, frame_system::CheckWeight, pallet_transaction_payment::ChargeTransactionPayment, + frame_metadata_hash_extension::CheckMetadataHash, ); /// Unchecked extrinsic type as expected by this runtime. @@ -1600,6 +1628,7 @@ mod benches { [pallet_collective, TechComm] [pallet_ddc_clusters_gov, DdcClustersGov] [pallet_ddc_verification, DdcVerification] + [pallet_token_gateway, TokenGateway] ); } @@ -1844,6 +1873,44 @@ impl_runtime_apis! { } } + impl pallet_ismp_runtime_api::IsmpRuntimeApi::Hash> for Runtime { + fn host_state_machine() -> StateMachine { + ::HostStateMachine::get() + } + + fn challenge_period(id: StateMachineId) -> Option { + pallet_ismp::Pallet::::challenge_period(id) + } + + fn block_events() -> Vec { + pallet_ismp::Pallet::::block_events() + } + + fn block_events_with_metadata() -> Vec<(ismp::events::Event, Option)> { + pallet_ismp::Pallet::::block_events_with_metadata() + } + + fn consensus_state(id: ConsensusClientId) -> Option> { + pallet_ismp::Pallet::::consensus_states(id) + } + + fn state_machine_update_time(height: StateMachineHeight) -> Option { + pallet_ismp::Pallet::::state_machine_update_time(height) + } + + fn latest_state_machine_height(id: StateMachineId) -> Option { + pallet_ismp::Pallet::::latest_state_machine_height(id) + } + + fn requests(commitments: Vec) -> Vec { + pallet_ismp::Pallet::::requests(commitments) + } + + fn responses(commitments: Vec) -> Vec { + pallet_ismp::Pallet::::responses(commitments) + } + } + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi< Block, Balance, diff --git a/runtime/cere-dev/src/weights/ismp_grandpa.rs b/runtime/cere-dev/src/weights/ismp_grandpa.rs new file mode 100644 index 000000000..d20a7327b --- /dev/null +++ b/runtime/cere-dev/src/weights/ismp_grandpa.rs @@ -0,0 +1,62 @@ + +//! Autogenerated weights for `ismp_grandpa` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 42.0.0 +//! DATE: 2024-12-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `polytope-labs`, CPU: `AMD Ryzen Threadripper PRO 5995WX 64-Cores` +//! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: 1024 + +// Executed Command: +// target/release/hyperbridge +// benchmark +// pallet +// --wasm-execution=compiled +// --pallet=ismp_grandpa +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --genesis-builder=runtime +// --runtime=./target/release/wbuild/gargantua-runtime/gargantua_runtime.compact.wasm +// --output=parachain/runtimes/gargantua/src/weights/ismp_grandpa.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::Weight}; +use core::marker::PhantomData; + +/// Weight functions for `ismp_grandpa`. +pub struct WeightInfo(PhantomData); +impl ismp_grandpa::WeightInfo for WeightInfo { + /// Storage: `IsmpGrandpa::SupportedStateMachines` (r:0 w:100) + /// Proof: `IsmpGrandpa::SupportedStateMachines` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[1, 100]`. + fn add_state_machines(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_913_000 picoseconds. + Weight::from_parts(7_832_568, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 7_710 + .saturating_add(Weight::from_parts(1_434_418, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) + } + /// Storage: `IsmpGrandpa::SupportedStateMachines` (r:0 w:100) + /// Proof: `IsmpGrandpa::SupportedStateMachines` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[1, 100]`. + fn remove_state_machines(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_204_000 picoseconds. + Weight::from_parts(5_126_127, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 8_195 + .saturating_add(Weight::from_parts(1_417_249, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) + } +} diff --git a/runtime/cere-dev/src/weights/mod.rs b/runtime/cere-dev/src/weights/mod.rs new file mode 100644 index 000000000..d89101a2f --- /dev/null +++ b/runtime/cere-dev/src/weights/mod.rs @@ -0,0 +1,2 @@ +pub mod ismp_grandpa; +pub mod pallet_token_gateway; diff --git a/runtime/cere-dev/src/weights/pallet_token_gateway.rs b/runtime/cere-dev/src/weights/pallet_token_gateway.rs new file mode 100644 index 000000000..6e4fa1ecd --- /dev/null +++ b/runtime/cere-dev/src/weights/pallet_token_gateway.rs @@ -0,0 +1,111 @@ +//! Autogenerated weights for pallet_token_gateway +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 42.0.0 +//! DATE: 2025-02-03, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `192.168.1.5`, CPU: `` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 + +// Executed Command: +// ./target/release/cere +// benchmark +// pallet +// --chain +// dev +// --wasm-execution=compiled +// --pallet +// pallet_token_gateway +// --extrinsic +// * +// --steps +// 50 +// --repeat +// 20 +// --output=./runtime/cere-dev/src/weights/pallet_token_gateway.rs +// --template=./.maintain/frame-weight-template.hbs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use sp_std::marker::PhantomData; + +/// Weights for pallet_token_gateway using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl pallet_token_gateway::WeightInfo for SubstrateWeight { + // Storage: `Hyperbridge::HostParams` (r:1 w:0) + // Proof: `Hyperbridge::HostParams` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + // Storage: `Ismp::Nonce` (r:1 w:1) + // Proof: `Ismp::Nonce` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + // Storage: `TokenGateway::Precisions` (r:0 w:100) + // Proof: `TokenGateway::Precisions` (`max_values`: None, `max_size`: None, mode: `Measured`) + // Storage: `TokenGateway::NativeAssets` (r:0 w:1) + // Proof: `TokenGateway::NativeAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + // Storage: `TokenGateway::LocalAssets` (r:0 w:1) + // Proof: `TokenGateway::LocalAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + // Storage: `TokenGateway::SupportedAssets` (r:0 w:1) + // Proof: `TokenGateway::SupportedAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + // Storage: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e747356aa03068021c89766e6f0dc869c` (r:1 w:1) + // Proof: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e747356aa03068021c89766e6f0dc869c` (r:1 w:1) + // Storage: UNKNOWN KEY `0x526571756573745061796d656e7456aa03068021c89766e6f0dc869cadd7cfc2` (r:0 w:1) + // Proof: UNKNOWN KEY `0x526571756573745061796d656e7456aa03068021c89766e6f0dc869cadd7cfc2` (r:0 w:1) + /// The range of component `x` is `[1, 100]`. + fn create_erc6160_asset(x: u32, ) -> Weight { + Weight::from_parts(22_256_047_u64, 0) + // Standard Error: 3_063 + .saturating_add(Weight::from_parts(1_733_865_u64, 0).saturating_mul(x as u64)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(x as u64))) + } + // Storage: `TokenGateway::SupportedAssets` (r:1 w:0) + // Proof: `TokenGateway::SupportedAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + // Storage: `TokenGateway::NativeAssets` (r:1 w:0) + // Proof: `TokenGateway::NativeAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + // Storage: `System::Account` (r:1 w:1) + // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + // Storage: `TokenGateway::Precisions` (r:1 w:0) + // Proof: `TokenGateway::Precisions` (`max_values`: None, `max_size`: None, mode: `Measured`) + // Storage: `Hyperbridge::HostParams` (r:1 w:0) + // Proof: `Hyperbridge::HostParams` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + // Storage: `Ismp::Nonce` (r:1 w:1) + // Proof: `Ismp::Nonce` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + // Storage: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e74733d1fa1ad95382c59b20b8fe912a8` (r:1 w:1) + // Proof: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e74733d1fa1ad95382c59b20b8fe912a8` (r:1 w:1) + // Storage: UNKNOWN KEY `0x526571756573745061796d656e743d1fa1ad95382c59b20b8fe912a8853bf587` (r:0 w:1) + // Proof: UNKNOWN KEY `0x526571756573745061796d656e743d1fa1ad95382c59b20b8fe912a8853bf587` (r:0 w:1) + fn teleport() -> Weight { + Weight::from_parts(62_000_000_u64, 0) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + // Storage: `TokenGateway::TokenGatewayAddresses` (r:0 w:1) + // Proof: `TokenGateway::TokenGatewayAddresses` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `x` is `[1, 100]`. + fn set_token_gateway_addresses(_x: u32, ) -> Weight { + Weight::from_parts(3_897_505_u64, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + // Storage: `Hyperbridge::HostParams` (r:1 w:0) + // Proof: `Hyperbridge::HostParams` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + // Storage: `Ismp::Nonce` (r:1 w:1) + // Proof: `Ismp::Nonce` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + // Storage: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e747399c5cd93560a9d5b3112b189670f` (r:1 w:1) + // Proof: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e747399c5cd93560a9d5b3112b189670f` (r:1 w:1) + // Storage: UNKNOWN KEY `0x526571756573745061796d656e7499c5cd93560a9d5b3112b189670f2bf0f746` (r:0 w:1) + // Proof: UNKNOWN KEY `0x526571756573745061796d656e7499c5cd93560a9d5b3112b189670f2bf0f746` (r:0 w:1) + fn update_erc6160_asset() -> Weight { + Weight::from_parts(21_000_000_u64, 0) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + // Storage: `TokenGateway::Precisions` (r:0 w:100) + // Proof: `TokenGateway::Precisions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `x` is `[1, 100]`. + fn update_asset_precision(x: u32, ) -> Weight { + Weight::from_parts(1_255_030_u64, 0) + // Standard Error: 2_019 + .saturating_add(Weight::from_parts(1_723_090_u64, 0).saturating_mul(x as u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(x as u64))) + } +} diff --git a/runtime/cere/Cargo.toml b/runtime/cere/Cargo.toml index 1641bb29a..83f66a438 100644 --- a/runtime/cere/Cargo.toml +++ b/runtime/cere/Cargo.toml @@ -28,7 +28,6 @@ frame-system = { workspace = true } frame-system-benchmarking = { workspace = true, optional = true } frame-system-rpc-runtime-api = { workspace = true } frame-try-runtime = { workspace = true, optional = true } -node-primitives = { workspace = true } pallet-authority-discovery = { workspace = true } pallet-authorship = { workspace = true } pallet-babe = { workspace = true } @@ -107,6 +106,17 @@ pallet-origins = { workspace = true } pallet-referenda = { workspace = true } pallet-whitelist = { workspace = true } +# Hyperbridge Depedencies +anyhow = { workspace = true } +frame-metadata-hash-extension = { workspace = true } +ismp = { workspace = true } +ismp-grandpa = { workspace = true } +pallet-hyperbridge = { workspace = true } +pallet-ismp = { workspace = true, features = ["unsigned"] } +pallet-ismp-runtime-api = { workspace = true } +pallet-token-gateway = { workspace = true } +sp-mmr-primitives = { workspace = true } + [build-dependencies] substrate-wasm-builder = { workspace = true, default-features = true } @@ -123,7 +133,6 @@ std = [ "frame-system/std", "frame-executive/std", "frame-try-runtime/std", - "node-primitives/std", "pallet-authority-discovery/std", "pallet-authorship/std", "pallet-babe/std", @@ -193,6 +202,14 @@ std = [ "pallet-whitelist/std", "pallet-preimage/std", "pallet-origins/std", + "pallet-hyperbridge/std", + "ismp/std", + "pallet-ismp/std", + "pallet-ismp-runtime-api/std", + "ismp-grandpa/std", + "anyhow/std", + "frame-metadata-hash-extension/std", + "pallet-token-gateway/std", ] runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", @@ -246,6 +263,7 @@ runtime-benchmarks = [ "pallet-ddc-clusters-gov/runtime-benchmarks", "pallet-origins/runtime-benchmarks", "pallet-ddc-verification/runtime-benchmarks", + "pallet-token-gateway/runtime-benchmarks", ] try-runtime = [ "frame-executive/try-runtime", @@ -301,4 +319,8 @@ try-runtime = [ "pallet-origins/try-runtime", "pallet-ddc-clusters-gov/try-runtime", "pallet-ddc-verification/try-runtime", + "pallet-ismp/try-runtime", + "pallet-hyperbridge/try-runtime", + "ismp-grandpa/try-runtime", + "pallet-token-gateway/try-runtime", ] diff --git a/runtime/cere/src/hyperbridge_ismp.rs b/runtime/cere/src/hyperbridge_ismp.rs new file mode 100644 index 000000000..ffde474fc --- /dev/null +++ b/runtime/cere/src/hyperbridge_ismp.rs @@ -0,0 +1,240 @@ +use frame_support::parameter_types; +use frame_system::EnsureRoot; +use ismp::{error::Error, host::StateMachine, module::IsmpModule, router::IsmpRouter}; +use ismp_grandpa::consensus::GrandpaConsensusClient; +use pallet_token_gateway::types::EvmToSubstrate; +use sp_core::H160; + +use super::*; + +parameter_types! { + // The hyperbridge parachain on Polkadot + pub const Coprocessor: Option = Some(StateMachine::Kusama(4009)); + // The host state machine of this pallet, this must be unique to all every solochain + pub const HostStateMachine: StateMachine = StateMachine::Substrate(*b"cere"); // your unique chain id here +} + +impl pallet_ismp::Config for Runtime { + // Configure the runtime event + type RuntimeEvent = RuntimeEvent; + // Permissioned origin who can create or update consensus clients + type AdminOrigin = EnsureRoot; + // The state machine identifier for this state machine + type HostStateMachine = HostStateMachine; + // The pallet_timestamp pallet + type TimestampProvider = Timestamp; + // The currency implementation that is offered to relayers + // this could also be `frame_support::traits::tokens::fungible::ItemOf` + type Currency = Balances; + // The balance type for the currency implementation + type Balance = Balance; + // Router implementation for routing requests/responses to their respective modules + type Router = ModuleRouter; + // Optional coprocessor for incoming requests/responses + type Coprocessor = Coprocessor; + // Supported consensus clients + type ConsensusClients = ( + // Add the grandpa consensus client here + GrandpaConsensusClient, + ); + // Offchain database implementation. Outgoing requests and responses are + // inserted in this database, while their commitments are stored onchain. + // + // The default implementation for `()` should suffice + type OffchainDB = (); + // Weight provider for local modules + type WeightProvider = (); +} + +impl pallet_hyperbridge::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type IsmpHost = Ismp; +} + +#[derive(Default)] +pub struct ModuleRouter; + +impl IsmpRouter for ModuleRouter { + fn module_for_id(&self, id: Vec) -> Result, anyhow::Error> { + return match id.as_slice() { + id if TokenGateway::is_token_gateway(id) => Ok(Box::new(TokenGateway::default())), + pallet_hyperbridge::PALLET_HYPERBRIDGE_ID => + Ok(Box::new(pallet_hyperbridge::Pallet::::default())), + _ => Err(Error::ModuleNotFound(id).into()), + }; + } +} + +impl ismp_grandpa::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type IsmpHost = Ismp; + type WeightInfo = weights::ismp_grandpa::WeightInfo; +} + +parameter_types! { + // A constant that should represent the native asset id, this id must be unique to the native currency + pub const NativeAssetId: u32 = 0; + // Set the correct decimals for the native currency + pub const Decimals: u8 = 10; +} + +/// Should provide an account that is funded and can be used to pay for asset creation +pub struct AssetAdmin; +impl Get for AssetAdmin { + fn get() -> AccountId { + Treasury::account_id() + } +} + +pub struct MockAssets; + +impl fungibles::metadata::Inspect for MockAssets { + fn name(_asset: Self::AssetId) -> Vec { + vec![] + } + + fn symbol(_asset: Self::AssetId) -> Vec { + vec![] + } + + fn decimals(_asset: Self::AssetId) -> u8 { + 0 + } +} +impl Unbalanced for MockAssets { + fn handle_dust(_dust: Dust) {} + + fn write_balance( + _asset: Self::AssetId, + _who: &AccountId, + _amount: Self::Balance, + ) -> Result, DispatchError> { + Ok(None) + } + + fn set_total_issuance(_asset: Self::AssetId, _amount: Self::Balance) {} +} + +impl fungibles::Mutate for MockAssets {} + +impl Inspect for MockAssets { + type AssetId = Balance; + type Balance = Balance; + + fn total_issuance(_asset: Self::AssetId) -> Self::Balance { + 0 + } + + fn minimum_balance(_asset: Self::AssetId) -> Self::Balance { + 0 + } + + fn total_balance(_asset: Self::AssetId, _who: &AccountId) -> Self::Balance { + 0 + } + + fn balance(_asset: Self::AssetId, _who: &AccountId) -> Self::Balance { + 0 + } + + fn reducible_balance( + _asset: Self::AssetId, + _who: &AccountId, + _preservation: Preservation, + _force: Fortitude, + ) -> Self::Balance { + 0 + } + + fn can_deposit( + _asset: Self::AssetId, + _who: &AccountId, + _amount: Self::Balance, + _provenance: Provenance, + ) -> DepositConsequence { + DepositConsequence::UnknownAsset + } + + fn can_withdraw( + _asset: Self::AssetId, + _who: &AccountId, + _amount: Self::Balance, + ) -> WithdrawConsequence { + WithdrawConsequence::UnknownAsset + } + + fn asset_exists(_asset: Self::AssetId) -> bool { + false + } +} + +impl fungibles::Create for MockAssets { + fn create( + _id: Self::AssetId, + _admin: AccountId, + _is_sufficient: bool, + _min_balance: Self::Balance, + ) -> DispatchResult { + Ok(()) + } +} + +impl fungibles::metadata::Mutate for MockAssets { + fn set( + _asset: Self::AssetId, + _from: &AccountId, + _name: Vec, + _symbol: Vec, + _decimals: u8, + ) -> frame_support::dispatch::DispatchResult { + Ok(()) + } +} + +impl fungibles::roles::Inspect for MockAssets { + fn owner(_asset: Self::AssetId) -> Option { + None + } + + fn issuer(_asset: Self::AssetId) -> Option { + None + } + + fn admin(_asset: Self::AssetId) -> Option { + None + } + + fn freezer(_asset: Self::AssetId) -> Option { + None + } +} + +pub struct EvmToSubstrateFactory; + +impl EvmToSubstrate for EvmToSubstrateFactory { + fn convert(addr: H160) -> AccountId { + let mut account = [0u8; 32]; + account[12..].copy_from_slice(&addr.0); + account.into() + } +} + +impl pallet_token_gateway::Config for Runtime { + // configure the runtime event + type RuntimeEvent = RuntimeEvent; + // Configured as Pallet Ismp + type Dispatcher = pallet_hyperbridge::Pallet; + // Configured as Pallet Assets + type Assets = MockAssets; + // Configured as Pallet balances + type NativeCurrency = Balances; + // AssetAdmin account + type AssetAdmin = AssetAdmin; + // The Native asset Id + type NativeAssetId = NativeAssetId; + // The precision of the native asset + type Decimals = Decimals; + type EvmToSubstrate = EvmToSubstrateFactory; + type WeightInfo = weights::pallet_token_gateway::SubstrateWeight; + type CreateOrigin = EnsureSigned; +} diff --git a/runtime/cere/src/lib.rs b/runtime/cere/src/lib.rs index 489bb468b..3acb1537c 100644 --- a/runtime/cere/src/lib.rs +++ b/runtime/cere/src/lib.rs @@ -20,12 +20,14 @@ #![cfg_attr(not(feature = "std"), no_std)] // `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. -#![recursion_limit = "256"] +#![recursion_limit = "512"] use codec::{Decode, Encode, MaxEncodedLen}; use ddc_primitives::{ traits::pallet::{GetDdcOrigin, PalletVisitor}, - MAX_PAYOUT_BATCH_COUNT, MAX_PAYOUT_BATCH_SIZE, + AccountIndex, Balance, BlockNumber, Hash, Moment, Nonce, MAX_PAYOUT_BATCH_COUNT, + MAX_PAYOUT_BATCH_SIZE, }; +pub use ddc_primitives::{AccountId, Signature}; use frame_election_provider_support::{ bounds::ElectionBoundsBuilder, onchain, BalancingConfig, SequentialPhragmen, VoteWeight, }; @@ -37,7 +39,12 @@ use frame_support::{ parameter_types, traits::{ fungible::HoldConsideration, - tokens::{PayFromAccount, UnityAssetBalanceConversion}, + fungibles, + fungibles::{Dust, Inspect, Unbalanced}, + tokens::{ + DepositConsequence, Fortitude, PayFromAccount, Preservation, Provenance, + UnityAssetBalanceConversion, WithdrawConsequence, + }, ConstBool, ConstU128, ConstU16, ConstU32, Currency, EitherOf, EitherOfDiverse, EqualPrivilegeOnly, Imbalance, InstanceFilter, KeyOwnerProofSystem, LinearStoragePrice, Nothing, OnUnbalanced, VariantCountOf, WithdrawReasons, @@ -56,8 +63,6 @@ use frame_system::{ limits::{BlockLength, BlockWeights}, EnsureRoot, EnsureSigned, }; -pub use node_primitives::{AccountId, Signature}; -use node_primitives::{AccountIndex, Balance, BlockNumber, Hash, Moment, Nonce}; #[cfg(any(feature = "std", test))] pub use pallet_balances::Call as BalancesCall; pub use pallet_chainbridge; @@ -95,8 +100,8 @@ use sp_runtime::{ StaticLookup, Verify, }, transaction_validity::{TransactionPriority, TransactionSource, TransactionValidity}, - ApplyExtrinsicResult, FixedPointNumber, FixedU128, Perbill, Percent, Permill, Perquintill, - RuntimeDebug, + ApplyExtrinsicResult, DispatchError, DispatchResult, FixedPointNumber, FixedU128, Perbill, + Percent, Permill, Perquintill, RuntimeDebug, }; use sp_std::prelude::*; #[cfg(any(feature = "std", test))] @@ -123,6 +128,14 @@ use governance::{ }; /// Generated voter bag information. mod voter_bags; +use ismp::{ + consensus::{ConsensusClientId, StateMachineHeight, StateMachineId}, + host::StateMachine, + router::{Request, Response}, +}; +use sp_core::H256; +mod hyperbridge_ismp; +mod weights; // Make the WASM binary available. #[cfg(feature = "std")] @@ -148,7 +161,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 72007, + spec_version: 73000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 24, @@ -980,6 +993,7 @@ where frame_system::CheckNonce::::from(nonce), frame_system::CheckWeight::::new(), pallet_transaction_payment::ChargeTransactionPayment::::from(tip), + frame_metadata_hash_extension::CheckMetadataHash::new(false), ); let raw_payload = SignedPayload::new(call, extra) .map_err(|e| { @@ -1525,6 +1539,18 @@ mod runtime { #[runtime::pallet_index(46)] pub type DdcClustersGov = pallet_ddc_clusters_gov::Pallet; + + #[runtime::pallet_index(47)] + pub type Ismp = pallet_ismp::Pallet; + + #[runtime::pallet_index(48)] + pub type IsmpGrandpa = ismp_grandpa::Pallet; + + #[runtime::pallet_index(49)] + pub type Hyperbridge = pallet_hyperbridge::Pallet; + + #[runtime::pallet_index(50)] + pub type TokenGateway = pallet_token_gateway::Pallet; } /// The address format for describing accounts. @@ -1551,6 +1577,7 @@ pub type SignedExtra = ( frame_system::CheckNonce, frame_system::CheckWeight, pallet_transaction_payment::ChargeTransactionPayment, + frame_metadata_hash_extension::CheckMetadataHash, ); /// Unchecked extrinsic type as expected by this runtime. @@ -1664,6 +1691,7 @@ mod benches { [pallet_collective, TechComm] [pallet_ddc_clusters_gov, DdcClustersGov] [pallet_ddc_verification, DdcVerification] + [pallet_token_gateway, TokenGateway] ); } @@ -1907,6 +1935,43 @@ impl_runtime_apis! { } } + impl pallet_ismp_runtime_api::IsmpRuntimeApi::Hash> for Runtime { + fn host_state_machine() -> StateMachine { + ::HostStateMachine::get() + } + + fn challenge_period(id: StateMachineId) -> Option { + pallet_ismp::Pallet::::challenge_period(id) + } + + fn block_events() -> Vec { + pallet_ismp::Pallet::::block_events() + } + + fn block_events_with_metadata() -> Vec<(ismp::events::Event, Option)> { + pallet_ismp::Pallet::::block_events_with_metadata() + } + + fn consensus_state(id: ConsensusClientId) -> Option> { + pallet_ismp::Pallet::::consensus_states(id) + } + + fn state_machine_update_time(height: StateMachineHeight) -> Option { + pallet_ismp::Pallet::::state_machine_update_time(height) + } + + fn latest_state_machine_height(id: StateMachineId) -> Option { + pallet_ismp::Pallet::::latest_state_machine_height(id) + } + + fn requests(commitments: Vec) -> Vec { + pallet_ismp::Pallet::::requests(commitments) + } + + fn responses(commitments: Vec) -> Vec { + pallet_ismp::Pallet::::responses(commitments) + } + } impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi< Block, Balance, diff --git a/runtime/cere/src/weights/ismp_grandpa.rs b/runtime/cere/src/weights/ismp_grandpa.rs new file mode 100644 index 000000000..d20a7327b --- /dev/null +++ b/runtime/cere/src/weights/ismp_grandpa.rs @@ -0,0 +1,62 @@ + +//! Autogenerated weights for `ismp_grandpa` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 42.0.0 +//! DATE: 2024-12-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `polytope-labs`, CPU: `AMD Ryzen Threadripper PRO 5995WX 64-Cores` +//! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: 1024 + +// Executed Command: +// target/release/hyperbridge +// benchmark +// pallet +// --wasm-execution=compiled +// --pallet=ismp_grandpa +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --genesis-builder=runtime +// --runtime=./target/release/wbuild/gargantua-runtime/gargantua_runtime.compact.wasm +// --output=parachain/runtimes/gargantua/src/weights/ismp_grandpa.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::Weight}; +use core::marker::PhantomData; + +/// Weight functions for `ismp_grandpa`. +pub struct WeightInfo(PhantomData); +impl ismp_grandpa::WeightInfo for WeightInfo { + /// Storage: `IsmpGrandpa::SupportedStateMachines` (r:0 w:100) + /// Proof: `IsmpGrandpa::SupportedStateMachines` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[1, 100]`. + fn add_state_machines(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_913_000 picoseconds. + Weight::from_parts(7_832_568, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 7_710 + .saturating_add(Weight::from_parts(1_434_418, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) + } + /// Storage: `IsmpGrandpa::SupportedStateMachines` (r:0 w:100) + /// Proof: `IsmpGrandpa::SupportedStateMachines` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[1, 100]`. + fn remove_state_machines(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_204_000 picoseconds. + Weight::from_parts(5_126_127, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 8_195 + .saturating_add(Weight::from_parts(1_417_249, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) + } +} diff --git a/runtime/cere/src/weights/mod.rs b/runtime/cere/src/weights/mod.rs new file mode 100644 index 000000000..d89101a2f --- /dev/null +++ b/runtime/cere/src/weights/mod.rs @@ -0,0 +1,2 @@ +pub mod ismp_grandpa; +pub mod pallet_token_gateway; diff --git a/runtime/cere/src/weights/pallet_token_gateway.rs b/runtime/cere/src/weights/pallet_token_gateway.rs new file mode 100644 index 000000000..6e4fa1ecd --- /dev/null +++ b/runtime/cere/src/weights/pallet_token_gateway.rs @@ -0,0 +1,111 @@ +//! Autogenerated weights for pallet_token_gateway +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 42.0.0 +//! DATE: 2025-02-03, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `192.168.1.5`, CPU: `` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 + +// Executed Command: +// ./target/release/cere +// benchmark +// pallet +// --chain +// dev +// --wasm-execution=compiled +// --pallet +// pallet_token_gateway +// --extrinsic +// * +// --steps +// 50 +// --repeat +// 20 +// --output=./runtime/cere-dev/src/weights/pallet_token_gateway.rs +// --template=./.maintain/frame-weight-template.hbs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use sp_std::marker::PhantomData; + +/// Weights for pallet_token_gateway using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl pallet_token_gateway::WeightInfo for SubstrateWeight { + // Storage: `Hyperbridge::HostParams` (r:1 w:0) + // Proof: `Hyperbridge::HostParams` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + // Storage: `Ismp::Nonce` (r:1 w:1) + // Proof: `Ismp::Nonce` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + // Storage: `TokenGateway::Precisions` (r:0 w:100) + // Proof: `TokenGateway::Precisions` (`max_values`: None, `max_size`: None, mode: `Measured`) + // Storage: `TokenGateway::NativeAssets` (r:0 w:1) + // Proof: `TokenGateway::NativeAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + // Storage: `TokenGateway::LocalAssets` (r:0 w:1) + // Proof: `TokenGateway::LocalAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + // Storage: `TokenGateway::SupportedAssets` (r:0 w:1) + // Proof: `TokenGateway::SupportedAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + // Storage: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e747356aa03068021c89766e6f0dc869c` (r:1 w:1) + // Proof: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e747356aa03068021c89766e6f0dc869c` (r:1 w:1) + // Storage: UNKNOWN KEY `0x526571756573745061796d656e7456aa03068021c89766e6f0dc869cadd7cfc2` (r:0 w:1) + // Proof: UNKNOWN KEY `0x526571756573745061796d656e7456aa03068021c89766e6f0dc869cadd7cfc2` (r:0 w:1) + /// The range of component `x` is `[1, 100]`. + fn create_erc6160_asset(x: u32, ) -> Weight { + Weight::from_parts(22_256_047_u64, 0) + // Standard Error: 3_063 + .saturating_add(Weight::from_parts(1_733_865_u64, 0).saturating_mul(x as u64)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(x as u64))) + } + // Storage: `TokenGateway::SupportedAssets` (r:1 w:0) + // Proof: `TokenGateway::SupportedAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + // Storage: `TokenGateway::NativeAssets` (r:1 w:0) + // Proof: `TokenGateway::NativeAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + // Storage: `System::Account` (r:1 w:1) + // Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + // Storage: `TokenGateway::Precisions` (r:1 w:0) + // Proof: `TokenGateway::Precisions` (`max_values`: None, `max_size`: None, mode: `Measured`) + // Storage: `Hyperbridge::HostParams` (r:1 w:0) + // Proof: `Hyperbridge::HostParams` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + // Storage: `Ismp::Nonce` (r:1 w:1) + // Proof: `Ismp::Nonce` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + // Storage: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e74733d1fa1ad95382c59b20b8fe912a8` (r:1 w:1) + // Proof: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e74733d1fa1ad95382c59b20b8fe912a8` (r:1 w:1) + // Storage: UNKNOWN KEY `0x526571756573745061796d656e743d1fa1ad95382c59b20b8fe912a8853bf587` (r:0 w:1) + // Proof: UNKNOWN KEY `0x526571756573745061796d656e743d1fa1ad95382c59b20b8fe912a8853bf587` (r:0 w:1) + fn teleport() -> Weight { + Weight::from_parts(62_000_000_u64, 0) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + // Storage: `TokenGateway::TokenGatewayAddresses` (r:0 w:1) + // Proof: `TokenGateway::TokenGatewayAddresses` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `x` is `[1, 100]`. + fn set_token_gateway_addresses(_x: u32, ) -> Weight { + Weight::from_parts(3_897_505_u64, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + // Storage: `Hyperbridge::HostParams` (r:1 w:0) + // Proof: `Hyperbridge::HostParams` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + // Storage: `Ismp::Nonce` (r:1 w:1) + // Proof: `Ismp::Nonce` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + // Storage: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e747399c5cd93560a9d5b3112b189670f` (r:1 w:1) + // Proof: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e747399c5cd93560a9d5b3112b189670f` (r:1 w:1) + // Storage: UNKNOWN KEY `0x526571756573745061796d656e7499c5cd93560a9d5b3112b189670f2bf0f746` (r:0 w:1) + // Proof: UNKNOWN KEY `0x526571756573745061796d656e7499c5cd93560a9d5b3112b189670f2bf0f746` (r:0 w:1) + fn update_erc6160_asset() -> Weight { + Weight::from_parts(21_000_000_u64, 0) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + // Storage: `TokenGateway::Precisions` (r:0 w:100) + // Proof: `TokenGateway::Precisions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `x` is `[1, 100]`. + fn update_asset_precision(x: u32, ) -> Weight { + Weight::from_parts(1_255_030_u64, 0) + // Standard Error: 2_019 + .saturating_add(Weight::from_parts(1_723_090_u64, 0).saturating_mul(x as u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(x as u64))) + } +} diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index 560f80150..a9b1b1338 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -12,9 +12,9 @@ repository.workspace = true codec = { workspace = true } log = { workspace = true, default-features = false } +ddc-primitives = { workspace = true } frame-support = { workspace = true } frame-system = { workspace = true } -node-primitives = { workspace = true } pallet-contracts = { workspace = true } pallet-referenda = { workspace = true } pallet-session = { workspace = true } @@ -31,7 +31,7 @@ default = ["std"] no_std = [] std = [ "frame-support/std", - "node-primitives/std", + "ddc-primitives/std", "sp-core/std", "sp-runtime/std", "sp-staking/std", diff --git a/runtime/common/src/constants.rs b/runtime/common/src/constants.rs index b9792a82a..5cf6e4dbf 100644 --- a/runtime/common/src/constants.rs +++ b/runtime/common/src/constants.rs @@ -19,7 +19,7 @@ /// Money matters. pub mod currency { - pub use node_primitives::Balance; + pub use ddc_primitives::Balance; pub const MILLICENTS: Balance = 100_000; pub const CENTS: Balance = 1_000 * MILLICENTS; // assume this is worth about a cent. @@ -33,7 +33,7 @@ pub mod currency { /// Time. pub mod time { - pub use node_primitives::{BlockNumber, Moment}; + pub use ddc_primitives::{BlockNumber, Moment}; /// Since BABE is probabilistic this is the average expected block time that /// we are targeting. Blocks will be produced at a minimum duration defined diff --git a/runtime/common/src/lib.rs b/runtime/common/src/lib.rs index 1184bd115..b4316ed80 100644 --- a/runtime/common/src/lib.rs +++ b/runtime/common/src/lib.rs @@ -3,7 +3,7 @@ pub mod constants; pub mod migrations; -use node_primitives::Balance; +use ddc_primitives::Balance; /// The type used for currency conversion. /// diff --git a/runtime/common/src/migrations.rs b/runtime/common/src/migrations.rs index 2959999cb..2191314ec 100644 --- a/runtime/common/src/migrations.rs +++ b/runtime/common/src/migrations.rs @@ -1,5 +1,6 @@ //! storage migrations for pallet #![allow(clippy::type_complexity)] +#![allow(unexpected_cfgs)] use frame_support::{ pallet_prelude::*, traits::OnRuntimeUpgrade, diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 6372b5f22..b35d913b7 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "1.79.0" +channel = "1.81.0" components = ["clippy", "rustfmt"] targets = ["wasm32-unknown-unknown"] diff --git a/scripts/init.sh b/scripts/init.sh index 921a3152b..5635a8ca4 100755 --- a/scripts/init.sh +++ b/scripts/init.sh @@ -4,13 +4,12 @@ set -e echo "*** Initializing WASM build environment" -rustup install 1.79.0 +rustup install 1.81.0 -rustup target add wasm32-unknown-unknown --toolchain 1.79.0 +rustup target add wasm32-unknown-unknown --toolchain 1.81.0 rustup component add rust-src -cargo update -p home --precise 0.5.9 ln -sf $PWD/scripts/pre-commit.sh $PWD/.git/hooks/pre-commit || true ln -sf $PWD/scripts/pre-push.sh $PWD/.git/hooks/pre-push || true From ad81b179adfb2908f1c63fe5c6189d6920070695 Mon Sep 17 00:00:00 2001 From: Ayush Kumar Mishra Date: Mon, 10 Feb 2025 19:26:23 +0530 Subject: [PATCH 16/31] Refactoring --- pallets/ddc-verification/src/lib.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index f1589e127..e421d3633 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -3401,8 +3401,7 @@ pub mod pallet { fn fetch_inspection_receipts( cluster_id: &ClusterId, ehd_id: EHDId, - ) -> Result, OCWError> - { + ) -> Result, OCWError> { // todo(yahortsaryk): infer the node deterministically let g_collector = Self::get_g_collectors_nodes(cluster_id) .map_err(|_| OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })? From 711e3e43ed07552aee2138fcd2b271c876ecfd7f Mon Sep 17 00:00:00 2001 From: Ayush Kumar Mishra Date: Mon, 10 Feb 2025 19:51:00 +0530 Subject: [PATCH 17/31] Refactoring --- .github/workflows/ci.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index d9a652c40..54366abac 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -51,14 +51,14 @@ jobs: - name: Rust Cache uses: Swatinem/rust-cache@v2 - name: Install try-runtime - run: cargo install --git https://github.com/paritytech/try-runtime-cli --tag v0.7.0 --locked + run: cargo install --git https://github.com/paritytech/try-runtime-cli --tag v0.8.0 --locked - name: Check Build run: | cargo build --release --features try-runtime - name: Check Try-Runtime run: | try-runtime --runtime ./target/release/wbuild/cere-dev-runtime/cere_dev_runtime.compact.compressed.wasm \ - on-runtime-upgrade --disable-idempotency-checks live --uri wss://archive.devnet.cere.network:443 + on-runtime-upgrade --blocktime 6000 --disable-idempotency-checks live --uri wss://archive.devnet.cere.network:443 - name: Run dev chain run: | timeout --preserve-status 30s ./target/release/cere --dev From 3c56b0cc3604361ff829fe9e3b3658fb27d34e7a Mon Sep 17 00:00:00 2001 From: Ayush Kumar Mishra Date: Tue, 11 Feb 2025 15:43:40 +0530 Subject: [PATCH 18/31] Addressed PR comments --- node/client/Cargo.toml | 1 + node/rpc/Cargo.toml | 5 ++++- node/service/Cargo.toml | 7 +++---- pallets/ddc-verification/src/lib.rs | 3 ++- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/node/client/Cargo.toml b/node/client/Cargo.toml index bb5f63f1b..c96ebabfc 100644 --- a/node/client/Cargo.toml +++ b/node/client/Cargo.toml @@ -43,6 +43,7 @@ sp-transaction-pool = { workspace = true, default-features = true } cere-dev-runtime = { workspace = true, optional = true } cere-runtime = { workspace = true, optional = true } +# Hyperbridge pallet-ismp = { workspace = true, default-features = true } pallet-ismp-runtime-api = { workspace = true, default-features = true } diff --git a/node/rpc/Cargo.toml b/node/rpc/Cargo.toml index 65f3d3507..de0ebddbc 100644 --- a/node/rpc/Cargo.toml +++ b/node/rpc/Cargo.toml @@ -13,7 +13,6 @@ repository.workspace = true jsonrpsee = { workspace = true, default-features = true } # Substrate dependencies -ddc-primitives = { workspace = true, default-features = true } pallet-transaction-payment-rpc = { workspace = true, default-features = true } sc-chain-spec = { workspace = true, default-features = true } sc-client-api = { workspace = true, default-features = true } @@ -37,5 +36,9 @@ sp-runtime = { workspace = true, default-features = true } substrate-frame-rpc-system = { workspace = true, default-features = true } substrate-state-trie-migration-rpc = { workspace = true, default-features = true } +# Cere +ddc-primitives = { workspace = true, default-features = true } + +# Hyperbridge pallet-ismp-rpc = { workspace = true, default-features = true } pallet-ismp-runtime-api = { workspace = true, default-features = true } diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index d2256530b..e043b70c3 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -16,7 +16,6 @@ rand = { workspace = true, default-features = true } serde = { workspace = true, default-features = true } # Substrate dependencies -ddc-primitives = { workspace = true } frame-benchmarking-cli = { workspace = true } pallet-im-online = { workspace = true } sc-authority-discovery = { workspace = true } @@ -51,11 +50,11 @@ sp-trie = { workspace = true } # Cere dependencies cere-client = { workspace = true, optional = true } -cere-rpc = { workspace = true } -cere-runtime-common = { workspace = true, optional = true } - cere-dev-runtime = { workspace = true, optional = true } +cere-rpc = { workspace = true } cere-runtime = { workspace = true, optional = true } +cere-runtime-common = { workspace = true, optional = true } +ddc-primitives = { workspace = true } [features] default = ["cere-native"] diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index bc8892672..08f0d9b70 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -3596,7 +3596,8 @@ pub mod pallet { fn fetch_inspection_receipts( cluster_id: &ClusterId, ehd_id: EHDId, - ) -> Result, OCWError> { + ) -> Result, OCWError> + { // todo(yahortsaryk): infer the node deterministically let g_collector = Self::get_g_collectors_nodes(cluster_id) .map_err(|_| OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })? From 912ede708f2f1237f1952c78b561ffcca147075d Mon Sep 17 00:00:00 2001 From: Ayush Kumar Mishra Date: Tue, 11 Feb 2025 15:46:02 +0530 Subject: [PATCH 19/31] Addressed PR comments --- pallets/ddc-verification/src/lib.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index 08f0d9b70..bc8892672 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -3596,8 +3596,7 @@ pub mod pallet { fn fetch_inspection_receipts( cluster_id: &ClusterId, ehd_id: EHDId, - ) -> Result, OCWError> - { + ) -> Result, OCWError> { // todo(yahortsaryk): infer the node deterministically let g_collector = Self::get_g_collectors_nodes(cluster_id) .map_err(|_| OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })? From dfac74dcfc64f92051658043f5df4983a730ed7a Mon Sep 17 00:00:00 2001 From: Ayush Kumar Mishra Date: Tue, 25 Feb 2025 16:26:54 +0530 Subject: [PATCH 20/31] =?UTF-8?q?To=20accommodate=20larger=20GRANDPA=20pro?= =?UTF-8?q?ofs,=20we=E2=80=99re=20considering=20increasing=20it=20to=207.5?= =?UTF-8?q?MB=20with=2080%=20for=20normal=20extrinsics.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + runtime/cere-dev/src/lib.rs | 6 +++--- runtime/cere/src/lib.rs | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f5a90330..69b49f7d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [C,D] Update to Polkadot-2409 crate version - [C,D] Hyperbridge Integration +- [C,D] To accommodate larger GRANDPA proofs, increased `BlockLength` to 7.5MB with 80% for normal extrinsics. ## [7.2.0] diff --git a/runtime/cere-dev/src/lib.rs b/runtime/cere-dev/src/lib.rs index 1ddba2cb1..3e18111b6 100644 --- a/runtime/cere-dev/src/lib.rs +++ b/runtime/cere-dev/src/lib.rs @@ -168,7 +168,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 73000, + spec_version: 73001, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 24, @@ -211,7 +211,7 @@ impl OnUnbalanced for DealWithFees { const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used /// by Operational extrinsics. -const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); +const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(80); /// We allow for 2 seconds of compute with a 6 second average block time, with maximum proof size. const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts(WEIGHT_REF_TIME_PER_SECOND.saturating_mul(2), u64::MAX); @@ -220,7 +220,7 @@ parameter_types! { pub const BlockHashCount: BlockNumber = 2400; pub const Version: RuntimeVersion = VERSION; pub RuntimeBlockLength: BlockLength = - BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); + BlockLength::max_with_normal_ratio(7.5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() .base_block(BlockExecutionWeight::get()) .for_class(DispatchClass::all(), |weights| { diff --git a/runtime/cere/src/lib.rs b/runtime/cere/src/lib.rs index a268d0fd8..fb87f5cde 100644 --- a/runtime/cere/src/lib.rs +++ b/runtime/cere/src/lib.rs @@ -161,7 +161,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 73000, + spec_version: 73001, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 24, @@ -204,7 +204,7 @@ impl OnUnbalanced for DealWithFees { const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used /// by Operational extrinsics. -const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); +const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(80); /// We allow for 2 seconds of compute with a 6 second average block time, with maximum proof size. const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts(WEIGHT_REF_TIME_PER_SECOND.saturating_mul(2), u64::MAX); @@ -213,7 +213,7 @@ parameter_types! { pub const BlockHashCount: BlockNumber = 2400; pub const Version: RuntimeVersion = VERSION; pub RuntimeBlockLength: BlockLength = - BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); + BlockLength::max_with_normal_ratio(7.5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() .base_block(BlockExecutionWeight::get()) .for_class(DispatchClass::all(), |weights| { From 103bcf98cb7aee53a940ab808351d8cceb45b341 Mon Sep 17 00:00:00 2001 From: Ayush Kumar Mishra Date: Tue, 25 Feb 2025 17:34:43 +0530 Subject: [PATCH 21/31] refactoring --- runtime/cere-dev/src/lib.rs | 2 +- runtime/cere/src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/runtime/cere-dev/src/lib.rs b/runtime/cere-dev/src/lib.rs index 3e18111b6..757492b17 100644 --- a/runtime/cere-dev/src/lib.rs +++ b/runtime/cere-dev/src/lib.rs @@ -220,7 +220,7 @@ parameter_types! { pub const BlockHashCount: BlockNumber = 2400; pub const Version: RuntimeVersion = VERSION; pub RuntimeBlockLength: BlockLength = - BlockLength::max_with_normal_ratio(7.5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); + BlockLength::max_with_normal_ratio(8 * 1024 * 1024, NORMAL_DISPATCH_RATIO); pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() .base_block(BlockExecutionWeight::get()) .for_class(DispatchClass::all(), |weights| { diff --git a/runtime/cere/src/lib.rs b/runtime/cere/src/lib.rs index fb87f5cde..c49b09b2b 100644 --- a/runtime/cere/src/lib.rs +++ b/runtime/cere/src/lib.rs @@ -213,7 +213,7 @@ parameter_types! { pub const BlockHashCount: BlockNumber = 2400; pub const Version: RuntimeVersion = VERSION; pub RuntimeBlockLength: BlockLength = - BlockLength::max_with_normal_ratio(7.5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); + BlockLength::max_with_normal_ratio(8 * 1024 * 1024, NORMAL_DISPATCH_RATIO); pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() .base_block(BlockExecutionWeight::get()) .for_class(DispatchClass::all(), |weights| { From 88d2afb3857859ae01fd5c06d28078f376c543f5 Mon Sep 17 00:00:00 2001 From: Ayush Mishra Date: Tue, 25 Feb 2025 17:51:55 +0530 Subject: [PATCH 22/31] Update runtime/cere-dev/src/lib.rs Co-authored-by: David Salami <31099392+Wizdave97@users.noreply.github.com> --- runtime/cere-dev/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/cere-dev/src/lib.rs b/runtime/cere-dev/src/lib.rs index 757492b17..8f15240b4 100644 --- a/runtime/cere-dev/src/lib.rs +++ b/runtime/cere-dev/src/lib.rs @@ -211,7 +211,7 @@ impl OnUnbalanced for DealWithFees { const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used /// by Operational extrinsics. -const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(80); +const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(85); /// We allow for 2 seconds of compute with a 6 second average block time, with maximum proof size. const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts(WEIGHT_REF_TIME_PER_SECOND.saturating_mul(2), u64::MAX); From f5ac0221d648aa6fd2fa59f0d4e6dcb765bb35ec Mon Sep 17 00:00:00 2001 From: Ayush Kumar Mishra Date: Tue, 25 Feb 2025 17:52:36 +0530 Subject: [PATCH 23/31] refactoring --- runtime/cere/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/cere/src/lib.rs b/runtime/cere/src/lib.rs index c49b09b2b..d68bc3679 100644 --- a/runtime/cere/src/lib.rs +++ b/runtime/cere/src/lib.rs @@ -204,7 +204,7 @@ impl OnUnbalanced for DealWithFees { const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used /// by Operational extrinsics. -const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(80); +const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(85); /// We allow for 2 seconds of compute with a 6 second average block time, with maximum proof size. const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts(WEIGHT_REF_TIME_PER_SECOND.saturating_mul(2), u64::MAX); From 0324c1e39868b2e44e320e82161117e5a6b3a36a Mon Sep 17 00:00:00 2001 From: Ayush Mishra Date: Wed, 26 Feb 2025 16:46:09 +0530 Subject: [PATCH 24/31] Update stage.yaml --- .github/workflows/stage.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stage.yaml b/.github/workflows/stage.yaml index c1951a3b5..ac268a043 100644 --- a/.github/workflows/stage.yaml +++ b/.github/workflows/stage.yaml @@ -2,7 +2,7 @@ name: Release to stage on: push: branches: - - new-dev + - dev - new-staging - master - 'release/**' From 41ca097cefc1f1899702ec7d64ee1801ad110787 Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Wed, 26 Feb 2025 18:04:32 +0100 Subject: [PATCH 25/31] fix: the latest PHD format is adapted --- .../ddc-verification/src/aggregator_client.rs | 230 ++---------------- pallets/ddc-verification/src/lib.rs | 34 +-- runtime/cere-dev/src/lib.rs | 2 +- runtime/cere/src/lib.rs | 2 +- 4 files changed, 31 insertions(+), 237 deletions(-) diff --git a/pallets/ddc-verification/src/aggregator_client.rs b/pallets/ddc-verification/src/aggregator_client.rs index 34f04fbc5..d82735ae0 100644 --- a/pallets/ddc-verification/src/aggregator_client.rs +++ b/pallets/ddc-verification/src/aggregator_client.rs @@ -169,22 +169,6 @@ impl<'a> AggregatorClient<'a> { fetch_and_parse!(self, url, Vec, Vec) } - pub fn era_historical_document( - &self, - era_id: DdcEra, - ) -> Result { - let mut url = format!("{}/activity/ehd/{}", self.base_url, era_id); - fetch_and_parse!(self, url, json::EHDResponse, json::EHDResponse) - } - - pub fn partial_historical_document( - &self, - phd_id: String, - ) -> Result { - let mut url = format!("{}/activity/phd/{}", self.base_url, phd_id); - fetch_and_parse!(self, url, json::PHDResponse, json::PHDResponse) - } - pub fn traverse_era_historical_document( &self, ehd_id: EHDId, @@ -619,24 +603,6 @@ pub(crate) mod json { pub signature: Vec, } - #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Encode, Decode)] - pub struct EHDResponse { - #[serde(rename = "ehdId")] - pub ehd_id: String, - #[serde(rename = "clusterId")] - pub cluster_id: String, - #[serde(rename = "eraId")] - pub era_id: DdcEra, - #[serde(rename = "gCollector")] - pub g_collector: String, - #[serde(rename = "pdhIds")] - pub pdh_ids: Vec, - pub hash: String, - pub status: String, - pub customers: Vec, - pub providers: Vec, - } - #[derive( Default, Debug, @@ -662,178 +628,6 @@ pub(crate) mod json { pub number_of_gets: u64, } - #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Encode, Decode)] - pub struct EHDUsagePercent { - #[serde(rename = "storedBytesPercent")] - pub stored_bytes: f64, - #[serde(rename = "transferredBytesPercent")] - pub transferred_bytes: f64, - #[serde(rename = "putsPercent")] - pub number_of_puts: f64, - #[serde(rename = "getsPercent")] - pub number_of_gets: f64, - } - - #[derive( - Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, - )] - pub struct EHDCustomer { - #[serde(rename = "customerId")] - pub customer_id: String, - #[serde(rename = "consumedUsage")] - pub consumed_usage: EHDUsage, - } - - #[derive( - Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, - )] - pub struct EHDProvider { - #[serde(rename = "providerId")] - pub provider_id: String, - #[serde(rename = "providedUsage")] - pub provided_usage: EHDUsage, - pub nodes: Vec, - } - - #[derive( - Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, - )] - pub struct EHDNodeResources { - #[serde(rename = "nodeId")] - pub node_key: String, - #[serde(rename = "storedBytes")] - pub stored_bytes: i64, - #[serde(rename = "transferredBytes")] - pub transferred_bytes: u64, - #[serde(rename = "puts")] - pub number_of_puts: u64, - #[serde(rename = "gets")] - pub number_of_gets: u64, - #[serde(rename = "avgLatency")] - pub avg_latency: u64, - #[serde(rename = "avgBandwidth")] - pub avg_bandwidth: u64, - } - - #[derive( - Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, - )] - pub struct PHDNodeAggregate { - #[serde(rename = "nodeId")] - pub node_key: String, - #[serde(rename = "storedBytes")] - pub stored_bytes: i64, - #[serde(rename = "transferredBytes")] - pub transferred_bytes: u64, - #[serde(rename = "numberOfPuts")] - pub number_of_puts: u64, - #[serde(rename = "numberOfGets")] - pub number_of_gets: u64, - pub metrics: PHDNodeMetrics, - } - - #[derive( - Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, - )] - pub struct PHDNodeMetrics { - latency: LatencyMetrics, - availability: AvailabilityMetrics, - bandwidth: BandwidthMetrics, - } - - #[derive( - Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, - )] - pub struct LatencyMetrics { - #[serde(rename = "p50")] - p_50: u64, - #[serde(rename = "p95")] - p_95: u64, - #[serde(rename = "p99")] - p_99: u64, - #[serde(rename = "p999")] - p_999: u64, - } - - #[derive( - Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, - )] - pub struct AvailabilityMetrics { - #[serde(rename = "totalRequests")] - total_requests: u64, - #[serde(rename = "failedRequests")] - failed_requests: u64, - } - - #[derive( - Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, - )] - pub struct BandwidthMetrics { - #[serde(rename = "100kbps")] - kbps_100: u64, - #[serde(rename = "1Mbps")] - mbps_1: u64, - #[serde(rename = "10Mbps")] - mbps_10: u64, - #[serde(rename = "100Mbps")] - mbps_100: u64, - inf: u64, - } - - #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Encode, Decode)] - pub struct PHDResponse { - #[serde(rename = "phdId")] - pub phd_id: String, - #[serde(rename = "merkleTreeNodeId")] - pub tree_node_id: u32, - #[serde(rename = "NodesAggregates")] - pub nodes_aggregates: Vec, - #[serde(rename = "BucketsAggregates")] - pub buckets_aggregates: Vec, - pub hash: String, - pub collector: String, - } - - #[derive( - Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, - )] - pub struct PHDBucketAggregate { - #[serde(rename = "bucketId")] - pub bucket_id: BucketId, - #[serde(rename = "storedBytes")] - pub stored_bytes: i64, - #[serde(rename = "transferredBytes")] - pub transferred_bytes: u64, - #[serde(rename = "numberOfPuts")] - pub number_of_puts: u64, - #[serde(rename = "numberOfGets")] - pub number_of_gets: u64, - #[serde(rename = "subAggregates")] - pub sub_aggregates: Vec, - - // todo: remove from top-level bucket aggregation - #[serde(rename = "nodeId")] - pub node_key: String, - } - - #[derive( - Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, - )] - pub struct PHDBucketSubAggregate { - #[serde(rename = "bucketId")] - pub bucket_id: BucketId, - #[serde(rename = "nodeId")] - pub node_key: String, - #[serde(rename = "storedBytes")] - pub stored_bytes: i64, - #[serde(rename = "transferredBytes")] - pub transferred_bytes: u64, - #[serde(rename = "numberOfPuts")] - pub number_of_puts: u64, - #[serde(rename = "numberOfGets")] - pub number_of_gets: u64, - } - #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Encode, Decode)] pub struct TraversedEHDResponse { #[serde(rename = "ehdId")] @@ -959,17 +753,21 @@ pub(crate) mod json { #[serde(rename = "merkleTreeNodeHash")] pub tree_node_hash: String, #[serde(rename = "nodesAggregates")] - pub nodes_aggregates: Vec, + pub nodes_aggregates: TraversedPHDNodesTCAs, #[serde(rename = "bucketsAggregates")] - pub buckets_aggregates: Vec, + pub buckets_aggregates: TraversedPHDBucketsTCAs, } + pub type TraversedPHDNodesTCAs = BTreeMap>; + #[derive( Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, )] - pub struct TraversedPHDNodeAggregate { - #[serde(rename = "nodeId")] - pub node_key: String, + pub struct TraversedPHDNodeTCA { + #[serde(rename = "tcaaId")] + pub tca_id: DdcEra, + #[serde(rename = "tcaaRootHash")] + pub tca_hash: String, #[serde(rename = "storedBytes")] pub stored_bytes: i64, #[serde(rename = "transferredBytes")] @@ -980,12 +778,16 @@ pub(crate) mod json { pub number_of_gets: u64, } + pub type TraversedPHDBucketsTCAs = BTreeMap>; + #[derive( Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, )] - pub struct TraversedPHDBucketAggregate { - #[serde(rename = "bucketId")] - pub bucket_id: BucketId, + pub struct TraversedPHDBucketTCA { + #[serde(rename = "tcaaId")] + pub tca_id: DdcEra, + #[serde(rename = "tcaaRootHash")] + pub tca_hash: String, #[serde(rename = "storedBytes")] pub stored_bytes: i64, #[serde(rename = "transferredBytes")] diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index bc8892672..a22f3e070 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -1328,13 +1328,10 @@ pub mod pallet { })?; let collector_key = phd_id.0.clone(); - for node_aggregate in &phd_root.nodes_aggregates { - let node_key = - NodePubKey::try_from(node_aggregate.node_key.clone()).map_err(|_| { - vec![OCWError::FailedToParseNodeKey { - node_key: node_aggregate.node_key.clone(), - }] - })?; + for node_key in phd_root.nodes_aggregates.keys() { + let node_key = NodePubKey::try_from(node_key.clone()).map_err(|_| { + vec![OCWError::FailedToParseNodeKey { node_key: node_key.clone() }] + })?; if tcaas_map.contains_key(&node_key.clone()) { // Currently, we inspect node aggregation from a single (first @@ -1529,18 +1526,13 @@ pub mod pallet { let collector_key = phd_id.0.clone(); - for bucket_aggregate in &phd_root.buckets_aggregates { - let bucket_id = bucket_aggregate.bucket_id; - - for node_aggregate in &phd_root.nodes_aggregates { - let node_key = NodePubKey::try_from(node_aggregate.node_key.clone()) - .map_err(|_| { - vec![OCWError::FailedToParseNodeKey { - node_key: node_aggregate.node_key.clone(), - }] - })?; + for bucket_id in phd_root.buckets_aggregates.keys() { + for node_key in phd_root.nodes_aggregates.keys() { + let node_key = NodePubKey::try_from(node_key.clone()).map_err(|_| { + vec![OCWError::FailedToParseNodeKey { node_key: node_key.clone() }] + })?; - if tcaas_map.contains_key(&(bucket_id, node_key.clone())) { + if tcaas_map.contains_key(&(*bucket_id, node_key.clone())) { // Currently, we inspect node aggregation from a single (first // responded) collector. We may compare the aggregation for the same // node between different collectors in the next iterations to ensure @@ -1558,7 +1550,7 @@ pub mod pallet { tcaa_id, collector_key.clone(), node_key.clone(), - bucket_id, + *bucket_id, vec![1], ) { let tcaa_root = challenge_res @@ -1580,13 +1572,13 @@ pub mod pallet { bucket_sub_leaves_count += tcaa_leaves_count; bucket_sub_tcaa_count += 1; - tcaas_map.insert((bucket_id, node_key.clone()), tcaa_id); + tcaas_map.insert((*bucket_id, node_key.clone()), tcaa_id); } } if bucket_sub_tcaa_count > 0 { era_leaves_map.insert( - (bucket_id, node_key.clone()), + (*bucket_id, node_key.clone()), BTreeMap::from([( ( phd_id.clone(), diff --git a/runtime/cere-dev/src/lib.rs b/runtime/cere-dev/src/lib.rs index 8f15240b4..27f144acc 100644 --- a/runtime/cere-dev/src/lib.rs +++ b/runtime/cere-dev/src/lib.rs @@ -168,7 +168,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 73001, + spec_version: 73002, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 24, diff --git a/runtime/cere/src/lib.rs b/runtime/cere/src/lib.rs index d68bc3679..b5108ccc7 100644 --- a/runtime/cere/src/lib.rs +++ b/runtime/cere/src/lib.rs @@ -161,7 +161,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 73001, + spec_version: 73002, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 24, From cda5d5c3fe02ef869925ddfda0fe44a7b82e3182 Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Wed, 26 Feb 2025 21:38:28 +0100 Subject: [PATCH 26/31] feat: serde_as converting for EHD and PHD types --- pallets/ddc-clusters/src/cluster.rs | 6 +- pallets/ddc-clusters/src/lib.rs | 8 +- pallets/ddc-clusters/src/migrations.rs | 2 +- pallets/ddc-clusters/src/tests.rs | 2 +- pallets/ddc-payouts/src/lib.rs | 46 ++--- pallets/ddc-payouts/src/migrations.rs | 10 +- pallets/ddc-payouts/src/mock.rs | 4 +- pallets/ddc-staking/src/tests.rs | 12 +- .../ddc-verification/src/aggregator_client.rs | 112 ++++++----- pallets/ddc-verification/src/benchmarking.rs | 2 +- pallets/ddc-verification/src/lib.rs | 188 ++++++++---------- pallets/ddc-verification/src/mock.rs | 30 +-- primitives/src/lib.rs | 38 ++-- primitives/src/traits/cluster.rs | 8 +- 14 files changed, 229 insertions(+), 239 deletions(-) diff --git a/pallets/ddc-clusters/src/cluster.rs b/pallets/ddc-clusters/src/cluster.rs index ae47d63f7..3f39c3204 100644 --- a/pallets/ddc-clusters/src/cluster.rs +++ b/pallets/ddc-clusters/src/cluster.rs @@ -1,5 +1,5 @@ use codec::{Decode, Encode}; -use ddc_primitives::{ClusterId, ClusterParams, ClusterStatus, DdcEra}; +use ddc_primitives::{ClusterId, ClusterParams, ClusterStatus, TcaEra}; use frame_support::{pallet_prelude::*, parameter_types}; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; @@ -15,7 +15,7 @@ pub struct Cluster { pub reserve_id: AccountId, pub props: ClusterProps, pub status: ClusterStatus, - pub last_paid_era: DdcEra, + pub last_paid_era: TcaEra, } #[derive(Clone, Encode, Decode, RuntimeDebug, TypeInfo, PartialEq, Serialize, Deserialize)] @@ -44,7 +44,7 @@ impl Cluster { replication_total: cluster_params.replication_total, }, status: ClusterStatus::Unbonded, - last_paid_era: DdcEra::default(), + last_paid_era: TcaEra::default(), } } diff --git a/pallets/ddc-clusters/src/lib.rs b/pallets/ddc-clusters/src/lib.rs index 319bcfaff..359a75d38 100644 --- a/pallets/ddc-clusters/src/lib.rs +++ b/pallets/ddc-clusters/src/lib.rs @@ -36,7 +36,7 @@ use ddc_primitives::{ }, ClusterBondingParams, ClusterFeesParams, ClusterId, ClusterNodeKind, ClusterNodeState, ClusterNodeStatus, ClusterNodesStats, ClusterParams, ClusterPricingParams, - ClusterProtocolParams, ClusterStatus, DdcEra, NodePubKey, NodeType, + ClusterProtocolParams, ClusterStatus, NodePubKey, NodeType, TcaEra, }; use frame_support::{ assert_ok, @@ -106,7 +106,7 @@ pub mod pallet { ClusterUnbonding { cluster_id: ClusterId }, ClusterUnbonded { cluster_id: ClusterId }, ClusterNodeValidated { cluster_id: ClusterId, node_pub_key: NodePubKey, succeeded: bool }, - ClusterEraPaid { cluster_id: ClusterId, era_id: DdcEra }, + ClusterEraPaid { cluster_id: ClusterId, era_id: TcaEra }, } #[pallet::error] @@ -886,7 +886,7 @@ pub mod pallet { } } impl ClusterValidator for Pallet { - fn set_last_paid_era(cluster_id: &ClusterId, era_id: DdcEra) -> Result<(), DispatchError> { + fn set_last_paid_era(cluster_id: &ClusterId, era_id: TcaEra) -> Result<(), DispatchError> { let mut cluster = Clusters::::try_get(cluster_id).map_err(|_| Error::::ClusterDoesNotExist)?; @@ -897,7 +897,7 @@ pub mod pallet { Ok(()) } - fn get_last_paid_era(cluster_id: &ClusterId) -> Result { + fn get_last_paid_era(cluster_id: &ClusterId) -> Result { let cluster = Clusters::::try_get(cluster_id).map_err(|_| Error::::ClusterDoesNotExist)?; diff --git a/pallets/ddc-clusters/src/migrations.rs b/pallets/ddc-clusters/src/migrations.rs index 6aedb510d..5aa32abd6 100644 --- a/pallets/ddc-clusters/src/migrations.rs +++ b/pallets/ddc-clusters/src/migrations.rs @@ -465,7 +465,7 @@ pub mod v3 { pub reserve_id: AccountId, pub props: ClusterProps, pub status: ClusterStatus, - pub last_paid_era: DdcEra, // new field + pub last_paid_era: TcaEra, // new field } #[derive(Clone, Encode, Decode, RuntimeDebug, TypeInfo, PartialEq, Serialize, Deserialize)] diff --git a/pallets/ddc-clusters/src/tests.rs b/pallets/ddc-clusters/src/tests.rs index df0b894c0..d003341a0 100644 --- a/pallets/ddc-clusters/src/tests.rs +++ b/pallets/ddc-clusters/src/tests.rs @@ -585,7 +585,7 @@ fn set_last_validated_era_works() { let cluster_manager_id = AccountId::from([1; 32]); let cluster_reserve_id = AccountId::from([2; 32]); let auth_contract_1 = AccountId::from([3; 32]); - let era_id: DdcEra = 22; + let era_id: TcaEra = 22; // Cluster doesn't exist assert_noop!( diff --git a/pallets/ddc-payouts/src/lib.rs b/pallets/ddc-payouts/src/lib.rs index b8c28c17b..46c0589f8 100644 --- a/pallets/ddc-payouts/src/lib.rs +++ b/pallets/ddc-payouts/src/lib.rs @@ -28,10 +28,10 @@ use ddc_primitives::{ customer::CustomerCharger as CustomerChargerType, node::NodeManager, pallet::PalletVisitor as PalletVisitorType, payout::PayoutProcessor, ClusterValidator, }, - BatchIndex, ClusterId, CustomerCharge, DdcEra, EHDId, EhdEra, Fingerprint, MMRProof, - MergeMMRHash, NodePubKey, NodeUsage, PayableUsageHash, PaymentEra, PayoutError, - PayoutFingerprintParams, PayoutReceiptParams, PayoutState, MAX_PAYOUT_BATCH_COUNT, - MAX_PAYOUT_BATCH_SIZE, MILLICENTS, + BatchIndex, ClusterId, CustomerCharge, EHDId, EhdEra, Fingerprint, MMRProof, MergeMMRHash, + NodePubKey, NodeUsage, PayableUsageHash, PaymentEra, PayoutError, PayoutFingerprintParams, + PayoutReceiptParams, PayoutState, TcaEra, MAX_PAYOUT_BATCH_COUNT, MAX_PAYOUT_BATCH_SIZE, + MILLICENTS, }; use frame_election_provider_support::SortedListProvider; use frame_support::{ @@ -115,22 +115,22 @@ pub mod pallet { pub enum Event { PayoutInitialized { cluster_id: ClusterId, - era: DdcEra, + era: TcaEra, }, ChargingStarted { cluster_id: ClusterId, - era: DdcEra, + era: TcaEra, }, Charged { cluster_id: ClusterId, - era: DdcEra, + era: TcaEra, batch_index: BatchIndex, customer_id: T::AccountId, amount: u128, }, ChargedPartially { cluster_id: ClusterId, - era: DdcEra, + era: TcaEra, batch_index: BatchIndex, customer_id: T::AccountId, charged: u128, @@ -138,37 +138,37 @@ pub mod pallet { }, Indebted { cluster_id: ClusterId, - era: DdcEra, + era: TcaEra, batch_index: BatchIndex, customer_id: T::AccountId, amount: u128, }, ChargingFinished { cluster_id: ClusterId, - era: DdcEra, + era: TcaEra, }, TreasuryFeesCollected { cluster_id: ClusterId, - era: DdcEra, + era: TcaEra, amount: u128, }, ClusterReserveFeesCollected { cluster_id: ClusterId, - era: DdcEra, + era: TcaEra, amount: u128, }, ValidatorFeesCollected { cluster_id: ClusterId, - era: DdcEra, + era: TcaEra, amount: u128, }, RewardingStarted { cluster_id: ClusterId, - era: DdcEra, + era: TcaEra, }, Rewarded { cluster_id: ClusterId, - era: DdcEra, + era: TcaEra, batch_index: BatchIndex, node_provider_id: T::AccountId, rewarded: u128, @@ -176,13 +176,13 @@ pub mod pallet { }, ValidatorRewarded { cluster_id: ClusterId, - era: DdcEra, + era: TcaEra, validator_id: T::AccountId, amount: u128, }, NotDistributedReward { cluster_id: ClusterId, - era: DdcEra, + era: TcaEra, batch_index: BatchIndex, node_provider_id: T::AccountId, expected_reward: u128, @@ -190,21 +190,21 @@ pub mod pallet { }, NotDistributedOverallReward { cluster_id: ClusterId, - era: DdcEra, + era: TcaEra, expected_reward: u128, total_distributed_rewards: u128, }, RewardingFinished { cluster_id: ClusterId, - era: DdcEra, + era: TcaEra, }, PayoutReceiptFinalized { cluster_id: ClusterId, - era: DdcEra, + era: TcaEra, }, ChargeError { cluster_id: ClusterId, - era: DdcEra, + era: TcaEra, batch_index: BatchIndex, customer_id: T::AccountId, amount: u128, @@ -402,7 +402,7 @@ pub mod pallet { validators_fee: u128, vault: &T::AccountId, cluster_id: ClusterId, - era: DdcEra, + era: TcaEra, ) -> DispatchResult { let stakers = get_current_exposure_ratios::()?; @@ -480,7 +480,7 @@ pub mod pallet { let account_ref: &[u8; 32] = account_id_32.as_ref(); hex::encode(account_ref) } - pub fn sub_account_id(cluster_id: ClusterId, era: DdcEra) -> T::AccountId { + pub fn sub_account_id(cluster_id: ClusterId, era: TcaEra) -> T::AccountId { let mut bytes = Vec::new(); bytes.extend_from_slice(&cluster_id[..]); bytes.extend_from_slice(&era.encode()); diff --git a/pallets/ddc-payouts/src/migrations.rs b/pallets/ddc-payouts/src/migrations.rs index a0c3fa67c..c3481010b 100644 --- a/pallets/ddc-payouts/src/migrations.rs +++ b/pallets/ddc-payouts/src/migrations.rs @@ -33,7 +33,7 @@ pub mod v1 { Blake2_128Concat, ClusterId, Blake2_128Concat, - DdcEra, + TcaEra, BillingReport, >; @@ -120,14 +120,14 @@ pub mod v2 { Blake2_128Concat, ClusterId, Blake2_128Concat, - DdcEra, + TcaEra, BillingReport, >; #[derive(Clone, Encode, Decode, RuntimeDebug, TypeInfo, PartialEq)] pub struct PayoutFingerprint { pub cluster_id: ClusterId, - pub era_id: DdcEra, // removed field + pub era_id: TcaEra, // removed field pub start_era: i64, // removed field pub end_era: i64, // removed field pub payers_merkle_root: PayableUsageHash, @@ -181,7 +181,7 @@ pub mod v2 { let mut billing_fingerprints: Vec> = Vec::new(); v2::ActiveBillingReports::::translate::, _>( - |cluster_id: ClusterId, era_id: DdcEra, payout_receipt: v1::BillingReport| { + |cluster_id: ClusterId, era_id: TcaEra, payout_receipt: v1::BillingReport| { log::info!(target: LOG_TARGET, "Migrating Billing Report for cluster_id {:?} era_id {:?}", cluster_id, era_id); translated.saturating_inc(); @@ -323,7 +323,7 @@ pub mod v3 { Blake2_128Concat, ClusterId, Blake2_128Concat, - DdcEra, + TcaEra, BillingReport, >; diff --git a/pallets/ddc-payouts/src/mock.rs b/pallets/ddc-payouts/src/mock.rs index 222964514..6dfc05460 100644 --- a/pallets/ddc-payouts/src/mock.rs +++ b/pallets/ddc-payouts/src/mock.rs @@ -124,11 +124,11 @@ impl crate::pallet::Config for Test { pub struct MockClusterValidator; impl ClusterValidator for MockClusterValidator { - fn set_last_paid_era(_cluster_id: &ClusterId, _era_id: DdcEra) -> Result<(), DispatchError> { + fn set_last_paid_era(_cluster_id: &ClusterId, _era_id: TcaEra) -> Result<(), DispatchError> { unimplemented!() } - fn get_last_paid_era(_cluster_id: &ClusterId) -> Result { + fn get_last_paid_era(_cluster_id: &ClusterId) -> Result { Ok(Default::default()) } } diff --git a/pallets/ddc-staking/src/tests.rs b/pallets/ddc-staking/src/tests.rs index 8db86871d..173efb47b 100644 --- a/pallets/ddc-staking/src/tests.rs +++ b/pallets/ddc-staking/src/tests.rs @@ -2,7 +2,7 @@ use ddc_primitives::{ ClusterNodeKind, ClusterNodeStatus, ClusterParams, ClusterProtocolParams, ClusterStatus, - DdcEra, StorageNodeParams, StorageNodePubKey, + StorageNodeParams, StorageNodePubKey, TcaEra, }; use frame_support::{assert_noop, assert_ok, traits::ReservableCurrency}; use pallet_balances::Error as BalancesError; @@ -772,7 +772,7 @@ fn bond_cluster_works() { replication_total: 0 }, status: ClusterStatus::Bonded, - last_paid_era: DdcEra::default() + last_paid_era: TcaEra::default() }) ); @@ -922,7 +922,7 @@ fn unbond_bonded_cluster_works() { replication_total: 0 }, status: ClusterStatus::Unbonding, - last_paid_era: DdcEra::default() + last_paid_era: TcaEra::default() }) ); @@ -1002,7 +1002,7 @@ fn unbond_activated_cluster_works() { replication_total: 0 }, status: ClusterStatus::Unbonding, - last_paid_era: DdcEra::default() + last_paid_era: TcaEra::default() }) ); @@ -1097,7 +1097,7 @@ fn withdraw_unbonded_cluster_works() { replication_total: 0 }, status: ClusterStatus::Unbonded, - last_paid_era: DdcEra::default() + last_paid_era: TcaEra::default() }) ); }); @@ -1184,7 +1184,7 @@ fn withdraw_activated_cluster_works() { replication_total: 0 }, status: ClusterStatus::Unbonded, - last_paid_era: DdcEra::default() + last_paid_era: TcaEra::default() }) ); }); diff --git a/pallets/ddc-verification/src/aggregator_client.rs b/pallets/ddc-verification/src/aggregator_client.rs index d82735ae0..9200dc5fb 100644 --- a/pallets/ddc-verification/src/aggregator_client.rs +++ b/pallets/ddc-verification/src/aggregator_client.rs @@ -1,8 +1,9 @@ #![allow(dead_code)] -use ddc_primitives::{AggregatorInfo, BucketId, DdcEra}; +use ddc_primitives::{AggregatorInfo, BucketId, TcaEra}; use prost::Message; -use serde_with::{base64::Base64, serde_as}; +use scale_info::prelude::{string::String, vec::Vec}; +use serde_with::{base64::Base64, serde_as, TryFromInto}; use sp_core::crypto::AccountId32; use sp_io::offchain::timestamp; use sp_runtime::offchain::{http, Duration}; @@ -65,7 +66,7 @@ impl<'a> AggregatorClient<'a> { pub fn buckets_aggregates( &self, - era_id: DdcEra, + era_id: TcaEra, limit: Option, prev_token: Option, ) -> Result, http::Error> { @@ -89,7 +90,7 @@ impl<'a> AggregatorClient<'a> { pub fn nodes_aggregates( &self, - era_id: DdcEra, + era_id: TcaEra, limit: Option, prev_token: Option, ) -> Result, http::Error> { @@ -112,7 +113,7 @@ impl<'a> AggregatorClient<'a> { pub fn challenge_bucket_sub_aggregate( &self, - era_id: DdcEra, + era_id: TcaEra, bucket_id: BucketId, node_id: &str, merkle_tree_node_id: Vec, @@ -135,7 +136,7 @@ impl<'a> AggregatorClient<'a> { pub fn challenge_node_aggregate( &self, - era_id: DdcEra, + era_id: TcaEra, node_id: &str, merkle_tree_node_id: Vec, ) -> Result { @@ -174,7 +175,7 @@ impl<'a> AggregatorClient<'a> { ehd_id: EHDId, tree_node_id: u32, tree_levels_count: u32, - ) -> Result, http::Error> { + ) -> Result, http::Error> { let mut url = format!( "{}/activity/ehds/{}/traverse?merkleTreeNodeId={}&levels={}", self.base_url, @@ -182,12 +183,7 @@ impl<'a> AggregatorClient<'a> { tree_node_id, tree_levels_count ); - fetch_and_parse!( - self, - url, - Vec, - Vec - ) + fetch_and_parse!(self, url, Vec, Vec) } pub fn traverse_partial_historical_document( @@ -195,7 +191,7 @@ impl<'a> AggregatorClient<'a> { phd_id: PHDId, tree_node_id: u32, tree_levels_count: u32, - ) -> Result, http::Error> { + ) -> Result, http::Error> { let mut url = format!( "{}/activity/phds/{}/traverse?merkleTreeNodeId={}&levels={}", self.base_url, @@ -203,17 +199,12 @@ impl<'a> AggregatorClient<'a> { tree_node_id, tree_levels_count ); - fetch_and_parse!( - self, - url, - Vec, - Vec - ) + fetch_and_parse!(self, url, Vec, Vec) } pub fn traverse_bucket_sub_aggregate( &self, - era_id: DdcEra, + era_id: TcaEra, bucket_id: BucketId, node_id: &str, merkle_tree_node_id: u32, @@ -228,7 +219,7 @@ impl<'a> AggregatorClient<'a> { pub fn traverse_node_aggregate( &self, - era_id: DdcEra, + era_id: TcaEra, node_id: &str, merkle_tree_node_id: u32, levels: u16, @@ -396,7 +387,7 @@ pub(crate) mod json { /// DDC aggregation era #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Encode, Decode)] pub struct AggregationEraResponse { - pub id: DdcEra, + pub id: TcaEra, pub status: String, pub start: i64, pub end: i64, @@ -628,24 +619,34 @@ pub(crate) mod json { pub number_of_gets: u64, } + #[serde_as] #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Encode, Decode)] - pub struct TraversedEHDResponse { + pub struct EHDTreeNode { #[serde(rename = "ehdId")] - pub ehd_id: String, + #[serde_as(as = "TryFromInto")] + pub ehd_id: EHDId, + #[serde(rename = "groupingCollector")] - pub g_collector: String, + #[serde_as(as = "TryFromInto")] + pub g_collector: NodePubKey, + #[serde(rename = "merkleTreeNodeId")] pub tree_node_id: u32, + #[serde(rename = "merkleTreeNodeHash")] - pub tree_node_hash: String, + #[serde_as(as = "Base64")] + pub tree_node_hash: Vec, + #[serde(rename = "pdhIds")] - pub pdh_ids: Vec, + #[serde_as(as = "Vec>")] + pub pdh_ids: Vec, + pub status: String, - pub customers: Vec, - pub providers: Vec, + pub customers: Vec, + pub providers: Vec, } - impl TraversedEHDResponse { + impl EHDTreeNode { pub fn get_cluster_usage(&self) -> EHDUsage { self.providers.iter().fold( EHDUsage { @@ -668,14 +669,14 @@ pub(crate) mod json { #[derive( Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, )] - pub struct TraversedEHDCustomer { + pub struct EHDCustomer { #[serde(rename = "customerId")] pub customer_id: String, #[serde(rename = "consumedUsage")] pub consumed_usage: EHDUsage, } - impl TraversedEHDCustomer { + impl EHDCustomer { pub fn parse_customer_id(&self) -> Result { if !self.customer_id.starts_with("0x") || self.customer_id.len() != 66 { return Err(()); @@ -697,15 +698,15 @@ pub(crate) mod json { } #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Encode, Decode)] - pub struct TraversedEHDProvider { + pub struct EHDProvider { #[serde(rename = "providerId")] pub provider_id: String, #[serde(rename = "providedUsage")] pub provided_usage: EHDUsage, - pub nodes: Vec, + pub nodes: Vec, } - impl TraversedEHDProvider { + impl EHDProvider { pub fn parse_provider_id(&self) -> Result { if !self.provider_id.starts_with("0x") || self.provider_id.len() != 66 { return Err(()); @@ -729,7 +730,7 @@ pub(crate) mod json { #[derive( Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, )] - pub struct TraversedEHDNodeResources { + pub struct EHDProviderUsage { #[serde(rename = "nodeId")] pub node_key: String, #[serde(rename = "storedBytes")] @@ -742,30 +743,39 @@ pub(crate) mod json { pub number_of_gets: u64, } + #[serde_as] #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Encode, Decode)] - pub struct TraversedPHDResponse { + pub struct PHDTreeNode { #[serde(rename = "phdId")] - pub phd_id: String, + #[serde_as(as = "TryFromInto")] + pub phd_id: PHDId, + #[serde(rename = "collectorId")] - pub collector: String, + #[serde_as(as = "TryFromInto")] + pub collector: NodePubKey, + #[serde(rename = "merkleTreeNodeId")] pub tree_node_id: u32, + #[serde(rename = "merkleTreeNodeHash")] - pub tree_node_hash: String, + #[serde_as(as = "Base64")] + pub tree_node_hash: Vec, + #[serde(rename = "nodesAggregates")] - pub nodes_aggregates: TraversedPHDNodesTCAs, + pub nodes_aggregates: PHDNodesTCAs, + #[serde(rename = "bucketsAggregates")] - pub buckets_aggregates: TraversedPHDBucketsTCAs, + pub buckets_aggregates: PHDBucketsTCAs, } - pub type TraversedPHDNodesTCAs = BTreeMap>; + pub type PHDNodesTCAs = BTreeMap>; #[derive( Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, )] - pub struct TraversedPHDNodeTCA { + pub struct PHDNodeTCA { #[serde(rename = "tcaaId")] - pub tca_id: DdcEra, + pub tca_id: TcaEra, #[serde(rename = "tcaaRootHash")] pub tca_hash: String, #[serde(rename = "storedBytes")] @@ -778,14 +788,14 @@ pub(crate) mod json { pub number_of_gets: u64, } - pub type TraversedPHDBucketsTCAs = BTreeMap>; + pub type PHDBucketsTCAs = BTreeMap>; #[derive( Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, )] - pub struct TraversedPHDBucketTCA { + pub struct PHDBucketTCA { #[serde(rename = "tcaaId")] - pub tca_id: DdcEra, + pub tca_id: TcaEra, #[serde(rename = "tcaaRootHash")] pub tca_hash: String, #[serde(rename = "storedBytes")] @@ -832,8 +842,8 @@ pub(crate) mod json { pub struct EHDEra { pub id: u32, pub status: String, - pub era_start: Option, - pub era_end: Option, + pub era_start: Option, + pub era_end: Option, pub time_start: Option, pub time_end: Option, } diff --git a/pallets/ddc-verification/src/benchmarking.rs b/pallets/ddc-verification/src/benchmarking.rs index 4cb599a5a..fb42d5f0a 100644 --- a/pallets/ddc-verification/src/benchmarking.rs +++ b/pallets/ddc-verification/src/benchmarking.rs @@ -278,7 +278,7 @@ mod benchmarks { #[benchmark] fn send_charging_customers_batch(b: Linear<1, { MAX_PAYOUT_BATCH_SIZE.into() }>) { let cluster_id = ClusterId::from([1; 20]); - let payment_era: DdcEra = 1; + let payment_era: TcaEra = 1; let collector_key = NodePubKey::StoragePubKey(AccountId32::from([0u8; 32])); let ehd_id = EHDId(cluster_id, collector_key, payment_era); let state = PayoutState::ChargingCustomers; diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index a22f3e070..e6ad3600b 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -21,10 +21,10 @@ use ddc_primitives::{ NodeManager, PayoutProcessor, StorageUsageProvider, ValidatorVisitor, }, BatchIndex, BucketStorageUsage, BucketUsage, ClusterFeesParams, ClusterId, - ClusterPricingParams, ClusterStatus, CustomerCharge as CustomerCosts, DdcEra, EHDId, EhdEra, - MMRProof, NodeParams, NodePubKey, NodeStorageUsage, NodeUsage, PHDId, PayableUsageHash, - PaymentEra, PayoutFingerprintParams, PayoutReceiptParams, PayoutState, - ProviderReward as ProviderProfits, StorageNodeParams, StorageNodePubKey, AVG_SECONDS_MONTH, + ClusterPricingParams, ClusterStatus, CustomerCharge as CustomerCosts, EHDId, EhdEra, MMRProof, + NodeParams, NodePubKey, NodeStorageUsage, NodeUsage, PHDId, PayableUsageHash, PaymentEra, + PayoutFingerprintParams, PayoutReceiptParams, PayoutState, ProviderReward as ProviderProfits, + StorageNodeParams, StorageNodePubKey, TcaEra, AVG_SECONDS_MONTH, }; use frame_support::{ pallet_prelude::*, @@ -331,14 +331,14 @@ pub mod pallet { }, ChallengeResponseError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: TcaEra, aggregate_key: AggregateKey, aggregator: NodePubKey, validator: T::AccountId, }, TraverseResponseError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: TcaEra, aggregate_key: AggregateKey, aggregator: NodePubKey, validator: T::AccountId, @@ -366,7 +366,7 @@ pub mod pallet { FailedToParseCustomerId { customer_id: AccountId32, }, - TimeCapsuleError, + TCAError, FailedToFetchTraversedEHD, FailedToFetchTraversedPHD, FailedToFetchNodeChallenge, @@ -397,14 +397,14 @@ pub mod pallet { /// Challenge Response Retrieval Error. ChallengeResponseError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: TcaEra, aggregate_key: AggregateKey, aggregator: NodePubKey, }, /// Traverse Response Retrieval Error. TraverseResponseError { cluster_id: ClusterId, - era_id: DdcEra, + era_id: TcaEra, aggregate_key: AggregateKey, aggregator: NodePubKey, }, @@ -499,7 +499,7 @@ pub mod pallet { FailedToParseCustomerId { customer_id: AccountId32, }, - TimeCapsuleError, + TCAError, FailedToFetchTraversedEHD, FailedToFetchTraversedPHD, FailedToFetchNodeChallenge, @@ -954,8 +954,8 @@ pub mod pallet { OCWError::FailedToFetchProviderId { node_key } => { Self::deposit_event(Event::FailedToFetchProviderId { node_key }); }, - OCWError::TimeCapsuleError => { - Self::deposit_event(Event::TimeCapsuleError); + OCWError::TCAError => { + Self::deposit_event(Event::TCAError); }, OCWError::FailedToSignInspectionReceipt => { Self::deposit_event(Event::FailedToSignInspectionReceipt); @@ -1171,7 +1171,7 @@ pub mod pallet { cluster_id: &ClusterId, account: &Account, signer: &Signer, - ) -> Result, Vec> { + ) -> Result, Vec> { match Self::$prepare_fn(&cluster_id) { Ok(Some(prepared_data)) => { @@ -1240,40 +1240,31 @@ pub mod pallet { if let Some(ehd_era) = Self::get_ehd_era_for_inspection(cluster_id, vec![g_collector.clone()].as_slice()) - .map_err(|e| vec![e])? + .map_err(|e| [e])? { - let tcaa_start = - ehd_era.era_start.ok_or_else(|| vec![OCWError::TimeCapsuleError])?; - let tcaa_end = ehd_era.era_end.ok_or_else(|| vec![OCWError::TimeCapsuleError])?; + let tca_start = ehd_era.era_start.ok_or([OCWError::TCAError])?; + let tca_end = ehd_era.era_end.ok_or([OCWError::TCAError])?; let ehd_root = Self::get_ehd_root( cluster_id, EHDId(*cluster_id, g_collector.0.clone(), ehd_era.id), ) - .map_err(|e| vec![e])?; - - let ehd_id = EHDId::try_from(ehd_root.ehd_id.clone()).map_err(|_| { - vec![OCWError::FailedToParseEHDId { ehd_id: ehd_root.ehd_id.clone() }] - })?; + .map_err(|e| [e])?; let mut phd_roots = vec![]; - for phd_id in &ehd_root.pdh_ids { - let phd_id = PHDId::try_from(phd_id.clone()).map_err(|_| { - vec![OCWError::FailedToParsePHDId { phd_id: phd_id.clone() }] - })?; - - let phd_root = Self::get_phd_root(cluster_id, phd_id).map_err(|e| vec![e])?; + for phd_id in ehd_root.pdh_ids { + let phd_root = Self::get_phd_root(cluster_id, phd_id).map_err(|e| [e])?; phd_roots.push(phd_root.clone()); } let nodes_inspection = - Self::inspect_nodes_aggregates(cluster_id, &phd_roots, tcaa_start, tcaa_end)?; + Self::inspect_nodes_aggregates(cluster_id, &phd_roots, tca_start, tca_end)?; let buckets_inspection = - Self::inspect_buckets_aggregates(cluster_id, &phd_roots, tcaa_start, tcaa_end)?; + Self::inspect_buckets_aggregates(cluster_id, &phd_roots, tca_start, tca_end)?; let payload = ( - Into::::into(ehd_id.clone()), + Into::::into(ehd_root.ehd_id.clone()), nodes_inspection.clone(), buckets_inspection.clone(), ) @@ -1291,7 +1282,7 @@ pub mod pallet { let signature = format!("0x{}", hex::encode(signature.encode())); let receipt = aggregator_client::json::InspectionReceipt { - ehd_id: ehd_id.clone().into(), + ehd_id: ehd_root.ehd_id.clone().into(), inspector, signature, nodes_inspection, @@ -1301,7 +1292,7 @@ pub mod pallet { Self::send_inspection_receipt(cluster_id, g_collector, receipt) .map_err(|e| vec![e])?; - Self::store_last_inspected_ehd(cluster_id, ehd_id); + Self::store_last_inspected_ehd(cluster_id, ehd_root.ehd_id); } Ok(()) @@ -1310,24 +1301,20 @@ pub mod pallet { #[allow(clippy::collapsible_else_if)] pub(crate) fn inspect_nodes_aggregates( cluster_id: &ClusterId, - phd_roots: &Vec, - tcaa_start: DdcEra, - tcaa_end: DdcEra, + phd_roots: &Vec, + tca_start: TcaEra, + tca_end: TcaEra, ) -> Result> { #[allow(clippy::type_complexity)] let mut era_leaves_map: BTreeMap< - NodePubKey, // node aggrehate key - BTreeMap<(PHDId, (u64, u64)), BTreeMap>>, + NodePubKey, // node aggregate key + BTreeMap<(PHDId, (u64, u64)), BTreeMap>>, > = BTreeMap::new(); - let mut tcaas_map: BTreeMap = BTreeMap::new(); + let mut tcaas_map: BTreeMap = BTreeMap::new(); for phd_root in phd_roots { - let phd_id = PHDId::try_from(phd_root.phd_id.clone()).map_err(|_| { - vec![OCWError::FailedToParsePHDId { phd_id: phd_root.phd_id.clone() }] - })?; - - let collector_key = phd_id.0.clone(); + let collector_key = phd_root.phd_id.0.clone(); for node_key in phd_root.nodes_aggregates.keys() { let node_key = NodePubKey::try_from(node_key.clone()).map_err(|_| { vec![OCWError::FailedToParseNodeKey { node_key: node_key.clone() }] @@ -1345,7 +1332,7 @@ pub mod pallet { let mut node_tcaa_count: u64 = 0; let mut tcaa_leaves = BTreeMap::new(); - for tcaa_id in tcaa_start..=tcaa_end { + for tcaa_id in tca_start..=tca_end { if let Ok(challenge_res) = Self::fetch_node_challenge_response( cluster_id, tcaa_id, @@ -1380,7 +1367,7 @@ pub mod pallet { era_leaves_map.insert( node_key, BTreeMap::from([( - (phd_id.clone(), (node_leaves_count, node_tcaa_count)), + (phd_root.phd_id.clone(), (node_leaves_count, node_tcaa_count)), tcaa_leaves, )]), ); @@ -1410,8 +1397,8 @@ pub mod pallet { let mut remainder = n % node_tcaa_count; - let mut verified_tcaas: BTreeMap> = BTreeMap::new(); - let mut unverified_tcaas: BTreeMap> = BTreeMap::new(); + let mut verified_tcaas: BTreeMap> = BTreeMap::new(); + let mut unverified_tcaas: BTreeMap> = BTreeMap::new(); for (tcaa_id, ids) in tcaa_leaves { let ids_count: u64 = ids.len().try_into().unwrap(); @@ -1453,7 +1440,7 @@ pub mod pallet { if verified_tcaas.contains_key(&tcaa_id) { let mut verified_ids = verified_tcaas .get(&tcaa_id) - .ok_or([OCWError::TimeCapsuleError])? + .ok_or([OCWError::TCAError])? .clone(); verified_ids.extend(leaves_to_inspect); verified_tcaas.insert(tcaa_id, verified_ids.clone()); @@ -1464,7 +1451,7 @@ pub mod pallet { if unverified_tcaas.contains_key(&tcaa_id) { let mut unverified_ids = unverified_tcaas .get(&tcaa_id) - .ok_or([OCWError::TimeCapsuleError])? + .ok_or([OCWError::TCAError])? .clone(); unverified_ids.extend(leaves_to_inspect); unverified_tcaas.insert(tcaa_id, unverified_ids); @@ -1507,24 +1494,20 @@ pub mod pallet { #[allow(clippy::collapsible_else_if)] pub(crate) fn inspect_buckets_aggregates( cluster_id: &ClusterId, - phd_roots: &Vec, - tcaa_start: DdcEra, - tcaa_end: DdcEra, + phd_roots: &Vec, + tca_start: TcaEra, + tca_end: TcaEra, ) -> Result> { #[allow(clippy::type_complexity)] let mut era_leaves_map: BTreeMap< (BucketId, NodePubKey), // bucket sub-aggegate key - BTreeMap<(PHDId, (u64, u64)), BTreeMap>>, + BTreeMap<(PHDId, (u64, u64)), BTreeMap>>, > = BTreeMap::new(); - let mut tcaas_map: BTreeMap<(BucketId, NodePubKey), DdcEra> = BTreeMap::new(); + let mut tcaas_map: BTreeMap<(BucketId, NodePubKey), TcaEra> = BTreeMap::new(); for phd_root in phd_roots { - let phd_id = PHDId::try_from(phd_root.phd_id.clone()).map_err(|_| { - vec![OCWError::FailedToParsePHDId { phd_id: phd_root.phd_id.clone() }] - })?; - - let collector_key = phd_id.0.clone(); + let collector_key = phd_root.phd_id.0.clone(); for bucket_id in phd_root.buckets_aggregates.keys() { for node_key in phd_root.nodes_aggregates.keys() { @@ -1544,7 +1527,7 @@ pub mod pallet { let mut bucket_sub_tcaa_count: u64 = 0; let mut tcaa_leaves = BTreeMap::new(); - for tcaa_id in tcaa_start..=tcaa_end { + for tcaa_id in tca_start..=tca_end { if let Ok(challenge_res) = Self::fetch_bucket_challenge_response( cluster_id, tcaa_id, @@ -1581,7 +1564,7 @@ pub mod pallet { (*bucket_id, node_key.clone()), BTreeMap::from([( ( - phd_id.clone(), + phd_root.phd_id.clone(), (bucket_sub_leaves_count, bucket_sub_tcaa_count), ), tcaa_leaves, @@ -1615,8 +1598,8 @@ pub mod pallet { let mut remainder = n % bucket_sub_tcaa_count; - let mut verified_tcaas: BTreeMap> = BTreeMap::new(); - let mut unverified_tcaas: BTreeMap> = BTreeMap::new(); + let mut verified_tcaas: BTreeMap> = BTreeMap::new(); + let mut unverified_tcaas: BTreeMap> = BTreeMap::new(); for (tcaa_id, ids) in tcaa_leaves { let ids_count: u64 = ids.len().try_into().unwrap(); @@ -1660,7 +1643,7 @@ pub mod pallet { if verified_tcaas.contains_key(&tcaa_id) { let mut verified_ids = verified_tcaas .get(&tcaa_id) - .ok_or([OCWError::TimeCapsuleError])? + .ok_or([OCWError::TCAError])? .clone(); verified_ids.extend(leaves_to_inspect); verified_tcaas.insert(tcaa_id, verified_ids.clone()); @@ -1671,7 +1654,7 @@ pub mod pallet { if unverified_tcaas.contains_key(&tcaa_id) { let mut unverified_ids = unverified_tcaas .get(&tcaa_id) - .ok_or([OCWError::TimeCapsuleError])? + .ok_or([OCWError::TCAError])? .clone(); unverified_ids.extend(leaves_to_inspect); unverified_tcaas.insert(tcaa_id, unverified_ids); @@ -2030,8 +2013,8 @@ pub mod pallet { &ehd.customers, &customers_usage_cutoff, &pricing, - era.time_start.ok_or(OCWError::TimeCapsuleError)?, - era.time_end.ok_or(OCWError::TimeCapsuleError)?, + era.time_start.ok_or(OCWError::TCAError)?, + era.time_end.ok_or(OCWError::TCAError)?, ) .map_err(|_| OCWError::FailedToCalculatePayersBatches { era_id: ehd_id.2 })?; @@ -2101,7 +2084,7 @@ pub mod pallet { } fn calculate_ehd_customers_charges( - customers: &Vec, + customers: &Vec, cutoff_usage_map: &BTreeMap, pricing: &ClusterPricingParams, time_start: i64, @@ -2123,9 +2106,6 @@ pub mod pallet { time_end, )?; - // todo: cut off unverified activity of buckets if it is detected during - // inspection - cluster_costs.storage = cluster_costs .storage .checked_add(customer_costs.storage) @@ -2262,7 +2242,7 @@ pub mod pallet { } fn calculate_ehd_providers_rewards( - providers: &Vec, + providers: &Vec, cutoff_usage_map: &BTreeMap, fees: &ClusterFeesParams, cluster_usage: &aggregator_client::json::EHDUsage, @@ -2874,7 +2854,7 @@ pub mod pallet { pub(crate) fn get_ehd_root( cluster_id: &ClusterId, ehd_id: EHDId, - ) -> Result { + ) -> Result { Self::fetch_traversed_era_historical_document(cluster_id, ehd_id, 1, 1)? .first() .ok_or(OCWError::FailedToFetchTraversedEHD) @@ -2884,7 +2864,7 @@ pub mod pallet { pub(crate) fn get_phd_root( cluster_id: &ClusterId, phd_id: PHDId, - ) -> Result { + ) -> Result { Self::fetch_traversed_partial_historical_document(cluster_id, phd_id, 1, 1)? .first() .ok_or(OCWError::FailedToFetchTraversedPHD) @@ -2894,7 +2874,7 @@ pub mod pallet { pub(crate) fn get_tcaa_bucket_usage( cluster_id: &ClusterId, collector_key: NodePubKey, - tcaa_id: DdcEra, + tcaa_id: TcaEra, node_key: NodePubKey, bucket_id: BucketId, ) -> Result { @@ -2922,7 +2902,7 @@ pub mod pallet { pub(crate) fn get_tcaa_node_usage( cluster_id: &ClusterId, collector_key: NodePubKey, - tcaa_id: DdcEra, + tcaa_id: TcaEra, node_key: NodePubKey, ) -> Result { let challenge_res = Self::fetch_node_challenge_response( @@ -3270,7 +3250,7 @@ pub mod pallet { )] pub struct EraActivity { /// Era id. - pub id: DdcEra, + pub id: TcaEra, pub start: i64, pub end: i64, } @@ -3488,7 +3468,7 @@ pub mod pallet { ehd_id: EHDId, tree_node_id: u32, tree_levels_count: u32, - ) -> Result, OCWError> { + ) -> Result, OCWError> { let collectors = Self::get_collectors_nodes(cluster_id).map_err(|_| { log::error!("❌ Error retrieving collectors for cluster {:?}", cluster_id); OCWError::FailedToFetchCollectors { cluster_id: *cluster_id } @@ -3544,7 +3524,7 @@ pub mod pallet { phd_id: PHDId, tree_node_id: u32, tree_levels_count: u32, - ) -> Result, OCWError> { + ) -> Result, OCWError> { let collectors = Self::get_collectors_nodes(cluster_id).map_err(|_| { log::error!("❌ Error retrieving collectors for cluster {:?}", cluster_id); OCWError::FailedToFetchCollectors { cluster_id: *cluster_id } @@ -3620,7 +3600,7 @@ pub mod pallet { aggregator_client::json::GroupedInspectionReceipt, >, ) -> Result, OCWError> { - let mut buckets_usage_cutoff: BTreeMap<(DdcEra, BucketId, NodePubKey), BucketUsage> = + let mut buckets_usage_cutoff: BTreeMap<(TcaEra, BucketId, NodePubKey), BucketUsage> = BTreeMap::new(); let mut buckets_to_customers: BTreeMap = BTreeMap::new(); let mut customers_usage_cutoff: BTreeMap = BTreeMap::new(); @@ -3700,7 +3680,7 @@ pub mod pallet { aggregator_client::json::GroupedInspectionReceipt, >, ) -> Result, OCWError> { - let mut nodes_usage_cutoff: BTreeMap<(DdcEra, NodePubKey), NodeUsage> = BTreeMap::new(); + let mut nodes_usage_cutoff: BTreeMap<(TcaEra, NodePubKey), NodeUsage> = BTreeMap::new(); let mut nodes_to_providers: BTreeMap = BTreeMap::new(); let mut providers_usage_cutoff: BTreeMap = BTreeMap::new(); @@ -3801,7 +3781,7 @@ pub mod pallet { pub(crate) fn fetch_node_challenge_response( cluster_id: &ClusterId, - tcaa_id: DdcEra, + tcaa_id: TcaEra, collector_key: NodePubKey, node_key: NodePubKey, tree_node_ids: Vec, @@ -3845,7 +3825,7 @@ pub mod pallet { pub(crate) fn fetch_bucket_challenge_response( cluster_id: &ClusterId, - tcaa_id: DdcEra, + tcaa_id: TcaEra, collector_key: NodePubKey, node_key: NodePubKey, bucket_id: BucketId, @@ -4088,7 +4068,7 @@ pub mod pallet { /// - `node_params`: DAC node parameters pub(crate) fn _v4_fetch_nodes_aggregates_for_era( cluster_id: &ClusterId, - era_id: DdcEra, + era_id: TcaEra, dac_nodes: &[(NodePubKey, StorageNodeParams)], ) -> Result< Vec<(AggregatorInfo, Vec)>, @@ -4132,7 +4112,7 @@ pub mod pallet { /// - `node_params`: DAC node parameters pub(crate) fn _v4_fetch_buckets_aggregates_for_era( cluster_id: &ClusterId, - era_id: DdcEra, + era_id: TcaEra, dac_nodes: &[(NodePubKey, StorageNodeParams)], ) -> Result< Vec<(AggregatorInfo, Vec)>, @@ -4182,7 +4162,7 @@ pub mod pallet { /// /// # Input Parameters /// - `cluster_id: &ClusterId`: The ID of the cluster for which consensus is being computed. - /// - `era_id: DdcEra`: The era ID within the cluster. + /// - `era_id: TcaEra`: The era ID within the cluster. /// - `buckets_aggregates_by_aggregator: &[(NodePubKey, Vec)]`: A list of tuples, where /// each tuple contains a node's public key and a vector of activities reported for that /// bucket. @@ -4198,7 +4178,7 @@ pub mod pallet { /// for some activities. pub(crate) fn _v4_group_buckets_sub_aggregates_by_consistency( cluster_id: &ClusterId, - era_id: DdcEra, + era_id: TcaEra, buckets_aggregates_by_aggregator: Vec<( AggregatorInfo, Vec, @@ -4256,7 +4236,7 @@ pub mod pallet { /// /// # Input Parameters /// - `cluster_id: &ClusterId`: The ID of the cluster for which consensus is being computed. - /// - `era_id: DdcEra`: The era ID within the cluster. + /// - `era_id: TcaEra`: The era ID within the cluster. /// - `nodes_aggregates_by_aggregator: &[(NodePubKey, Vec)]`: A list of tuples, where /// each tuple contains a node's public key and a vector of activities reported by that /// node. @@ -4272,7 +4252,7 @@ pub mod pallet { /// for some activities. pub(crate) fn _v4_group_nodes_aggregates_by_consistency( cluster_id: &ClusterId, - era_id: DdcEra, + era_id: TcaEra, nodes_aggregates_by_aggregator: Vec<( AggregatorInfo, Vec, @@ -4316,7 +4296,7 @@ pub mod pallet { pub(crate) fn _v4_get_total_usage( cluster_id: &ClusterId, - era_id: DdcEra, + era_id: TcaEra, consistency_groups: ConsistencyGroups, should_challenge: bool, ) -> Result, Vec> { @@ -4364,7 +4344,7 @@ pub mod pallet { pub(crate) fn _v4_challenge_others( _cluster_id: &ClusterId, - _era_id: DdcEra, + _era_id: TcaEra, consistency_groups: ConsistencyGroups, accepted_keys: &mut Vec, should_challenge: bool, @@ -4491,7 +4471,7 @@ pub mod pallet { pub(crate) fn _v4_challenge_aggregate( cluster_id: &ClusterId, - era_id: DdcEra, + era_id: TcaEra, aggregate: &A, ) -> Result> { let number_of_identifiers = T::MAX_MERKLE_NODE_IDENTIFIER; @@ -4593,7 +4573,7 @@ pub mod pallet { pub(crate) fn _v4_challenge_aggregate_proto( cluster_id: &ClusterId, - era_id: DdcEra, + era_id: TcaEra, aggregate: &A, ) -> Result> { let number_of_identifiers = T::MAX_MERKLE_NODE_IDENTIFIER; @@ -4646,7 +4626,7 @@ pub mod pallet { /// Fetch Challenge node aggregate or bucket sub-aggregate. pub(crate) fn _v4_fetch_challenge_responses( cluster_id: &ClusterId, - era_id: DdcEra, + era_id: TcaEra, aggregate_key: AggregateKey, merkle_node_identifiers: Vec, aggregator: AggregatorInfo, @@ -4670,7 +4650,7 @@ pub mod pallet { /// Challenge node aggregate or bucket sub-aggregate. pub(crate) fn _v4_fetch_challenge_responses_proto( cluster_id: &ClusterId, - era_id: DdcEra, + era_id: TcaEra, aggregate_key: AggregateKey, merkle_tree_node_id: Vec, aggregator: AggregatorInfo, @@ -4699,7 +4679,7 @@ pub mod pallet { /// - `node_params`: DAC node parameters pub(crate) fn _v4_fetch_node_aggregates( _cluster_id: &ClusterId, - era_id: DdcEra, + era_id: TcaEra, node_params: &StorageNodeParams, ) -> Result, http::Error> { let host = str::from_utf8(&node_params.host).map_err(|_| http::Error::Unknown)?; @@ -4742,7 +4722,7 @@ pub mod pallet { /// - `merkle_node_identifiers`: set of merkle node identifiers to challenge /// - `node_params`: aggregator node parameters pub(crate) fn _v4_fetch_challenge_response( - era_id: DdcEra, + era_id: TcaEra, aggregate_key: AggregateKey, merkle_node_identifiers: Vec, node_params: &StorageNodeParams, @@ -4864,7 +4844,7 @@ pub mod pallet { pub(crate) fn _v4_get_hash_from_merkle_path( challenge_response: aggregator_client::json::ChallengeAggregateResponse, cluster_id: &ClusterId, - era_id: DdcEra, + era_id: TcaEra, aggregate_key: AggregateKey, ) -> Result> { log::info!("Getting hash from merkle tree path for aggregate key: {:?}", aggregate_key); @@ -4926,14 +4906,14 @@ pub mod pallet { Ok(resulting_hash) } - pub(crate) fn _v4_derive_usage_key(cluster_id: &ClusterId, era_id: DdcEra) -> Vec { + pub(crate) fn _v4_derive_usage_key(cluster_id: &ClusterId, era_id: TcaEra) -> Vec { format!("offchain::activities::{:?}::{:?}", cluster_id, era_id).into_bytes() } #[allow(clippy::too_many_arguments)] pub(crate) fn _v4_store_verified_usage( cluster_id: &ClusterId, - era_id: DdcEra, + era_id: TcaEra, buckets_deltas: &[A], buckets_deltas_root: DeltaUsageHash, buckets_deltas_batch_roots: &[DeltaUsageHash], @@ -4965,7 +4945,7 @@ pub mod pallet { /// - `levels`: a number of levels to raverse /// - `node_params`: aggregator node parameters pub(crate) fn _v4_fetch_traverse_response( - era_id: DdcEra, + era_id: TcaEra, aggregate_key: AggregateKey, merkle_tree_node_id: u32, levels: u16, @@ -4998,7 +4978,7 @@ pub mod pallet { /// Fetch protobuf challenge response. pub(crate) fn _v4_fetch_challenge_response_proto( - era_id: DdcEra, + era_id: TcaEra, aggregate_key: AggregateKey, merkle_tree_node_id: Vec, node_params: &StorageNodeParams, @@ -5033,7 +5013,7 @@ pub mod pallet { /// - `node_params`: DAC node parameters pub(crate) fn _v4_fetch_bucket_aggregates( _cluster_id: &ClusterId, - tcaa_id: DdcEra, + tcaa_id: TcaEra, node_params: &StorageNodeParams, ) -> Result, http::Error> { let host = str::from_utf8(&node_params.host).map_err(|_| http::Error::Unknown)?; diff --git a/pallets/ddc-verification/src/mock.rs b/pallets/ddc-verification/src/mock.rs index 6bacfc9bd..6848d2153 100644 --- a/pallets/ddc-verification/src/mock.rs +++ b/pallets/ddc-verification/src/mock.rs @@ -536,11 +536,11 @@ pub fn new_test_ext() -> sp_io::TestExternalities { pub struct MockClusterValidator; impl ClusterValidator for MockClusterValidator { - fn set_last_paid_era(_cluster_id: &ClusterId, _era_id: DdcEra) -> Result<(), DispatchError> { + fn set_last_paid_era(_cluster_id: &ClusterId, _era_id: TcaEra) -> Result<(), DispatchError> { unimplemented!() } - fn get_last_paid_era(_cluster_id: &ClusterId) -> Result { + fn get_last_paid_era(_cluster_id: &ClusterId) -> Result { Ok(Default::default()) } } @@ -559,7 +559,7 @@ impl PayoutProcessor for MockPayoutProcessor { fn begin_payout( _cluster_id: ClusterId, - _era_id: DdcEra, + _era_id: TcaEra, _fingerprint: Fingerprint, ) -> DispatchResult { unimplemented!() @@ -567,7 +567,7 @@ impl PayoutProcessor for MockPayoutProcessor { fn begin_charging_customers( _cluster_id: ClusterId, - _era_id: DdcEra, + _era_id: TcaEra, _max_batch_index: BatchIndex, ) -> DispatchResult { unimplemented!() @@ -575,7 +575,7 @@ impl PayoutProcessor for MockPayoutProcessor { fn send_charging_customers_batch( _cluster_id: ClusterId, - _era_id: DdcEra, + _era_id: TcaEra, _batch_index: BatchIndex, _payers: &[(T::AccountId, u128)], _batch_proof: MMRProof, @@ -583,13 +583,13 @@ impl PayoutProcessor for MockPayoutProcessor { unimplemented!() } - fn end_charging_customers(_cluster_id: ClusterId, _era_id: DdcEra) -> DispatchResult { + fn end_charging_customers(_cluster_id: ClusterId, _era_id: TcaEra) -> DispatchResult { unimplemented!() } fn begin_rewarding_providers( _cluster_id: ClusterId, - _era_id: DdcEra, + _era_id: TcaEra, _max_batch_index: BatchIndex, ) -> DispatchResult { unimplemented!() @@ -597,7 +597,7 @@ impl PayoutProcessor for MockPayoutProcessor { fn send_rewarding_providers_batch( _cluster_id: ClusterId, - _era_id: DdcEra, + _era_id: TcaEra, _batch_index: BatchIndex, _payees: &[(T::AccountId, u128)], _batch_proof: MMRProof, @@ -605,37 +605,37 @@ impl PayoutProcessor for MockPayoutProcessor { unimplemented!() } - fn end_rewarding_providers(_cluster_id: ClusterId, _era_id: DdcEra) -> DispatchResult { + fn end_rewarding_providers(_cluster_id: ClusterId, _era_id: TcaEra) -> DispatchResult { unimplemented!() } - fn end_payout(_cluster_id: ClusterId, _era_id: DdcEra) -> DispatchResult { + fn end_payout(_cluster_id: ClusterId, _era_id: TcaEra) -> DispatchResult { unimplemented!() } fn get_next_customers_batch( _cluster_id: &ClusterId, - _era_id: DdcEra, + _era_id: TcaEra, ) -> Result, PayoutError> { Ok(None) } fn get_next_providers_batch( _cluster_id: &ClusterId, - _era_id: DdcEra, + _era_id: TcaEra, ) -> Result, PayoutError> { Ok(None) } - fn is_customers_charging_finished(_cluster_id: &ClusterId, _era_id: DdcEra) -> bool { + fn is_customers_charging_finished(_cluster_id: &ClusterId, _era_id: TcaEra) -> bool { true } - fn is_providers_rewarding_finished(_cluster_id: &ClusterId, _era_id: DdcEra) -> bool { + fn is_providers_rewarding_finished(_cluster_id: &ClusterId, _era_id: TcaEra) -> bool { true } - fn get_payout_state(_cluster_id: &ClusterId, _era_id: DdcEra) -> PayoutState { + fn get_payout_state(_cluster_id: &ClusterId, _era_id: TcaEra) -> PayoutState { PayoutState::NotInitialized } diff --git a/primitives/src/lib.rs b/primitives/src/lib.rs index a14f8237a..cbf77e9d1 100644 --- a/primitives/src/lib.rs +++ b/primitives/src/lib.rs @@ -63,7 +63,7 @@ pub const DOLLARS: u128 = 100 * CENTS; pub type ClusterId = H160; pub type PaymentEra = u32; pub type EhdEra = u32; -pub type DdcEra = u32; +pub type TcaEra = u32; pub type BucketId = u64; pub type ClusterNodesCount = u16; pub type StorageNodePubKey = AccountId32; @@ -183,19 +183,19 @@ impl From for String { } impl TryFrom for NodePubKey { - type Error = (); + type Error = &'static str; fn try_from(value: String) -> Result { if !value.starts_with("0x") || value.len() != 66 { - return Err(()); + return Err("NodePubKey must be a 32-byte hex string start with '0x'"); } let hex_str = &value[2..]; // skip '0x' let hex_bytes = match hex::decode(hex_str) { Ok(bytes) => bytes, - Err(_) => return Err(()), + Err(_) => return Err("NodePubKey must be a valid hex string"), }; if hex_bytes.len() != 32 { - return Err(()); + return Err("NodePubKey must be a 32 chars in length"); } let mut pub_key = [0u8; 32]; pub_key.copy_from_slice(&hex_bytes[..32]); @@ -204,7 +204,7 @@ impl TryFrom for NodePubKey { } } -#[derive(Clone, PartialOrd, Ord, Eq, PartialEq, Encode, Decode, Debug)] +#[derive(Clone, PartialOrd, Serialize, Deserialize, Ord, Eq, PartialEq, Encode, Decode, Debug)] pub struct EHDId(pub ClusterId, pub NodePubKey, pub EhdEra); impl From for String { @@ -216,28 +216,28 @@ impl From for String { } impl TryFrom for EHDId { - type Error = (); + type Error = &'static str; fn try_from(value: String) -> Result { let parts: Vec<&str> = value.split('-').collect(); if parts.len() != 3 { - return Err(()); + return Err("EHDId must be composed of 3 parts divided by '-' character"); } let cluster_str = parts[0]; let g_collector_str = String::from(parts[1]); let payment_era_str = parts[2]; if !cluster_str.starts_with("0x") || cluster_str.len() != 42 { - return Err(()); + return Err("ClusterId must be a 20-byte hex string start with '0x'"); } let cluster_hex_str = &cluster_str[2..]; // skip '0x' let cluster_hex_bytes = match hex::decode(cluster_hex_str) { Ok(bytes) => bytes, - Err(_) => return Err(()), + Err(_) => return Err("ClusterId must be a valid hex string"), }; if cluster_hex_bytes.len() != 20 { - return Err(()); + return Err("ClusterId must be a 20 chars in length"); } let mut cluster_id = [0u8; 20]; @@ -245,9 +245,9 @@ impl TryFrom for EHDId { let g_collector: NodePubKey = g_collector_str.try_into()?; - let payment_era = match DdcEra::from_str(payment_era_str) { + let payment_era = match TcaEra::from_str(payment_era_str) { Ok(era) => era, - Err(_) => return Err(()), + Err(_) => return Err("TcaEra must be a valid u32 value"), }; Ok(EHDId(H160(cluster_id), g_collector, payment_era)) @@ -255,7 +255,7 @@ impl TryFrom for EHDId { } impl TryFrom<&str> for EHDId { - type Error = (); + type Error = &'static str; fn try_from(value: &str) -> Result { EHDId::try_from(String::from(value)) } @@ -272,11 +272,11 @@ impl From for String { } impl TryFrom for PHDId { - type Error = (); + type Error = &'static str; fn try_from(value: String) -> Result { let parts: Vec<&str> = value.split('-').collect(); if parts.len() != 2 { - return Err(()); + return Err("PHDId must be composed of 2 parts divided by '-' character"); } let collector_str = String::from(parts[0]); @@ -284,9 +284,9 @@ impl TryFrom for PHDId { let collector: NodePubKey = collector_str.try_into()?; - let payment_era = match DdcEra::from_str(payment_era_str) { + let payment_era = match TcaEra::from_str(payment_era_str) { Ok(era) => era, - Err(_) => return Err(()), + Err(_) => return Err("TcaEra must be a valid u32 value"), }; Ok(PHDId(collector, payment_era)) @@ -294,7 +294,7 @@ impl TryFrom for PHDId { } impl TryFrom<&str> for PHDId { - type Error = (); + type Error = &'static str; fn try_from(value: &str) -> Result { PHDId::try_from(String::from(value)) } diff --git a/primitives/src/traits/cluster.rs b/primitives/src/traits/cluster.rs index c13720877..eb528ce92 100644 --- a/primitives/src/traits/cluster.rs +++ b/primitives/src/traits/cluster.rs @@ -5,7 +5,7 @@ use sp_std::prelude::*; use crate::{ ClusterBondingParams, ClusterFeesParams, ClusterId, ClusterNodeKind, ClusterNodeState, ClusterNodeStatus, ClusterNodesStats, ClusterParams, ClusterPricingParams, - ClusterProtocolParams, ClusterStatus, DdcEra, NodePubKey, NodeType, + ClusterProtocolParams, ClusterStatus, NodePubKey, NodeType, TcaEra, }; pub trait ClusterQuery { @@ -114,7 +114,7 @@ pub trait ClusterValidator { /// # Events /// /// Emits `ClusterEraPaid` event if the operation is successful. - fn set_last_paid_era(cluster_id: &ClusterId, era_id: DdcEra) -> Result<(), DispatchError>; + fn set_last_paid_era(cluster_id: &ClusterId, era_id: TcaEra) -> Result<(), DispatchError>; /// Retrieves the `last_paid_era` for the given cluster /// update. @@ -126,6 +126,6 @@ pub trait ClusterValidator { /// /// # Returns /// - /// Returns `Ok(DdcEra)` identifier of the last validated era in cluster - fn get_last_paid_era(cluster_id: &ClusterId) -> Result; + /// Returns `Ok(TcaEra)` identifier of the last validated era in cluster + fn get_last_paid_era(cluster_id: &ClusterId) -> Result; } From 29408307686893d7f880af7a0bdef845fdc0f16f Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Wed, 26 Feb 2025 22:03:37 +0100 Subject: [PATCH 27/31] feat: serde_ase for PHD nodes map --- pallets/ddc-verification/src/aggregator_client.rs | 5 +++-- pallets/ddc-verification/src/lib.rs | 10 +--------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/pallets/ddc-verification/src/aggregator_client.rs b/pallets/ddc-verification/src/aggregator_client.rs index 9200dc5fb..e313c1980 100644 --- a/pallets/ddc-verification/src/aggregator_client.rs +++ b/pallets/ddc-verification/src/aggregator_client.rs @@ -2,7 +2,7 @@ use ddc_primitives::{AggregatorInfo, BucketId, TcaEra}; use prost::Message; -use scale_info::prelude::{string::String, vec::Vec}; +use scale_info::prelude::{collections::BTreeMap, string::String, vec::Vec}; use serde_with::{base64::Base64, serde_as, TryFromInto}; use sp_core::crypto::AccountId32; use sp_io::offchain::timestamp; @@ -762,13 +762,14 @@ pub(crate) mod json { pub tree_node_hash: Vec, #[serde(rename = "nodesAggregates")] + #[serde_as(as = "BTreeMap, _>")] pub nodes_aggregates: PHDNodesTCAs, #[serde(rename = "bucketsAggregates")] pub buckets_aggregates: PHDBucketsTCAs, } - pub type PHDNodesTCAs = BTreeMap>; + pub type PHDNodesTCAs = BTreeMap>; #[derive( Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index e6ad3600b..7c20813fa 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -1316,10 +1316,6 @@ pub mod pallet { for phd_root in phd_roots { let collector_key = phd_root.phd_id.0.clone(); for node_key in phd_root.nodes_aggregates.keys() { - let node_key = NodePubKey::try_from(node_key.clone()).map_err(|_| { - vec![OCWError::FailedToParseNodeKey { node_key: node_key.clone() }] - })?; - if tcaas_map.contains_key(&node_key.clone()) { // Currently, we inspect node aggregation from a single (first // responded) collector. We may compare the aggregation for the same @@ -1365,7 +1361,7 @@ pub mod pallet { if node_tcaa_count > 0 { era_leaves_map.insert( - node_key, + node_key.clone(), BTreeMap::from([( (phd_root.phd_id.clone(), (node_leaves_count, node_tcaa_count)), tcaa_leaves, @@ -1511,10 +1507,6 @@ pub mod pallet { for bucket_id in phd_root.buckets_aggregates.keys() { for node_key in phd_root.nodes_aggregates.keys() { - let node_key = NodePubKey::try_from(node_key.clone()).map_err(|_| { - vec![OCWError::FailedToParseNodeKey { node_key: node_key.clone() }] - })?; - if tcaas_map.contains_key(&(*bucket_id, node_key.clone())) { // Currently, we inspect node aggregation from a single (first // responded) collector. We may compare the aggregation for the same From 0948ead7abf75f0768a92cd16f0b54d448e794be Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Thu, 27 Feb 2025 02:19:55 +0100 Subject: [PATCH 28/31] feat: try_from for hexadecimal account --- Cargo.lock | 2 + Cargo.toml | 1 + pallets/ddc-verification/Cargo.toml | 2 +- .../ddc-verification/src/aggregator_client.rs | 61 ++------ pallets/ddc-verification/src/lib.rs | 134 +++++++++--------- primitives/Cargo.toml | 2 + primitives/src/lib.rs | 57 +++++++- 7 files changed, 136 insertions(+), 123 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index eb8ab9c39..20f8220de 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3691,6 +3691,8 @@ dependencies = [ "polkadot-ckb-merkle-mountain-range", "scale-info", "serde", + "serde_json", + "serde_with", "sp-application-crypto", "sp-core", "sp-io", diff --git a/Cargo.toml b/Cargo.toml index 0d040cd80..76d39ee23 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -50,6 +50,7 @@ rand_chacha = { version = "0.3.1", default-features = false } scale-info = { version = "2.11.3", default-features = false, features = ["derive"] } serde = { version = "1.0.210", default-features = false, features = ["derive"] } serde_json = { version = "1.0.1", default-features = false } +serde_with = { version = "3", default-features = false, features = ["base64", "macros"] } static_assertions = { version = "1.1.0" } url = { version = "2.5.2" } array-bytes = { version = "6.2.2" } diff --git a/pallets/ddc-verification/Cargo.toml b/pallets/ddc-verification/Cargo.toml index fa94d435d..a9e23aa81 100644 --- a/pallets/ddc-verification/Cargo.toml +++ b/pallets/ddc-verification/Cargo.toml @@ -31,7 +31,7 @@ scale-info = { workspace = true } scopeguard = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } -serde_with = { version = "3", default-features = false, features = ["base64", "macros"] } +serde_with = { workspace = true } sp-application-crypto = { workspace = true } sp-core = { workspace = true } sp-io = { workspace = true } diff --git a/pallets/ddc-verification/src/aggregator_client.rs b/pallets/ddc-verification/src/aggregator_client.rs index e313c1980..ec535ab42 100644 --- a/pallets/ddc-verification/src/aggregator_client.rs +++ b/pallets/ddc-verification/src/aggregator_client.rs @@ -1,10 +1,9 @@ #![allow(dead_code)] -use ddc_primitives::{AggregatorInfo, BucketId, TcaEra}; +use ddc_primitives::{AccountId32Hex, AggregatorInfo, BucketId, TcaEra}; use prost::Message; use scale_info::prelude::{collections::BTreeMap, string::String, vec::Vec}; use serde_with::{base64::Base64, serde_as, TryFromInto}; -use sp_core::crypto::AccountId32; use sp_io::offchain::timestamp; use sp_runtime::offchain::{http, Duration}; @@ -666,67 +665,29 @@ pub(crate) mod json { } } - #[derive( - Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, - )] + #[serde_as] + #[derive(Debug, Serialize, Deserialize, Clone, Hash, PartialEq, Eq, Encode, Decode)] pub struct EHDCustomer { #[serde(rename = "customerId")] - pub customer_id: String, + #[serde_as(as = "TryFromInto")] + pub customer_id: AccountId32Hex, + #[serde(rename = "consumedUsage")] pub consumed_usage: EHDUsage, } - impl EHDCustomer { - pub fn parse_customer_id(&self) -> Result { - if !self.customer_id.starts_with("0x") || self.customer_id.len() != 66 { - return Err(()); - } - - let hex_str = &self.customer_id[2..]; // skip '0x' - let hex_bytes = match hex::decode(hex_str) { - Ok(bytes) => bytes, - Err(_) => return Err(()), - }; - if hex_bytes.len() != 32 { - return Err(()); - } - let mut pub_key = [0u8; 32]; - pub_key.copy_from_slice(&hex_bytes[..32]); - - Ok(AccountId32::from(pub_key)) - } - } - - #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Encode, Decode)] + #[serde_as] + #[derive(Debug, Serialize, Deserialize, Hash, Clone, PartialEq, Encode, Decode)] pub struct EHDProvider { #[serde(rename = "providerId")] - pub provider_id: String, + #[serde_as(as = "TryFromInto")] + pub provider_id: AccountId32Hex, + #[serde(rename = "providedUsage")] pub provided_usage: EHDUsage, pub nodes: Vec, } - impl EHDProvider { - pub fn parse_provider_id(&self) -> Result { - if !self.provider_id.starts_with("0x") || self.provider_id.len() != 66 { - return Err(()); - } - - let hex_str = &self.provider_id[2..]; // skip '0x' - let hex_bytes = match hex::decode(hex_str) { - Ok(bytes) => bytes, - Err(_) => return Err(()), - }; - if hex_bytes.len() != 32 { - return Err(()); - } - let mut pub_key = [0u8; 32]; - pub_key.copy_from_slice(&hex_bytes[..32]); - - Ok(AccountId32::from(pub_key)) - } - } - #[derive( Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, )] diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index 7c20813fa..e71953b4f 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -2086,49 +2086,48 @@ pub mod pallet { let mut cluster_costs = CustomerCosts::default(); for customer in customers { - if let Ok(customer_id) = customer.parse_customer_id() { - let customer_costs = Self::get_customer_costs( - pricing, - &customer.consumed_usage, - cutoff_usage_map.get( - &T::AccountId::decode(&mut &customer_id.encode()[..]) - .map_err(|_| ArithmeticError::Overflow)?, - ), - time_start, - time_end, - )?; + let customer_id: AccountId32 = customer.customer_id.clone().into(); + let customer_costs = Self::get_customer_costs( + pricing, + &customer.consumed_usage, + cutoff_usage_map.get( + &T::AccountId::decode(&mut &customer_id.encode()[..]) + .map_err(|_| ArithmeticError::Overflow)?, + ), + time_start, + time_end, + )?; - cluster_costs.storage = cluster_costs - .storage - .checked_add(customer_costs.storage) - .ok_or(ArithmeticError::Overflow)?; + cluster_costs.storage = cluster_costs + .storage + .checked_add(customer_costs.storage) + .ok_or(ArithmeticError::Overflow)?; - cluster_costs.transfer = cluster_costs - .transfer - .checked_add(customer_costs.transfer) - .ok_or(ArithmeticError::Overflow)?; + cluster_costs.transfer = cluster_costs + .transfer + .checked_add(customer_costs.transfer) + .ok_or(ArithmeticError::Overflow)?; - cluster_costs.puts = cluster_costs - .puts - .checked_add(customer_costs.puts) - .ok_or(ArithmeticError::Overflow)?; + cluster_costs.puts = cluster_costs + .puts + .checked_add(customer_costs.puts) + .ok_or(ArithmeticError::Overflow)?; - cluster_costs.gets = cluster_costs - .gets - .checked_add(customer_costs.gets) - .ok_or(ArithmeticError::Overflow)?; - - let charge_amount = (|| -> Option { - customer_costs - .transfer - .checked_add(customer_costs.storage)? - .checked_add(customer_costs.puts)? - .checked_add(customer_costs.gets) - })() + cluster_costs.gets = cluster_costs + .gets + .checked_add(customer_costs.gets) .ok_or(ArithmeticError::Overflow)?; - customers_charges.push(CustomerCharge(customer_id, charge_amount)); - } + let charge_amount = (|| -> Option { + customer_costs + .transfer + .checked_add(customer_costs.storage)? + .checked_add(customer_costs.puts)? + .checked_add(customer_costs.gets) + })() + .ok_or(ArithmeticError::Overflow)?; + + customers_charges.push(CustomerCharge(customer_id, charge_amount)); } Ok((customers_charges, cluster_costs)) @@ -2243,40 +2242,39 @@ pub mod pallet { let mut providers_profits = Vec::new(); for provider in providers { - if let Ok(provider_id) = provider.parse_provider_id() { - let provider_profits = Self::get_provider_profits( - &provider.provided_usage, - cutoff_usage_map.get( - &T::AccountId::decode(&mut &provider_id.encode()[..]) - .map_err(|_| ArithmeticError::Overflow)?, - ), - cluster_usage, - cluster_costs, - )?; - - let reward_amount = (|| -> Option { - provider_profits - .transfer - .checked_add(provider_profits.storage)? - .checked_add(provider_profits.puts)? - .checked_add(provider_profits.gets) - })() - .ok_or(ArithmeticError::Overflow)?; + let provider_id: AccountId32 = provider.provider_id.clone().into(); + let provider_profits = Self::get_provider_profits( + &provider.provided_usage, + cutoff_usage_map.get( + &T::AccountId::decode(&mut &provider_id.encode()[..]) + .map_err(|_| ArithmeticError::Overflow)?, + ), + cluster_usage, + cluster_costs, + )?; - let treasury_fee_amount = fees.treasury_share * reward_amount; - let validators_fee_amount = fees.validators_share * reward_amount; - let cluster_reserve_fee_amount = fees.cluster_reserve_share * reward_amount; + let reward_amount = (|| -> Option { + provider_profits + .transfer + .checked_add(provider_profits.storage)? + .checked_add(provider_profits.puts)? + .checked_add(provider_profits.gets) + })() + .ok_or(ArithmeticError::Overflow)?; - let profit_amount = (|| -> Option { - reward_amount - .checked_sub(treasury_fee_amount)? - .checked_sub(validators_fee_amount)? - .checked_sub(cluster_reserve_fee_amount) - })() - .ok_or(ArithmeticError::Overflow)?; + let treasury_fee_amount = fees.treasury_share * reward_amount; + let validators_fee_amount = fees.validators_share * reward_amount; + let cluster_reserve_fee_amount = fees.cluster_reserve_share * reward_amount; - providers_profits.push(ProviderReward(provider_id, profit_amount)); - } + let profit_amount = (|| -> Option { + reward_amount + .checked_sub(treasury_fee_amount)? + .checked_sub(validators_fee_amount)? + .checked_sub(cluster_reserve_fee_amount) + })() + .ok_or(ArithmeticError::Overflow)?; + + providers_profits.push(ProviderReward(provider_id, profit_amount)); } Ok(providers_profits) diff --git a/primitives/Cargo.toml b/primitives/Cargo.toml index c75dd910c..ac840824f 100644 --- a/primitives/Cargo.toml +++ b/primitives/Cargo.toml @@ -18,6 +18,8 @@ log = { workspace = true } polkadot-ckb-merkle-mountain-range = { workspace = true } scale-info = { workspace = true } serde = { workspace = true } +serde_json = { workspace = true } +serde_with = { workspace = true } sp-application-crypto = { workspace = true } sp-core = { workspace = true } sp-io = { workspace = true } diff --git a/primitives/src/lib.rs b/primitives/src/lib.rs index cbf77e9d1..404d8df0e 100644 --- a/primitives/src/lib.rs +++ b/primitives/src/lib.rs @@ -186,7 +186,7 @@ impl TryFrom for NodePubKey { type Error = &'static str; fn try_from(value: String) -> Result { if !value.starts_with("0x") || value.len() != 66 { - return Err("NodePubKey must be a 32-byte hex string start with '0x'"); + return Err("NodePubKey must be a 32-byte hex string started with '0x'"); } let hex_str = &value[2..]; // skip '0x' @@ -195,7 +195,7 @@ impl TryFrom for NodePubKey { Err(_) => return Err("NodePubKey must be a valid hex string"), }; if hex_bytes.len() != 32 { - return Err("NodePubKey must be a 32 chars in length"); + return Err("NodePubKey must be 32 chars in length"); } let mut pub_key = [0u8; 32]; pub_key.copy_from_slice(&hex_bytes[..32]); @@ -227,7 +227,7 @@ impl TryFrom for EHDId { let payment_era_str = parts[2]; if !cluster_str.starts_with("0x") || cluster_str.len() != 42 { - return Err("ClusterId must be a 20-byte hex string start with '0x'"); + return Err("ClusterId must be a 20-byte hex string started with '0x'"); } let cluster_hex_str = &cluster_str[2..]; // skip '0x' @@ -237,7 +237,7 @@ impl TryFrom for EHDId { }; if cluster_hex_bytes.len() != 20 { - return Err("ClusterId must be a 20 chars in length"); + return Err("ClusterId must be 20 chars in length"); } let mut cluster_id = [0u8; 20]; @@ -323,6 +323,55 @@ impl TryFrom for NodeType { } } +/// The type for keeping account id in hexadecimal notation (prefixed with '0x') +#[derive( + Debug, Serialize, Deserialize, Hash, Clone, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, +)] +pub struct AccountId32Hex { + pub id: [u8; 32], +} + +impl TryFrom for AccountId32Hex { + type Error = &'static str; + fn try_from(value: String) -> Result { + if !value.starts_with("0x") || value.len() != 66 { + return Err("NodePubKey must be a 32-byte hex string started with '0x'"); + } + + let hex_str = &value[2..]; // skip '0x' + let hex_bytes = match hex::decode(hex_str) { + Ok(bytes) => bytes, + Err(_) => return Err("NodePubKey must be a valid hex string"), + }; + if hex_bytes.len() != 32 { + return Err("NodePubKey must be 32 chars in length"); + } + let mut acc_id = [0u8; 32]; + acc_id.copy_from_slice(&hex_bytes[..32]); + + Ok(AccountId32Hex { id: acc_id }) + } +} + +impl From for String { + fn from(value: AccountId32Hex) -> Self { + format!("0x{}", hex::encode(value.id.encode())) + } +} + +impl TryFrom<&str> for AccountId32Hex { + type Error = &'static str; + fn try_from(value: &str) -> Result { + AccountId32Hex::try_from(String::from(value)) + } +} + +impl From for AccountId32 { + fn from(val: AccountId32Hex) -> Self { + AccountId32::from(val.id) + } +} + #[derive( Debug, Serialize, From 97e0747ed6ef7e559157fa712143da8c49f0dec9 Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Thu, 27 Feb 2025 11:14:31 +0100 Subject: [PATCH 29/31] feat: inspection assignments table and inspection paths distribution feat: inspection paths and inspection assignments table --- pallets/ddc-clusters/src/cluster.rs | 6 +- pallets/ddc-clusters/src/lib.rs | 8 +- pallets/ddc-clusters/src/migrations.rs | 2 +- pallets/ddc-clusters/src/tests.rs | 2 +- pallets/ddc-payouts/src/lib.rs | 41 +- pallets/ddc-payouts/src/migrations.rs | 10 +- pallets/ddc-payouts/src/mock.rs | 68 +- pallets/ddc-staking/src/tests.rs | 12 +- .../ddc-verification/src/aggregator_client.rs | 37 +- pallets/ddc-verification/src/benchmarking.rs | 2 +- pallets/ddc-verification/src/insp_ddc_api.rs | 522 +++++++ .../ddc-verification/src/insp_task_manager.rs | 1087 +++++++++++++ pallets/ddc-verification/src/lib.rs | 1358 ++++------------- pallets/ddc-verification/src/mock.rs | 34 +- pallets/ddc-verification/src/tests.rs | 67 +- primitives/src/lib.rs | 8 +- primitives/src/traits/cluster.rs | 6 +- runtime/cere-dev/src/lib.rs | 2 +- runtime/cere/src/lib.rs | 2 +- 19 files changed, 2086 insertions(+), 1188 deletions(-) create mode 100644 pallets/ddc-verification/src/insp_ddc_api.rs create mode 100644 pallets/ddc-verification/src/insp_task_manager.rs diff --git a/pallets/ddc-clusters/src/cluster.rs b/pallets/ddc-clusters/src/cluster.rs index 3f39c3204..ada6bc408 100644 --- a/pallets/ddc-clusters/src/cluster.rs +++ b/pallets/ddc-clusters/src/cluster.rs @@ -1,5 +1,5 @@ use codec::{Decode, Encode}; -use ddc_primitives::{ClusterId, ClusterParams, ClusterStatus, TcaEra}; +use ddc_primitives::{ClusterId, ClusterParams, ClusterStatus, EhdEra}; use frame_support::{pallet_prelude::*, parameter_types}; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; @@ -15,7 +15,7 @@ pub struct Cluster { pub reserve_id: AccountId, pub props: ClusterProps, pub status: ClusterStatus, - pub last_paid_era: TcaEra, + pub last_paid_era: EhdEra, } #[derive(Clone, Encode, Decode, RuntimeDebug, TypeInfo, PartialEq, Serialize, Deserialize)] @@ -44,7 +44,7 @@ impl Cluster { replication_total: cluster_params.replication_total, }, status: ClusterStatus::Unbonded, - last_paid_era: TcaEra::default(), + last_paid_era: EhdEra::default(), } } diff --git a/pallets/ddc-clusters/src/lib.rs b/pallets/ddc-clusters/src/lib.rs index 359a75d38..50826d543 100644 --- a/pallets/ddc-clusters/src/lib.rs +++ b/pallets/ddc-clusters/src/lib.rs @@ -36,7 +36,7 @@ use ddc_primitives::{ }, ClusterBondingParams, ClusterFeesParams, ClusterId, ClusterNodeKind, ClusterNodeState, ClusterNodeStatus, ClusterNodesStats, ClusterParams, ClusterPricingParams, - ClusterProtocolParams, ClusterStatus, NodePubKey, NodeType, TcaEra, + ClusterProtocolParams, ClusterStatus, EhdEra, NodePubKey, NodeType, }; use frame_support::{ assert_ok, @@ -106,7 +106,7 @@ pub mod pallet { ClusterUnbonding { cluster_id: ClusterId }, ClusterUnbonded { cluster_id: ClusterId }, ClusterNodeValidated { cluster_id: ClusterId, node_pub_key: NodePubKey, succeeded: bool }, - ClusterEraPaid { cluster_id: ClusterId, era_id: TcaEra }, + ClusterEraPaid { cluster_id: ClusterId, era_id: EhdEra }, } #[pallet::error] @@ -886,7 +886,7 @@ pub mod pallet { } } impl ClusterValidator for Pallet { - fn set_last_paid_era(cluster_id: &ClusterId, era_id: TcaEra) -> Result<(), DispatchError> { + fn set_last_paid_era(cluster_id: &ClusterId, era_id: EhdEra) -> Result<(), DispatchError> { let mut cluster = Clusters::::try_get(cluster_id).map_err(|_| Error::::ClusterDoesNotExist)?; @@ -897,7 +897,7 @@ pub mod pallet { Ok(()) } - fn get_last_paid_era(cluster_id: &ClusterId) -> Result { + fn get_last_paid_era(cluster_id: &ClusterId) -> Result { let cluster = Clusters::::try_get(cluster_id).map_err(|_| Error::::ClusterDoesNotExist)?; diff --git a/pallets/ddc-clusters/src/migrations.rs b/pallets/ddc-clusters/src/migrations.rs index 5aa32abd6..f0fa386ef 100644 --- a/pallets/ddc-clusters/src/migrations.rs +++ b/pallets/ddc-clusters/src/migrations.rs @@ -465,7 +465,7 @@ pub mod v3 { pub reserve_id: AccountId, pub props: ClusterProps, pub status: ClusterStatus, - pub last_paid_era: TcaEra, // new field + pub last_paid_era: EhdEra, // new field } #[derive(Clone, Encode, Decode, RuntimeDebug, TypeInfo, PartialEq, Serialize, Deserialize)] diff --git a/pallets/ddc-clusters/src/tests.rs b/pallets/ddc-clusters/src/tests.rs index d003341a0..2e42e1518 100644 --- a/pallets/ddc-clusters/src/tests.rs +++ b/pallets/ddc-clusters/src/tests.rs @@ -585,7 +585,7 @@ fn set_last_validated_era_works() { let cluster_manager_id = AccountId::from([1; 32]); let cluster_reserve_id = AccountId::from([2; 32]); let auth_contract_1 = AccountId::from([3; 32]); - let era_id: TcaEra = 22; + let era_id: EhdEra = 22; // Cluster doesn't exist assert_noop!( diff --git a/pallets/ddc-payouts/src/lib.rs b/pallets/ddc-payouts/src/lib.rs index 46c0589f8..fbffc5571 100644 --- a/pallets/ddc-payouts/src/lib.rs +++ b/pallets/ddc-payouts/src/lib.rs @@ -30,8 +30,7 @@ use ddc_primitives::{ }, BatchIndex, ClusterId, CustomerCharge, EHDId, EhdEra, Fingerprint, MMRProof, MergeMMRHash, NodePubKey, NodeUsage, PayableUsageHash, PaymentEra, PayoutError, PayoutFingerprintParams, - PayoutReceiptParams, PayoutState, TcaEra, MAX_PAYOUT_BATCH_COUNT, MAX_PAYOUT_BATCH_SIZE, - MILLICENTS, + PayoutReceiptParams, PayoutState, MAX_PAYOUT_BATCH_COUNT, MAX_PAYOUT_BATCH_SIZE, MILLICENTS, }; use frame_election_provider_support::SortedListProvider; use frame_support::{ @@ -115,22 +114,22 @@ pub mod pallet { pub enum Event { PayoutInitialized { cluster_id: ClusterId, - era: TcaEra, + era: EhdEra, }, ChargingStarted { cluster_id: ClusterId, - era: TcaEra, + era: EhdEra, }, Charged { cluster_id: ClusterId, - era: TcaEra, + era: EhdEra, batch_index: BatchIndex, customer_id: T::AccountId, amount: u128, }, ChargedPartially { cluster_id: ClusterId, - era: TcaEra, + era: EhdEra, batch_index: BatchIndex, customer_id: T::AccountId, charged: u128, @@ -138,37 +137,37 @@ pub mod pallet { }, Indebted { cluster_id: ClusterId, - era: TcaEra, + era: EhdEra, batch_index: BatchIndex, customer_id: T::AccountId, amount: u128, }, ChargingFinished { cluster_id: ClusterId, - era: TcaEra, + era: EhdEra, }, TreasuryFeesCollected { cluster_id: ClusterId, - era: TcaEra, + era: EhdEra, amount: u128, }, ClusterReserveFeesCollected { cluster_id: ClusterId, - era: TcaEra, + era: EhdEra, amount: u128, }, ValidatorFeesCollected { cluster_id: ClusterId, - era: TcaEra, + era: EhdEra, amount: u128, }, RewardingStarted { cluster_id: ClusterId, - era: TcaEra, + era: EhdEra, }, Rewarded { cluster_id: ClusterId, - era: TcaEra, + era: EhdEra, batch_index: BatchIndex, node_provider_id: T::AccountId, rewarded: u128, @@ -176,13 +175,13 @@ pub mod pallet { }, ValidatorRewarded { cluster_id: ClusterId, - era: TcaEra, + era: EhdEra, validator_id: T::AccountId, amount: u128, }, NotDistributedReward { cluster_id: ClusterId, - era: TcaEra, + era: EhdEra, batch_index: BatchIndex, node_provider_id: T::AccountId, expected_reward: u128, @@ -190,21 +189,21 @@ pub mod pallet { }, NotDistributedOverallReward { cluster_id: ClusterId, - era: TcaEra, + era: EhdEra, expected_reward: u128, total_distributed_rewards: u128, }, RewardingFinished { cluster_id: ClusterId, - era: TcaEra, + era: EhdEra, }, PayoutReceiptFinalized { cluster_id: ClusterId, - era: TcaEra, + era: EhdEra, }, ChargeError { cluster_id: ClusterId, - era: TcaEra, + era: EhdEra, batch_index: BatchIndex, customer_id: T::AccountId, amount: u128, @@ -402,7 +401,7 @@ pub mod pallet { validators_fee: u128, vault: &T::AccountId, cluster_id: ClusterId, - era: TcaEra, + era: EhdEra, ) -> DispatchResult { let stakers = get_current_exposure_ratios::()?; @@ -480,7 +479,7 @@ pub mod pallet { let account_ref: &[u8; 32] = account_id_32.as_ref(); hex::encode(account_ref) } - pub fn sub_account_id(cluster_id: ClusterId, era: TcaEra) -> T::AccountId { + pub fn sub_account_id(cluster_id: ClusterId, era: EhdEra) -> T::AccountId { let mut bytes = Vec::new(); bytes.extend_from_slice(&cluster_id[..]); bytes.extend_from_slice(&era.encode()); diff --git a/pallets/ddc-payouts/src/migrations.rs b/pallets/ddc-payouts/src/migrations.rs index c3481010b..d07e504d8 100644 --- a/pallets/ddc-payouts/src/migrations.rs +++ b/pallets/ddc-payouts/src/migrations.rs @@ -33,7 +33,7 @@ pub mod v1 { Blake2_128Concat, ClusterId, Blake2_128Concat, - TcaEra, + EhdEra, BillingReport, >; @@ -120,14 +120,14 @@ pub mod v2 { Blake2_128Concat, ClusterId, Blake2_128Concat, - TcaEra, + EhdEra, BillingReport, >; #[derive(Clone, Encode, Decode, RuntimeDebug, TypeInfo, PartialEq)] pub struct PayoutFingerprint { pub cluster_id: ClusterId, - pub era_id: TcaEra, // removed field + pub era_id: EhdEra, // removed field pub start_era: i64, // removed field pub end_era: i64, // removed field pub payers_merkle_root: PayableUsageHash, @@ -181,7 +181,7 @@ pub mod v2 { let mut billing_fingerprints: Vec> = Vec::new(); v2::ActiveBillingReports::::translate::, _>( - |cluster_id: ClusterId, era_id: TcaEra, payout_receipt: v1::BillingReport| { + |cluster_id: ClusterId, era_id: EhdEra, payout_receipt: v1::BillingReport| { log::info!(target: LOG_TARGET, "Migrating Billing Report for cluster_id {:?} era_id {:?}", cluster_id, era_id); translated.saturating_inc(); @@ -323,7 +323,7 @@ pub mod v3 { Blake2_128Concat, ClusterId, Blake2_128Concat, - TcaEra, + EhdEra, BillingReport, >; diff --git a/pallets/ddc-payouts/src/mock.rs b/pallets/ddc-payouts/src/mock.rs index 6dfc05460..8f78ba186 100644 --- a/pallets/ddc-payouts/src/mock.rs +++ b/pallets/ddc-payouts/src/mock.rs @@ -124,11 +124,11 @@ impl crate::pallet::Config for Test { pub struct MockClusterValidator; impl ClusterValidator for MockClusterValidator { - fn set_last_paid_era(_cluster_id: &ClusterId, _era_id: TcaEra) -> Result<(), DispatchError> { + fn set_last_paid_era(_cluster_id: &ClusterId, _era_id: EhdEra) -> Result<(), DispatchError> { unimplemented!() } - fn get_last_paid_era(_cluster_id: &ClusterId) -> Result { + fn get_last_paid_era(_cluster_id: &ClusterId) -> Result { Ok(Default::default()) } } @@ -155,26 +155,36 @@ where fn get_node_provider_id(pub_key: &NodePubKey) -> Result { match pub_key { - NodePubKey::StoragePubKey(key) if key == &NODE1_PUB_KEY_32 => - Ok(NODE_PROVIDER1_KEY_32.clone().into()), - NodePubKey::StoragePubKey(key) if key == &NODE2_PUB_KEY_32 => - Ok(NODE_PROVIDER2_KEY_32.clone().into()), - NodePubKey::StoragePubKey(key) if key == &NODE3_PUB_KEY_32 => - Ok(NODE_PROVIDER3_KEY_32.clone().into()), - NodePubKey::StoragePubKey(key) if key == &NODE4_PUB_KEY_32 => - Ok(NODE_PROVIDER4_KEY_32.clone().into()), - NodePubKey::StoragePubKey(key) if key == &NODE5_PUB_KEY_32 => - Ok(NODE_PROVIDER5_KEY_32.clone().into()), - NodePubKey::StoragePubKey(key) if key == &NODE6_PUB_KEY_32 => - Ok(NODE_PROVIDER6_KEY_32.clone().into()), - NodePubKey::StoragePubKey(key) if key == &NODE7_PUB_KEY_32 => - Ok(NODE_PROVIDER7_KEY_32.clone().into()), - NodePubKey::StoragePubKey(key) if key == &NODE8_PUB_KEY_32 => - Ok(NODE_PROVIDER8_KEY_32.clone().into()), - NodePubKey::StoragePubKey(key) if key == &NODE9_PUB_KEY_32 => - Ok(NODE_PROVIDER9_KEY_32.clone().into()), - NodePubKey::StoragePubKey(key) if key == &NODE10_PUB_KEY_32 => - Ok(NODE_PROVIDER10_KEY_32.clone().into()), + NodePubKey::StoragePubKey(key) if key == &NODE1_PUB_KEY_32 => { + Ok(NODE_PROVIDER1_KEY_32.clone().into()) + }, + NodePubKey::StoragePubKey(key) if key == &NODE2_PUB_KEY_32 => { + Ok(NODE_PROVIDER2_KEY_32.clone().into()) + }, + NodePubKey::StoragePubKey(key) if key == &NODE3_PUB_KEY_32 => { + Ok(NODE_PROVIDER3_KEY_32.clone().into()) + }, + NodePubKey::StoragePubKey(key) if key == &NODE4_PUB_KEY_32 => { + Ok(NODE_PROVIDER4_KEY_32.clone().into()) + }, + NodePubKey::StoragePubKey(key) if key == &NODE5_PUB_KEY_32 => { + Ok(NODE_PROVIDER5_KEY_32.clone().into()) + }, + NodePubKey::StoragePubKey(key) if key == &NODE6_PUB_KEY_32 => { + Ok(NODE_PROVIDER6_KEY_32.clone().into()) + }, + NodePubKey::StoragePubKey(key) if key == &NODE7_PUB_KEY_32 => { + Ok(NODE_PROVIDER7_KEY_32.clone().into()) + }, + NodePubKey::StoragePubKey(key) if key == &NODE8_PUB_KEY_32 => { + Ok(NODE_PROVIDER8_KEY_32.clone().into()) + }, + NodePubKey::StoragePubKey(key) if key == &NODE9_PUB_KEY_32 => { + Ok(NODE_PROVIDER9_KEY_32.clone().into()) + }, + NodePubKey::StoragePubKey(key) if key == &NODE10_PUB_KEY_32 => { + Ok(NODE_PROVIDER10_KEY_32.clone().into()) + }, _ => Err(DispatchError::Other("Unexpected node pub_key")), } @@ -282,10 +292,10 @@ where let account_4: T::AccountId = CUSTOMER4_KEY_32.into(); let account_5: T::AccountId = CUSTOMER5_KEY_32.into(); - if content_owner == account_1 || - content_owner == account_3 || - content_owner == account_4 || - content_owner == account_5 + if content_owner == account_1 + || content_owner == account_3 + || content_owner == account_4 + || content_owner == account_5 { ensure!(amount > 1_000_000, DispatchError::BadOrigin); // any error will do } @@ -587,9 +597,9 @@ impl SortedListProvider for TestValidator } pub fn get_fees(cluster_id: &ClusterId) -> ClusterFeesParams { - if *cluster_id == NO_FEE_CLUSTER_ID || - *cluster_id == ONE_CLUSTER_ID || - *cluster_id == CERE_CLUSTER_ID + if *cluster_id == NO_FEE_CLUSTER_ID + || *cluster_id == ONE_CLUSTER_ID + || *cluster_id == CERE_CLUSTER_ID { PRICING_FEES_ZERO } else if *cluster_id == HIGH_FEES_CLUSTER_ID { diff --git a/pallets/ddc-staking/src/tests.rs b/pallets/ddc-staking/src/tests.rs index 173efb47b..bdadd33e8 100644 --- a/pallets/ddc-staking/src/tests.rs +++ b/pallets/ddc-staking/src/tests.rs @@ -2,7 +2,7 @@ use ddc_primitives::{ ClusterNodeKind, ClusterNodeStatus, ClusterParams, ClusterProtocolParams, ClusterStatus, - StorageNodeParams, StorageNodePubKey, TcaEra, + EhdEra, StorageNodeParams, StorageNodePubKey, }; use frame_support::{assert_noop, assert_ok, traits::ReservableCurrency}; use pallet_balances::Error as BalancesError; @@ -772,7 +772,7 @@ fn bond_cluster_works() { replication_total: 0 }, status: ClusterStatus::Bonded, - last_paid_era: TcaEra::default() + last_paid_era: EhdEra::default() }) ); @@ -922,7 +922,7 @@ fn unbond_bonded_cluster_works() { replication_total: 0 }, status: ClusterStatus::Unbonding, - last_paid_era: TcaEra::default() + last_paid_era: EhdEra::default() }) ); @@ -1002,7 +1002,7 @@ fn unbond_activated_cluster_works() { replication_total: 0 }, status: ClusterStatus::Unbonding, - last_paid_era: TcaEra::default() + last_paid_era: EhdEra::default() }) ); @@ -1097,7 +1097,7 @@ fn withdraw_unbonded_cluster_works() { replication_total: 0 }, status: ClusterStatus::Unbonded, - last_paid_era: TcaEra::default() + last_paid_era: EhdEra::default() }) ); }); @@ -1184,7 +1184,7 @@ fn withdraw_activated_cluster_works() { replication_total: 0 }, status: ClusterStatus::Unbonded, - last_paid_era: TcaEra::default() + last_paid_era: EhdEra::default() }) ); }); diff --git a/pallets/ddc-verification/src/aggregator_client.rs b/pallets/ddc-verification/src/aggregator_client.rs index ec535ab42..214a8383c 100644 --- a/pallets/ddc-verification/src/aggregator_client.rs +++ b/pallets/ddc-verification/src/aggregator_client.rs @@ -1,4 +1,5 @@ #![allow(dead_code)] +#![allow(clippy::from_over_into)] use ddc_primitives::{AccountId32Hex, AggregatorInfo, BucketId, TcaEra}; use prost::Message; @@ -619,7 +620,9 @@ pub(crate) mod json { } #[serde_as] - #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Encode, Decode)] + #[derive( + Debug, Serialize, Deserialize, Clone, PartialOrd, Ord, Eq, PartialEq, Encode, Decode, + )] pub struct EHDTreeNode { #[serde(rename = "ehdId")] #[serde_as(as = "TryFromInto")] @@ -666,7 +669,9 @@ pub(crate) mod json { } #[serde_as] - #[derive(Debug, Serialize, Deserialize, Clone, Hash, PartialEq, Eq, Encode, Decode)] + #[derive( + Debug, Serialize, Deserialize, PartialOrd, Ord, Clone, Hash, PartialEq, Eq, Encode, Decode, + )] pub struct EHDCustomer { #[serde(rename = "customerId")] #[serde_as(as = "TryFromInto")] @@ -677,7 +682,9 @@ pub(crate) mod json { } #[serde_as] - #[derive(Debug, Serialize, Deserialize, Hash, Clone, PartialEq, Encode, Decode)] + #[derive( + Debug, Serialize, Deserialize, PartialOrd, Ord, Hash, Clone, PartialEq, Eq, Encode, Decode, + )] pub struct EHDProvider { #[serde(rename = "providerId")] #[serde_as(as = "TryFromInto")] @@ -689,7 +696,7 @@ pub(crate) mod json { } #[derive( - Debug, Serialize, Deserialize, Clone, Hash, Ord, PartialOrd, PartialEq, Eq, Encode, Decode, + Debug, Serialize, Deserialize, Clone, Hash, PartialOrd, Ord, PartialEq, Eq, Encode, Decode, )] pub struct EHDProviderUsage { #[serde(rename = "nodeId")] @@ -750,6 +757,17 @@ pub(crate) mod json { pub number_of_gets: u64, } + impl Into for PHDNodeTCA { + fn into(self) -> NodeUsage { + NodeUsage { + transferred_bytes: self.transferred_bytes, + stored_bytes: self.stored_bytes, + number_of_gets: self.number_of_gets, + number_of_puts: self.number_of_puts, + } + } + } + pub type PHDBucketsTCAs = BTreeMap>; #[derive( @@ -770,6 +788,17 @@ pub(crate) mod json { pub number_of_gets: u64, } + impl Into for PHDBucketTCA { + fn into(self) -> BucketUsage { + BucketUsage { + transferred_bytes: self.transferred_bytes, + stored_bytes: self.stored_bytes, + number_of_gets: self.number_of_gets, + number_of_puts: self.number_of_puts, + } + } + } + #[derive(Debug, Serialize, Deserialize, Clone, Hash, Encode, Decode)] pub struct InspectionReceipt { #[serde(rename = "ehdId")] diff --git a/pallets/ddc-verification/src/benchmarking.rs b/pallets/ddc-verification/src/benchmarking.rs index fb42d5f0a..cc7132208 100644 --- a/pallets/ddc-verification/src/benchmarking.rs +++ b/pallets/ddc-verification/src/benchmarking.rs @@ -278,7 +278,7 @@ mod benchmarks { #[benchmark] fn send_charging_customers_batch(b: Linear<1, { MAX_PAYOUT_BATCH_SIZE.into() }>) { let cluster_id = ClusterId::from([1; 20]); - let payment_era: TcaEra = 1; + let payment_era: EhdEra = 1; let collector_key = NodePubKey::StoragePubKey(AccountId32::from([0u8; 32])); let ehd_id = EHDId(cluster_id, collector_key, payment_era); let state = PayoutState::ChargingCustomers; diff --git a/pallets/ddc-verification/src/insp_ddc_api.rs b/pallets/ddc-verification/src/insp_ddc_api.rs new file mode 100644 index 000000000..139c53a18 --- /dev/null +++ b/pallets/ddc-verification/src/insp_ddc_api.rs @@ -0,0 +1,522 @@ +use core::str; + +use ddc_primitives::{ + traits::{ClusterManager, NodeManager}, + BucketId, ClusterId, EHDId, EhdEra, NodeParams, NodePubKey, PHDId, StorageNodeParams, TcaEra, +}; +use scale_info::prelude::{format, string::String}; +use sp_runtime::offchain::{http, Duration}; +use sp_std::{collections::btree_map::BTreeMap, prelude::*}; + +use crate::{aggregator_client, proto, Config, Error, OCWError}; + +pub(crate) const RESPONSE_TIMEOUT: u64 = 20000; +pub(crate) const MAX_RETRIES_COUNT: u32 = 3; +pub(crate) const BUCKETS_AGGREGATES_FETCH_BATCH_SIZE: usize = 100; + +#[allow(dead_code)] +pub(crate) const NODES_AGGREGATES_FETCH_BATCH_SIZE: usize = 10; + +/// Fetch grouping collectors nodes of a cluster. +/// Parameters: +/// - `cluster_id`: Cluster id of a cluster. +pub(crate) fn get_g_collectors_nodes( + cluster_id: &ClusterId, +) -> Result, Error> { + let mut g_collectors = Vec::new(); + + let collectors = get_collectors_nodes(cluster_id)?; + for (node_key, node_params) in collectors { + if check_grouping_collector::(&node_params) + .map_err(|_| Error::::NodeRetrievalError)? + { + g_collectors.push((node_key, node_params)) + } + } + + Ok(g_collectors) +} + +/// Fetch customer usage. +/// +/// Parameters: +/// - `node_params`: Requesting DDC node +pub(crate) fn check_grouping_collector( + node_params: &StorageNodeParams, +) -> Result { + let host = str::from_utf8(&node_params.host).map_err(|_| http::Error::Unknown)?; + let base_url = format!("http://{}:{}", host, node_params.http_port); + let client = aggregator_client::AggregatorClient::new( + &base_url, + Duration::from_millis(RESPONSE_TIMEOUT), + MAX_RETRIES_COUNT, + T::VERIFY_AGGREGATOR_RESPONSE_SIGNATURE, + ); + + let response = client.check_grouping_collector()?; + Ok(response.is_g_collector) +} + +/// Fetch collectors nodes of a cluster. +/// Parameters: +/// - `cluster_id`: Cluster id of a cluster. +pub(crate) fn get_collectors_nodes( + cluster_id: &ClusterId, +) -> Result, Error> { + let mut collectors = Vec::new(); + + let nodes = + T::ClusterManager::get_nodes(cluster_id).map_err(|_| Error::::NodeRetrievalError)?; + + for node_pub_key in nodes { + if let Ok(NodeParams::StorageParams(storage_params)) = + T::NodeManager::get_node_params(&node_pub_key) + { + collectors.push((node_pub_key, storage_params)); + } + } + + Ok(collectors) +} + +pub(crate) fn fetch_bucket_challenge_response( + cluster_id: &ClusterId, + tcaa_id: TcaEra, + collector_key: NodePubKey, + node_key: NodePubKey, + bucket_id: BucketId, + tree_node_ids: Vec, +) -> Result { + let collectors = get_collectors_nodes(cluster_id) + .map_err(|_: Error| OCWError::FailedToFetchCollectors { cluster_id: *cluster_id })?; + + for (key, collector_params) in collectors { + if key != collector_key { + continue; + }; + + if let Ok(host) = str::from_utf8(&collector_params.host) { + let base_url = format!("http://{}:{}", host, collector_params.http_port); + let client = aggregator_client::AggregatorClient::new( + &base_url, + Duration::from_millis(RESPONSE_TIMEOUT), + MAX_RETRIES_COUNT, + false, // no response signature verification for now + ); + + if let Ok(node_challenge_res) = client.challenge_bucket_sub_aggregate( + tcaa_id, + bucket_id, + Into::::into(node_key.clone()).as_str(), + tree_node_ids.clone(), + ) { + return Ok(node_challenge_res); + } else { + log::warn!( + "Collector from cluster {:?} is unavailable while challenging bucket sub-aggregate or responded with unexpected body. Key: {:?} Host: {:?}", + cluster_id, + collector_key, + String::from_utf8(collector_params.host) + ); + } + } + } + + Err(OCWError::FailedToFetchBucketChallenge) +} + +pub(crate) fn fetch_node_challenge_response( + cluster_id: &ClusterId, + tcaa_id: TcaEra, + collector_key: NodePubKey, + node_key: NodePubKey, + tree_node_ids: Vec, +) -> Result { + let collectors = get_collectors_nodes(cluster_id) + .map_err(|_: Error| OCWError::FailedToFetchCollectors { cluster_id: *cluster_id })?; + + for (key, collector_params) in collectors { + if key != collector_key { + continue; + }; + + if let Ok(host) = str::from_utf8(&collector_params.host) { + let base_url = format!("http://{}:{}", host, collector_params.http_port); + let client = aggregator_client::AggregatorClient::new( + &base_url, + Duration::from_millis(RESPONSE_TIMEOUT), + MAX_RETRIES_COUNT, + false, // no response signature verification for now + ); + + if let Ok(node_challenge_res) = client.challenge_node_aggregate( + tcaa_id, + Into::::into(node_key.clone()).as_str(), + tree_node_ids.clone(), + ) { + return Ok(node_challenge_res); + } else { + log::warn!( + "Collector from cluster {:?} is unavailable while challenging node aggregate or responded with unexpected body. Key: {:?} Host: {:?}", + cluster_id, + collector_key, + String::from_utf8(collector_params.host) + ); + } + } + } + + Err(OCWError::FailedToFetchNodeChallenge) +} + +/// Fetch customer usage. +/// +/// Parameters: +/// - `cluster_id`: cluster id of a cluster +/// - `tcaa_id`: time capsule era +/// - `collector_key`: collector to fetch Bucket aggregates from +pub(crate) fn fetch_bucket_aggregates( + cluster_id: &ClusterId, + tcaa_id: TcaEra, + collector_key: NodePubKey, +) -> Result, OCWError> { + let collectors = get_collectors_nodes(cluster_id) + .map_err(|_: Error| OCWError::FailedToFetchCollectors { cluster_id: *cluster_id })?; + + for (key, collector_params) in collectors { + if key != collector_key { + continue; + }; + + if let Ok(host) = str::from_utf8(&collector_params.host) { + let base_url = format!("http://{}:{}", host, collector_params.http_port); + let client = aggregator_client::AggregatorClient::new( + &base_url, + Duration::from_millis(RESPONSE_TIMEOUT), + MAX_RETRIES_COUNT, + T::VERIFY_AGGREGATOR_RESPONSE_SIGNATURE, + ); + + let mut buckets_aggregates = Vec::new(); + let mut prev_token = None; + + loop { + let response = client + .buckets_aggregates( + tcaa_id, + Some(BUCKETS_AGGREGATES_FETCH_BATCH_SIZE as u32), + prev_token, + ) + .map_err(|_| OCWError::FailedToFetchBucketAggregate)?; + + let response_len = response.len(); + + prev_token = response.last().map(|a| a.bucket_id); + + buckets_aggregates.extend(response); + + if response_len < BUCKETS_AGGREGATES_FETCH_BATCH_SIZE { + break; + } + } + + return Ok(buckets_aggregates); + } + } + + Err(OCWError::FailedToFetchBucketAggregate) +} + +/// Traverse EHD record. +/// +/// Parameters: +/// - `cluster_id`: cluster id of a cluster +/// - `ehd_id`: EHDId is a concatenated representation of: +/// 1) A 32-byte node public key in hex +/// 2) Starting TCA id +/// 3) Ending TCA id +/// - `tree_node_id` - merkle tree node identifier +/// - `tree_levels_count` - merkle tree levels to request +pub(crate) fn fetch_traversed_era_historical_document( + cluster_id: &ClusterId, + ehd_id: EHDId, + tree_node_id: u32, + tree_levels_count: u32, +) -> Result, OCWError> { + let collectors = get_collectors_nodes(cluster_id).map_err(|_: Error| { + log::error!("❌ Error retrieving collectors for cluster {:?}", cluster_id); + OCWError::FailedToFetchCollectors { cluster_id: *cluster_id } + })?; + + for (collector_key, collector_params) in collectors { + if collector_key != ehd_id.1 { + continue; + }; + + if let Ok(host) = str::from_utf8(&collector_params.host) { + let base_url = format!("http://{}:{}", host, collector_params.http_port); + let client = aggregator_client::AggregatorClient::new( + &base_url, + Duration::from_millis(RESPONSE_TIMEOUT), + MAX_RETRIES_COUNT, + false, // no response signature verification for now + ); + + if let Ok(traversed_ehd) = client.traverse_era_historical_document( + ehd_id.clone(), + tree_node_id, + tree_levels_count, + ) { + // proceed with the first available EHD record for the prototype + return Ok(traversed_ehd); + } else { + log::warn!( + "⚠️ Collector from cluster {:?} is unavailable while fetching EHD record or responded with unexpected body. Key: {:?} Host: {:?}", + cluster_id, + collector_key, + String::from_utf8(collector_params.host) + ); + } + } + } + + Err(OCWError::FailedToFetchTraversedEHD) +} + +/// Traverse PHD record. +/// +/// Parameters: +/// - `cluster_id`: cluster id of a cluster +/// - `phd_id`: PHDId is a concatenated representation of: +/// 1) A 32-byte node public key in hex +/// 2) Starting TCAA id +/// 3) Ending TCAA id +/// - `tree_node_id` - merkle tree node identifier +/// - `tree_levels_count` - merkle tree levels to request +pub(crate) fn fetch_traversed_partial_historical_document( + cluster_id: &ClusterId, + phd_id: PHDId, + tree_node_id: u32, + tree_levels_count: u32, +) -> Result, OCWError> { + let collectors = get_collectors_nodes(cluster_id).map_err(|_: Error| { + log::error!("❌ Error retrieving collectors for cluster {:?}", cluster_id); + OCWError::FailedToFetchCollectors { cluster_id: *cluster_id } + })?; + + for (collector_key, collector_params) in collectors { + if collector_key != phd_id.0 { + continue; + }; + + if let Ok(host) = str::from_utf8(&collector_params.host) { + let base_url = format!("http://{}:{}", host, collector_params.http_port); + let client = aggregator_client::AggregatorClient::new( + &base_url, + Duration::from_millis(RESPONSE_TIMEOUT), + MAX_RETRIES_COUNT, + false, // no response signature verification for now + ); + + if let Ok(traversed_phd) = client.traverse_partial_historical_document( + phd_id.clone(), + tree_node_id, + tree_levels_count, + ) { + // proceed with the first available EHD record for the prototype + return Ok(traversed_phd); + } else { + log::warn!( + "⚠️ Collector from cluster {:?} is unavailable while fetching PHD record or responded with unexpected body. Key: {:?} Host: {:?}", + cluster_id, + collector_key, + String::from_utf8(collector_params.host) + ); + } + } + } + + Err(OCWError::FailedToFetchTraversedPHD) +} + +/// Fetch EHD merkle root node. +/// +/// Parameters: +/// - `cluster_id`: Cluster Id +/// - `phd_id`: EHD id +pub(crate) fn get_ehd_root( + cluster_id: &ClusterId, + ehd_id: EHDId, +) -> Result { + fetch_traversed_era_historical_document::(cluster_id, ehd_id, 1, 1)? + .first() + .ok_or(OCWError::FailedToFetchTraversedEHD) + .cloned() +} + +/// Fetch PHD merkle root node. +/// +/// Parameters: +/// - `cluster_id`: Cluster Id +/// - `phd_id`: PHD id +pub(crate) fn get_phd_root( + cluster_id: &ClusterId, + phd_id: PHDId, +) -> Result { + fetch_traversed_partial_historical_document::(cluster_id, phd_id, 1, 1)? + .first() + .ok_or(OCWError::FailedToFetchTraversedPHD) + .cloned() +} + +/// Fetch processed EHD eras. +/// +/// Parameters: +/// - `node_params`: DAC node parameters +#[allow(dead_code)] +pub(crate) fn fetch_processed_ehd_eras( + node_params: &StorageNodeParams, +) -> Result, http::Error> { + let host = str::from_utf8(&node_params.host).map_err(|_| http::Error::Unknown)?; + let base_url = format!("http://{}:{}", host, node_params.http_port); + let client = aggregator_client::AggregatorClient::new( + &base_url, + Duration::from_millis(RESPONSE_TIMEOUT), + MAX_RETRIES_COUNT, + T::VERIFY_AGGREGATOR_RESPONSE_SIGNATURE, + ); + + let response = client.payment_eras()?; + + Ok(response.into_iter().filter(|e| e.status == "PROCESSED").collect::>()) +} + +/// Fetch processed payment era for across all nodes. +/// +/// Parameters: +/// - `cluster_id`: Cluster Id +/// - `g_collector_key`: G-collector node key to fetch the payment eras from +/// - `node_params`: DAC node parameters +pub(crate) fn fetch_processed_eras( + cluster_id: &ClusterId, + g_collectors: &[(NodePubKey, StorageNodeParams)], +) -> Result>, OCWError> { + let mut processed_eras_by_nodes: Vec> = Vec::new(); + + for (collector_key, node_params) in g_collectors { + let processed_payment_eras = fetch_processed_ehd_eras::(node_params); + if processed_payment_eras.is_err() { + log::warn!( + "Aggregator from cluster {:?} is unavailable while fetching processed eras. Key: {:?} Host: {:?}", + cluster_id, + collector_key, + String::from_utf8(node_params.host.clone()) + ); + // Skip unavailable aggregators and continue with available ones + continue; + } else { + let eras = processed_payment_eras.map_err(|_| OCWError::FailedToFetchPaymentEra)?; + if !eras.is_empty() { + processed_eras_by_nodes.push(eras.into_iter().collect::>()); + } + } + } + + Ok(processed_eras_by_nodes) +} + +/// Fetch processed payment era by its id. +/// +/// Parameters: +/// - `cluster_id`: Cluster Id +/// - `era`: EHD era id to process +/// - `node_params`: DAC node parameters +pub(crate) fn fetch_processed_era( + cluster_id: &ClusterId, + era: EhdEra, + g_collector: &(NodePubKey, StorageNodeParams), +) -> Result { + let ehd_eras = fetch_processed_eras::(cluster_id, vec![g_collector.clone()].as_slice())?; + + let era = ehd_eras + .iter() + .flat_map(|eras| eras.iter()) + .find(|ehd| ehd.id == era) + .ok_or(OCWError::FailedToFetchPaymentEra)?; + + Ok(era.clone()) +} + +pub(crate) fn fetch_inspection_receipts( + cluster_id: &ClusterId, + ehd_id: EHDId, +) -> Result, OCWError> { + // todo(yahortsaryk): infer the G-collector deterministically + let g_collector = get_g_collectors_nodes(cluster_id) + .map_err(|_: Error| OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })? + .first() + .cloned() + .ok_or(OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })?; + + if let Ok(host) = str::from_utf8(&g_collector.1.host) { + let base_url = format!("http://{}:{}", host, g_collector.1.http_port); + let client = aggregator_client::AggregatorClient::new( + &base_url, + Duration::from_millis(RESPONSE_TIMEOUT), + MAX_RETRIES_COUNT, + false, // no response signature verification for now + ); + + if let Ok(res) = client.fetch_grouped_inspection_receipts(ehd_id) { + return Ok(res); + } + } + + Err(OCWError::FailedToFetchInspectionReceipt) +} + +/// Send Inspection Receipt. +/// +/// Parameters: +/// - `cluster_id`: cluster id of a cluster +/// - `g_collector`: grouping collector node to save the receipt +/// - `receipt`: inspection receipt +pub(crate) fn send_inspection_receipt( + cluster_id: &ClusterId, + g_collector: &(NodePubKey, StorageNodeParams), + receipt: aggregator_client::json::InspectionReceipt, +) -> Result<(), OCWError> { + if let Ok(host) = str::from_utf8(&g_collector.1.host) { + let base_url = format!("http://{}:{}", host, g_collector.1.http_port); + let client = aggregator_client::AggregatorClient::new( + &base_url, + Duration::from_millis(RESPONSE_TIMEOUT), + MAX_RETRIES_COUNT, + false, // no response signature verification for now + ); + + if client.send_inspection_receipt(receipt.clone()).is_ok() { + // proceed with the first available EHD record for the prototype + return Ok(()); + } else { + log::warn!( + "⚠️ Collector from cluster {:?} is unavailable while fetching EHD record or responded with unexpected body. Key: {:?} Host: {:?}", + cluster_id, + g_collector.0, + String::from_utf8(g_collector.1.host.clone()) + ); + } + } + + Err(OCWError::FailedToSaveInspectionReceipt) +} + +#[allow(dead_code)] +pub(crate) fn get_inspection_assignment_table( + _cluster_id: &ClusterId, + _sync_node: &(NodePubKey, StorageNodeParams), +) -> Result<(), ()> { + // todo(yahortsaryk): request DDC Sync node for the inspection assignments table + + Ok(()) +} diff --git a/pallets/ddc-verification/src/insp_task_manager.rs b/pallets/ddc-verification/src/insp_task_manager.rs new file mode 100644 index 000000000..f2361d817 --- /dev/null +++ b/pallets/ddc-verification/src/insp_task_manager.rs @@ -0,0 +1,1087 @@ +use aggregate_tree::{ + calculate_sample_size_fin, calculate_sample_size_inf, get_leaves_ids, D_099, P_001, +}; +use aggregator_client::json::{EHDTreeNode, PHDTreeNode}; +use ddc_primitives::{ + traits::ClusterValidator, BucketId, BucketUsage, ClusterId, EHDId, EhdEra, NodePubKey, + NodeUsage, TcaEra, +}; +use frame_support::pallet_prelude::{Decode, Encode, TypeInfo}; +use frame_system::offchain::Account; +use itertools::Itertools; +use rand::{prelude::*, rngs::SmallRng, SeedableRng}; +use scale_info::prelude::{format, string::String}; +use serde::{Deserialize, Serialize}; +use sp_core::H256; +use sp_io::offchain::{local_storage_get, local_storage_set}; +use sp_runtime::{ + offchain::StorageKind, + traits::{Hash, IdentifyAccount}, +}; +use sp_std::{ + collections::{btree_map::BTreeMap, btree_set::BTreeSet}, + prelude::*, + rc::Rc, +}; + +use crate::{ + aggregate_tree, aggregator_client, fetch_last_inspected_ehds, get_last_paid_era_hash, + insp_ddc_api::{ + fetch_bucket_aggregates, fetch_bucket_challenge_response, fetch_node_challenge_response, + fetch_processed_eras, get_ehd_root, get_g_collectors_nodes, get_phd_root, + }, + pallet::{Error, ValidatorSet}, + signature::Verify, + Config, Hashable, +}; + +pub(crate) const TCA_INSPECTION_STEP: usize = 0; +pub(crate) const INSPECTION_REDUNDANCY_FACTOR: u8 = 3; +pub(crate) const INSPECTION_BACKUPS_COUNT: u8 = 2; + +type GCollectorNodeKey = NodePubKey; +type CollectorNodeKey = NodePubKey; +type DataNodeKey = NodePubKey; +type InspPathId = H256; +type InspPathReceiptHash = H256; + +#[derive(Debug, Clone, Deserialize, Serialize, TypeInfo)] +pub struct InspAssignmentsTable +where + AccountId: Ord + Clone, +{ + cluster_id: ClusterId, + era: EhdEra, + irf: u8, + // todo(yahortsaryk): make private after deprecating `InspectionReceipt` format + pub(crate) paths: BTreeMap, + assignments: BTreeMap>, +} + +impl InspAssignmentsTable +where + AccountId: Ord + Clone, +{ + #[allow(clippy::map_entry)] + pub fn build( + cluster_id: ClusterId, + era: EhdEra, + irf: u8, + backups_count: u8, + paths: Vec, + inspectors: Vec, + // todo(yahortsaryk): build seed from the last paid era hash + seed: u64, + ) -> Result { + let mut paths = paths; + let mut inspectors = inspectors; + + let mut small_rng = SmallRng::seed_from_u64(seed); + paths.shuffle(&mut small_rng); + inspectors.shuffle(&mut small_rng); + + let mut assignments: BTreeMap> = Default::default(); + + // todo(yahortsaryk): define the number of inspectors dynamically based on paths total + // count + for inspector in &inspectors { + assignments.insert(inspector.clone(), Vec::new()); + } + + // assign paths with circular indexing and replication factor + let mut inspection_paths: BTreeMap = Default::default(); + + for (i, path) in paths.into_iter().enumerate() { + let path_id = path.hash::(); + inspection_paths.insert(path_id, path); + + for j in 0..(irf + backups_count) as usize { + let assigned_idx = (i + j) % inspectors.len(); + assignments + .get_mut(&inspectors[assigned_idx]) + .ok_or(InspAssignmentError::NoInspectorAtIdx(assigned_idx as u64))? + .push(path_id); + } + } + + let mut inspectors_assignments: BTreeMap> = + Default::default(); + + for (inspector, paths_ids) in assignments { + for path_id in paths_ids { + if !inspectors_assignments.contains_key(&path_id) { + inspectors_assignments.insert(path_id, Default::default()); + } + + let path_inspectors = inspectors_assignments + .get_mut(&path_id) + .ok_or(InspAssignmentError::Unexpected)?; + + path_inspectors.insert(inspector.clone()); + } + } + + Ok(InspAssignmentsTable { + cluster_id, + era, + irf, + paths: inspection_paths, + assignments: inspectors_assignments, + }) + } + + pub fn get_assigned_paths(&self, inspector: &AccountId) -> BTreeMap { + let mut result: BTreeMap = Default::default(); + for (path_id, inspectors) in &self.assignments { + if inspectors.contains(inspector) { + if let Some(path) = self.paths.get(path_id) { + result.insert(*path_id, path.clone()); + } + } + } + result + } +} + +#[derive(Debug, Encode, Decode, Clone, TypeInfo, PartialEq)] +pub enum InspectionError { + NoGCollectors(ClusterId), + NoCollectors(TcaEra), + NoBucketAggregate(BucketId), + AssignmentsError(InspAssignmentError), + Unexpected, +} + +#[allow(dead_code)] +pub(crate) enum InspSyncStatus +where + AccountId: Ord + Clone, +{ + NotReadyForInspection, + AssigningInspectors { era: EhdEra, assigner: AccountId, lease_ttl: u32 }, + ReadyForInspection { assignments_table: InspAssignmentsTable }, +} + +pub(crate) struct InspTaskAssigner { + inspector: Rc>, +} +pub(crate) struct InspEraAssignments { + era: EhdEra, + assigned_paths: BTreeMap, +} + +impl InspTaskAssigner { + pub(crate) fn new(inspector: Rc>) -> Self { + InspTaskAssigner { inspector } + } + + pub(crate) fn try_get_assignments( + &self, + cluster_id: &ClusterId, + ) -> Result, InspAssignmentError> { + if let Some(assignments_table) = &self.try_get_assignments_table(cluster_id)? { + let inspector_account = &self.inspector.public.clone().into_account(); + let assigned_paths = assignments_table.get_assigned_paths(inspector_account); + let era_assignments = InspEraAssignments { era: assignments_table.era, assigned_paths }; + Ok(Some(era_assignments)) + } else { + Ok(None) + } + } + + pub(crate) fn try_get_assignments_table( + &self, + cluster_id: &ClusterId, + ) -> Result>, InspAssignmentError> { + let Some(era) = Self::try_get_era_to_inspect(cluster_id)? else { + return Ok(None); + }; + // todo(yahortsaryk): try to request DDC Sync node for the Inspection assignments table, and + // extract inspection tasks if there are any + // let sync_status = get_inspection_assignment_table(cluster_id, era); + let sync_status = InspSyncStatus::::AssigningInspectors { + era, + assigner: self.inspector.public.clone().into_account(), + lease_ttl: 60000, + }; + + match sync_status { + InspSyncStatus::NotReadyForInspection => Ok(None), + InspSyncStatus::AssigningInspectors { era, assigner, lease_ttl: _lease_ttl } => { + let inspector_account = &self.inspector.public.clone().into_account(); + if *inspector_account == assigner { + let assignmens_table = &self.build_assignments_table(cluster_id, &era)?; + + // todo(yahortsaryk): optimize performance by eliminating cloning of the whole + // table + Ok(Some(assignmens_table.clone())) + } else { + Ok(None) + } + }, + InspSyncStatus::ReadyForInspection { assignments_table } => Ok(Some(assignments_table)), + } + } + + /// Fetch current era across all DAC nodes to validate. + /// + /// Parameters: + /// - `cluster_id`: cluster id of a cluster + /// - `g_collectors`: List of G-Collectors nodes + fn try_get_era_to_inspect( + cluster_id: &ClusterId, + ) -> Result, InspAssignmentError> { + let g_collectors = get_g_collectors_nodes(cluster_id) + .map_err(|_: Error| InspAssignmentError::NoGCollectors(*cluster_id))?; + + let last_inspected_ehd_by_this_validator = Self::try_get_last_inspected_ehd(cluster_id); + + let last_inspected_era_by_this_validator: EhdEra = + if let Some(ehd) = last_inspected_ehd_by_this_validator { + ehd.2 + } else { + Default::default() + }; + + let last_paid_era_for_cluster: EhdEra = T::ClusterValidator::get_last_paid_era(cluster_id) + .map_err(|_| InspAssignmentError::ClusterError(*cluster_id))?; + + log::info!( + "👁️‍🗨️ The last era inspected by this inspector for cluster_id: {:?} is {:?}. The last paid era for the cluster is {:?}", + cluster_id, + last_inspected_era_by_this_validator, + last_paid_era_for_cluster + ); + + // we want to fetch processed eras from all available G-Collectors + let available_processed_ehd_eras = fetch_processed_eras::(cluster_id, &g_collectors) + .map_err(|_| InspAssignmentError::ClusterApiError(*cluster_id))?; + + // we want to let the current inspector to inspect available processed/completed eras + // that are greater than the last validated era in the cluster + let processed_eras_to_inspect: Vec = + available_processed_ehd_eras + .iter() + .flat_map(|eras| { + eras.iter() + .filter(|&ids| { + ids.id > last_inspected_era_by_this_validator && + ids.id > last_paid_era_for_cluster + }) + .cloned() + }) + .sorted() + .collect::>(); + + // we want to process only eras reported by quorum of G-Collector + let mut processed_eras_with_quorum: Vec = vec![]; + + // todo(yahortsaryk): agree on the result within a quorum of G-Collectors + // let quorum = T::AggregatorsQuorum::get(); + // let threshold = quorum * collectors_nodes.len(); + + let threshold = 1; + for (era_key, candidates) in + &processed_eras_to_inspect.into_iter().chunk_by(|elt| elt.clone()) + { + let count = candidates.count(); + if count >= threshold { + processed_eras_with_quorum.push(era_key); + } else { + log::warn!( + "⚠️ Era {:?} in cluster_id: {:?} has been reported with unmet quorum. Desired: {:?} Actual: {:?}", + era_key, + cluster_id, + threshold, + count + ); + } + } + + let era_to_inspect = + processed_eras_with_quorum.iter().cloned().min_by_key(|e| e.id).map(|e| e.id); + Ok(era_to_inspect) + } + + fn try_get_last_inspected_ehd(cluster_id: &ClusterId) -> Option { + if let Some(last_inspected_ehds) = fetch_last_inspected_ehds(cluster_id) { + last_inspected_ehds.iter().max_by_key(|ehd| ehd.2).cloned() + } else { + None + } + } + + fn build_assignments_table( + &self, + cluster_id: &ClusterId, + era: &EhdEra, + ) -> Result, InspAssignmentError> { + let mut inspection_paths: Vec = Vec::new(); + + let (ehd_root, ehd_inspection_paths) = build_ehd_inspection_paths::(cluster_id, era)?; + inspection_paths.extend(ehd_inspection_paths); + + let mut phd_roots = vec![]; + for phd_id in &ehd_root.pdh_ids { + let phd_root = get_phd_root::(cluster_id, phd_id.clone()) + .map_err(|_| InspAssignmentError::NoPHD(*era, phd_id.clone().0))?; + phd_roots.push(phd_root.clone()); + } + + // todo(yahortsaryk): build tasks for PHDs and put them to `inspection_paths` + + inspection_paths.extend(build_nodes_inspection_paths::(&phd_roots)?); + inspection_paths.extend(build_buckets_inspection_paths::(&phd_roots)?); + + let inspectors = >::get().clone(); + let seed = get_last_paid_era_hash::(cluster_id); + let assignments_table = InspAssignmentsTable::::build::( + *cluster_id, + *era, + INSPECTION_REDUNDANCY_FACTOR, + INSPECTION_BACKUPS_COUNT, + inspection_paths, + inspectors, + seed, + )?; + + Ok(assignments_table) + } +} + +#[derive(Debug, Encode, Decode, Clone, TypeInfo, PartialEq)] +pub enum InspAssignmentError { + NoNodeTCAs(NodePubKey), + NoNodeTCA(TcaEra, NodePubKey), + NoNodeTCAVar(TcaEra, NodePubKey), + NoBucketTCAs(BucketId), + NoBucketTCA(TcaEra, BucketId), + NoBucketTCAVar(TcaEra, BucketId), + NoInspectorAtIdx(u64), + NoEHDs(EhdEra, ClusterId), + NoEHD(EhdEra, NodePubKey), + NoPHD(EhdEra, NodePubKey), + NoGCollectors(ClusterId), + NoCollectors(TcaEra), + NoBucketAggregate(BucketId), + ClusterError(ClusterId), + ClusterApiError(ClusterId), + Unexpected, +} + +#[derive(Debug, Clone, Deserialize, Serialize, PartialOrd, Ord, TypeInfo, Eq, PartialEq)] +pub enum InspPath { + NodeAR { + /// Data Node to inspect. + node: DataNodeKey, + /// Time capsule to inspect. + tca_id: TcaEra, + /// Merkle tree leaf IDs in NodeAggregate tree. + leaves_ids: Vec, + /// Collectors where the NodeAggregate for Data Node is available. + collectors: BTreeSet, + }, + BucketAR { + /// Bucket to inspect. + bucket: BucketId, + /// Time capsule to inspect. + tca_id: TcaEra, + /// Merkle tree leaf Positions in Cumulative BucketAggregate tree that is composed of + /// multiple BucketSubAggregates. Position index starts from 0. + leaves_pos: Vec, + /// Collectors where the BucketAggregate for Data Node is available. + collectors: BTreeSet, + }, +} + +impl Hashable for InspPath { + fn hash(&self) -> InspPathId { + match self { + InspPath::NodeAR { node, tca_id, leaves_ids, collectors } => { + let mut data = node.encode(); + data.extend_from_slice(&tca_id.encode()); + data.extend_from_slice(&leaves_ids.encode()); + data.extend_from_slice(&collectors.encode()); + T::Hasher::hash(&data) + }, + InspPath::BucketAR { bucket, tca_id, leaves_pos, collectors } => { + let mut data = bucket.encode(); + data.extend_from_slice(&tca_id.encode()); + data.extend_from_slice(&leaves_pos.encode()); + data.extend_from_slice(&collectors.encode()); + T::Hasher::hash(&data) + }, + } + } +} + +#[derive( + Debug, Clone, Encode, Decode, Deserialize, Serialize, PartialOrd, Ord, TypeInfo, Eq, PartialEq, +)] +pub struct InspPathReceipt { + pub path_id: InspPathId, + pub is_verified: bool, + pub exception: Option, +} + +impl Hashable for InspPathReceipt { + fn hash(&self) -> InspPathReceiptHash { + let mut data = self.path_id.encode(); + data.extend_from_slice(&self.is_verified.encode()); + if let Some(exception) = &self.exception { + let exception_hash = exception.hash::(); + data.extend_from_slice(&exception_hash.encode()); + } + T::Hasher::hash(&data) + } +} + +#[derive( + Debug, Clone, Deserialize, Serialize, Encode, Decode, PartialOrd, Ord, TypeInfo, Eq, PartialEq, +)] +pub enum InspPathException { + NodeAR { bad_leaves_ids: Vec }, + BucketAR { bad_leaves_pos: Vec }, +} + +impl Hashable for InspPathException { + fn hash(&self) -> InspPathId { + match self { + InspPathException::NodeAR { bad_leaves_ids } => { + let data = bad_leaves_ids.encode(); + T::Hasher::hash(&data) + }, + InspPathException::BucketAR { bad_leaves_pos } => { + let data = bad_leaves_pos.encode(); + T::Hasher::hash(&data) + }, + } + } +} + +#[allow(clippy::collapsible_else_if)] +fn build_ehd_inspection_paths( + cluster_id: &ClusterId, + era: &EhdEra, +) -> Result<(EHDTreeNode, Vec), InspAssignmentError> { + let inspection_paths: Vec = Default::default(); + let g_collectors = get_g_collectors_nodes(cluster_id) + .map_err(|_: Error| InspAssignmentError::NoEHDs(*era, *cluster_id))?; + + let mut ehd_variants: BTreeMap> = Default::default(); + + for (g_collector_key, _) in g_collectors { + let ehd_id = EHDId(*cluster_id, g_collector_key.clone(), *era); + let ehd_root = get_ehd_root::(cluster_id, ehd_id) + .map_err(|_| InspAssignmentError::NoEHD(*era, g_collector_key.clone()))?; + + if !ehd_variants.contains_key(&ehd_root) { + ehd_variants.insert(ehd_root.clone(), BTreeSet::from([g_collector_key.clone()])); + } else { + let ehd_reporters = + ehd_variants.get_mut(&ehd_root.clone()).ok_or(InspAssignmentError::Unexpected)?; + ehd_reporters.insert(g_collector_key.clone()); + } + } + + let (ehd_root, _) = if ehd_variants.len() == 1 { + ehd_variants.first_key_value().ok_or(InspAssignmentError::Unexpected)? + } else { + log::debug!( + "ClusterId {:?} / Era {:?}: {:?} of EHD variants detected.", + *cluster_id, + era, + ehd_variants.len() + ); + + // todo(yahortsaryk): build tasks for in deep inspection of deviating + // G-Collectors on EHD and put them to `inspection_paths` + ehd_variants + .iter() + .max_by_key(|(_, g_collectors)| g_collectors.len()) + .ok_or(InspAssignmentError::NoEHDs(*era, *cluster_id))? + }; + + // todo(yahortsaryk): build tasks for canonical EHD and put them to `inspection_paths` + + Ok((ehd_root.clone(), inspection_paths)) +} + +#[allow(clippy::map_entry)] +#[allow(clippy::collapsible_else_if)] +#[allow(clippy::extra_unused_type_parameters)] +fn build_nodes_inspection_paths( + phd_roots: &Vec, +) -> Result, InspAssignmentError> { + let mut inspection_paths: Vec = Default::default(); + + #[allow(clippy::type_complexity)] + let mut nodes_tcas_map: BTreeMap< + DataNodeKey, + BTreeMap>>, + > = BTreeMap::new(); + + for phd_root in phd_roots { + let collector_key = phd_root.phd_id.0.clone(); + for (node_key, node_tcas) in &phd_root.nodes_aggregates { + for tca_usage in node_tcas { + if !nodes_tcas_map.contains_key(node_key) { + nodes_tcas_map.insert(node_key.clone(), Default::default()); + } + let tcas_map = nodes_tcas_map + .get_mut(node_key) + .ok_or(InspAssignmentError::NoNodeTCAs(node_key.clone()))?; + + if !tcas_map.contains_key(&tca_usage.tca_id) { + tcas_map.insert(tca_usage.tca_id, Default::default()); + } + let tca_variants = tcas_map + .get_mut(&tca_usage.tca_id) + .ok_or(InspAssignmentError::NoNodeTCA(tca_usage.tca_id, node_key.clone()))?; + + if !tca_variants.contains_key(&tca_usage.clone().into()) { + tca_variants + .insert(tca_usage.clone().into(), BTreeSet::from([collector_key.clone()])); + } else { + let tca_variant = tca_variants.get_mut(&tca_usage.clone().into()).ok_or( + InspAssignmentError::NoNodeTCAVar(tca_usage.tca_id, node_key.clone()), + )?; + tca_variant.insert(collector_key.clone()); + } + } + } + } + + let mut nodes_inspection_timelines: BTreeMap> = + Default::default(); + + for (node_key, node_tcas) in &nodes_tcas_map { + let mut node_timeline: BTreeSet<(TcaEra, NodeUsage)> = Default::default(); + + for (i, (tca_id, tca_variants)) in node_tcas.iter().enumerate() { + // todo(yahortsaryk): define optimal step for TCAs dynamically depending on + // benchmarks and honor TCAs with higher economic value + if TCA_INSPECTION_STEP != 0 && (i + 1) % TCA_INSPECTION_STEP == 0 { + continue; + }; + + let (tca_usage, _) = if tca_variants.len() == 1 { + tca_variants + .first_key_value() + .ok_or(InspAssignmentError::NoNodeTCAVar(*tca_id, node_key.clone()))? + } else { + log::debug!( + "Node {:?} / TCAA {:?}: {:?} of aggregation variants detected.", + node_key.clone(), + tca_id, + tca_variants.len() + ); + + // todo(yahortsaryk): build tasks for in deep inspection of deviating + // Collectors on TCA and put them to `inspection_paths` + tca_variants + .iter() + .max_by_key(|(_, collectors)| collectors.len()) + .ok_or(InspAssignmentError::NoNodeTCAVar(*tca_id, node_key.clone()))? + }; + + node_timeline.insert((*tca_id, tca_usage.clone())); + } + + nodes_inspection_timelines.insert(node_key.clone(), node_timeline); + } + + // todo(yahortsaryk): select desired probability of detecting at least one tampered leaf + // dynamically based on cluster track record and benchmarks + let n0 = calculate_sample_size_inf(D_099, P_001); + + for (node_key, node_timeline) in nodes_inspection_timelines { + let timeline_tcas_count = node_timeline.len() as u64; + let timeline_leaves_count = node_timeline.iter().fold(0u64, |acc, (_, tca_usage)| { + acc.saturating_add(tca_usage.number_of_puts) + .saturating_add(tca_usage.number_of_gets) + }); + + let n = match calculate_sample_size_fin(n0, timeline_leaves_count) { + Ok(n) => n, + // todo(yahortsaryk): add better error handling and fallback for unsuccessful + // sample calculation + Err(_) => continue, + }; + + let n_per_tca = n / timeline_tcas_count; + if n_per_tca == 0 { + // todo(yahortsaryk): add better error handling and fallback for unsuccessful + // sample calculation + continue; + } + + let mut remainder = n % timeline_tcas_count; + + for (tca_id, tca_usage) in node_timeline { + let tca_leaves_count = + tca_usage.number_of_puts.saturating_add(tca_usage.number_of_gets); + let tca_leaves_ids = get_leaves_ids(tca_leaves_count); + let ids_count = tca_leaves_ids.len() as u64; + + let tca_leaves_to_inspect = if n_per_tca < ids_count { + let sample_size = if remainder > 0 && (n_per_tca + remainder) <= ids_count { + let size = n_per_tca + remainder; + remainder = 0; + size + } else { + n_per_tca + }; + + // it should be ok to select leaves randomly (not deterministically) as only + // one Inspector builds the assignment table at a time + select_random_leaves(sample_size, tca_leaves_ids, node_key.clone().into()) + } else { + remainder += n_per_tca - ids_count; + tca_leaves_ids + }; + + log::debug!( + "Node {:?} - TCAA {:?}. Selecting {:?} leaves out of {:?} for Node AR inspection path. Selected leaves ids {:?}. Additional reminder is {:?}.", + node_key.clone(), + tca_id, + n_per_tca, + ids_count, + tca_leaves_to_inspect, + remainder + ); + + let collectors = nodes_tcas_map + .get(&node_key) + .ok_or(InspAssignmentError::NoNodeTCAs(node_key.clone()))? + .get(&tca_id) + .ok_or(InspAssignmentError::NoNodeTCA(tca_id, node_key.clone()))? + .get(&tca_usage.clone()) + .ok_or(InspAssignmentError::NoNodeTCAVar(tca_id, node_key.clone()))?; + + inspection_paths.push(InspPath::NodeAR { + node: node_key.clone(), + tca_id, + leaves_ids: tca_leaves_to_inspect, + collectors: collectors.clone(), + }); + } + } + + Ok(inspection_paths) +} + +#[allow(clippy::map_entry)] +#[allow(clippy::collapsible_else_if)] +#[allow(clippy::extra_unused_type_parameters)] +fn build_buckets_inspection_paths( + phd_roots: &Vec, +) -> Result, InspAssignmentError> { + let mut inspection_paths: Vec = Default::default(); + + #[allow(clippy::type_complexity)] + let mut buckets_tcas_map: BTreeMap< + BucketId, + BTreeMap>>, + > = BTreeMap::new(); + + for phd_root in phd_roots { + let collector_key = phd_root.phd_id.0.clone(); + for (bucket_id, bucket_tcas) in &phd_root.buckets_aggregates { + for tca_usage in bucket_tcas { + if !buckets_tcas_map.contains_key(bucket_id) { + buckets_tcas_map.insert(*bucket_id, Default::default()); + } + let tcas_map = buckets_tcas_map + .get_mut(bucket_id) + .ok_or(InspAssignmentError::NoBucketTCAs(*bucket_id))?; + + if !tcas_map.contains_key(&tca_usage.tca_id) { + tcas_map.insert(tca_usage.tca_id, Default::default()); + } + let tca_variants = tcas_map + .get_mut(&tca_usage.tca_id) + .ok_or(InspAssignmentError::NoBucketTCA(tca_usage.tca_id, *bucket_id))?; + + if !tca_variants.contains_key(&tca_usage.clone().into()) { + tca_variants + .insert(tca_usage.clone().into(), BTreeSet::from([collector_key.clone()])); + } else { + let tca_variant = tca_variants + .get_mut(&tca_usage.clone().into()) + .ok_or(InspAssignmentError::NoBucketTCAVar(tca_usage.tca_id, *bucket_id))?; + tca_variant.insert(collector_key.clone()); + } + } + } + } + + let mut buckets_inspection_timelines: BTreeMap> = + Default::default(); + + for (bucket_id, bucket_tcas) in &buckets_tcas_map { + let mut bucket_timeline: BTreeSet<(TcaEra, BucketUsage)> = Default::default(); + + for (i, (tca_id, tca_variants)) in bucket_tcas.iter().enumerate() { + // todo(yahortsaryk): define optimal step for TCAs dynamically depending on + // benchmarks and honor TCAs with higher economic value + if TCA_INSPECTION_STEP != 0 && (i + 1) % TCA_INSPECTION_STEP == 0 { + continue; + }; + + let (tca_usage, _) = if tca_variants.len() == 1 { + tca_variants + .first_key_value() + .ok_or(InspAssignmentError::NoBucketTCAVar(*tca_id, *bucket_id))? + } else { + log::debug!( + "Node {:?} / TCAA {:?}: {:?} of aggregation variants detected.", + bucket_id, + tca_id, + tca_variants.len() + ); + + // todo(yahortsaryk): build tasks for in deep inspection of deviating + // Collectors on TCA and put them to `inspection_paths` + tca_variants + .iter() + .max_by_key(|(_, collectors)| collectors.len()) + .ok_or(InspAssignmentError::NoBucketTCAVar(*tca_id, *bucket_id))? + }; + + bucket_timeline.insert((*tca_id, tca_usage.clone())); + } + + buckets_inspection_timelines.insert(*bucket_id, bucket_timeline); + } + + // todo(yahortsaryk): select desired probability of detecting at least one tampered leaf + // dynamically based on cluster track record and benchmarks + let n0 = calculate_sample_size_inf(D_099, P_001); + + for (bucket_id, bucket_timeline) in buckets_inspection_timelines { + let timeline_tcas_count = bucket_timeline.len() as u64; + let timeline_leaves_count = bucket_timeline.iter().fold(0u64, |acc, (_, tca_usage)| { + acc.saturating_add(tca_usage.number_of_puts) + .saturating_add(tca_usage.number_of_gets) + }); + + let n = match calculate_sample_size_fin(n0, timeline_leaves_count) { + Ok(n) => n, + // todo(yahortsaryk): add better error handling and fallback for unsuccessful + // sample calculation + Err(_) => continue, + }; + + let n_per_tca = n / timeline_tcas_count; + if n_per_tca == 0 { + // todo(yahortsaryk): add better error handling and fallback for unsuccessful + // sample calculation + continue; + } + + let mut remainder = n % timeline_tcas_count; + + for (tca_id, tca_usage) in bucket_timeline { + let tca_leaves_count = + tca_usage.number_of_puts.saturating_add(tca_usage.number_of_gets); + let tca_leaves_positions: Vec = (0u64..tca_leaves_count).collect(); + let positions_count = tca_leaves_positions.len() as u64; + + let tca_positions_to_inspect = if n_per_tca < positions_count { + let sample_size = if remainder > 0 && (n_per_tca + remainder) <= positions_count { + let size = n_per_tca + remainder; + remainder = 0; + size + } else { + n_per_tca + }; + + // it should be ok to select leaves randomly (not deterministically) as only + // one Inspector builds the assignment table at a time + select_random_leaves(sample_size, tca_leaves_positions, format!("{}", bucket_id)) + } else { + remainder += n_per_tca - positions_count; + tca_leaves_positions + }; + + log::debug!( + "Bucket {:?} - TCAA {:?}. Selecting {:?} leaves out of {:?} for Bucket AR inspection path. Selected leaves positions {:?}. Additional reminder is {:?}.", + bucket_id, + tca_id, + n_per_tca, + positions_count, + tca_positions_to_inspect, + remainder + ); + + let collectors = buckets_tcas_map + .get(&bucket_id) + .ok_or(InspAssignmentError::NoBucketTCAs(bucket_id))? + .get(&tca_id) + .ok_or(InspAssignmentError::NoBucketTCA(tca_id, bucket_id))? + .get(&tca_usage.clone()) + .ok_or(InspAssignmentError::NoBucketTCAVar(tca_id, bucket_id))?; + + inspection_paths.push(InspPath::BucketAR { + bucket: bucket_id, + tca_id, + leaves_pos: tca_positions_to_inspect, + collectors: collectors.clone(), + }); + } + } + + Ok(inspection_paths) +} + +#[allow(clippy::assign_op_pattern)] +#[allow(clippy::collapsible_else_if)] +fn process_tasks( + cluster_id: &ClusterId, + tasks: Vec<&InspTask>, +) -> Result, InspectionError> { + let mut results: Vec = Default::default(); + + let mut cached_bucket_aggregates: BTreeMap< + (BucketId, TcaEra), + aggregator_client::json::BucketAggregateResponse, + > = Default::default(); + + for task in tasks { + let path_id = task.path_id; + + match &task.path { + InspPath::NodeAR { node: node_key, tca_id, leaves_ids, collectors } => { + let collector = + collectors.first().cloned().ok_or(InspectionError::NoCollectors(*tca_id))?; + + // todo(yahortsaryk): in case the request fails due to collector + // unavailability, re-try with the next one + if let Ok(challenge_res) = fetch_node_challenge_response::( + cluster_id, + *tca_id, + collector.clone(), + node_key.clone(), + leaves_ids.clone(), + ) { + // todo(yahortsaryk): fix AR signatures + let is_verified = challenge_res.verify(); + let exception: Option<_> = if is_verified { + None + } else { + // todo(yahortsaryk): add only bad leaves to exceptions + Some(InspPathException::NodeAR { bad_leaves_ids: leaves_ids.clone() }) + }; + let path_receipt = InspPathReceipt { path_id, is_verified, exception }; + results.push(path_receipt); + } + }, + InspPath::BucketAR { bucket: bucket_id, tca_id, leaves_pos, collectors } => { + let collector = + collectors.first().cloned().ok_or(InspectionError::NoCollectors(*tca_id))?; + + // todo(yahortsaryk): in case the request fails due to collector + // unavailability, re-try with the next one + let bucket_aggregate = + if let Some(aggregate) = cached_bucket_aggregates.get(&(*bucket_id, *tca_id)) { + aggregate + } else { + let aggregates = + fetch_bucket_aggregates::(cluster_id, *tca_id, collector.clone()) + .map_err(|_| InspectionError::NoBucketAggregate(*bucket_id))?; + + for mut aggregate in aggregates { + aggregate.sub_aggregates.sort_by_key(|subagg| subagg.NodeID.clone()); + cached_bucket_aggregates + .entry((aggregate.bucket_id, *tca_id)) + .or_insert(aggregate.clone()); + } + + cached_bucket_aggregates + .get(&(*bucket_id, *tca_id)) + .ok_or(InspectionError::NoBucketAggregate(*bucket_id))? + }; + + let mut total_subaggs_leaf_count: u64 = 0; + + for (j, sub_aggregate) in bucket_aggregate.sub_aggregates.iter().enumerate() { + let subagg_leaves_count = + sub_aggregate.number_of_puts.saturating_add(sub_aggregate.number_of_gets); + + let subagg_leaves_ids = get_leaves_ids(subagg_leaves_count); + + let mut subagg_leaves_to_inspect: Vec = Vec::new(); + + for (i, subagg_leave_id) in subagg_leaves_ids.iter().enumerate() { + let leaf_pos = + if j == 0 { i as u64 } else { i as u64 + total_subaggs_leaf_count }; + + if leaves_pos.contains(&leaf_pos) { + subagg_leaves_to_inspect.push(*subagg_leave_id); + } + } + + total_subaggs_leaf_count = + total_subaggs_leaf_count + subagg_leaves_ids.len() as u64; + + if subagg_leaves_to_inspect.is_empty() { + // there are no leaves this sub-aggregate to inspect + continue; + } + + if let Ok(challenge_res) = fetch_bucket_challenge_response::( + cluster_id, + *tca_id, + collector.clone(), + // todo(yahortsaryk): fix NodeID field in DTO + sub_aggregate + .NodeID + .clone() + .try_into() + .map_err(|_| InspectionError::Unexpected)?, + *bucket_id, + subagg_leaves_to_inspect.clone(), + ) { + // todo(yahortsaryk): fix AR signatures + let is_verified = challenge_res.verify(); + let exception: Option<_> = if is_verified { + None + } else { + // todo(yahortsaryk): add only bad leaves to exceptions + Some(InspPathException::BucketAR { bad_leaves_pos: leaves_pos.clone() }) + }; + let path_receipt = InspPathReceipt { path_id, is_verified, exception }; + results.push(path_receipt); + } + } + }, + } + } + + Ok(results) +} + +struct InspTask { + path_id: InspPathId, + path: InspPath, + priority: u8, +} + +#[allow(dead_code)] +pub struct InspTaskManager { + inspector: Rc>, + assigner: InspTaskAssigner, + // currently we don't support pending eras in the pool, so there will be always one era per + // cluster in inspection processing + tasks_pool: BTreeMap)>, +} + +impl InspTaskManager { + pub(crate) fn new(inspector: Account) -> Self { + let inspector = Rc::new(inspector); + let assigner = InspTaskAssigner::new(inspector.clone()); + InspTaskManager { inspector, assigner, tasks_pool: Default::default() } + } + + pub(crate) fn assign_cluster(&mut self, cluster_id: &ClusterId) -> Result<(), InspectionError> { + if let Some(era_assignments) = self + .assigner + .try_get_assignments(cluster_id) + .map_err(InspectionError::AssignmentsError)? + { + self.add_inspection_tasks( + *cluster_id, + era_assignments.era, + era_assignments.assigned_paths, + ); + } + + Ok(()) + } + + fn add_inspection_tasks( + &mut self, + cluster_id: ClusterId, + era: EhdEra, + insp_paths: BTreeMap, + ) { + self.tasks_pool.entry(cluster_id).or_insert(( + era, + insp_paths + .into_iter() + .map(|(path_id, path)| { + // todo(yahortsaryk): set the priority based on inspector's assignment + // (main/backup) + InspTask { path_id, path, priority: 1 } + }) + .collect::>(), + )); + } + + pub(crate) fn inspect_cluster( + &mut self, + cluster_id: &ClusterId, + ) -> Result, InspectionError> { + if let Some((era, insp_tasks)) = &self.tasks_pool.remove(cluster_id) { + let prioritized_tasks = + insp_tasks.iter().sorted_by_key(|task| task.priority).collect::>(); + let era_results = process_tasks::(cluster_id, prioritized_tasks)?; + + Ok(Some(InspEraResult { era: *era, receipts: era_results })) + } else { + Ok(None) + } + } + + // todo(yahortsaryk): !!! REMOVE this method after deprecating current `InspectionReceipt` + // format. The table should be pulled directly from the Sync node if needed + pub(crate) fn get_assignments_table( + &self, + cluster_id: &ClusterId, + ) -> Result>, InspAssignmentError> { + self.assigner.try_get_assignments_table(cluster_id) + } +} + +#[derive( + Debug, Clone, Encode, Decode, Deserialize, Serialize, PartialOrd, Ord, TypeInfo, Eq, PartialEq, +)] +pub(crate) struct InspEraResult { + pub(crate) era: EhdEra, + pub(crate) receipts: Vec, +} + +pub(crate) fn select_random_leaves( + sample_size: u64, + leaves_ids: Vec, + nonce_key: String, +) -> Vec { + let nonce = store_and_fetch_nonce(nonce_key); + let mut small_rng = SmallRng::seed_from_u64(nonce); + + leaves_ids + .choose_multiple(&mut small_rng, sample_size.try_into().unwrap()) + .cloned() + .sorted() + .collect::>() +} + +pub(crate) fn store_and_fetch_nonce(node_id: String) -> u64 { + let key = format!("offchain::activities::nonce::{:?}", node_id).into_bytes(); + let encoded_nonce = + local_storage_get(StorageKind::PERSISTENT, &key).unwrap_or_else(|| 0.encode()); + + let nonce_data = match Decode::decode(&mut &encoded_nonce[..]) { + Ok(nonce) => nonce, + Err(err) => { + log::error!("Decoding error while fetching nonce: {:?}", err); + 0 + }, + }; + + let new_nonce = nonce_data + 1; + + local_storage_set(StorageKind::PERSISTENT, &key, &new_nonce.encode()); + nonce_data +} diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index e71953b4f..9d6311899 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -22,7 +22,7 @@ use ddc_primitives::{ }, BatchIndex, BucketStorageUsage, BucketUsage, ClusterFeesParams, ClusterId, ClusterPricingParams, ClusterStatus, CustomerCharge as CustomerCosts, EHDId, EhdEra, MMRProof, - NodeParams, NodePubKey, NodeStorageUsage, NodeUsage, PHDId, PayableUsageHash, PaymentEra, + NodePubKey, NodeStorageUsage, NodeUsage, PHDId, PayableUsageHash, PaymentEra, PayoutFingerprintParams, PayoutReceiptParams, PayoutState, ProviderReward as ProviderProfits, StorageNodeParams, StorageNodePubKey, TcaEra, AVG_SECONDS_MONTH, }; @@ -77,11 +77,20 @@ mod tests; pub mod migrations; +mod aggregate_tree; mod aggregator_client; - -pub mod aggregate_tree; -use aggregate_tree::{ - calculate_sample_size_fin, calculate_sample_size_inf, get_leaves_ids, D_099, P_001, +mod insp_ddc_api; +mod insp_task_manager; + +use insp_ddc_api::{ + fetch_bucket_challenge_response, fetch_inspection_receipts, fetch_node_challenge_response, + fetch_processed_era, get_collectors_nodes, get_ehd_root, get_g_collectors_nodes, + send_inspection_receipt, BUCKETS_AGGREGATES_FETCH_BATCH_SIZE, MAX_RETRIES_COUNT, + NODES_AGGREGATES_FETCH_BATCH_SIZE, RESPONSE_TIMEOUT, +}; +use insp_task_manager::{ + store_and_fetch_nonce, InspEraResult, InspPath, InspPathException, InspTaskManager, + InspectionError, }; pub mod proto { @@ -89,7 +98,6 @@ pub mod proto { } mod signature; -use signature::Verify; pub(crate) type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; @@ -112,11 +120,7 @@ pub mod pallet { const _SUCCESS_CODE: u16 = 200; const _BUF_SIZE: usize = 128; - const RESPONSE_TIMEOUT: u64 = 20000; - pub const MAX_RETRIES_COUNT: u32 = 3; - pub const BUCKETS_AGGREGATES_FETCH_BATCH_SIZE: usize = 100; - pub const NODES_AGGREGATES_FETCH_BATCH_SIZE: usize = 10; - pub const OCW_MUTEX_ID: &[u8] = b"inspection_lock"; + pub(crate) const OCW_MUTEX_ID: &[u8] = b"inspection_lock"; /// This is overall amount that the bucket owner will be charged for his buckets within a /// payment Era. @@ -371,6 +375,7 @@ pub mod pallet { FailedToFetchTraversedPHD, FailedToFetchNodeChallenge, FailedToFetchBucketChallenge, + FailedToFetchBucketAggregate, FailedToSaveInspectionReceipt, FailedToFetchInspectionReceipt, FailedToFetchPaymentEra, @@ -383,9 +388,12 @@ pub mod pallet { FailedToFetchProtocolParams { cluster_id: ClusterId, }, - NodesInspectionError, - BucketsInspectionError, FailedToSignInspectionReceipt, + FailedToInspectCluster { + validator: T::AccountId, + cluster_id: ClusterId, + err: InspectionError, + }, } /// Consensus Errors @@ -504,6 +512,7 @@ pub mod pallet { FailedToFetchTraversedPHD, FailedToFetchNodeChallenge, FailedToFetchBucketChallenge, + FailedToFetchBucketAggregate, FailedToSaveInspectionReceipt, FailedToFetchInspectionReceipt, FailedToFetchPaymentEra, @@ -516,9 +525,11 @@ pub mod pallet { FailedToFetchProtocolParams { cluster_id: ClusterId, }, - NodesInspectionError, - BucketsInspectionError, FailedToSignInspectionReceipt, + InspError { + cluster_id: ClusterId, + err: InspectionError, + }, } #[pallet::error] @@ -993,11 +1004,15 @@ pub mod pallet { OCWError::FailedToParseCustomerId { customer_id } => { Self::deposit_event(Event::FailedToParseCustomerId { customer_id }); }, - OCWError::NodesInspectionError => { - Self::deposit_event(Event::NodesInspectionError); + OCWError::InspError { cluster_id, err } => { + Self::deposit_event(Event::FailedToInspectCluster { + validator: caller.clone(), + cluster_id, + err, + }); }, - OCWError::BucketsInspectionError => { - Self::deposit_event(Event::BucketsInspectionError); + OCWError::FailedToFetchBucketAggregate => { + Self::deposit_event(Event::FailedToFetchBucketAggregate); }, } } @@ -1139,8 +1154,8 @@ pub mod pallet { let inspection_result = Self::start_inspection_phase(&cluster_id, &verification_account, &signer); - if let Err(errs) = inspection_result { - errors.extend(errs); + if let Err(err) = inspection_result { + errors.extend(vec![err]); } let payout_result = @@ -1171,7 +1186,7 @@ pub mod pallet { cluster_id: &ClusterId, account: &Account, signer: &Signer, - ) -> Result, Vec> { + ) -> Result, Vec> { match Self::$prepare_fn(&cluster_id) { Ok(Some(prepared_data)) => { @@ -1228,468 +1243,206 @@ pub mod pallet { cluster_id: &ClusterId, verification_account: &Account, _signer: &Signer, - ) -> Result<(), Vec> { - let g_collectors = Self::get_g_collectors_nodes(cluster_id).map_err(|_| { - vec![OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id }] + ) -> Result<(), OCWError> { + let g_collectors = get_g_collectors_nodes(cluster_id).map_err(|_: Error| { + OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id } })?; - // todo(yahortsaryk): infer the node deterministically + // todo(yahortsaryk): infer G-Collector node deterministically let Some(g_collector) = g_collectors.first() else { log::warn!("⚠️ No Grouping Collector found in cluster {:?}", cluster_id); return Ok(()); }; - if let Some(ehd_era) = - Self::get_ehd_era_for_inspection(cluster_id, vec![g_collector.clone()].as_slice()) - .map_err(|e| [e])? - { - let tca_start = ehd_era.era_start.ok_or([OCWError::TCAError])?; - let tca_end = ehd_era.era_end.ok_or([OCWError::TCAError])?; - - let ehd_root = Self::get_ehd_root( - cluster_id, - EHDId(*cluster_id, g_collector.0.clone(), ehd_era.id), - ) - .map_err(|e| [e])?; - - let mut phd_roots = vec![]; - for phd_id in ehd_root.pdh_ids { - let phd_root = Self::get_phd_root(cluster_id, phd_id).map_err(|e| [e])?; - phd_roots.push(phd_root.clone()); - } - - let nodes_inspection = - Self::inspect_nodes_aggregates(cluster_id, &phd_roots, tca_start, tca_end)?; - - let buckets_inspection = - Self::inspect_buckets_aggregates(cluster_id, &phd_roots, tca_start, tca_end)?; - - let payload = ( - Into::::into(ehd_root.ehd_id.clone()), - nodes_inspection.clone(), - buckets_inspection.clone(), - ) - .encode(); + let mut insp_task_manager = InspTaskManager::::new(verification_account.clone()); + insp_task_manager + .assign_cluster(cluster_id) + .map_err(|e| OCWError::InspError { cluster_id: *cluster_id, err: e })?; + if let Some(insp_result) = insp_task_manager + .inspect_cluster(cluster_id) + .map_err(|e| OCWError::InspError { cluster_id: *cluster_id, err: e })? + { + let payload = insp_result.encode(); let signature = >::sign( &payload, verification_account.public.clone(), ) - .ok_or([OCWError::FailedToSignInspectionReceipt])?; + .ok_or(OCWError::FailedToSignInspectionReceipt)?; let inspector_pub_key: Vec = verification_account.public.encode(); let inspector = format!("0x{}", hex::encode(&inspector_pub_key[1..])); // skip byte of SCALE encoding let signature = format!("0x{}", hex::encode(signature.encode())); - let receipt = aggregator_client::json::InspectionReceipt { - ehd_id: ehd_root.ehd_id.clone().into(), + // todo(yahortsaryk): retrieve ID of canonical EHD from inspection result + let ehd_id = EHDId(*cluster_id, g_collector.clone().0, insp_result.era); + + // todo(yahortsaryk): remove legacy inspection receipt format + let receipt = Self::map_legacy_inspection_receipt( + cluster_id, + ehd_id.clone(), + &insp_result, inspector, signature, - nodes_inspection, - buckets_inspection, - }; - - Self::send_inspection_receipt(cluster_id, g_collector, receipt) - .map_err(|e| vec![e])?; + &insp_task_manager, + )?; - Self::store_last_inspected_ehd(cluster_id, ehd_root.ehd_id); + send_inspection_receipt(cluster_id, g_collector, receipt)?; + store_last_inspected_ehd(cluster_id, ehd_id); } Ok(()) } - #[allow(clippy::collapsible_else_if)] - pub(crate) fn inspect_nodes_aggregates( + // todo(yahortsaryk): !!! REMOVE this method after deprecating `InspectionReceipt` format + #[allow(clippy::map_entry)] + fn map_legacy_inspection_receipt( cluster_id: &ClusterId, - phd_roots: &Vec, - tca_start: TcaEra, - tca_end: TcaEra, - ) -> Result> { - #[allow(clippy::type_complexity)] - let mut era_leaves_map: BTreeMap< - NodePubKey, // node aggregate key - BTreeMap<(PHDId, (u64, u64)), BTreeMap>>, - > = BTreeMap::new(); - - let mut tcaas_map: BTreeMap = BTreeMap::new(); - - for phd_root in phd_roots { - let collector_key = phd_root.phd_id.0.clone(); - for node_key in phd_root.nodes_aggregates.keys() { - if tcaas_map.contains_key(&node_key.clone()) { - // Currently, we inspect node aggregation from a single (first - // responded) collector. We may compare the aggregation for the same - // node between different collectors in the next iterations to ensure - // redundancy. - continue; - } - - let mut node_leaves_count: u64 = 0; - let mut node_tcaa_count: u64 = 0; - - let mut tcaa_leaves = BTreeMap::new(); - for tcaa_id in tca_start..=tca_end { - if let Ok(challenge_res) = Self::fetch_node_challenge_response( - cluster_id, - tcaa_id, - collector_key.clone(), - node_key.clone(), - vec![1], - ) { - let tcaa_root = challenge_res - .proofs - .first() - .ok_or([OCWError::FailedToFetchNodeChallenge])?; - - let tcaa_leaves_count = tcaa_root - .usage - .ok_or([OCWError::FailedToFetchNodeChallenge])? - .puts + tcaa_root - .usage - .ok_or([OCWError::FailedToFetchNodeChallenge])? - .gets; - - let ids = get_leaves_ids(tcaa_leaves_count); - tcaa_leaves.insert(tcaa_id, ids); - - node_leaves_count += tcaa_leaves_count; - node_tcaa_count += 1; - - tcaas_map.insert(node_key.clone(), tcaa_id); - } - } - - if node_tcaa_count > 0 { - era_leaves_map.insert( - node_key.clone(), - BTreeMap::from([( - (phd_root.phd_id.clone(), (node_leaves_count, node_tcaa_count)), - tcaa_leaves, - )]), - ); - } - } - } - - let mut unverified_phd_parts = vec![]; - let mut verified_phd_parts = vec![]; - - let n0 = calculate_sample_size_inf(D_099, P_001); - - for (node_key, mut val) in era_leaves_map { - let ((phd_id, (node_leaves_count, node_tcaa_count)), tcaa_leaves) = - val.pop_first().ok_or([OCWError::NodesInspectionError])?; - let collector_key = phd_id.0.clone(); - - let n = match calculate_sample_size_fin(n0, node_leaves_count) { - Ok(n) => n, - Err(_) => continue, - }; - - let n_per_tcaa = n / node_tcaa_count; - if n_per_tcaa == 0 { - continue; - } - - let mut remainder = n % node_tcaa_count; - - let mut verified_tcaas: BTreeMap> = BTreeMap::new(); - let mut unverified_tcaas: BTreeMap> = BTreeMap::new(); - - for (tcaa_id, ids) in tcaa_leaves { - let ids_count: u64 = ids.len().try_into().unwrap(); - - let leaves_to_inspect = if n_per_tcaa < ids_count { - let sample_size = if remainder > 0 && (n_per_tcaa + remainder) <= ids_count - { - let size = n_per_tcaa + remainder; - remainder = 0; - size - } else { - n_per_tcaa - }; - - Self::select_random_leaves(sample_size, ids, node_key.clone().into()) - } else { - remainder += n_per_tcaa - ids_count; - ids - }; - - log::info!( - "Node {:?} - TCAA {:?}. Selecting {:?} leaves out of {:?} for inspection. Selected leaves {:?}. Additional reminder is {:?}.", - node_key.clone(), - tcaa_id, - n_per_tcaa, - ids_count, - leaves_to_inspect, - remainder - ); - - if let Ok(challenge_res) = Self::fetch_node_challenge_response( - cluster_id, - tcaa_id, - collector_key.clone(), - node_key.clone(), - leaves_to_inspect.clone(), - ) { - if challenge_res.verify() { - if verified_tcaas.contains_key(&tcaa_id) { - let mut verified_ids = verified_tcaas - .get(&tcaa_id) - .ok_or([OCWError::TCAError])? - .clone(); - verified_ids.extend(leaves_to_inspect); - verified_tcaas.insert(tcaa_id, verified_ids.clone()); - } else { - verified_tcaas.insert(tcaa_id, leaves_to_inspect); - }; - } else { - if unverified_tcaas.contains_key(&tcaa_id) { - let mut unverified_ids = unverified_tcaas - .get(&tcaa_id) - .ok_or([OCWError::TCAError])? - .clone(); - unverified_ids.extend(leaves_to_inspect); - unverified_tcaas.insert(tcaa_id, unverified_ids); - } else { - unverified_tcaas.insert(tcaa_id, leaves_to_inspect); - }; - } + ehd_id: EHDId, + insp_result: &InspEraResult, + inspector: String, + signature: String, + insp_task_manager: &InspTaskManager, + ) -> Result { + let Some(insp_table) = + insp_task_manager.get_assignments_table(cluster_id).map_err(|e| { + OCWError::InspError { + cluster_id: *cluster_id, + err: InspectionError::AssignmentsError(e), } - } - - if !verified_tcaas.is_empty() { - verified_phd_parts.push(aggregator_client::json::InspectedTreePart { - collector: phd_id.0.clone().into(), - aggregate: AggregateKey::NodeAggregateKey(node_key.clone().into()), - nodes: Vec::new(), /* todo: re-calculate aggregations in branch nodes - * of PHD merkle tree */ - leafs: verified_tcaas, - }); - } - - if !unverified_tcaas.is_empty() { - unverified_phd_parts.push(aggregator_client::json::InspectedTreePart { - collector: phd_id.0.clone().into(), - aggregate: AggregateKey::NodeAggregateKey(node_key.clone().into()), - nodes: Vec::new(), /* todo: re-calculate aggregations in branch nodes - * of PHD merkle tree */ - leafs: unverified_tcaas, - }); - } - } - - let nodes_inspection_result = aggregator_client::json::InspectionResult { - unverified_branches: unverified_phd_parts, - verified_branches: verified_phd_parts, + })? + else { + return Err(OCWError::InspError { + cluster_id: *cluster_id, + err: InspectionError::Unexpected, + }); }; - Ok(nodes_inspection_result) - } - - #[allow(clippy::collapsible_else_if)] - pub(crate) fn inspect_buckets_aggregates( - cluster_id: &ClusterId, - phd_roots: &Vec, - tca_start: TcaEra, - tca_end: TcaEra, - ) -> Result> { - #[allow(clippy::type_complexity)] - let mut era_leaves_map: BTreeMap< - (BucketId, NodePubKey), // bucket sub-aggegate key - BTreeMap<(PHDId, (u64, u64)), BTreeMap>>, - > = BTreeMap::new(); - - let mut tcaas_map: BTreeMap<(BucketId, NodePubKey), TcaEra> = BTreeMap::new(); - - for phd_root in phd_roots { - let collector_key = phd_root.phd_id.0.clone(); - - for bucket_id in phd_root.buckets_aggregates.keys() { - for node_key in phd_root.nodes_aggregates.keys() { - if tcaas_map.contains_key(&(*bucket_id, node_key.clone())) { - // Currently, we inspect node aggregation from a single (first - // responded) collector. We may compare the aggregation for the same - // node between different collectors in the next iterations to ensure - // redundancy. - continue; - } - - let mut bucket_sub_leaves_count: u64 = 0; - let mut bucket_sub_tcaa_count: u64 = 0; - - let mut tcaa_leaves = BTreeMap::new(); - for tcaa_id in tca_start..=tca_end { - if let Ok(challenge_res) = Self::fetch_bucket_challenge_response( - cluster_id, - tcaa_id, - collector_key.clone(), - node_key.clone(), - *bucket_id, - vec![1], - ) { - let tcaa_root = challenge_res - .proofs - .first() - .ok_or([OCWError::FailedToFetchBucketChallenge])?; - - let tcaa_leaves_count = tcaa_root - .usage - .ok_or([OCWError::FailedToFetchBucketChallenge])? - .puts + tcaa_root - .usage - .ok_or([OCWError::FailedToFetchBucketChallenge])? - .gets; - - let ids = get_leaves_ids(tcaa_leaves_count); - tcaa_leaves.insert(tcaa_id, ids); - - bucket_sub_leaves_count += tcaa_leaves_count; - bucket_sub_tcaa_count += 1; - - tcaas_map.insert((*bucket_id, node_key.clone()), tcaa_id); - } - } + let (nodes_inspection, buckets_inspection) = insp_result.receipts.iter().fold( + ( + aggregator_client::json::InspectionResult { + unverified_branches: vec![], + verified_branches: vec![], + }, + aggregator_client::json::InspectionResult { + unverified_branches: vec![], + verified_branches: vec![], + }, + ), + |(mut nodes_inspection, mut buckets_inspection), receipt| { + if let Some(path) = insp_table.paths.get(&receipt.path_id) { + match path { + InspPath::NodeAR { node, tca_id, leaves_ids, collectors } => { + let aggregate = AggregateKey::NodeAggregateKey(node.clone().into()); + if receipt.is_verified { + if let Some(subtree) = nodes_inspection + .verified_branches + .iter_mut() + .find(|subtree| subtree.aggregate == aggregate) + { + subtree.leafs.insert(*tca_id, leaves_ids.clone()); + } else { + let subtree = aggregator_client::json::InspectedTreePart { + collector: collectors + .first() + .map(|key| key.clone().into()) + .unwrap_or(Default::default()), + aggregate, + nodes: vec![], + leafs: BTreeMap::from([(*tca_id, leaves_ids.clone())]), + }; + nodes_inspection.verified_branches.push(subtree); + } + } else { + let bad_leaves_ids = match &receipt.exception { + Some(InspPathException::NodeAR { bad_leaves_ids }) => + bad_leaves_ids.clone(), + _ => vec![], + }; + if let Some(subtree) = nodes_inspection + .unverified_branches + .iter_mut() + .find(|subtree| subtree.aggregate == aggregate) + { + subtree.leafs.insert(*tca_id, bad_leaves_ids); + } else { + let subtree = aggregator_client::json::InspectedTreePart { + collector: collectors + .first() + .map(|key| key.clone().into()) + .unwrap_or(Default::default()), + aggregate, + nodes: vec![], + leafs: BTreeMap::from([(*tca_id, bad_leaves_ids)]), + }; + nodes_inspection.unverified_branches.push(subtree); + } + } + (buckets_inspection, nodes_inspection) + }, + InspPath::BucketAR { bucket, tca_id, leaves_pos, collectors } => { + let aggregate = AggregateKey::BucketAggregateKey(*bucket); + if receipt.is_verified { + if let Some(subtree) = buckets_inspection + .verified_branches + .iter_mut() + .find(|subtree| subtree.aggregate == aggregate) + { + subtree.leafs.insert(*tca_id, leaves_pos.clone()); + } else { + let subtree = aggregator_client::json::InspectedTreePart { + collector: collectors + .first() + .map(|key| key.clone().into()) + .unwrap_or(Default::default()), + aggregate, + nodes: vec![], + leafs: BTreeMap::from([(*tca_id, leaves_pos.clone())]), + }; + buckets_inspection.verified_branches.push(subtree); + } + } else { + let bad_leaves_pos = match &receipt.exception { + Some(InspPathException::BucketAR { bad_leaves_pos }) => + bad_leaves_pos.clone(), + _ => vec![], + }; + if let Some(subtree) = buckets_inspection + .unverified_branches + .iter_mut() + .find(|subtree| subtree.aggregate == aggregate) + { + subtree.leafs.insert(*tca_id, bad_leaves_pos); + } else { + let subtree = aggregator_client::json::InspectedTreePart { + collector: collectors + .first() + .map(|key| key.clone().into()) + .unwrap_or(Default::default()), + aggregate, + nodes: vec![], + leafs: BTreeMap::from([(*tca_id, bad_leaves_pos)]), + }; + buckets_inspection.unverified_branches.push(subtree); + } + } - if bucket_sub_tcaa_count > 0 { - era_leaves_map.insert( - (*bucket_id, node_key.clone()), - BTreeMap::from([( - ( - phd_root.phd_id.clone(), - (bucket_sub_leaves_count, bucket_sub_tcaa_count), - ), - tcaa_leaves, - )]), - ); + (buckets_inspection, nodes_inspection) + }, } - } - } - } - - let mut unverified_phd_parts = vec![]; - let mut verified_phd_parts = vec![]; - - let n0 = calculate_sample_size_inf(D_099, P_001); - - for ((bucket_id, node_key), mut val) in era_leaves_map { - let ((phd_id, (bucket_sub_leaves_count, bucket_sub_tcaa_count)), tcaa_leaves) = - val.pop_first().ok_or([OCWError::BucketsInspectionError])?; - - let collector_key = phd_id.0.clone(); - - let n = match calculate_sample_size_fin(n0, bucket_sub_leaves_count) { - Ok(n) => n, - Err(_) => continue, - }; - - let n_per_tcaa = n / bucket_sub_tcaa_count; - if n_per_tcaa == 0 { - continue; - } - - let mut remainder = n % bucket_sub_tcaa_count; - - let mut verified_tcaas: BTreeMap> = BTreeMap::new(); - let mut unverified_tcaas: BTreeMap> = BTreeMap::new(); - - for (tcaa_id, ids) in tcaa_leaves { - let ids_count: u64 = ids.len().try_into().unwrap(); - - let leaves_to_inspect = if n_per_tcaa < ids_count { - let sample_size = if remainder > 0 && (n_per_tcaa + remainder) <= ids_count - { - let size = n_per_tcaa + remainder; - remainder = 0; - size - } else { - n_per_tcaa - }; - - Self::select_random_leaves(sample_size, ids, node_key.clone().into()) } else { - remainder += n_per_tcaa - ids_count; - ids - }; - - log::info!( - "Bucket {:?}/{:?} - TCAA {:?}. Selecting {:?} leaves out of {:?} for inspection. Selected leaves {:?}. Additional reminder is {:?}.", - bucket_id, - node_key.clone(), - tcaa_id, - n_per_tcaa, - ids_count, - leaves_to_inspect, - remainder - ); - - if let Ok(challenge_res) = Self::fetch_bucket_challenge_response( - cluster_id, - tcaa_id, - collector_key.clone(), - node_key.clone(), - bucket_id, - leaves_to_inspect.clone(), - ) { - if challenge_res.verify() { - if verified_tcaas.contains_key(&tcaa_id) { - let mut verified_ids = verified_tcaas - .get(&tcaa_id) - .ok_or([OCWError::TCAError])? - .clone(); - verified_ids.extend(leaves_to_inspect); - verified_tcaas.insert(tcaa_id, verified_ids.clone()); - } else { - verified_tcaas.insert(tcaa_id, leaves_to_inspect); - }; - } else { - if unverified_tcaas.contains_key(&tcaa_id) { - let mut unverified_ids = unverified_tcaas - .get(&tcaa_id) - .ok_or([OCWError::TCAError])? - .clone(); - unverified_ids.extend(leaves_to_inspect); - unverified_tcaas.insert(tcaa_id, unverified_ids); - } else { - unverified_tcaas.insert(tcaa_id, leaves_to_inspect); - }; - } + (buckets_inspection, nodes_inspection) } - } - - if !verified_tcaas.is_empty() { - verified_phd_parts.push(aggregator_client::json::InspectedTreePart { - collector: phd_id.0.clone().into(), - aggregate: AggregateKey::BucketSubAggregateKey( - bucket_id, - node_key.clone().into(), - ), - nodes: Vec::new(), /* todo: re-calculate aggregations in branch nodes - * of PHD merkle tree */ - leafs: verified_tcaas, - }); - } - - if !unverified_tcaas.is_empty() { - unverified_phd_parts.push(aggregator_client::json::InspectedTreePart { - collector: phd_id.0.clone().into(), - aggregate: AggregateKey::BucketSubAggregateKey( - bucket_id, - node_key.clone().into(), - ), - nodes: Vec::new(), /* todo: re-calculate aggregations in branch nodes - * of PHD merkle tree */ - leafs: unverified_tcaas, - }); - } - } - - let buckets_inspection_result = aggregator_client::json::InspectionResult { - unverified_branches: unverified_phd_parts, - verified_branches: verified_phd_parts, - }; + }, + ); - Ok(buckets_inspection_result) + Ok(aggregator_client::json::InspectionReceipt { + ehd_id: ehd_id.into(), + inspector, + signature, + nodes_inspection, + buckets_inspection, + }) } pub(crate) fn start_payouts_phase( @@ -1954,21 +1707,6 @@ pub mod pallet { } } - pub(crate) fn select_random_leaves( - sample_size: u64, - leaves_ids: Vec, - nonce_key: String, - ) -> Vec { - let nonce = Self::store_and_fetch_nonce(nonce_key); - let mut small_rng = SmallRng::seed_from_u64(nonce); - - leaves_ids - .choose_multiple(&mut small_rng, sample_size.try_into().unwrap()) - .cloned() - .sorted() - .collect::>() - } - pub(crate) fn build_and_store_ehd_payable_usage( cluster_id: &ClusterId, ehd_id: EHDId, @@ -1976,16 +1714,17 @@ pub mod pallet { let batch_size = T::MAX_PAYOUT_BATCH_SIZE; // todo(yahortsaryk): infer g-collectors deterministically - let g_collector = Self::get_g_collectors_nodes(cluster_id) - .map_err(|_| OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })? + let g_collector = get_g_collectors_nodes(cluster_id) + .map_err(|_: Error| OCWError::FailedToFetchGCollectors { + cluster_id: *cluster_id, + })? .first() .cloned() .ok_or(OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })?; - let ehd = Self::get_ehd_root(cluster_id, ehd_id.clone())?; + let ehd = get_ehd_root::(cluster_id, ehd_id.clone())?; - let era = - Self::fetch_processed_ehd_era_from_collector(cluster_id, ehd_id.2, &g_collector)?; + let era = fetch_processed_era::(cluster_id, ehd_id.2, &g_collector)?; let pricing = T::ClusterProtocol::get_pricing_params(cluster_id) .map_err(|_| OCWError::FailedToFetchProtocolParams { cluster_id: *cluster_id })?; @@ -1993,7 +1732,7 @@ pub mod pallet { let fees = T::ClusterProtocol::get_fees_params(cluster_id) .map_err(|_| OCWError::FailedToFetchProtocolParams { cluster_id: *cluster_id })?; - let inspection_receipts = Self::fetch_inspection_receipts(cluster_id, ehd_id.clone())?; + let inspection_receipts = fetch_inspection_receipts::(cluster_id, ehd_id.clone())?; let customers_usage_cutoff = if !T::DISABLE_PAYOUTS_CUTOFF { Self::calculate_customers_usage_cutoff(cluster_id, &inspection_receipts)? @@ -2652,7 +2391,7 @@ pub mod pallet { local_storage_set(StorageKind::PERSISTENT, &key, &validator); } - pub(crate) fn fetch_verification_account_id() -> Result { + pub(crate) fn _fetch_verification_account_id() -> Result { let key = format!("offchain::validator::{:?}", DAC_VERIFICATION_KEY_TYPE).into_bytes(); match local_storage_get(StorageKind::PERSISTENT, &key) { @@ -2720,25 +2459,6 @@ pub mod pallet { } } - pub(crate) fn store_and_fetch_nonce(node_id: String) -> u64 { - let key = format!("offchain::activities::nonce::{:?}", node_id).into_bytes(); - let encoded_nonce = - local_storage_get(StorageKind::PERSISTENT, &key).unwrap_or_else(|| 0.encode()); - - let nonce_data = match Decode::decode(&mut &encoded_nonce[..]) { - Ok(nonce) => nonce, - Err(err) => { - log::error!("Decoding error while fetching nonce: {:?}", err); - 0 - }, - }; - - let new_nonce = nonce_data + 1; - - local_storage_set(StorageKind::PERSISTENT, &key, &new_nonce.encode()); - nonce_data - } - /// Converts a vector of hashable batches into their corresponding Merkle roots. /// /// This function takes a vector of hashable batches, where each batch is a vector of @@ -2841,26 +2561,6 @@ pub mod pallet { .map_err(|_| OCWError::FailedToCreateMerkleRoot { cluster_id: *cluster_id, era_id }) } - pub(crate) fn get_ehd_root( - cluster_id: &ClusterId, - ehd_id: EHDId, - ) -> Result { - Self::fetch_traversed_era_historical_document(cluster_id, ehd_id, 1, 1)? - .first() - .ok_or(OCWError::FailedToFetchTraversedEHD) - .cloned() - } - - pub(crate) fn get_phd_root( - cluster_id: &ClusterId, - phd_id: PHDId, - ) -> Result { - Self::fetch_traversed_partial_historical_document(cluster_id, phd_id, 1, 1)? - .first() - .ok_or(OCWError::FailedToFetchTraversedPHD) - .cloned() - } - pub(crate) fn get_tcaa_bucket_usage( cluster_id: &ClusterId, collector_key: NodePubKey, @@ -2868,7 +2568,7 @@ pub mod pallet { node_key: NodePubKey, bucket_id: BucketId, ) -> Result { - let challenge_res = Self::fetch_bucket_challenge_response( + let challenge_res = fetch_bucket_challenge_response::( cluster_id, tcaa_id, collector_key, @@ -2895,7 +2595,7 @@ pub mod pallet { tcaa_id: TcaEra, node_key: NodePubKey, ) -> Result { - let challenge_res = Self::fetch_node_challenge_response( + let challenge_res = fetch_node_challenge_response::( cluster_id, tcaa_id, collector_key, @@ -2918,18 +2618,18 @@ pub mod pallet { pub(crate) fn get_ehd_id_for_payout(cluster_id: &ClusterId) -> Option { match T::ClusterValidator::get_last_paid_era(cluster_id) { Ok(last_paid_era_for_cluster) => { - if let Some(inspected_ehds) = Self::fetch_last_inspected_ehds(cluster_id) { + if let Some(inspected_ehds) = fetch_last_inspected_ehds(cluster_id) { for inspected_ehd in inspected_ehds.clone().into_iter().sorted() { if inspected_ehd.2 > last_paid_era_for_cluster { let ehd_root = - Self::get_ehd_root(cluster_id, inspected_ehd.clone()).ok()?; + get_ehd_root::(cluster_id, inspected_ehd.clone()).ok()?; let cluster_usage = ehd_root.get_cluster_usage(); if cluster_usage == Default::default() { continue; } - let receipts_by_inspector = Self::fetch_inspection_receipts( + let receipts_by_inspector = fetch_inspection_receipts::( cluster_id, inspected_ehd.clone(), ) @@ -2951,238 +2651,6 @@ pub mod pallet { } } - pub(crate) fn get_last_inspected_ehd(cluster_id: &ClusterId) -> Option { - if let Some(last_inspected_ehds) = Self::fetch_last_inspected_ehds(cluster_id) { - last_inspected_ehds.iter().max_by_key(|ehd| ehd.2).cloned() - } else { - None - } - } - - pub(crate) fn derive_last_inspected_ehd_key(cluster_id: &ClusterId) -> Vec { - format!("offchain::inspected_ehds::v1::{:?}", cluster_id).into_bytes() - } - - pub(crate) fn store_last_inspected_ehd(cluster_id: &ClusterId, ehd_id: EHDId) { - let key = Self::derive_last_inspected_ehd_key(cluster_id); - - if let Some(mut inspected_ehds) = Self::fetch_last_inspected_ehds(cluster_id) { - inspected_ehds.push(ehd_id); - - let encoded_ehds_ids = - inspected_ehds.into_iter().sorted().collect::>().encode(); - local_storage_set(StorageKind::PERSISTENT, &key, &encoded_ehds_ids); - } else { - log::warn!( - "🗄️ Failed to retrieve last inspected ehds from offchain storage for cluster_id: {:?}", - cluster_id, - ); - } - } - - pub(crate) fn fetch_last_inspected_ehds(cluster_id: &ClusterId) -> Option> { - log::info!("🗄️ Trying to fetch last inspected ehds for cluster_id: {:?}", cluster_id,); - - let key = Self::derive_last_inspected_ehd_key(cluster_id); - - let encoded_last_inspected_ehd: Vec = - match local_storage_get(StorageKind::PERSISTENT, &key) { - Some(encoded_data) => encoded_data, - None => return Some(vec![]), - }; - - match Decode::decode(&mut &encoded_last_inspected_ehd[..]) { - Ok(last_inspected_ehd) => Some(last_inspected_ehd), - Err(err) => { - log::error!("🗄️ Error occured while decoding last inspected ehds in cluster_id: {:?} {:?}", cluster_id, err); - None - }, - } - } - - /// Fetch current era across all DAC nodes to validate. - /// - /// Parameters: - /// - `cluster_id`: cluster id of a cluster - /// - `g_collectors`: List of G-Collectors nodes - pub(crate) fn get_ehd_era_for_inspection( - cluster_id: &ClusterId, - g_collectors: &[(NodePubKey, StorageNodeParams)], - ) -> Result, OCWError> { - let _this_validator = Self::fetch_verification_account_id()?; - - let last_validated_ehd_by_this_validator = Self::get_last_inspected_ehd(cluster_id); - - let last_validated_era_by_this_validator: EhdEra = - if let Some(ehd) = last_validated_ehd_by_this_validator { - ehd.2 - } else { - Default::default() - }; - - let last_paid_era_for_cluster = T::ClusterValidator::get_last_paid_era(cluster_id) - .map_err(|_| OCWError::PaidEraRetrievalError { cluster_id: *cluster_id })?; - - log::info!( - "👁️‍🗨️ The last era inspected by this specific validator for cluster_id: {:?} is {:?}. The last paid era for the cluster is {:?}", - cluster_id, - last_validated_era_by_this_validator, - last_paid_era_for_cluster - ); - - // we want to fetch processed eras from all available validators - let available_processed_ehd_eras = - Self::fetch_processed_ehd_eras_from_collector(cluster_id, g_collectors)?; - - // we want to let the current validator to validate available processed/completed eras - // that are greater than the last validated era in the cluster - let processed_ehd_eras_to_inspect: Vec = - available_processed_ehd_eras - .iter() - .flat_map(|eras| { - eras.iter() - .filter(|&ids| { - ids.id > last_validated_era_by_this_validator && - ids.id > last_paid_era_for_cluster - }) - .cloned() - }) - .sorted() - .collect::>(); - - // We want to process only eras reported by quorum of validators - let mut processed_ehd_eras_with_quorum: Vec = vec![]; - - // let quorum = T::AggregatorsQuorum::get(); - // let threshold = quorum * collectors_nodes.len(); - - // At the moment we have only one G-collector - let threshold = 1; - for (era_key, candidates) in - &processed_ehd_eras_to_inspect.into_iter().chunk_by(|elt| elt.clone()) - { - let count = candidates.count(); - if count >= threshold { - processed_ehd_eras_with_quorum.push(era_key); - } else { - log::warn!( - "⚠️ Era {:?} in cluster_id: {:?} has been reported with unmet quorum. Desired: {:?} Actual: {:?}", - era_key, - cluster_id, - threshold, - count - ); - } - } - - let ehd_era_to_inspect = - processed_ehd_eras_with_quorum.iter().cloned().min_by_key(|n| n.id); - - log::info!( - "👁️‍🗨️ Era {:?} has been selected for inspection in cluster_id: {:?}", - ehd_era_to_inspect, - cluster_id, - ); - - Ok(ehd_era_to_inspect) - } - - /// Fetch collectors nodes of a cluster. - /// Parameters: - /// - `cluster_id`: Cluster id of a cluster. - fn get_collectors_nodes( - cluster_id: &ClusterId, - ) -> Result, Error> { - let mut collectors = Vec::new(); - - let nodes = T::ClusterManager::get_nodes(cluster_id) - .map_err(|_| Error::::NodeRetrievalError)?; - - for node_pub_key in nodes { - if let Ok(NodeParams::StorageParams(storage_params)) = - T::NodeManager::get_node_params(&node_pub_key) - { - collectors.push((node_pub_key, storage_params)); - } - } - - Ok(collectors) - } - - /// Fetch grouping collectors nodes of a cluster. - /// Parameters: - /// - `cluster_id`: Cluster id of a cluster. - fn get_g_collectors_nodes( - cluster_id: &ClusterId, - ) -> Result, Error> { - let mut g_collectors = Vec::new(); - - let collectors = Self::get_collectors_nodes(cluster_id)?; - for (node_key, node_params) in collectors { - if Self::check_grouping_collector(&node_params) - .map_err(|_| Error::::NodeRetrievalError)? - { - g_collectors.push((node_key, node_params)) - } - } - - Ok(g_collectors) - } - - /// Fetch processed payment era for across all nodes. - /// - /// Parameters: - /// - `cluster_id`: Cluster Id - /// - `g_collector_key`: G-collector node key to fetch the payment eras from - /// - `node_params`: DAC node parameters - fn fetch_processed_ehd_eras_from_collector( - cluster_id: &ClusterId, - g_collectors: &[(NodePubKey, StorageNodeParams)], - ) -> Result>, OCWError> { - let mut processed_eras_by_nodes: Vec> = Vec::new(); - - for (collector_key, node_params) in g_collectors { - let processed_payment_eras = Self::fetch_processed_ehd_eras(node_params); - if processed_payment_eras.is_err() { - log::warn!( - "Aggregator from cluster {:?} is unavailable while fetching processed eras. Key: {:?} Host: {:?}", - cluster_id, - collector_key, - String::from_utf8(node_params.host.clone()) - ); - // Skip unavailable aggregators and continue with available ones - continue; - } else { - let eras = - processed_payment_eras.map_err(|_| OCWError::FailedToFetchPaymentEra)?; - if !eras.is_empty() { - processed_eras_by_nodes.push(eras.into_iter().collect::>()); - } - } - } - - Ok(processed_eras_by_nodes) - } - - fn fetch_processed_ehd_era_from_collector( - cluster_id: &ClusterId, - era: EhdEra, - g_collector: &(NodePubKey, StorageNodeParams), - ) -> Result { - let ehd_eras = Self::fetch_processed_ehd_eras_from_collector( - cluster_id, - vec![g_collector.clone()].as_slice(), - )?; - - let era = ehd_eras - .iter() - .flat_map(|eras| eras.iter()) - .find(|ehd| ehd.id == era) - .ok_or(OCWError::FailedToFetchPaymentEra)?; - - Ok(era.clone()) - } - /// Verify whether leaf is part of tree /// /// Parameters: @@ -3315,6 +2783,7 @@ pub mod pallet { pub enum AggregateKey { NodeAggregateKey(String), BucketSubAggregateKey(BucketId, String), + BucketAggregateKey(BucketId), } pub(crate) trait Hashable { @@ -3386,6 +2855,32 @@ pub mod pallet { self.number_of_gets.saturating_add(self.number_of_puts) } } + + impl Hashable for aggregator_client::json::BucketAggregateResponse { + fn hash(&self) -> DeltaUsageHash { + let mut data = self.bucket_id.encode(); + data.extend_from_slice(&self.stored_bytes.encode()); + data.extend_from_slice(&self.transferred_bytes.encode()); + data.extend_from_slice(&self.number_of_puts.encode()); + data.extend_from_slice(&self.number_of_gets.encode()); + T::Hasher::hash(&data) + } + } + + impl Aggregate for aggregator_client::json::BucketAggregateResponse { + fn get_key(&self) -> AggregateKey { + AggregateKey::BucketAggregateKey(self.bucket_id) + } + + fn get_number_of_leaves(&self) -> u64 { + self.number_of_gets.saturating_add(self.number_of_puts) + } + + fn get_aggregator(&self) -> AggregatorInfo { + unimplemented!() + } + } + pub trait NodeAggregateLeaf: Clone + Ord + PartialEq + Eq + Serialize + for<'de> Deserialize<'de> { @@ -3421,168 +2916,6 @@ pub mod pallet { /* ######## DAC v5 DDC endpoints ######## */ impl Pallet { - /// Fetch processed EHD eras. - /// - /// Parameters: - /// - `node_params`: DAC node parameters - #[allow(dead_code)] - pub(crate) fn fetch_processed_ehd_eras( - node_params: &StorageNodeParams, - ) -> Result, http::Error> { - let host = str::from_utf8(&node_params.host).map_err(|_| http::Error::Unknown)?; - let base_url = format!("http://{}:{}", host, node_params.http_port); - let client = aggregator_client::AggregatorClient::new( - &base_url, - Duration::from_millis(RESPONSE_TIMEOUT), - MAX_RETRIES_COUNT, - T::VERIFY_AGGREGATOR_RESPONSE_SIGNATURE, - ); - - let response = client.payment_eras()?; - - Ok(response.into_iter().filter(|e| e.status == "PROCESSED").collect::>()) - } - - /// Traverse EHD record. - /// - /// Parameters: - /// - `cluster_id`: cluster id of a cluster - /// - `ehd_id`: EHDId is a concatenated representation of: - /// 1) A 32-byte node public key in hex - /// 2) Starting TCAA id - /// 3) Ending TCAA id - /// - `tree_node_id` - merkle tree node identifier - /// - `tree_levels_count` - merkle tree levels to request - pub(crate) fn fetch_traversed_era_historical_document( - cluster_id: &ClusterId, - ehd_id: EHDId, - tree_node_id: u32, - tree_levels_count: u32, - ) -> Result, OCWError> { - let collectors = Self::get_collectors_nodes(cluster_id).map_err(|_| { - log::error!("❌ Error retrieving collectors for cluster {:?}", cluster_id); - OCWError::FailedToFetchCollectors { cluster_id: *cluster_id } - })?; - - for (collector_key, collector_params) in collectors { - if collector_key != ehd_id.1 { - continue; - }; - - if let Ok(host) = str::from_utf8(&collector_params.host) { - let base_url = format!("http://{}:{}", host, collector_params.http_port); - let client = aggregator_client::AggregatorClient::new( - &base_url, - Duration::from_millis(RESPONSE_TIMEOUT), - MAX_RETRIES_COUNT, - false, // no response signature verification for now - ); - - if let Ok(traversed_ehd) = client.traverse_era_historical_document( - ehd_id.clone(), - tree_node_id, - tree_levels_count, - ) { - // proceed with the first available EHD record for the prototype - return Ok(traversed_ehd); - } else { - log::warn!( - "⚠️ Collector from cluster {:?} is unavailable while fetching EHD record or responded with unexpected body. Key: {:?} Host: {:?}", - cluster_id, - collector_key, - String::from_utf8(collector_params.host) - ); - } - } - } - - Err(OCWError::FailedToFetchTraversedEHD) - } - - /// Traverse PHD record. - /// - /// Parameters: - /// - `cluster_id`: cluster id of a cluster - /// - `phd_id`: PHDId is a concatenated representation of: - /// 1) A 32-byte node public key in hex - /// 2) Starting TCAA id - /// 3) Ending TCAA id - /// - `tree_node_id` - merkle tree node identifier - /// - `tree_levels_count` - merkle tree levels to request - pub(crate) fn fetch_traversed_partial_historical_document( - cluster_id: &ClusterId, - phd_id: PHDId, - tree_node_id: u32, - tree_levels_count: u32, - ) -> Result, OCWError> { - let collectors = Self::get_collectors_nodes(cluster_id).map_err(|_| { - log::error!("❌ Error retrieving collectors for cluster {:?}", cluster_id); - OCWError::FailedToFetchCollectors { cluster_id: *cluster_id } - })?; - - for (collector_key, collector_params) in collectors { - if collector_key != phd_id.0 { - continue; - }; - - if let Ok(host) = str::from_utf8(&collector_params.host) { - let base_url = format!("http://{}:{}", host, collector_params.http_port); - let client = aggregator_client::AggregatorClient::new( - &base_url, - Duration::from_millis(RESPONSE_TIMEOUT), - MAX_RETRIES_COUNT, - false, // no response signature verification for now - ); - - if let Ok(traversed_phd) = client.traverse_partial_historical_document( - phd_id.clone(), - tree_node_id, - tree_levels_count, - ) { - // proceed with the first available EHD record for the prototype - return Ok(traversed_phd); - } else { - log::warn!( - "⚠️ Collector from cluster {:?} is unavailable while fetching PHD record or responded with unexpected body. Key: {:?} Host: {:?}", - cluster_id, - collector_key, - String::from_utf8(collector_params.host) - ); - } - } - } - - Err(OCWError::FailedToFetchTraversedPHD) - } - - fn fetch_inspection_receipts( - cluster_id: &ClusterId, - ehd_id: EHDId, - ) -> Result, OCWError> { - // todo(yahortsaryk): infer the node deterministically - let g_collector = Self::get_g_collectors_nodes(cluster_id) - .map_err(|_| OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })? - .first() - .cloned() - .ok_or(OCWError::FailedToFetchGCollectors { cluster_id: *cluster_id })?; - - if let Ok(host) = str::from_utf8(&g_collector.1.host) { - let base_url = format!("http://{}:{}", host, g_collector.1.http_port); - let client = aggregator_client::AggregatorClient::new( - &base_url, - Duration::from_millis(RESPONSE_TIMEOUT), - MAX_RETRIES_COUNT, - false, // no response signature verification for now - ); - - if let Ok(res) = client.fetch_grouped_inspection_receipts(ehd_id) { - return Ok(res); - } - } - - Err(OCWError::FailedToFetchInspectionReceipt) - } - fn calculate_customers_usage_cutoff( cluster_id: &ClusterId, receipts_by_inspector: &BTreeMap< @@ -3663,6 +2996,7 @@ pub mod pallet { Ok(customers_usage_cutoff) } + #[allow(clippy::map_entry)] fn calculate_providers_usage_cutoff( cluster_id: &ClusterId, receipts_by_inspector: &BTreeMap< @@ -3696,7 +3030,6 @@ pub mod pallet { node_key.clone(), )?; - #[allow(clippy::map_entry)] if !nodes_usage_cutoff.contains_key(&(*tcaa_id, node_key.clone())) { nodes_usage_cutoff.insert((*tcaa_id, node_key.clone()), tcaa_usage); if !nodes_to_providers.contains_key(&node_key) { @@ -3732,134 +3065,60 @@ pub mod pallet { Ok(providers_usage_cutoff) } + } - /// Send Inspection Receipt. - /// - /// Parameters: - /// - `cluster_id`: cluster id of a cluster - /// - `g_collector`: grouping collector node to save the receipt - /// - `receipt`: inspection receipt - pub(crate) fn send_inspection_receipt( - cluster_id: &ClusterId, - g_collector: &(NodePubKey, StorageNodeParams), - receipt: aggregator_client::json::InspectionReceipt, - ) -> Result<(), OCWError> { - if let Ok(host) = str::from_utf8(&g_collector.1.host) { - let base_url = format!("http://{}:{}", host, g_collector.1.http_port); - let client = aggregator_client::AggregatorClient::new( - &base_url, - Duration::from_millis(RESPONSE_TIMEOUT), - MAX_RETRIES_COUNT, - false, // no response signature verification for now - ); - - if client.send_inspection_receipt(receipt.clone()).is_ok() { - // proceed with the first available EHD record for the prototype - return Ok(()); - } else { - log::warn!( - "⚠️ Collector from cluster {:?} is unavailable while fetching EHD record or responded with unexpected body. Key: {:?} Host: {:?}", - cluster_id, - g_collector.0, - String::from_utf8(g_collector.1.host.clone()) - ); - } - } - - Err(OCWError::FailedToSaveInspectionReceipt) - } - - pub(crate) fn fetch_node_challenge_response( - cluster_id: &ClusterId, - tcaa_id: TcaEra, - collector_key: NodePubKey, - node_key: NodePubKey, - tree_node_ids: Vec, - ) -> Result { - let collectors = Self::get_collectors_nodes(cluster_id) - .map_err(|_| OCWError::FailedToFetchCollectors { cluster_id: *cluster_id })?; - - for (key, collector_params) in collectors { - if key != collector_key { - continue; - }; + /* ######## Off-chain storage functions ######## */ + pub(crate) fn derive_last_inspected_ehd_key(cluster_id: &ClusterId) -> Vec { + format!("offchain::inspected_ehds::v1::{:?}", cluster_id).into_bytes() + } - if let Ok(host) = str::from_utf8(&collector_params.host) { - let base_url = format!("http://{}:{}", host, collector_params.http_port); - let client = aggregator_client::AggregatorClient::new( - &base_url, - Duration::from_millis(RESPONSE_TIMEOUT), - MAX_RETRIES_COUNT, - false, // no response signature verification for now - ); + pub(crate) fn store_last_inspected_ehd(cluster_id: &ClusterId, ehd_id: EHDId) { + let key = derive_last_inspected_ehd_key(cluster_id); - if let Ok(node_challenge_res) = client.challenge_node_aggregate( - tcaa_id, - Into::::into(node_key.clone()).as_str(), - tree_node_ids.clone(), - ) { - return Ok(node_challenge_res); - } else { - log::warn!( - "Collector from cluster {:?} is unavailable while challenging node aggregate or responded with unexpected body. Key: {:?} Host: {:?}", - cluster_id, - collector_key, - String::from_utf8(collector_params.host) - ); - } - } - } + if let Some(mut inspected_ehds) = fetch_last_inspected_ehds(cluster_id) { + inspected_ehds.push(ehd_id); - Err(OCWError::FailedToFetchNodeChallenge) + let encoded_ehds_ids = + inspected_ehds.into_iter().sorted().collect::>().encode(); + local_storage_set(StorageKind::PERSISTENT, &key, &encoded_ehds_ids); + } else { + log::warn!( + "🗄️ Failed to retrieve last inspected ehds from offchain storage for cluster_id: {:?}", + cluster_id, + ); } + } - pub(crate) fn fetch_bucket_challenge_response( - cluster_id: &ClusterId, - tcaa_id: TcaEra, - collector_key: NodePubKey, - node_key: NodePubKey, - bucket_id: BucketId, - tree_node_ids: Vec, - ) -> Result { - let collectors = Self::get_collectors_nodes(cluster_id) - .map_err(|_| OCWError::FailedToFetchCollectors { cluster_id: *cluster_id })?; - - for (key, collector_params) in collectors { - if key != collector_key { - continue; - }; + pub(crate) fn fetch_last_inspected_ehds(cluster_id: &ClusterId) -> Option> { + log::info!("🗄️ Trying to fetch last inspected ehds for cluster_id: {:?}", cluster_id,); - if let Ok(host) = str::from_utf8(&collector_params.host) { - let base_url = format!("http://{}:{}", host, collector_params.http_port); - let client = aggregator_client::AggregatorClient::new( - &base_url, - Duration::from_millis(RESPONSE_TIMEOUT), - MAX_RETRIES_COUNT, - false, // no response signature verification for now - ); + let key = derive_last_inspected_ehd_key(cluster_id); - if let Ok(node_challenge_res) = client.challenge_bucket_sub_aggregate( - tcaa_id, - bucket_id, - Into::::into(node_key.clone()).as_str(), - tree_node_ids.clone(), - ) { - return Ok(node_challenge_res); - } else { - log::warn!( - "Collector from cluster {:?} is unavailable while challenging bucket sub-aggregate or responded with unexpected body. Key: {:?} Host: {:?}", - cluster_id, - collector_key, - String::from_utf8(collector_params.host) - ); - } - } - } + let encoded_last_inspected_ehd: Vec = + match local_storage_get(StorageKind::PERSISTENT, &key) { + Some(encoded_data) => encoded_data, + None => return Some(vec![]), + }; - Err(OCWError::FailedToFetchBucketChallenge) + match Decode::decode(&mut &encoded_last_inspected_ehd[..]) { + Ok(last_inspected_ehd) => Some(last_inspected_ehd), + Err(err) => { + log::error!( + "🗄️ Error occured while decoding last inspected ehds in cluster_id: {:?} {:?}", + cluster_id, + err + ); + None + }, } } + #[allow(clippy::extra_unused_type_parameters)] + pub(crate) fn get_last_paid_era_hash(_cluster_id: &ClusterId) -> u64 { + // todo(yahortsaryk): fetch last processed era hash + Default::default() + } + /* ######## DAC v4 functions ######## */ impl Pallet { #[allow(clippy::type_complexity)] @@ -3878,7 +3137,7 @@ pub mod pallet { > { let batch_size = T::MAX_PAYOUT_BATCH_SIZE; - let dac_nodes = Self::get_collectors_nodes(cluster_id).map_err(|_| { + let dac_nodes = get_collectors_nodes(cluster_id).map_err(|_: Error| { log::error!("❌ Error retrieving dac nodes to validate cluster {:?}", cluster_id); vec![OCWError::FailedToFetchCollectors { cluster_id: *cluster_id }] })?; @@ -4735,6 +3994,10 @@ pub mod pallet { "{}://{}:{}/activity/buckets/{}/challenge?eraId={}&nodeId={}&merkleTreeNodeId={}", scheme, host, node_params.http_port, bucket_id, era_id, node_id, ids ), + AggregateKey::BucketAggregateKey(_) => { + log::error!("Challenging of Bucket Aggregate is not supported"); + unimplemented!() + }, }; let request = http::Request::get(&url); @@ -4760,9 +4023,10 @@ pub mod pallet { let nonce_key = match aggregate_key { AggregateKey::NodeAggregateKey(node_id) => node_id, AggregateKey::BucketSubAggregateKey(.., node_id) => node_id, + AggregateKey::BucketAggregateKey(bucket_id) => format!("bucket-{}", bucket_id), }; - let nonce = Self::store_and_fetch_nonce(nonce_key); + let nonce = store_and_fetch_nonce(nonce_key); let mut small_rng = SmallRng::seed_from_u64(nonce); let total_levels = number_of_leaves.ilog2() + 1; @@ -4853,6 +4117,10 @@ pub mod pallet { .into_iter() .map(|p| BucketSubAggregateLeaf::leaf_hash::(&p)) .collect(), + AggregateKey::BucketAggregateKey(_) => { + log::error!("Challenging of Bucket Aggregate is not supported"); + unimplemented!() + }, }; let leaf_record_hashes_string: Vec = @@ -4896,14 +4164,14 @@ pub mod pallet { Ok(resulting_hash) } - pub(crate) fn _v4_derive_usage_key(cluster_id: &ClusterId, era_id: TcaEra) -> Vec { + pub(crate) fn _v4_derive_usage_key(cluster_id: &ClusterId, era_id: EhdEra) -> Vec { format!("offchain::activities::{:?}::{:?}", cluster_id, era_id).into_bytes() } #[allow(clippy::too_many_arguments)] pub(crate) fn _v4_store_verified_usage( cluster_id: &ClusterId, - era_id: TcaEra, + era_id: EhdEra, buckets_deltas: &[A], buckets_deltas_root: DeltaUsageHash, buckets_deltas_batch_roots: &[DeltaUsageHash], @@ -4961,6 +4229,10 @@ pub mod pallet { ), AggregateKey::NodeAggregateKey(node_id) => client.traverse_node_aggregate(era_id, &node_id, merkle_tree_node_id, levels), + AggregateKey::BucketAggregateKey(_) => { + log::error!("Traversing of Bucket Aggregate is not supported"); + unimplemented!() + }, }?; Ok(response) @@ -4992,6 +4264,10 @@ pub mod pallet { ), AggregateKey::NodeAggregateKey(node_id) => client.challenge_node_aggregate(era_id, &node_id, merkle_tree_node_id), + AggregateKey::BucketAggregateKey(_) => { + log::error!("Challenging of Bucket Aggregate is not supported"); + unimplemented!() + }, } } @@ -5037,26 +4313,6 @@ pub mod pallet { Ok(buckets_aggregates) } - - /// Fetch customer usage. - /// - /// Parameters: - /// - `node_params`: Requesting DDC node - pub(crate) fn check_grouping_collector( - node_params: &StorageNodeParams, - ) -> Result { - let host = str::from_utf8(&node_params.host).map_err(|_| http::Error::Unknown)?; - let base_url = format!("http://{}:{}", host, node_params.http_port); - let client = aggregator_client::AggregatorClient::new( - &base_url, - Duration::from_millis(RESPONSE_TIMEOUT), - MAX_RETRIES_COUNT, - T::VERIFY_AGGREGATOR_RESPONSE_SIGNATURE, - ); - - let response = client.check_grouping_collector()?; - Ok(response.is_g_collector) - } } impl sp_application_crypto::BoundToRuntimeAppPublic for Pallet { diff --git a/pallets/ddc-verification/src/mock.rs b/pallets/ddc-verification/src/mock.rs index 6848d2153..bf56542fd 100644 --- a/pallets/ddc-verification/src/mock.rs +++ b/pallets/ddc-verification/src/mock.rs @@ -3,8 +3,8 @@ use ddc_primitives::{ traits::{ClusterManager, ClusterProtocol, ClusterQuery, StorageUsageProvider}, BucketId, BucketStorageUsage, ClusterBondingParams, ClusterNodeKind, ClusterNodeState, ClusterNodeStatus, ClusterNodesStats, ClusterProtocolParams, ClusterStatus, Fingerprint, - NodeStorageUsage, NodeType, NodeUsage, PayoutError, PayoutFingerprintParams, PayoutState, - StorageNodeMode, StorageNodePubKey, MAX_PAYOUT_BATCH_COUNT, MAX_PAYOUT_BATCH_SIZE, + NodeParams, NodeStorageUsage, NodeType, NodeUsage, PayoutError, PayoutFingerprintParams, + PayoutState, StorageNodeMode, StorageNodePubKey, MAX_PAYOUT_BATCH_COUNT, MAX_PAYOUT_BATCH_SIZE, }; #[cfg(feature = "runtime-benchmarks")] use ddc_primitives::{ @@ -536,11 +536,11 @@ pub fn new_test_ext() -> sp_io::TestExternalities { pub struct MockClusterValidator; impl ClusterValidator for MockClusterValidator { - fn set_last_paid_era(_cluster_id: &ClusterId, _era_id: TcaEra) -> Result<(), DispatchError> { + fn set_last_paid_era(_cluster_id: &ClusterId, _era_id: EhdEra) -> Result<(), DispatchError> { unimplemented!() } - fn get_last_paid_era(_cluster_id: &ClusterId) -> Result { + fn get_last_paid_era(_cluster_id: &ClusterId) -> Result { Ok(Default::default()) } } @@ -559,7 +559,7 @@ impl PayoutProcessor for MockPayoutProcessor { fn begin_payout( _cluster_id: ClusterId, - _era_id: TcaEra, + _era_id: EhdEra, _fingerprint: Fingerprint, ) -> DispatchResult { unimplemented!() @@ -567,7 +567,7 @@ impl PayoutProcessor for MockPayoutProcessor { fn begin_charging_customers( _cluster_id: ClusterId, - _era_id: TcaEra, + _era_id: EhdEra, _max_batch_index: BatchIndex, ) -> DispatchResult { unimplemented!() @@ -575,7 +575,7 @@ impl PayoutProcessor for MockPayoutProcessor { fn send_charging_customers_batch( _cluster_id: ClusterId, - _era_id: TcaEra, + _era_id: EhdEra, _batch_index: BatchIndex, _payers: &[(T::AccountId, u128)], _batch_proof: MMRProof, @@ -583,13 +583,13 @@ impl PayoutProcessor for MockPayoutProcessor { unimplemented!() } - fn end_charging_customers(_cluster_id: ClusterId, _era_id: TcaEra) -> DispatchResult { + fn end_charging_customers(_cluster_id: ClusterId, _era_id: EhdEra) -> DispatchResult { unimplemented!() } fn begin_rewarding_providers( _cluster_id: ClusterId, - _era_id: TcaEra, + _era_id: EhdEra, _max_batch_index: BatchIndex, ) -> DispatchResult { unimplemented!() @@ -597,7 +597,7 @@ impl PayoutProcessor for MockPayoutProcessor { fn send_rewarding_providers_batch( _cluster_id: ClusterId, - _era_id: TcaEra, + _era_id: EhdEra, _batch_index: BatchIndex, _payees: &[(T::AccountId, u128)], _batch_proof: MMRProof, @@ -605,37 +605,37 @@ impl PayoutProcessor for MockPayoutProcessor { unimplemented!() } - fn end_rewarding_providers(_cluster_id: ClusterId, _era_id: TcaEra) -> DispatchResult { + fn end_rewarding_providers(_cluster_id: ClusterId, _era_id: EhdEra) -> DispatchResult { unimplemented!() } - fn end_payout(_cluster_id: ClusterId, _era_id: TcaEra) -> DispatchResult { + fn end_payout(_cluster_id: ClusterId, _era_id: EhdEra) -> DispatchResult { unimplemented!() } fn get_next_customers_batch( _cluster_id: &ClusterId, - _era_id: TcaEra, + _era_id: EhdEra, ) -> Result, PayoutError> { Ok(None) } fn get_next_providers_batch( _cluster_id: &ClusterId, - _era_id: TcaEra, + _era_id: EhdEra, ) -> Result, PayoutError> { Ok(None) } - fn is_customers_charging_finished(_cluster_id: &ClusterId, _era_id: TcaEra) -> bool { + fn is_customers_charging_finished(_cluster_id: &ClusterId, _era_id: EhdEra) -> bool { true } - fn is_providers_rewarding_finished(_cluster_id: &ClusterId, _era_id: TcaEra) -> bool { + fn is_providers_rewarding_finished(_cluster_id: &ClusterId, _era_id: EhdEra) -> bool { true } - fn get_payout_state(_cluster_id: &ClusterId, _era_id: TcaEra) -> PayoutState { + fn get_payout_state(_cluster_id: &ClusterId, _era_id: EhdEra) -> PayoutState { PayoutState::NotInitialized } diff --git a/pallets/ddc-verification/src/tests.rs b/pallets/ddc-verification/src/tests.rs index 80f00b2d3..26d91fe3b 100644 --- a/pallets/ddc-verification/src/tests.rs +++ b/pallets/ddc-verification/src/tests.rs @@ -3,6 +3,7 @@ use ddc_primitives::{ StorageNodePubKey, DAC_VERIFICATION_KEY_TYPE, }; use frame_support::assert_noop; +use insp_ddc_api::{BUCKETS_AGGREGATES_FETCH_BATCH_SIZE, NODES_AGGREGATES_FETCH_BATCH_SIZE}; use prost::Message; use sp_core::{ offchain::{ @@ -139,10 +140,7 @@ fn fetch_node_aggregates_works() { method: "GET".to_string(), uri: format!( "http://{}:{}/activity/nodes?eraId={}&limit={}", - host, - port, - era_id, - pallet::NODES_AGGREGATES_FETCH_BATCH_SIZE + host, port, era_id, NODES_AGGREGATES_FETCH_BATCH_SIZE ), response: Some(nodes_activity_json.as_bytes().to_vec()), sent: true, @@ -233,10 +231,7 @@ fn fetch_bucket_aggregates_works() { method: "GET".to_string(), uri: format!( "http://{}:{}/activity/buckets?eraId={}&limit={}", - host, - port, - era_id, - pallet::BUCKETS_AGGREGATES_FETCH_BATCH_SIZE + host, port, era_id, BUCKETS_AGGREGATES_FETCH_BATCH_SIZE ), response: Some(customers_activity_json.as_bytes().to_vec()), sent: true, @@ -1615,7 +1610,7 @@ fn bucket_sub_aggregates_are_fetched_and_grouped() { let pending_request1 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/buckets?eraId=476817&limit={}", host1, port, pallet::BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/buckets?eraId=476817&limit={}", host1, port, BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"bucket_id":90235,"stored_bytes":0,"transferred_bytes":38,"number_of_puts":0,"number_of_gets":1,"sub_aggregates":[{"NodeID":"0xb6186f80dce7190294665ab53860de2841383bb202c562bb8b81a624351fa318","stored_bytes":578,"transferred_bytes":578,"number_of_puts":2,"number_of_gets":0}]},{"bucket_id":90235,"stored_bytes":0,"transferred_bytes":38,"number_of_puts":0,"number_of_gets":1,"sub_aggregates":[{"NodeID":"0xb6186f80dce7190294665ab53860de2841383bb202c562bb8b81a624351fa319","stored_bytes":0,"transferred_bytes":505,"number_of_puts":0,"number_of_gets":1}]}]"#.to_vec()), sent: true, ..Default::default() @@ -1623,7 +1618,7 @@ fn bucket_sub_aggregates_are_fetched_and_grouped() { let pending_request2 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/buckets?eraId=476817&limit={}", host2, port, pallet::BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/buckets?eraId=476817&limit={}", host2, port, BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"bucket_id":90235,"stored_bytes":0,"transferred_bytes":38,"number_of_puts":0,"number_of_gets":1,"sub_aggregates":[{"NodeID":"0xb6186f80dce7190294665ab53860de2841383bb202c562bb8b81a624351fa318","stored_bytes":578,"transferred_bytes":578,"number_of_puts":2,"number_of_gets":0}]},{"bucket_id":90235,"stored_bytes":0,"transferred_bytes":38,"number_of_puts":0,"number_of_gets":1,"sub_aggregates":[{"NodeID":"0xb6186f80dce7190294665ab53860de2841383bb202c562bb8b81a624351fa319","stored_bytes":0,"transferred_bytes":506,"number_of_puts":0,"number_of_gets":1}]}]"#.to_vec()), sent: true, ..Default::default() @@ -1631,7 +1626,7 @@ fn bucket_sub_aggregates_are_fetched_and_grouped() { let pending_request3 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/buckets?eraId=476817&limit={}", host3, port, pallet::BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/buckets?eraId=476817&limit={}", host3, port, BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"bucket_id":90235,"stored_bytes":0,"transferred_bytes":38,"number_of_puts":0,"number_of_gets":1,"sub_aggregates":[{"NodeID":"0xb6186f80dce7190294665ab53860de2841383bb202c562bb8b81a624351fa318","stored_bytes":578,"transferred_bytes":578,"number_of_puts":2,"number_of_gets":0}]},{"bucket_id":90235,"stored_bytes":0,"transferred_bytes":38,"number_of_puts":0,"number_of_gets":1,"sub_aggregates":[{"NodeID":"0xb6186f80dce7190294665ab53860de2841383bb202c562bb8b81a624351fa319","stored_bytes":0,"transferred_bytes":505,"number_of_puts":0,"number_of_gets":1}]}]"#.to_vec()), sent: true, ..Default::default() @@ -1639,7 +1634,7 @@ fn bucket_sub_aggregates_are_fetched_and_grouped() { let pending_request4 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/buckets?eraId=476817&limit={}", host4, port, pallet::BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/buckets?eraId=476817&limit={}", host4, port, BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"bucket_id":90235,"stored_bytes":0,"transferred_bytes":38,"number_of_puts":0,"number_of_gets":1,"sub_aggregates":[]}]"#.to_vec()), sent: true, ..Default::default() @@ -1647,7 +1642,7 @@ fn bucket_sub_aggregates_are_fetched_and_grouped() { let pending_request5 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/buckets?eraId=476817&limit={}", host5, port, pallet::BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/buckets?eraId=476817&limit={}", host5, port, BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"bucket_id":90235,"stored_bytes":0,"transferred_bytes":38,"number_of_puts":0,"number_of_gets":1,"sub_aggregates":[{"NodeID":"0xb6186f80dce7190294665ab53860de2841383bb202c562bb8b81a624351fa320","stored_bytes":578,"transferred_bytes":578,"number_of_puts":2,"number_of_gets":0}]}]"#.to_vec()), sent: true, ..Default::default() @@ -1880,7 +1875,7 @@ fn node_aggregates_are_fetched_and_grouped() { let pending_request1 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/nodes?eraId=476817&limit={}", host1, port, pallet::NODES_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/nodes?eraId=476817&limit={}", host1, port, NODES_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"node_id": "0x48594f1fd4f05135914c42b03e63b61f6a3e4c537ccee3dbac555ef6df371b7e","stored_bytes": 675613289,"transferred_bytes": 1097091579,"number_of_puts": 889,"number_of_gets": 97},{"node_id": "0x9ef98ad9c3626ba725e78d76cfcfc4b4d07e84f0388465bc7eb992e3e117234a","stored_bytes": 0, "transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]"#.to_vec()), sent: true, ..Default::default() @@ -1888,7 +1883,7 @@ fn node_aggregates_are_fetched_and_grouped() { let pending_request2 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/nodes?eraId=476817&limit={}", host2, port, pallet::NODES_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/nodes?eraId=476817&limit={}", host2, port, NODES_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"node_id": "0x48594f1fd4f05135914c42b03e63b61f6a3e4c537ccee3dbac555ef6df371b7e","stored_bytes": 675613289,"transferred_bytes": 1097091579,"number_of_puts": 889,"number_of_gets": 97},{"node_id": "0x9ef98ad9c3626ba725e78d76cfcfc4b4d07e84f0388465bc7eb992e3e117234a","stored_bytes": 0, "transferred_bytes": 48,"number_of_puts": 0,"number_of_gets": 1}]"#.to_vec()), sent: true, ..Default::default() @@ -1896,7 +1891,7 @@ fn node_aggregates_are_fetched_and_grouped() { let pending_request3 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/nodes?eraId=476817&limit={}", host3, port, pallet::NODES_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/nodes?eraId=476817&limit={}", host3, port, NODES_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"node_id": "0x48594f1fd4f05135914c42b03e63b61f6a3e4c537ccee3dbac555ef6df371b7e","stored_bytes": 675613289,"transferred_bytes": 1097091579,"number_of_puts": 889,"number_of_gets": 97}]"#.to_vec()), sent: true, ..Default::default() @@ -1904,7 +1899,7 @@ fn node_aggregates_are_fetched_and_grouped() { let pending_request4 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/nodes?eraId=476817&limit={}", host4, port, pallet::NODES_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/nodes?eraId=476817&limit={}", host4, port, NODES_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"node_id": "0x9ef98ad9c3626ba725e78d76cfcfc4b4d07e84f0388465bc7eb992e3e117234a","stored_bytes": 0, "transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]"#.to_vec()), sent: true, ..Default::default() @@ -1912,7 +1907,7 @@ fn node_aggregates_are_fetched_and_grouped() { let pending_request5 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/nodes?eraId=476817&limit={}", host5, port, pallet::NODES_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/nodes?eraId=476817&limit={}", host5, port, NODES_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"node_id": "0xfc28d5f5bb10212077a8654f62c4f8f0b5ab985fc322a51f5a3c75943b29194b","stored_bytes": 675613289,"transferred_bytes": 1097091579,"number_of_puts": 889,"number_of_gets": 97}]"#.to_vec()), sent: true, ..Default::default() @@ -2539,7 +2534,7 @@ fn test_single_ocw_pallet_integration() { let node_pending_request1 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/nodes?eraId=5738616&limit={}", host1, port, pallet::NODES_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/nodes?eraId=5738616&limit={}", host1, port, NODES_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"node_id": "0x48594f1fd4f05135914c42b03e63b61f6a3e4c537ccee3dbac555ef6df371b7e","stored_bytes": 675613289,"transferred_bytes": 1097091579,"number_of_puts": 889,"number_of_gets": 97},{"node_id": "0x9ef98ad9c3626ba725e78d76cfcfc4b4d07e84f0388465bc7eb992e3e117234a","stored_bytes": 0, "transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]"#.to_vec()), sent: true, ..Default::default() @@ -2547,7 +2542,7 @@ fn test_single_ocw_pallet_integration() { let node_pending_request2 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/nodes?eraId=5738616&limit={}", host2, port, pallet::NODES_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/nodes?eraId=5738616&limit={}", host2, port, NODES_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"node_id": "0x48594f1fd4f05135914c42b03e63b61f6a3e4c537ccee3dbac555ef6df371b7e","stored_bytes": 675613289,"transferred_bytes": 1097091579,"number_of_puts": 889,"number_of_gets": 97},{"node_id": "0x9ef98ad9c3626ba725e78d76cfcfc4b4d07e84f0388465bc7eb992e3e117234a","stored_bytes": 0, "transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]"#.to_vec()), sent: true, ..Default::default() @@ -2555,7 +2550,7 @@ fn test_single_ocw_pallet_integration() { let node_pending_request3 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/nodes?eraId=5738616&limit={}", host3, port, pallet::NODES_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/nodes?eraId=5738616&limit={}", host3, port, NODES_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"node_id": "0x48594f1fd4f05135914c42b03e63b61f6a3e4c537ccee3dbac555ef6df371b7e","stored_bytes": 675613289,"transferred_bytes": 1097091579,"number_of_puts": 889,"number_of_gets": 97},{"node_id": "0x9ef98ad9c3626ba725e78d76cfcfc4b4d07e84f0388465bc7eb992e3e117234a","stored_bytes": 0, "transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]"#.to_vec()), sent: true, ..Default::default() @@ -2563,7 +2558,7 @@ fn test_single_ocw_pallet_integration() { let node_pending_request4 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/nodes?eraId=5738616&limit={}", host4, port, pallet::NODES_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/nodes?eraId=5738616&limit={}", host4, port, NODES_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"node_id": "0x48594f1fd4f05135914c42b03e63b61f6a3e4c537ccee3dbac555ef6df371b7e","stored_bytes": 675613289,"transferred_bytes": 1097091579,"number_of_puts": 889,"number_of_gets": 97},{"node_id": "0x9ef98ad9c3626ba725e78d76cfcfc4b4d07e84f0388465bc7eb992e3e117234a","stored_bytes": 0, "transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]"#.to_vec()), sent: true, ..Default::default() @@ -2571,7 +2566,7 @@ fn test_single_ocw_pallet_integration() { let node_pending_request5 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/nodes?eraId=5738616&limit={}", host5, port, pallet::NODES_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/nodes?eraId=5738616&limit={}", host5, port, NODES_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"node_id": "0x48594f1fd4f05135914c42b03e63b61f6a3e4c537ccee3dbac555ef6df371b7e","stored_bytes": 675613289,"transferred_bytes": 1097091579,"number_of_puts": 889,"number_of_gets": 97},{"node_id": "0x9ef98ad9c3626ba725e78d76cfcfc4b4d07e84f0388465bc7eb992e3e117234a","stored_bytes": 0, "transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]"#.to_vec()), sent: true, ..Default::default() @@ -2579,7 +2574,7 @@ fn test_single_ocw_pallet_integration() { let node_pending_request6 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/nodes?eraId=5738616&limit={}", host6, port, pallet::NODES_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/nodes?eraId=5738616&limit={}", host6, port, NODES_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"node_id": "0x48594f1fd4f05135914c42b03e63b61f6a3e4c537ccee3dbac555ef6df371b7e","stored_bytes": 675613289,"transferred_bytes": 1097091579,"number_of_puts": 889,"number_of_gets": 97},{"node_id": "0x9ef98ad9c3626ba725e78d76cfcfc4b4d07e84f0388465bc7eb992e3e117234a","stored_bytes": 0, "transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]"#.to_vec()), sent: true, ..Default::default() @@ -2587,7 +2582,7 @@ fn test_single_ocw_pallet_integration() { let node_pending_request7 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/nodes?eraId=5738616&limit={}", host7, port, pallet::NODES_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/nodes?eraId=5738616&limit={}", host7, port, NODES_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"node_id": "0x48594f1fd4f05135914c42b03e63b61f6a3e4c537ccee3dbac555ef6df371b7e","stored_bytes": 675613289,"transferred_bytes": 1097091579,"number_of_puts": 889,"number_of_gets": 97},{"node_id": "0x9ef98ad9c3626ba725e78d76cfcfc4b4d07e84f0388465bc7eb992e3e117234a","stored_bytes": 0, "transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]"#.to_vec()), sent: true, ..Default::default() @@ -2595,7 +2590,7 @@ fn test_single_ocw_pallet_integration() { let node_pending_request8 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/nodes?eraId=5738616&limit={}", host8, port, pallet::NODES_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/nodes?eraId=5738616&limit={}", host8, port, NODES_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"node_id": "0x48594f1fd4f05135914c42b03e63b61f6a3e4c537ccee3dbac555ef6df371b7e","stored_bytes": 675613289,"transferred_bytes": 1097091579,"number_of_puts": 889,"number_of_gets": 97},{"node_id": "0x9ef98ad9c3626ba725e78d76cfcfc4b4d07e84f0388465bc7eb992e3e117234a","stored_bytes": 0, "transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]"#.to_vec()), sent: true, ..Default::default() @@ -2603,7 +2598,7 @@ fn test_single_ocw_pallet_integration() { let node_pending_request9 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/nodes?eraId=5738616&limit={}", host9, port, pallet::NODES_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/nodes?eraId=5738616&limit={}", host9, port, NODES_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"node_id": "0x48594f1fd4f05135914c42b03e63b61f6a3e4c537ccee3dbac555ef6df371b7e","stored_bytes": 675613289,"transferred_bytes": 1097091579,"number_of_puts": 889,"number_of_gets": 97},{"node_id": "0x9ef98ad9c3626ba725e78d76cfcfc4b4d07e84f0388465bc7eb992e3e117234a","stored_bytes": 0, "transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]"#.to_vec()), sent: true, ..Default::default() @@ -2611,7 +2606,7 @@ fn test_single_ocw_pallet_integration() { let bucket_pending_request1 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/buckets?eraId=5738616&limit={}", host1, port, pallet::BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/buckets?eraId=5738616&limit={}", host1, port, BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"bucket_id": 90235,"stored_bytes": 0,"transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1,"sub_aggregates": [{"NodeID": "0xbe26b2458fb0c9df4ec26ec5ba083051402b2a3b9d4a7fe6106fe9f8b5efde2c","stored_bytes": 0,"transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]}]"#.to_vec()), sent: true, ..Default::default() @@ -2619,7 +2614,7 @@ fn test_single_ocw_pallet_integration() { let bucket_pending_request2 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/buckets?eraId=5738616&limit={}", host2, port, pallet::BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/buckets?eraId=5738616&limit={}", host2, port, BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"stored_bytes": 0,"transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1,"bucket_id": 90235,"sub_aggregates": [{"NodeID": "0xbe26b2458fb0c9df4ec26ec5ba083051402b2a3b9d4a7fe6106fe9f8b5efde2c","stored_bytes": 0,"transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]}]"#.to_vec()), sent: true, ..Default::default() @@ -2627,7 +2622,7 @@ fn test_single_ocw_pallet_integration() { let bucket_pending_request3 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/buckets?eraId=5738616&limit={}", host3, port, pallet::BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/buckets?eraId=5738616&limit={}", host3, port, BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"stored_bytes": 0,"transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1,"bucket_id": 90235,"sub_aggregates": [{"NodeID": "0xbe26b2458fb0c9df4ec26ec5ba083051402b2a3b9d4a7fe6106fe9f8b5efde2c","stored_bytes": 0,"transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]}]"#.to_vec()), sent: true, ..Default::default() @@ -2635,7 +2630,7 @@ fn test_single_ocw_pallet_integration() { let bucket_pending_request4 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/buckets?eraId=5738616&limit={}", host4, port, pallet::BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/buckets?eraId=5738616&limit={}", host4, port, BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"stored_bytes": 0,"transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1,"bucket_id": 90235,"sub_aggregates": [{"NodeID": "0xbe26b2458fb0c9df4ec26ec5ba083051402b2a3b9d4a7fe6106fe9f8b5efde2c","stored_bytes": 0,"transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]}]"#.to_vec()), sent: true, ..Default::default() @@ -2643,7 +2638,7 @@ fn test_single_ocw_pallet_integration() { let bucket_pending_request5 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/buckets?eraId=5738616&limit={}", host5, port, pallet::BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/buckets?eraId=5738616&limit={}", host5, port, BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"stored_bytes": 0,"transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1,"bucket_id": 90235,"sub_aggregates": [{"NodeID": "0xbe26b2458fb0c9df4ec26ec5ba083051402b2a3b9d4a7fe6106fe9f8b5efde2c","stored_bytes": 0,"transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]}]"#.to_vec()), sent: true, ..Default::default() @@ -2651,7 +2646,7 @@ fn test_single_ocw_pallet_integration() { let bucket_pending_request6 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/buckets?eraId=5738616&limit={}", host6, port, pallet::BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/buckets?eraId=5738616&limit={}", host6, port, BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"stored_bytes": 0,"transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1,"bucket_id": 90235,"sub_aggregates": [{"NodeID": "0xbe26b2458fb0c9df4ec26ec5ba083051402b2a3b9d4a7fe6106fe9f8b5efde2c","stored_bytes": 0,"transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]}]"#.to_vec()), sent: true, ..Default::default() @@ -2659,7 +2654,7 @@ fn test_single_ocw_pallet_integration() { let bucket_pending_request7 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/buckets?eraId=5738616&limit={}", host7, port, pallet::BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/buckets?eraId=5738616&limit={}", host7, port, BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"stored_bytes": 0,"transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1,"bucket_id": 90235,"sub_aggregates": [{"NodeID": "0xbe26b2458fb0c9df4ec26ec5ba083051402b2a3b9d4a7fe6106fe9f8b5efde2c","stored_bytes": 0,"transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]}]"#.to_vec()), sent: true, ..Default::default() @@ -2667,7 +2662,7 @@ fn test_single_ocw_pallet_integration() { let bucket_pending_request8 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/buckets?eraId=5738616&limit={}", host8, port, pallet::BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/buckets?eraId=5738616&limit={}", host8, port, BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"bucket_id": 90235,"stored_bytes": 0,"transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1,"sub_aggregates": [{"NodeID": "0xbe26b2458fb0c9df4ec26ec5ba083051402b2a3b9d4a7fe6106fe9f8b5efde2c","stored_bytes": 0,"transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]}]"#.to_vec()), sent: true, ..Default::default() @@ -2675,7 +2670,7 @@ fn test_single_ocw_pallet_integration() { let bucket_pending_request9 = PendingRequest { method: "GET".to_string(), - uri: format!("http://{}:{}/activity/buckets?eraId=5738616&limit={}", host9, port, pallet::BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), + uri: format!("http://{}:{}/activity/buckets?eraId=5738616&limit={}", host9, port, BUCKETS_AGGREGATES_FETCH_BATCH_SIZE), response: Some(br#"[{"bucket_id": 90235,"stored_bytes": 0,"transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1,"sub_aggregates": [{"NodeID": "0xbe26b2458fb0c9df4ec26ec5ba083051402b2a3b9d4a7fe6106fe9f8b5efde2c","stored_bytes": 0,"transferred_bytes": 38,"number_of_puts": 0,"number_of_gets": 1}]}]"#.to_vec()), sent: true, ..Default::default() diff --git a/primitives/src/lib.rs b/primitives/src/lib.rs index 404d8df0e..2902b8ee5 100644 --- a/primitives/src/lib.rs +++ b/primitives/src/lib.rs @@ -245,9 +245,9 @@ impl TryFrom for EHDId { let g_collector: NodePubKey = g_collector_str.try_into()?; - let payment_era = match TcaEra::from_str(payment_era_str) { + let payment_era = match EhdEra::from_str(payment_era_str) { Ok(era) => era, - Err(_) => return Err("TcaEra must be a valid u32 value"), + Err(_) => return Err("EhdEra must be a valid u32 value"), }; Ok(EHDId(H160(cluster_id), g_collector, payment_era)) @@ -284,9 +284,9 @@ impl TryFrom for PHDId { let collector: NodePubKey = collector_str.try_into()?; - let payment_era = match TcaEra::from_str(payment_era_str) { + let payment_era = match EhdEra::from_str(payment_era_str) { Ok(era) => era, - Err(_) => return Err("TcaEra must be a valid u32 value"), + Err(_) => return Err("EhdEra must be a valid u32 value"), }; Ok(PHDId(collector, payment_era)) diff --git a/primitives/src/traits/cluster.rs b/primitives/src/traits/cluster.rs index eb528ce92..2af63660d 100644 --- a/primitives/src/traits/cluster.rs +++ b/primitives/src/traits/cluster.rs @@ -5,7 +5,7 @@ use sp_std::prelude::*; use crate::{ ClusterBondingParams, ClusterFeesParams, ClusterId, ClusterNodeKind, ClusterNodeState, ClusterNodeStatus, ClusterNodesStats, ClusterParams, ClusterPricingParams, - ClusterProtocolParams, ClusterStatus, NodePubKey, NodeType, TcaEra, + ClusterProtocolParams, ClusterStatus, EhdEra, NodePubKey, NodeType, }; pub trait ClusterQuery { @@ -114,7 +114,7 @@ pub trait ClusterValidator { /// # Events /// /// Emits `ClusterEraPaid` event if the operation is successful. - fn set_last_paid_era(cluster_id: &ClusterId, era_id: TcaEra) -> Result<(), DispatchError>; + fn set_last_paid_era(cluster_id: &ClusterId, era_id: EhdEra) -> Result<(), DispatchError>; /// Retrieves the `last_paid_era` for the given cluster /// update. @@ -127,5 +127,5 @@ pub trait ClusterValidator { /// # Returns /// /// Returns `Ok(TcaEra)` identifier of the last validated era in cluster - fn get_last_paid_era(cluster_id: &ClusterId) -> Result; + fn get_last_paid_era(cluster_id: &ClusterId) -> Result; } diff --git a/runtime/cere-dev/src/lib.rs b/runtime/cere-dev/src/lib.rs index 27f144acc..bc2f92555 100644 --- a/runtime/cere-dev/src/lib.rs +++ b/runtime/cere-dev/src/lib.rs @@ -168,7 +168,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 73002, + spec_version: 73003, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 24, diff --git a/runtime/cere/src/lib.rs b/runtime/cere/src/lib.rs index b5108ccc7..4416715ad 100644 --- a/runtime/cere/src/lib.rs +++ b/runtime/cere/src/lib.rs @@ -161,7 +161,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 73002, + spec_version: 73003, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 24, From 95b2b4e1704947cd8fc3a0759f2527e051fc11b3 Mon Sep 17 00:00:00 2001 From: yahortsaryk Date: Fri, 7 Mar 2025 01:25:48 +0100 Subject: [PATCH 30/31] feat: indexing block number where payout was finalized --- pallets/ddc-payouts/src/lib.rs | 28 ++- pallets/ddc-payouts/src/migrations.rs | 161 ++++++++++++++++++ pallets/ddc-payouts/src/tests.rs | 5 +- pallets/ddc-verification/src/benchmarking.rs | 1 + .../ddc-verification/src/insp_task_manager.rs | 13 +- pallets/ddc-verification/src/lib.rs | 8 +- pallets/ddc-verification/src/mock.rs | 6 +- primitives/src/traits/payout.rs | 7 +- runtime/cere-dev/src/lib.rs | 4 +- runtime/cere/src/lib.rs | 8 +- 10 files changed, 216 insertions(+), 25 deletions(-) diff --git a/pallets/ddc-payouts/src/lib.rs b/pallets/ddc-payouts/src/lib.rs index fbffc5571..56bab6b05 100644 --- a/pallets/ddc-payouts/src/lib.rs +++ b/pallets/ddc-payouts/src/lib.rs @@ -81,7 +81,7 @@ pub mod pallet { /// The current storage version. const STORAGE_VERSION: frame_support::traits::StorageVersion = - frame_support::traits::StorageVersion::new(3); + frame_support::traits::StorageVersion::new(4); #[pallet::pallet] #[pallet::storage_version(STORAGE_VERSION)] @@ -200,6 +200,7 @@ pub mod pallet { PayoutReceiptFinalized { cluster_id: ClusterId, era: EhdEra, + finalized_at: BlockNumberFor, }, ChargeError { cluster_id: ClusterId, @@ -281,6 +282,7 @@ pub mod pallet { pub charging_processed_batches: BoundedBTreeSet, pub rewarding_max_batch_index: BatchIndex, pub rewarding_processed_batches: BoundedBTreeSet, + pub finalized_at: Option>, } impl Default for PayoutReceipt { @@ -296,6 +298,7 @@ pub mod pallet { charging_processed_batches: BoundedBTreeSet::default(), rewarding_max_batch_index: Zero::zero(), rewarding_processed_batches: BoundedBTreeSet::default(), + finalized_at: None, } } } @@ -1096,12 +1099,19 @@ pub mod pallet { Error::::NotExpectedState ); + let finalized_at = >::block_number(); + payout_receipt.charging_processed_batches.clear(); payout_receipt.rewarding_processed_batches.clear(); payout_receipt.state = PayoutState::Finalized; + payout_receipt.finalized_at = Some(finalized_at); PayoutReceipts::::insert(cluster_id, era, payout_receipt); - Self::deposit_event(Event::::PayoutReceiptFinalized { cluster_id, era }); + Self::deposit_event(Event::::PayoutReceiptFinalized { + cluster_id, + era, + finalized_at, + }); Ok(()) } @@ -1172,7 +1182,11 @@ pub mod pallet { Ok(None) } - fn create_payout_receipt(vault: T::AccountId, params: PayoutReceiptParams) { + fn create_payout_receipt( + vault: T::AccountId, + params: PayoutReceiptParams, + finalized_at: Option>, + ) { let mut charging_processed_batches = BoundedBTreeSet::::new(); for batch in params.charging_processed_batches { @@ -1189,6 +1203,13 @@ pub mod pallet { .expect("Rewarding batch to be inserted"); } + if params.state == PayoutState::Finalized { + assert!( + finalized_at.is_some(), + "Finalized payout receipt must keep `finalized_at` block value" + ); + } + let payout_receipt = PayoutReceipt:: { vault, state: params.state, @@ -1200,6 +1221,7 @@ pub mod pallet { charging_processed_batches, rewarding_max_batch_index: params.rewarding_max_batch_index, rewarding_processed_batches, + finalized_at, }; PayoutReceipts::::insert(params.cluster_id, params.era, payout_receipt); diff --git a/pallets/ddc-payouts/src/migrations.rs b/pallets/ddc-payouts/src/migrations.rs index d07e504d8..1adfbb487 100644 --- a/pallets/ddc-payouts/src/migrations.rs +++ b/pallets/ddc-payouts/src/migrations.rs @@ -533,3 +533,164 @@ pub mod v3 { } } } + +pub mod v4 { + use frame_support::pallet_prelude::*; + + use super::*; + + #[derive(Clone, Encode, Decode, RuntimeDebug, TypeInfo, PartialEq)] + #[scale_info(skip_type_params(T))] + pub struct V3PayoutReceipt { + pub state: PayoutState, + pub vault: T::AccountId, + pub fingerprint: Fingerprint, + pub total_collected_charges: u128, + pub total_distributed_rewards: u128, + pub total_settled_fees: u128, + pub charging_max_batch_index: BatchIndex, + pub charging_processed_batches: BoundedBTreeSet, + pub rewarding_max_batch_index: BatchIndex, + pub rewarding_processed_batches: BoundedBTreeSet, + } + + #[derive(Clone, Encode, Decode, RuntimeDebug, TypeInfo, PartialEq)] + #[scale_info(skip_type_params(T))] + pub struct PayoutReceipt { + pub state: PayoutState, + pub vault: T::AccountId, + pub fingerprint: Fingerprint, + pub total_collected_charges: u128, + pub total_distributed_rewards: u128, + pub total_settled_fees: u128, + pub charging_max_batch_index: BatchIndex, + pub charging_processed_batches: BoundedBTreeSet, + pub rewarding_max_batch_index: BatchIndex, + pub rewarding_processed_batches: BoundedBTreeSet, + pub finalized_at: Option>, // new field + } + + #[storage_alias] + pub type PayoutReceipts = StorageDoubleMap< + crate::Pallet, + Blake2_128Concat, + ClusterId, + Blake2_128Concat, + EhdEra, + PayoutReceipt, + >; + + pub fn migrate_to_v4() -> Weight { + let on_chain_version = Pallet::::on_chain_storage_version(); + let current_version = Pallet::::in_code_storage_version(); + + log::info!( + target: LOG_TARGET, + "Running migration with current storage version {:?} / onchain {:?}", + current_version, + on_chain_version + ); + + if on_chain_version == 3 && current_version == 4 { + let mut translated = 0u64; + v4::PayoutReceipts::::translate::, _>( + |cluster_id: ClusterId, era_id: EhdEra, payout_receipt: V3PayoutReceipt| { + log::info!(target: LOG_TARGET, "Migrating Payout Receipt for cluster_id {:?} era_id {:?}", cluster_id, era_id); + translated.saturating_inc(); + + let receipt = if payout_receipt.state == PayoutState::Finalized { + v4::PayoutReceipt { + state: payout_receipt.state, + vault: payout_receipt.vault, + fingerprint: payout_receipt.fingerprint, + total_collected_charges: payout_receipt.total_collected_charges, + total_distributed_rewards: payout_receipt.total_distributed_rewards, + total_settled_fees: payout_receipt.total_settled_fees, + charging_max_batch_index: payout_receipt.charging_max_batch_index, + charging_processed_batches: payout_receipt.charging_processed_batches, + rewarding_max_batch_index: payout_receipt.rewarding_max_batch_index, + rewarding_processed_batches: payout_receipt.rewarding_processed_batches, + finalized_at: Some(frame_system::Pallet::::block_number()), + } + } else { + v4::PayoutReceipt { + state: payout_receipt.state, + vault: payout_receipt.vault, + fingerprint: payout_receipt.fingerprint, + total_collected_charges: payout_receipt.total_collected_charges, + total_distributed_rewards: payout_receipt.total_distributed_rewards, + total_settled_fees: payout_receipt.total_settled_fees, + charging_max_batch_index: payout_receipt.charging_max_batch_index, + charging_processed_batches: payout_receipt.charging_processed_batches, + rewarding_max_batch_index: payout_receipt.rewarding_max_batch_index, + rewarding_processed_batches: payout_receipt.rewarding_processed_batches, + finalized_at: None, + } + }; + + Some(receipt) + }, + ); + + StorageVersion::new(4).put::>(); + log::info!( + target: LOG_TARGET, + "Upgraded {} records, storage to version {:?}", + translated, + current_version + ); + + T::DbWeight::get().reads_writes(translated + 1, translated + 1) + } else { + log::info!(target: LOG_TARGET, " >>> Unused migration!"); + T::DbWeight::get().reads(1) + } + } + + pub struct MigrateToV4(sp_std::marker::PhantomData); + impl OnRuntimeUpgrade for MigrateToV4 { + fn on_runtime_upgrade() -> Weight { + migrate_to_v4::() + } + + #[cfg(feature = "try-runtime")] + fn pre_upgrade() -> Result, DispatchError> { + let pre_receipts_count = crate::PayoutReceipts::::iter().count(); + log::info!( + target: LOG_TARGET, + "BEFORE the migration - pre_receipts_count: {:?}", + pre_receipts_count, + ); + Ok((pre_receipts_count as u64).encode()) + } + + #[cfg(feature = "try-runtime")] + fn post_upgrade(prev_state: Vec) -> Result<(), DispatchError> { + let pre_receipts_count: u64 = Decode::decode(&mut &prev_state[..]) + .expect("pre_upgrade provides a valid state; qed"); + + let post_receipts_count = PayoutReceipts::::iter().count() as u64; + + log::info!( + target: LOG_TARGET, + "AFTER the migration - post_receipts_count: {:?}", + post_receipts_count, + ); + + ensure!( + pre_receipts_count == post_receipts_count, + "Receipts count before and after the migration should be the same" + ); + + let current_version = Pallet::::in_code_storage_version(); + let on_chain_version = Pallet::::on_chain_storage_version(); + + frame_support::ensure!(current_version == 4, "must_upgrade"); + ensure!( + current_version == on_chain_version, + "after migration, the current_version and on_chain_version should be the same" + ); + Ok(()) + } + } +} diff --git a/pallets/ddc-payouts/src/tests.rs b/pallets/ddc-payouts/src/tests.rs index 9e163bf8d..0ff953f60 100644 --- a/pallets/ddc-payouts/src/tests.rs +++ b/pallets/ddc-payouts/src/tests.rs @@ -5307,8 +5307,11 @@ fn end_billing_report_works() { ); assert_ok!(>::end_payout(cluster_id, era,)); + let finalized_at = >::block_number(); - System::assert_last_event(Event::PayoutReceiptFinalized { cluster_id, era }.into()); + System::assert_last_event( + Event::PayoutReceiptFinalized { cluster_id, era, finalized_at }.into(), + ); let report_end = DdcPayouts::active_billing_reports(cluster_id, era).unwrap(); assert!(report_end.rewarding_processed_batches.is_empty()); diff --git a/pallets/ddc-verification/src/benchmarking.rs b/pallets/ddc-verification/src/benchmarking.rs index cc7132208..ef5250ca1 100644 --- a/pallets/ddc-verification/src/benchmarking.rs +++ b/pallets/ddc-verification/src/benchmarking.rs @@ -146,6 +146,7 @@ mod benchmarks { rewarding_max_batch_index, rewarding_processed_batches, }, + None, ); } diff --git a/pallets/ddc-verification/src/insp_task_manager.rs b/pallets/ddc-verification/src/insp_task_manager.rs index f2361d817..0bdc32f8f 100644 --- a/pallets/ddc-verification/src/insp_task_manager.rs +++ b/pallets/ddc-verification/src/insp_task_manager.rs @@ -25,7 +25,7 @@ use sp_std::{ }; use crate::{ - aggregate_tree, aggregator_client, fetch_last_inspected_ehds, get_last_paid_era_hash, + aggregate_tree, aggregator_client, fetch_last_inspected_ehds, insp_ddc_api::{ fetch_bucket_aggregates, fetch_bucket_challenge_response, fetch_node_challenge_response, fetch_processed_eras, get_ehd_root, get_g_collectors_nodes, get_phd_root, @@ -158,7 +158,7 @@ where AccountId: Ord + Clone, { NotReadyForInspection, - AssigningInspectors { era: EhdEra, assigner: AccountId, lease_ttl: u32 }, + AssigningInspectors { era: EhdEra, assigner: AccountId, lease_ttl: u32, salt: u64 }, ReadyForInspection { assignments_table: InspAssignmentsTable }, } @@ -203,14 +203,15 @@ impl InspTaskAssigner { era, assigner: self.inspector.public.clone().into_account(), lease_ttl: 60000, + salt: 0, }; match sync_status { InspSyncStatus::NotReadyForInspection => Ok(None), - InspSyncStatus::AssigningInspectors { era, assigner, lease_ttl: _lease_ttl } => { + InspSyncStatus::AssigningInspectors { era, assigner, lease_ttl: _lease_ttl, salt } => { let inspector_account = &self.inspector.public.clone().into_account(); if *inspector_account == assigner { - let assignmens_table = &self.build_assignments_table(cluster_id, &era)?; + let assignmens_table = &self.build_assignments_table(cluster_id, &era, salt)?; // todo(yahortsaryk): optimize performance by eliminating cloning of the whole // table @@ -315,6 +316,7 @@ impl InspTaskAssigner { &self, cluster_id: &ClusterId, era: &EhdEra, + salt: u64, ) -> Result, InspAssignmentError> { let mut inspection_paths: Vec = Vec::new(); @@ -334,7 +336,6 @@ impl InspTaskAssigner { inspection_paths.extend(build_buckets_inspection_paths::(&phd_roots)?); let inspectors = >::get().clone(); - let seed = get_last_paid_era_hash::(cluster_id); let assignments_table = InspAssignmentsTable::::build::( *cluster_id, *era, @@ -342,7 +343,7 @@ impl InspTaskAssigner { INSPECTION_BACKUPS_COUNT, inspection_paths, inspectors, - seed, + salt, )?; Ok(assignments_table) diff --git a/pallets/ddc-verification/src/lib.rs b/pallets/ddc-verification/src/lib.rs index 9d6311899..41613860e 100644 --- a/pallets/ddc-verification/src/lib.rs +++ b/pallets/ddc-verification/src/lib.rs @@ -1055,9 +1055,11 @@ pub mod pallet { ..Default::default() }; + let finalized_at = >::block_number(); T::PayoutProcessor::create_payout_receipt( T::AccountId::decode(&mut [0u8; 32].as_slice()).unwrap(), payout_receipt_params, + Some(finalized_at), ); T::ClusterValidator::set_last_paid_era(&cluster_id, era_id)?; @@ -3113,12 +3115,6 @@ pub mod pallet { } } - #[allow(clippy::extra_unused_type_parameters)] - pub(crate) fn get_last_paid_era_hash(_cluster_id: &ClusterId) -> u64 { - // todo(yahortsaryk): fetch last processed era hash - Default::default() - } - /* ######## DAC v4 functions ######## */ impl Pallet { #[allow(clippy::type_complexity)] diff --git a/pallets/ddc-verification/src/mock.rs b/pallets/ddc-verification/src/mock.rs index bf56542fd..ddd18e911 100644 --- a/pallets/ddc-verification/src/mock.rs +++ b/pallets/ddc-verification/src/mock.rs @@ -639,7 +639,11 @@ impl PayoutProcessor for MockPayoutProcessor { PayoutState::NotInitialized } - fn create_payout_receipt(_vault: T::AccountId, _params: PayoutReceiptParams) { + fn create_payout_receipt( + _vault: T::AccountId, + _params: PayoutReceiptParams, + _finalized_at: Option>, + ) { unimplemented!() } diff --git a/primitives/src/traits/payout.rs b/primitives/src/traits/payout.rs index af241e306..46cc0418a 100644 --- a/primitives/src/traits/payout.rs +++ b/primitives/src/traits/payout.rs @@ -1,3 +1,4 @@ +use frame_system::pallet_prelude::BlockNumberFor; use scale_info::prelude::string::String; use sp_runtime::DispatchResult; use sp_std::boxed::Box; @@ -73,7 +74,11 @@ pub trait PayoutProcessor { era_id: PaymentEra, ) -> Result, PayoutError>; - fn create_payout_receipt(vault: T::AccountId, params: PayoutReceiptParams); + fn create_payout_receipt( + vault: T::AccountId, + params: PayoutReceiptParams, + finalized_at: Option>, + ); fn create_payout_fingerprint(params: PayoutFingerprintParams) -> Fingerprint; } diff --git a/runtime/cere-dev/src/lib.rs b/runtime/cere-dev/src/lib.rs index bc2f92555..4c58f0f9d 100644 --- a/runtime/cere-dev/src/lib.rs +++ b/runtime/cere-dev/src/lib.rs @@ -168,7 +168,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 73003, + spec_version: 73004, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 24, @@ -1572,7 +1572,7 @@ pub type SignedPayload = generic::SignedPayload; pub type CheckedExtrinsic = generic::CheckedExtrinsic; /// Runtime migrations -type Migrations = (); +type Migrations = pallet_ddc_payouts::migrations::v4::MigrateToV4; /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< diff --git a/runtime/cere/src/lib.rs b/runtime/cere/src/lib.rs index 4416715ad..b85a1e7a6 100644 --- a/runtime/cere/src/lib.rs +++ b/runtime/cere/src/lib.rs @@ -161,7 +161,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 73003, + spec_version: 73004, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 24, @@ -1606,10 +1606,7 @@ pub type CheckedExtrinsic = generic::CheckedExtrinsic, - pallet_ddc_verification::migrations::v2::MigrateToV2, -); +type Migrations = pallet_ddc_payouts::migrations::v4::MigrateToV4; pub mod migrations { use super::*; @@ -1634,6 +1631,7 @@ pub mod migrations { pallet_ddc_payouts::migrations::v2::MigrateToV2, pallet_ddc_payouts::migrations::v3::MigrateToV3, pallet_ddc_verification::migrations::v2::MigrateToV2, + pallet_ddc_payouts::migrations::v4::MigrateToV4, ); } From 41181e480dbe1b6adc6b7e833be2baf0bc5fb302 Mon Sep 17 00:00:00 2001 From: Ayush Kumar Mishra Date: Tue, 18 Mar 2025 19:17:33 +0530 Subject: [PATCH 31/31] Changes for Automate DDC Account Top-Up System --- pallets/ddc-customers/src/lib.rs | 50 ++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/pallets/ddc-customers/src/lib.rs b/pallets/ddc-customers/src/lib.rs index 35002fb8b..4cd4160de 100644 --- a/pallets/ddc-customers/src/lib.rs +++ b/pallets/ddc-customers/src/lib.rs @@ -174,6 +174,9 @@ pub mod pallet { #[pallet::storage] pub type Buckets = StorageMap<_, Twox64Concat, BucketId, Bucket, OptionQuery>; + #[pallet::storage] + pub type Mandate = StorageMap<_, Blake2_128Concat, T::AccountId, BalanceOf>; + #[pallet::event] #[pallet::generate_deposit(pub(crate) fn deposit_event)] pub enum Event { @@ -214,6 +217,10 @@ pub mod pallet { }, /// Bucket with specific id marked as removed BucketRemoved { bucket_id: BucketId }, + /// A mandate created + MandateCreated { owner_id: T::AccountId, amount: BalanceOf }, + /// A mandate updated + MandateUpdated { owner_id: T::AccountId, amount: BalanceOf }, } #[pallet::error] @@ -248,6 +255,8 @@ pub mod pallet { AlreadyRemoved, /// Bucket belongs to another cluster ClusterMismatch, + /// Mandate with speicifed id doesn't exist. + NoMandateWithId, } #[pallet::genesis_config] @@ -543,6 +552,28 @@ pub mod pallet { Ok(()) } + + /// Mandate creation + /// + /// Only an owner can create a mandate + #[pallet::call_index(7)] + #[pallet::weight(T::WeightInfo::remove_bucket())] + pub fn create_mandate(origin: OriginFor,#[pallet::compact] amount: BalanceOf,) -> DispatchResult { + let owner = ensure_signed(origin)?; + + >::insert(owner.clone(), amount); + Self::deposit_event(Event::::MandateCreated { owner_id: owner, amount }); + Ok(()) + } + + #[pallet::call_index(8)] + #[pallet::weight(T::WeightInfo::remove_bucket())] + pub fn update_mandate(origin: OriginFor,#[pallet::compact] amount: BalanceOf,) -> DispatchResult { + let owner = ensure_signed(origin)?; + + Self::do_update_mandate(owner, amount)?; + Ok(()) + } } impl Pallet { @@ -682,6 +713,19 @@ pub mod pallet { stored_bytes, } } + + fn do_update_mandate( + owner: T::AccountId, + amount: BalanceOf, + ) -> DispatchResult { + let mut mandate_balance = Mandate::::get(owner.clone()).ok_or(Error::::NoMandateWithId)?; + mandate_balance = mandate_balance.checked_sub(&amount) + .ok_or(Error::::ArithmeticUnderflow)?; + + >::insert(owner.clone(), mandate_balance); + Self::deposit_event(Event::::MandateUpdated{ owner_id: owner, amount }); + Ok(()) + } } impl BucketManager for Pallet { @@ -762,6 +806,12 @@ pub mod pallet { let actually_charged: BalanceOf; let mut ledger = Ledger::::get(&bucket_owner).ok_or(Error::::NotOwner)?; let amount_to_deduct = amount.saturated_into::>(); + //TODO amount_to_deduct > ledger then call deposite extra and reduce amount from mandate + + if amount_to_deduct > ledger.active { + >::deposit_extra(bucket_owner.clone(), amount)?; + Self::do_update_mandate(bucket_owner.clone(), amount.saturated_into::>())?; + } if ledger.active >= amount_to_deduct { actually_charged = amount_to_deduct;